4.4BSD/usr/src/old/lisp/franz/vax/Make.uobj

#
# 
# $Header: /na/franz/franz/vax/RCS/Makefile,v 1.3 83/03/23 22:33:01 jkf Exp $
#
#  Franz Lisp C coded kernel 
#
#-- Default Paths:
#  see ../../ReadMe for a explaination of what LibDir and CopyTo mean
#  D is the directory used for holding intermediate files during 
#    compilation
#-- Options:
#  there is one compile time options which can be set in this file
#  * do profiling (ala the unix prof(1) command)
#
#  The selection of this options is made below
#  Other options can be selected by editing h/config.h or via
#  ../../lispconf
#
AS = unixas	# Generate VMS object files
LD = unixld	# Generate VMS object files
CFLAGS = -DEUNICE_UNIX_OBJECT_FILE_CFASL	# enable UNIX object CFASL

LibDir = /usr/lib/lisp
ObjDir = /usr/ucb
CopyTo = /dev/null
Liszt = liszt
Lisp = lisp
# if you change this you must recompile rlc.c 
# (and change the value in ../Makefile)
#
HOLE=2097152

.DEFAULT: nlisp

MipSrc1= ../low.c
MipSrc2= ../alloc.c ../data.c
MipSrc3=
MipSrc4= ../lisp.c ../eval.c ../eval2.c ../inits.c ../io.c ../error.c \
	 ../sysat.c ../lam1.c ../lam2.c ../lam3.c ../lam4.c ../lam5.c\
	 ../lam6.c  ../lam7.c ../lam8.c ../lam9.c ../lamr.c ../lamp.c \
	 ../fex1.c ../fex2.c ../fex3.c ../fex4.c ../fexr.c\
	 ../fpipe.c \
	 ../subbig.c ../pbignum.c ../divbig.c \
	 ../ffasl.c ../fasl.c \
	 ../trace.c ../evalf.c ../frame.c ../lamgc.c

MipSrc = ${MipSrc1} ${MipSrc2} ${MipSrc3} ${MipSrc4}

MipObj1= ../low.o
MipObj2= ../alloc.o ../data.o
HoleMipObj2 = ../Salloc.o ../Sdata.o
HoleMipObj3 =
MipObj4= ../lisp.o ../eval.o ../eval2.o ../inits.o ../io.o ../error.o \
	 ../sysat.o ../lam1.o ../lam2.o ../lam3.o ../lam4.o ../lam5.o\
	 ../lam6.o  ../lam7.o ../lam8.o ../lam9.o ../lamr.o ../lamp.o \
	 ../fex1.o ../fex2.o ../fex3.o ../fex4.o ../fexr.o\
	 ../fpipe.o \
	 ../subbig.o ../pbignum.o ../divbig.o \
	 ../ffasl.o ../fasl.o \
	 ../trace.o ../evalf.o ../frame.o ../lamgc.o

# this list must contain all the include files, not just those used
# in the vax version.  The include filenames are relative to ..
#
Includes = h/config.h 	h/global.h 	h/oaout.h 	h/vaxframe.h \
	h/catchfram.h 	h/dfuncs.h 	h/gtabs.h 	h/sigtab.h \
	h/chars.h 	h/frame.h 	h/lfuncs.h 	h/structs.h \
	h/chkrtab.h 	h/gc.h 		h/naout.h 	h/types.h \
	h/lconf.h	h/ltypes.h

#------ Options

#--- profiling selection
# If the lisp system is to run with profiling, this must be done:
#  1) remove the # (comment character) from the ProfFlag and
#     ProfFlag2 definitions below (also do it in ../Makefile)
#  2) remove all .o files and do a make.
#
ProfFlag = # -XP
ProfFlag2 = # -DPROF


# The order of loading of certain files is important.
# low.o must be first and lowaux second.
# 
BottomObj = ${MipObj1} ../lowaux.o
HBottomObj = ${MipObj1} hlowaux.o

# Different objects are required depending on whether there is to be
# a hole between text and data space.
#
NoHoleObj = ${MipObj2}
HoleObj   = ${HoleMipObj2} ${HoleMipObj3}

VaxObj = bigmath.o qfuncl.o vax.o prealloc.o

VaxSrc = bigmath.c qfuncl.c vax.c crt0.s hcrt0.s lowaux.s

# AllSrc does not (and should not) include ${Includes}

AllSrc = Makefile  fixmask.c fixpbig.e ${VaxSrc} ${MipSrc}


.SUFFIXES : .c.l
#
# use temporary files rather than pipes to keep the number of procs. down
# thus, users with low process quotas on VMS can still build lisp
#
.c.o :
	@csh -cfe "echo cc -c  $*.c;\
	rm -f $*.o;\
	/lib/cpp ${CFLAGS} $< -I../h > $*.tm0;\
	/lib/ccom ${ProfFlag} $*.tm0 $*.tm1;\
	fixmask <$*.tm1 >$*.tm2;\
	sed -f fixpbig.e <$*.tm2 >$*.tm3;\
	/lib/c2 $*.tm3 >$*.tms;\
	${AS} -o $*.o $*.tms;\
	rm $*.tms $*.tm0 $*.tm1 $*.tm2 $*.tm3"

.l.o :
	liszt $< > #resc
	@echo liszt $< done

# one special case:
#  add -DPROF if you want to profile the assembler code

