###########################################################################
# #
# makefile for REDUCE 3.7 using CSL #
# #
###########################################################################
# The following lines indicates the place on your disc where the "cslbase"
# directory exists. This is the place where the C sources files for CSL
# live. There are two versions here, the first should use Unix-like
# file name conventions (in particular "/" as a directory separator) while
# the second will (in some cases) be a host-specific translation.
UCSLBASE = ../cslbase
CSLBASE = ../cslbase
###########################################################################
# Sun SPARC, using GCC
CC = gcc
OPTFLAGS = -O3
PROFFLAGS =
SPARCFLAGS =
SUNOSFLAGS = -I/usr/5include
MPIFLAGS =
CFLAGS = -ansi -c $(PROFFLAGS) $(OPTFLAGS) $(SPARCFLAGS) $(SUNOSFLAGS) -I$(CSLBASE) $(MPIFLAGS)
SUNOSLIBS = -L/usr/5lib -lresolv
SUNOSLIBS1 = -lm -lc
LIBS = $(SUNOSLIBS) $(SUNOSLIBS1) -lcurses
###########################################################################
###########################################################################
###########################################################################
SHELL = /bin/sh
LINK = $(CC)
LFLAGS =
OUT = -o
OUTOBJ = -o
ASM = $(CC)
ASMFLAGS = $(CFLAGS)
ASMSRC =
ASMOBJ =
ASMOBJDEP = notused.obj
SYS = sysunix
STORE = -k8000
XSTORE = -k8000
RM = rm
MKDIR = mkdir
COPY = cp
STRIP = strip
WX =
###########################################################################
###########################################################################
###########################################################################
# #
# This is the main bulk of the "makefile" for building Reduce 3.7 and CSL #
# on MSDOS, Windows and Unix. This part of the file expects a number of #
# symbols to have been defined: #
# #
# CSLBASE = file-path for CSLBASE directory #
# CC = The C compiler to use #
# CFLAGS = Flags for C compiler when compiling CSL #
# LINK = Linker to use #
# LFLAGS = Flags for linker #
# LIBS = Libraries to quote to linker #
# OUT = "-o" or "-out:" See link commands #
# OUTOBJ = "-o" often : where to put object code from C compilation #
# ASM = The assembler to use #
# ASMFLAGS = Flags for the assembler #
# ASMSRC = Assembly code source file to use #
# ASMOBJ = Object file for above (or NULL if no assembly used) #
# ASMOBJDEP = Ditto, but may not be NULL #
# SYS = name of system-specific file (sysdos or sysnt etc) #
# STORE = Memory option to pass to CSL (-k2500 is minimum) #
# XSTORE = Memory for the rebuild job that generates C code #
# RM = del for DOS, = rm for Unix #
# MKDIR = mkdir #
# COPY = copy for DOS, = cp for Unix #
# STRIP = echo for DOS, = strip for Unix #
# SYMBOLIC = .SYMBOLIC is using Watcom's "make" utility #
# WX = wx for Windows 3.1, null in all other cases #
# #
# The master version of this file is called "makebase" and is used to #
# create both DOS and Unix makefiles. Use the Codemist "makemake" #
# program to perform the conversion - eg #
# makemake -f makebase -o makemake.386 watcom dos #
# makemake -f makebase -o Makefile.sgi sgi #
# Just "makemake -f makebase" gives list of systems supported #
###########################################################################
###########################################################################
###########################################################################
###########################################################################
#
# The main final target is r37.img, the image file for full REDUCE.
# If you want to rebuild stage-by-stage (eg while testing), try the
# sequence
# make slowr37 compiles and links C coded kernel
# make slowr37.img makes bootstrap REDUCE
# (roughly twice as slow as final one)
# only used for system recompilation.
# make profile runs tests, collects profile information.
# This takes a long time!
# make prof-inst installs profile data
# make c-code Create files u*.c and u*.lsp
# out of hot-spot parts of REDUCE.
###########################################################################
# Note that only the steps from here downwards are usually needed
#
# make r37 final compilation of most of REDUCE
# make r37.img build final image file
# make testall runs test files, output to log directory
# make checkall creates log/checkall.log
#
# (for Windows 95/98/NT only)
# make r37c.exe command-line version
#
###########################################################################
###########################################################################
#
# C is another name for CSLBASE, the directory that CSL source files live
# in. I introduce it here mainly because $(C) is so much more compact
# then $(CSLBASE).
#
C = $(CSLBASE)
#
# DOBJS is a list of all the object files that are common to all variants
# on the system built here
#
DOBJS = arith01.o arith02.o arith03.o arith04.o \
arith05.o arith06.o arith07.o arith08.o \
arith09.o arith10.o arith11.o arith12.o \
char.o csl.o cslmpi.o eval1.o eval2.o \
eval3.o eval4.o fns1.o fns2.o fns3.o \
print.o read.o restart.o $(ASMOBJ) \
$(SYS).o
CDOBJS = arith01.o,arith02.o,arith03.o,arith04.o,\
arith05.o,arith06.o,arith07.o,arith08.o,\
arith09.o,arith10.o,arith11.o,arith12.o,\
char.o,csl.o,cslmpi.o,eval1.o,eval2.o,\
eval3.o,eval4.o,fns1.o,fns2.o,fns3.o,\
print.o,read.o,restart.o,$(ASMOBJ),\
$(SYS).o
#
# OBJS adds in the files used when I am not building a demonstration-mode CSL
#
OBJS = $(DOBJS) fasl.o gc.o preserve.o
COBJS = $(CDOBJS),fasl.o,gc.o,preserve.o
#
# UOBJS come from that code that is compiled from Lisp into C
#
UOBJS = u01.o u02.o u03.o u04.o u05.o \
u06.o u07.o u08.o u09.o u10.o \
u11.o u12.o
CUOBJS = u01.o,u02.o,u03.o,u04.o,u05.o,\
u06.o,u07.o,u08.o,u09.o,u10.o,\
u11.o,u12.o
###########################################################################
###########################################################################
# This default target may be a dangerous one to use
# since it supposes that all the C code is up to date already.
default: $(SYMBOLIC) \
r37 r37.img
###########################################################################
###########################################################################
r37.img: r37
../util/full37
r37: bytes.o $(OBJS) \
$(UOBJS)
$(LINK) $(LFLAGS) bytes.o $(OBJS) $(UOBJS) $(LIBS) $(OUT) r37 $(TAIL)
$(STRIP) r37
-$(MKDIR) log
#
# A few targets here may help me tidy up my filespace from time to time
#
clean: $(SYMBOLIC)
-$(RM) slowr37
-$(RM) slowr37.img
-$(RM) r37
-$(RM) r37.img
-$(RM) csl
-$(RM) csl.img
-$(RM) *.o
-$(MKDIR) log
-$(RM) log/*.log
###########################################################################
csl: bytes.o $(OBJS) \
stubs.o
$(LINK) $(LFLAGS) bytes.o $(OBJS) stubs.o $(LIBS) $(OUT) csl $(TAIL)
$(STRIP) csl
slowr37: bytes1.o $(OBJS) \
stubs.o
$(LINK) $(LFLAGS) bytes1.o $(OBJS) stubs.o $(LIBS) $(OUT) slowr37 $(TAIL)
$(STRIP) slowr37
-$(MKDIR) log
slowr37.img: slowr37
../util/boot37
profile: slowr37.img $(SYMBOLIC)
../util/profile
prof-inst: profile.dat $(SYMBOLIC)
$(COPY) profile.dat ../csl-c
-$(RM) profile.dat
c-code: slowr37.img $(SYMBOLIC)
../util/c-code37
testslow: slowr37.img $(SYMBOLIC)
../util/testslow
testall: r37.img $(SYMBOLIC)
../util/testrest
checkall: r37.img $(SYMBOLIC)
../util/checkall
patchup: r37.img $(SYMBOLIC)
../util/patchup
cleanlog: $(SYMBOLIC)
-$(RM) ../../../log/*.rlg
csl.img: csl $(C)/compat.lsp $(C)/compiler.lsp \
$(C)/ccomp.lsp $(C)/extras.lsp
-$(RM) csl.img
$(WX) ./csl $(STORE) -v -z $(C)/build0.lsp \
-D@cslbase="$(C)" -- log/cslimg.log
#
# "make lispfile"
# recreates compiler.lsp, extras.lsp and ccomp.lsp from
# the corresponding master sources which are held in RLISP
# form. Temporarily builds an RLISP parser on the way.
# NB: only for system maintainance use.
lispfile: csl csl.img $(C)/lispfile.lsp $(SYMBOLIC)
$(WX) ./csl $(STORE) -v -z $(C)/lispfile.lsp \
-D@cslbase="$(C)" -- log/lispfile.log
signature: $(C)/version.hhh register.key $(SYMBOLIC)
filesign -u $(C)/version.hhh $(C)/version.h Developer or tester
############################################################################
# Now rules for re-compiling the main collection of CSL source files. I
# write each case out individually since that makes the makefile less
# delicate than one that relies on setting up general rules - and I want this
# file to work on several different systems.
#
$(ASMOBJDEP): $(C)/$(ASMSRC)
$(ASM) $(ASMFLAGS) -o $(ASMOBJ).o $(C)/$(ASMSRC)
arith01.o: $(C)/arith01.c $(C)/arith.h $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h
$(CC) $(CFLAGS) \
-o arith01.o \
$(C)/arith01.c
arith02.o: $(C)/arith02.c $(C)/arith.h $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h
$(CC) $(CFLAGS) \
-o arith02.o \
$(C)/arith02.c
arith03.o: $(C)/arith03.c $(C)/arith.h $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h
$(CC) $(CFLAGS) \
-o arith03.o \
$(C)/arith03.c
arith04.o: $(C)/arith04.c $(C)/arith.h $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h
$(CC) $(CFLAGS) \
-o arith04.o \
$(C)/arith04.c
arith05.o: $(C)/arith05.c $(C)/arith.h $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h $(C)/stream.h
$(CC) $(CFLAGS) \
-o arith05.o \
$(C)/arith05.c
arith06.o: $(C)/arith06.c $(C)/arith.h $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o arith06.o \
$(C)/arith06.c
arith07.o: $(C)/arith07.c $(C)/arith.h $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h
$(CC) $(CFLAGS) \
-o arith07.o \
$(C)/arith07.c
arith08.o: $(C)/arith08.c $(C)/arith.h $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o arith08.o \
$(C)/arith08.c
arith09.o: $(C)/arith09.c $(C)/arith.h $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h
$(CC) $(CFLAGS) \
-o arith09.o \
$(C)/arith09.c
arith10.o: $(C)/arith10.c $(C)/arith.h $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o arith10.o \
$(C)/arith10.c
arith11.o: $(C)/arith11.c $(C)/arith.h $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h
$(CC) $(CFLAGS) \
-o arith11.o \
$(C)/arith11.c
arith12.o: $(C)/arith12.c $(C)/arith.h $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o arith12.o \
$(C)/arith12.c
bytes.o: $(C)/bytes1.c $(C)/bytes.c $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h \
$(C)/bytes.h $(C)/arith.h
$(CC) $(CFLAGS) \
-o bytes.o \
$(C)/bytes.c
bytes1.o: $(C)/bytes1.c $(C)/bytes.c $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h \
$(C)/bytes.h $(C)/arith.h
$(CC) $(CFLAGS) \
-o bytes1.o \
$(C)/bytes1.c
#
# The target "bytes1a.o" recompiles bytes1.c, but with the flag set that
# arranges that the number of GET operations performed and the associated
# indicators will be recorded, so that (bytecounts) will display statistics
# about it. This slows things down considerably, but can help when you are in
# the process of deciding which indicators are specified as "fast" ones.
#
bytes1a.o: $(C)/bytes1.c $(C)/bytes.c $(C)/tags.h $(C)/machine.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h \
$(C)/bytes.h $(C)/arith.h
$(CC) $(CFLAGS) -DRECORD_GET=1 \
-o bytes1.o \
$(C)/bytes1.c
char.o: $(C)/char.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/sys.h $(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o char.o \
$(C)/char.c
csl.o: $(C)/csl.c $(C)/tags.h $(C)/machine.h $(C)/externs.h $(C)/version.h \
$(C)/sys.h $(C)/cslerror.h $(C)/entries.h $(C)/stream.h $(C)/sockhdr.h
$(CC) $(CFLAGS) \
-o csl.o \
$(C)/csl.c
eval1.o: $(C)/eval1.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/sys.h $(C)/cslerror.h $(C)/arith.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o eval1.o \
$(C)/eval1.c
eval2.o: $(C)/eval2.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/sys.h $(C)/cslerror.h $(C)/arith.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o eval2.o \
$(C)/eval2.c
eval3.o: $(C)/eval3.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/sys.h $(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o eval3.o \
$(C)/eval3.c
eval4.o: $(C)/eval4.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/sys.h $(C)/cslerror.h $(C)/arith.h
$(CC) $(CFLAGS) \
-o eval4.o \
$(C)/eval4.c
fasl.o: $(C)/fasl.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/sys.h $(C)/cslerror.h $(C)/arith.h
$(CC) $(CFLAGS) \
-o fasl.o \
$(C)/fasl.c
fns1.o: $(C)/fns1.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/sys.h $(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o fns1.o \
$(C)/fns1.c
fns2.o: $(C)/fns2.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/sys.h $(C)/cslerror.h $(C)/read.h $(C)/entries.h \
$(C)/sockhdr.h
$(CC) $(CFLAGS) \
-o fns2.o \
$(C)/fns2.c
fns3.o: $(C)/fns3.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/sys.h $(C)/cslerror.h $(C)/read.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o fns3.o \
$(C)/fns3.c
gc.o: $(C)/gc.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/sys.h $(C)/cslerror.h
$(CC) $(CFLAGS) \
-o gc.o \
$(C)/gc.c
#
# For each major target I have one file that is system specific - eg
# sysdos.c, sysunix.c, ...
#
$(SYS).o: $(C)/$(SYS).c $(C)/machine.h $(C)/externs.h \
$(C)/sys.h $(C)/fileops.c $(C)/scandir.c $(C)/version.h \
$(C)/filename.c
$(CC) $(CFLAGS) \
-o $(SYS).o \
$(C)/$(SYS).c
preserve.o: $(C)/preserve.c $(C)/tags.h $(C)/machine.h $(C)/stream.h \
$(C)/externs.h $(C)/sys.h $(C)/cslerror.h $(C)/read.h $(C)/version.h
$(CC) $(CFLAGS) \
-o preserve.o \
$(C)/preserve.c
print.o: $(C)/print.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/sys.h $(C)/cslerror.h $(C)/read.h \
$(C)/arith.h $(C)/entries.h $(C)/stream.h $(C)/sockhdr.h
$(CC) $(CFLAGS) \
-o print.o \
$(C)/print.c
read.o: $(C)/read.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/sys.h $(C)/cslerror.h $(C)/read.h \
$(C)/arith.h $(C)/entries.h $(C)/stream.h $(C)/sockhdr.h
$(CC) $(CFLAGS) \
-o read.o \
$(C)/read.c
restart.o: $(C)/restart.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/sys.h $(C)/cslerror.h $(C)/read.h $(C)/version.h \
$(C)/arith.h $(C)/entries.h $(C)/stream.h
$(CC) $(CFLAGS) \
-o restart.o \
$(C)/restart.c
stubs.o: $(C)/stubs.c $(C)/machine.h $(C)/externs.h $(C)/sys.h \
$(C)/tags.h $(C)/cslerror.h
$(CC) $(CFLAGS) \
-o stubs.o \
$(C)/stubs.c
cslmpi.o: $(C)/cslmpi.c $(C)/machine.h $(C)/externs.h $(C)/sys.h \
$(C)/mpipack.c $(C)/tags.h $(C)/cslerror.h
$(CC) $(CFLAGS) \
-o cslmpi.o \
$(C)/cslmpi.c
###########################################################################
u01.o: ../csl-c/u01.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o u01.o \
../csl-c/u01.c
u02.o: ../csl-c/u02.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o u02.o \
../csl-c/u02.c
u03.o: ../csl-c/u03.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o u03.o \
../csl-c/u03.c
u04.o: ../csl-c/u04.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o u04.o \
../csl-c/u04.c
u05.o: ../csl-c/u05.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o u05.o \
../csl-c/u05.c
u06.o: ../csl-c/u06.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o u06.o \
../csl-c/u06.c
u07.o: ../csl-c/u07.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o u07.o \
../csl-c/u07.c
u08.o: ../csl-c/u08.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o u08.o \
../csl-c/u08.c
u09.o: ../csl-c/u09.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o u09.o \
../csl-c/u09.c
u10.o: ../csl-c/u10.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o u10.o \
../csl-c/u10.c
u11.o: ../csl-c/u11.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o u11.o \
../csl-c/u11.c
u12.o: ../csl-c/u12.c $(C)/tags.h $(C)/machine.h $(C)/externs.h \
$(C)/cslerror.h $(C)/entries.h
$(CC) $(CFLAGS) \
-o u12.o \
../csl-c/u12.c
# end of makefile