home *** CD-ROM | disk | FTP | other *** search
Makefile | 1996-08-14 | 8.8 KB | 360 lines |
- # GNU-Makefile für CLISP mit GNU-ANSI-C-Compiler
- # Jörg Höhle 14.8.96
- # Optionen: ADE, C00, C20, WIDE, HIGH, FFI, KI, KA, LMEM
- # Versionsauswahl
- # HIGH => C20 -high version
- # WIDE => C20 -wide: 64 bits for use within VMM
- # C00 -00 for 68000 only
- # --- -low with 24 address bits
- # Optional: FFI KI KA LMEM
- # Compiler: ADE
- # keeping intermediate files implies keeping assembly files
- ifdef KI
- KA=1
- endif
-
- ifdef HIGH
- C20=1
- endif
- ifdef WIDE
- C20=1
- endif
-
- ifndef C20
- MPFLAGS=-Dmc68010
- MCFLAGS=-m68000
- MAFLAGS=-mc68010
- else
- MPFLAGS=-Dmc68010 -DMC680Y0
- MCFLAGS=-m68020
- MAFLAGS=-mc68020
- endif
-
- WPFLAGS=
- ifdef WIDE
- WPFLAGS=-DWIDE -DHAVE_LONGLONG
- endif
- ifdef HIGH
- WPFLAGS=-DAMIGA3000
- endif
- ifdef(C00)
- WPFLAGS=-DMC68000
- endif
-
- #IXCFLAGS= >NIL: -a -.
- IXCFLAGS= >NIL: -a1 -/0
-
- if def(ADE)
- # Use GCC272
- # Path ADE:bin/ ADE:lib/gcc-lib/m68k-cbm-amigados/2.7.2/
- #IXCONFIG=GNU:ixem/bin/ixconfig
- IXCONFIG=GCC258:bin/ixprefs
- CC = gcc
- CPP = cpp -undef -D__GNUC__=2 -D__GNUC_MINOR__=7 -lang-c -v
- CC1 = T:cc1 -version
- AS = as
-
- CPPSTACK = 20000
- CC1STACK = 400000
- LDSTACK = 180000
-
- INCPATH=-I. -IAB:usr/include/Amiga31 -IGCC258:os-include -ILISP:amiga/jchlib/include -IGCC258:include
- LD = ld $(LIBPATH) $(CRT0)
- LIBGCCPATH=-LGCC258:lib/gcc-lib/amigados/2.5.8/
- LIBPATH=-nostdlib -LLISP:amiga/jchlib/lib $(LIBGCCPATH)
- LIBS =-lcclisp -lgcc
- CRT0 =LISP:amiga/jchlib/lib/crt0.o
-
- else
- # Use GCC258
- # Path GCC258:bin/ GCC258:lib/gcc-lib/amigados/2.5.8/
- # PATH=/GCC258/bin:/GCC258/lib/gcc-lib/amigados/2.5.8:/C
- #IXCONFIG=GCC258:gnu/ixem/bin/ixconfig
- IXCONFIG=GCC258:bin/ixprefs
- CC = gcc
- CPP = cpp -undef -D__GNUC__=2 -D__GNUC_MINOR__=5 -lang-c -v
- CC1 = cc1 -version
- AS = as
-
- CPPSTACK = 20000
- CC1STACK = 450000
- LDSTACK = 200000
-
- INCPATH=-I. -IAB:usr/include/Amiga31 -IGCC258:os-include -ILISP:amiga/jchlib/include -IGCC258:include
- LD = ld $(LIBPATH) $(CRT0)
- #LIBGCCPATH=-LGCC258:lib/gcc-lib/amigados/2.5.8/
- LIBGCCPATH=
- LIBPATH=-nostdlib -LLISP:amiga/jchlib/lib $(LIBGCCPATH)
- LIBS =-lcclisp -ltinygcc
- CRT0 =LISP:amiga/jchlib/lib/crt0.o
- endif
-
-
- CPPFLAGS = -Wcomment -nostdinc $(INCPATH) -D__OPTIMIZE__ -DSTDC_HEADERS -Damiga -DNO_CLISP_H -DHAVE_AFFI $(MPFLAGS) $(WPFLAGS)
- CC1FLAGS = -quiet -O2 -W -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wpointer-arith\
- -ffixed-a4 -fomit-frame-pointer -fno-strength-reduce $(MCFLAGS)
- ASFLAGS = $(MAFLAGS)
- LDFLAGS =
- CFLAGS = $(LDFLAGS) $(CPPFLAGS) $(CC1FLAGS)
-
- TMPDIR = T:
- FSTMPDIR = RAM:
-
- MV=mv
- RM=delete
- AR=ar
- RANLIB=ranlib
- COMMENT = lisp:utils/comment5
- CVTMSGS = lisp:utils/cvtmsgs
- ANSIDECL = lisp:utils/ansidecl
- PRESTACK = 20000
-
- # Remote file prefix
- R=/src/
-
- D_INC_MACHINE = amiga.d
- D_INC_SPECIAL = amiga2.d
- D_INC_FURTHER = avl.d sort.d ari68000.d ari68020.d arilev1e.d arilev1i.d bytecode.d
- D_INC_NORMAL = lispbibl.d fsubr.d subr.d subrkw.d pseudofun.d constsym.d \
- constobj.d constpack.d aridecl.d arilev0.d $(D_INC_MACHINE)
- D_INC_ALL = $(D_INC_NORMAL) $(D_INC_SPECIAL) $(D_INC_FURTHER)
- #D_LISPARIT = arilev1c.d arilev1e.d arilev1i.d arlev1m.d $(D_ARI)
- ifdef C20
- D_AMODULES = ari68020.d
- else
- D_AMODULES = ari68000.d
- endif
- ifndef FFI
- D_EMODULES = affi.d
- else
- D_EMODULES = affi.d foreign.d
- endif
- D_CMODULES_SPECIAL = rexx.d
- D_CMODULES = misc.d spvw.d spvwtabf.d spvwtabs.d spvwtabo.d \
- eval.d control.d pathname.d stream.d io.d error.d time.d \
- array.d hashtabl.d list.d package.d record.d sequence.d \
- charstrg.d debug.d predtype.d symbol.d dbxtypes.d \
- lisparit0.d modules.d $(D_CMODULES_SPECIAL) $(D_EMODULES)
- #D_MODULES = $(D_CMODULES) $(D_AMODULES)
- DFILES_OTHERARIT = \
- aridecl.d arilev0.d arilev1.d intelem.d intlog.d intplus.d \
- intcomp.d intbyte.d intmal.d intdiv.d intgcd.d int2adic.d \
- intsqrt.d intprint.d intread.d rational.d sfloat.d ffloat.d \
- dfloat.d lfloat.d flo_konv.d flo_rest.d realelem.d realrand.d \
- realtran.d compelem.d comptran.d
- RDFILES_OTHERARIT = $(addprefix $(R),$(DFILES_OTHERARIT))
-
- C_INC_SPECIAL = $(subst .d,.c,$(D_INC_SPECIAL))
- C_INC_NORMAL = $(subst .d,.c,$(D_INC_NORMAL))
- C_INC_ALL = $(subst .d,.c,$(D_INC_ALL))
- C_DIST = modules.c genclisph.c
-
- OBJECTS_SPECIAL = $(subst .d,.o,$(D_CMODULES_SPECIAL))
- OBJECTS_C = $(subst .d,.o,$(D_CMODULES))
- OBJECTS_A = $(subst .d,.o,$(D_AMODULES))
- OBJECTS = $(OBJECTS_C) $(OBJECTS_A)
- LIBOBJECTS = $(filter-out modules.o,$(OBJECTS))
-
- E_LSPFILES =
- ifdef FFI
- E_LSPFILES =foreign1.lsp
- endif
- LSPFILES = \
- init.lsp defseq.lsp backquot.lsp defmacro.lsp macros1.lsp macros2.lsp \
- defs1.lsp places.lsp floatpri.lsp type.lsp defstruc.lsp format.lsp \
- user1.lsp user2.lsp trace.lsp macros3.lsp config.lsp compiler.lsp \
- timezone.lsp defs2.lsp clos.lsp conditio.lsp defs3.lsp gstream.lsp \
- screen.lsp loop.lsp rexx1.lsp affi1.lsp $(E_LSPFILES)
- FASFILES = $(subst .lsp,.fas,$(LSPFILES))
- RFASFILES = $(addprefix $(R),$(FASFILES))
-
- IMEMFILE = interpreted.mem
- HMEMFILE = halfinterp.mem
- CMEMFILE = lispinit.mem
- CLISPEXE = lisp.run
- DMEMFILE = compiler.mem
- SMEMFILE = small.mem
-
- .SUFFIXES: .d .lsp
-
- # No need to make .d or .lsp files
- %.d:
-
- %.lsp:
-
- #%.c: $(R)%.d
-
- all: init allc allo lisp.run
-
- #init: .NEVER
-
- allc: $(C_INC_ALL)
-
- allo: $(OBJECTS)
-
- # Various dependencies
- $(OBJECTS_C): $(C_INC_NORMAL)
-
- $(OBJECTS_SPECIAL): $(C_INC_SPECIAL)
-
- spvw.o: avl.c sort.c
-
- eval.o: bytecode.c
-
- modules.o: $(R)modules.h
-
- lisparit0.o: ari68000.c ari68020.c arilev1e.c arilev1i.c
-
- .PHONY: all init allc allo clean force
-
- $(R)lisparit1.d: $(R)lisparit.d
- head >$@ -19 $<
- $(R)lisparit2.d: $(R)lisparit.d
- tail >$@ +53 $<
- $(R)lisparit0.d: $(R)lisparit1.d $(RDFILES_OTHERARIT) $(R)lisparit2.d
- join $(R)lisparit1.d $(RDFILES_OTHERARIT) $(R)lisparit2.d as $@
-
- # In order to save diskspace, we don't keep intermediary .c, .i or .s files
-
- # Make all include files
- $(C_INC_ALL) $(C_DIST): %.c: $(R)%.d
- stack $(PRESTACK)
- # Named pipes make it slower!
- # run $(COMMENT) $(R)$*.d >FIFO:prepclisp/mwek
- # $(ANSIDECL) <FIFO:prepclisp/r >$@
- # run $(COMMENT) $(R)$*.d >PIPE:prepclisp
- # $(ANSIDECL) <PIPE:prepclisp/r >$@
- $(COMMENT) $(R)$*.d $(FSTMPDIR)$*.cd
- $(CVTMSGS) <$(FSTMPDIR)$*.cd >$(FSTMPDIR)$*.dc
- $(RM) $(FSTMPDIR)$*.cd
- $(ANSIDECL) <$(FSTMPDIR)$*.dc >$@
- $(RM) $(FSTMPDIR)$*.dc
-
- # Make all assembly objects
- # Here only when .c is available
- $(OBJECTS_A): %.o: %.c
- stack $(CPPSTACK)
- $(CPP) -DUNDERSCORE $(CPPFLAGS) $*.c $(TMPDIR)$*.s
- stack $(CC1STACK)
- $(AS) $(ASFLAGS) -o $@ $(TMPDIR)$*.s
- $(RM) $(TMPDIR)$*.s
-
- # Make all C objects
- $(OBJECTS_C) testd.o testn.o: %.o: $(R)%.d
- @date
- stack $(PRESTACK)
- $(COMMENT) $(R)$*.d $(FSTMPDIR)$*.cd
- $(CVTMSGS) <$(FSTMPDIR)$*.cd >$(FSTMPDIR)$*.dc
- $(RM) $(FSTMPDIR)$*.cd
- $(ANSIDECL) <$(FSTMPDIR)$*.dc >$(TMPDIR)$*.c
- $(RM) $(FSTMPDIR)$*.dc
- ifdef LMEM
- @avail >nil: flush
- @$(IXCONFIG) $(IXCFLAGS)
- endif
- stack $(CPPSTACK)
- $(CPP) $(CPPFLAGS) $(TMPDIR)$*.c $(TMPDIR)$*.i
- ifndef KI
- $(RM) $(TMPDIR)$*.c
- endif
- ifdef LMEM
- @avail >nil: flush
- @$(IXCONFIG) $(IXCFLAGS)
- endif
- stack $(CC1STACK)
- -$(CC1) $(CC1FLAGS) -o $(TMPDIR)$*.s $(TMPDIR)$*.i
- ifndef KI
- $(RM) $(TMPDIR)$*.i
- endif
- ifdef YES_HIGH
- copy $(TMPDIR)$*.s to $(FSTMPDIR)$*.es
- # Some lines are too long for Edit
- sed >$(TMPDIR)$*.s -e "s/^I.even/^I.align 2/" $(FSTMPDIR)$*.es
- $(RM) $(FSTMPDIR)$*.es
- endif
- $(AS) $(ASFLAGS) -o $@ $(TMPDIR)$*.s
- ifndef KA
- $(RM) $(TMPDIR)$*.s
- endif
-
- lisp.run: $(OBJECTS)
- @date
- stack $(LDSTACK)
- $(LD) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBS)
-
- testd: testd.o
- stack $(LDSTACK)
- $(LD) $(LDFLAGS) -o $@ $*.o $(LIBS)
-
- testn: testn.o
- stack 300000
- $(CC) -v -o $@ $*.o -lc
-
- # make an interpreted world
- $(IMEMFILE):
- ifdef LMEM
- @avail >nil: flush
- endif
- @date
- $(CLISPEXE) -x (cd"/src/")(load"init.lsp")(saveinitmem)(exit)
- @date
- $(MV) $(R)lispinit.mem $@
-
- # compile LISP files
- $(RFASFILES): %.fas: %.lsp
- ifdef LMEM
- @avail >nil: flush
- endif
- @date
- $(CLISPEXE) -M $(DMEMFILE) -c $*.lsp
- @date
-
- # make a useful bootstrap world, set DMEMFILE=interpreted.mem
- $(HMEMFILE): $(addprefix $(R),compiler.fas)
- ifdef LMEM
- @avail >nil: flush
- endif
- @date
- $(CLISPEXE) -x (cd"/src/")(load"init.lsp")(saveinitmem)(exit)
- @date
- $(MV) $(R)lispinit.mem $@
-
- # make a compiled world, set DMEMFILE=halfinterp.mem when bootstrapping
- $(CMEMFILE): $(RFASFILES)
- ifdef LMEM
- @avail >nil: flush
- endif
- @date
- $(CLISPEXE) -x (cd"/src/")(load"init.fas")(saveinitmem)(exit)
- @date
- $(MV) $(R)lispinit.mem $@
-
- # small image without compiler, disassem, loop, clos, conditio, defs3, gstream, screen
- # init-small.fas is init-small.fas with these lines commented out (near end of file)
- $(SMEMFILE): $(RFASFILES)
- ifdef LMEM
- @avail >nil: flush
- endif
- @date
- $(CLISPEXE) -x (cd"/src/")(load"init-small.fas")(saveinitmem)(exit)
- @date
- $(MV) $(R)lispinit.mem $@
-
- clean:
- $(RM) $(C_INC_ALL) $(OBJECTS)
- force:
-
- libclisp.a: $(LIBOBJECTS)
- -$(RM) $@
- $(AR) qv $@ $(LIBOBJECTS)
- $(RANLIB) $@
-
- # generate it using the normal libnix/ixemul environment
- #gcc -v -O2 -m68020 -DAMIGA3000 -DHAVE_FFI -I. -c genclisph.c
- genclisph.o: genclisph.c
- $(CC) $(WPFLAGS) $(MCFLAGS) -I. -o $@ $*.c
-
- #gcc -v -m68020 -Wl,-defsym,asciz_out=printf
- genclisp: genclisp.o
- $(CC) $(MCFLAGS) -o $@ $<
-