# EXPLICITLY USE "unixcpp" SO THAT "$"s IN ASSEMBLER CODE WORK!
qfuncl.o: qfuncl.c
	/lib/unixcpp -I../h ${ProfFlag2} qfuncl.c | ${AS} -o qfuncl.o

bigmath.o: bigmath.c
	/lib/unixcpp -I../h ${ProfFlag2} bigmath.c | ${AS} -o bigmath.o

../rlc.o: ../rlc.c 
	cc -S -O ${CFLAGS} -DHOLE=${HOLE} ../rlc.c
	${AS} -o rlc.o rlc.s
	rm rlc.s
	mv rlc.o ../rlc.o

../low.o: ../low.c
	cc ${CFLAGS} -I../h -R -S ../low.c
	${AS} -R -o low.o low.s
	rm low.s
	mv low.o ../low.o

../Salloc.o: ../alloc.c
	(echo "# define HOLE ${HOLE}"; cat ../alloc.c) > Salloc.c;\
	make Salloc.o; mv Salloc.o .. < /dev/null ; rm Salloc.c
	
../Sdata.o: ../data.c
	(echo "# define HOLE ${HOLE}"; cat ../data.c) > Sdata.c;\
	make Sdata.o; mv Sdata.o .. < /dev/null  ; rm Sdata.c

fixmask: fixmask.c
	cc -O -o fixmask fixmask.c

# rawlisp is the standard raw lisp system.

rawlisp: fixmask fixpbig.e \
		${BottomObj} ${NoHoleObj} ${MipObj4} ${VaxObj} 
	rm -f rawlisp
	ld -noshare -nop0bufs -x -o rawlisp ${BottomObj} /lib/crt0.o \
				${NoHoleObj} ${VaxObj} ${MipObj4} \
				/lib/fastexecp.o  -lm -lc -ltermlib
	ls -l rawlisp


# hlisp is a raw lisp system with a hole between text and data

rawhlisp: fixmask fixpbig.e ${HBottomObj} ${HoleObj} ${MipObj4} ${VaxObj} 
	rm -f rawhlisp
	ld -noshare -nop0bufs -x -o rawhlisp ${HBottomObj} \
			        /lib/crt0.o ${HoleObj} \
				${VaxObj}  ${MipObj4} \
				/lib/fastexecp.o -lm -lc -ltermlib
	ls -l rawhlisp

hlowaux.o: ../lowaux.s
	sed "s/holbeg:/holbeg: .space ${HOLE}/" <../lowaux.s >hlowaux.s
	${AS} -o hlowaux.o hlowaux.s
	rm -f hlowaux.s


clean:
	rm -f *.o

lint:
	lint h/*.h *.c

install: nlisp 
	-rm -f ${ObjDir}/lisp
	mv nlisp ${ObjDir}/lisp
	@echo lisp installed

nlisp: rawlisp ${LibDir}
	-rm -f nlisp
	(cd ${LibDir} ; make Liszt=${Liszt} required)
	echo "(progn (setq build:map 'map \
			   build:lisp-type 'franz \
		           lisp-library-directory '${LibDir} \
			   build:dir '${LibDir} \
			   lisp-object-directory '${ObjDir}) \
		     (load '${LibDir}/buildlisp)\
	             (dumplisp nlisp))" | rawlisp
	${LibDir}/tackon map nlisp
	@echo nlisp built


donlisp:
	-rm -f nlisp
	make LibDir=${LibDir} Liszt=${Liszt} ObjDir=${ObjDir} nlisp

#--- snlisp: create a totally interpreted lisp.
#	dump as snlisp
snlisp: rawlisp
	echo "(progn (setq build:load t		\
			   build:lisp-type 'franz \
			   build:dir '${LibDir} \
			   lisp-object-directory '${ObjDir}\
			   lisp-library-directory '${LibDir})\
		     (load '${LibDir}/buildlisp)\
		     (dumplisp snlisp))" | rawlisp


tags:  
	ctags $(VaxSrc) ${MipSrc}

#--- copysource : copy source files to another directory
#  called via   make CopyTo=/xx/yyy/zz copysource
# 
copysource: ${AllSrc}
	(tar cf - ${AllSrc} | (cd ${CopyTo} ; tar xf -))

copyobjects: ${AllObj}
	(tar cf - ${AllObj} | (cd ${CopyTo} ; tar xf -))

scriptcatall: ${AllSrc}
	@../../scriptcat . franz/vax ${AllSrc}
	@../../scriptcat .. franz ${Includes}

	
#--- prealloc.o: the "C" runtime startup for EUNICE with data structure
#	preallocation and restart capabilities
#		NFILES  - # file descriptors of data structure to allocate
#		RESTART	- allow restart from saved image
#
prealloc.o:	Makefile
	/lib/cpp -DNFILES=20 -DRESTART /usr/include/eunice/prealloc.c prealloc.tm0
	/lib/ccom prealloc.tm0 prealloc.tm1
	/lib/c2 prealloc.tm1 prealloc.tm2
	sed -f /usr/include/eunice/sedfixup.e <prealloc.tm2 >prealloc.tm3
	${AS} -o prealloc.o prealloc.tm3
	rm prealloc.tm0 prealloc.tm1 prealloc.tm2 prealloc.tm3

totxtfile: totxtfile.c 
	cc -O totxtfile.c -o totxtfile