home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / CLISP-1.LHA / CLISP960530-sr.lha / amiga / GMakefile < prev    next >
Encoding:
Makefile  |  1996-08-14  |  8.8 KB  |  360 lines

  1. # GNU-Makefile für CLISP mit GNU-ANSI-C-Compiler
  2. # Jörg Höhle 14.8.96
  3. # Optionen: ADE, C00, C20, WIDE, HIGH, FFI, KI, KA, LMEM
  4. #  Versionsauswahl
  5. #   HIGH => C20 -high version
  6. #   WIDE => C20 -wide: 64 bits for use within VMM
  7. #   C00         -00 for 68000 only
  8. #   ---         -low with 24 address bits
  9. #  Optional: FFI KI KA LMEM
  10. #  Compiler: ADE
  11. # keeping intermediate files implies keeping assembly files
  12. ifdef KI
  13. KA=1
  14. endif
  15.  
  16. ifdef HIGH
  17. C20=1
  18. endif
  19. ifdef WIDE
  20. C20=1
  21. endif
  22.  
  23. ifndef C20
  24. MPFLAGS=-Dmc68010
  25. MCFLAGS=-m68000
  26. MAFLAGS=-mc68010
  27. else
  28. MPFLAGS=-Dmc68010 -DMC680Y0
  29. MCFLAGS=-m68020
  30. MAFLAGS=-mc68020
  31. endif
  32.  
  33. WPFLAGS=
  34. ifdef WIDE
  35. WPFLAGS=-DWIDE -DHAVE_LONGLONG
  36. endif
  37. ifdef HIGH
  38. WPFLAGS=-DAMIGA3000
  39. endif
  40. ifdef(C00)
  41. WPFLAGS=-DMC68000
  42. endif
  43.  
  44. #IXCFLAGS= >NIL: -a -.
  45. IXCFLAGS= >NIL: -a1 -/0
  46.  
  47. if def(ADE)
  48. # Use GCC272
  49. # Path ADE:bin/ ADE:lib/gcc-lib/m68k-cbm-amigados/2.7.2/
  50. #IXCONFIG=GNU:ixem/bin/ixconfig
  51. IXCONFIG=GCC258:bin/ixprefs
  52. CC  = gcc
  53. CPP = cpp -undef -D__GNUC__=2 -D__GNUC_MINOR__=7 -lang-c -v
  54. CC1 = T:cc1 -version
  55. AS  = as
  56.  
  57. CPPSTACK = 20000
  58. CC1STACK = 400000
  59. LDSTACK  = 180000
  60.  
  61. INCPATH=-I. -IAB:usr/include/Amiga31 -IGCC258:os-include -ILISP:amiga/jchlib/include -IGCC258:include
  62. LD     = ld $(LIBPATH) $(CRT0)
  63. LIBGCCPATH=-LGCC258:lib/gcc-lib/amigados/2.5.8/
  64. LIBPATH=-nostdlib -LLISP:amiga/jchlib/lib $(LIBGCCPATH)
  65. LIBS   =-lcclisp -lgcc
  66. CRT0   =LISP:amiga/jchlib/lib/crt0.o
  67.  
  68. else
  69. # Use GCC258
  70. # Path GCC258:bin/ GCC258:lib/gcc-lib/amigados/2.5.8/
  71. # PATH=/GCC258/bin:/GCC258/lib/gcc-lib/amigados/2.5.8:/C
  72. #IXCONFIG=GCC258:gnu/ixem/bin/ixconfig
  73. IXCONFIG=GCC258:bin/ixprefs
  74. CC  = gcc
  75. CPP = cpp -undef -D__GNUC__=2 -D__GNUC_MINOR__=5 -lang-c -v
  76. CC1 = cc1 -version
  77. AS  = as
  78.  
  79. CPPSTACK = 20000
  80. CC1STACK = 450000
  81. LDSTACK  = 200000
  82.  
  83. INCPATH=-I. -IAB:usr/include/Amiga31 -IGCC258:os-include -ILISP:amiga/jchlib/include -IGCC258:include
  84. LD     = ld $(LIBPATH) $(CRT0)
  85. #LIBGCCPATH=-LGCC258:lib/gcc-lib/amigados/2.5.8/
  86. LIBGCCPATH=
  87. LIBPATH=-nostdlib -LLISP:amiga/jchlib/lib $(LIBGCCPATH)
  88. LIBS   =-lcclisp -ltinygcc
  89. CRT0   =LISP:amiga/jchlib/lib/crt0.o
  90. endif
  91.  
  92.  
  93. CPPFLAGS = -Wcomment -nostdinc $(INCPATH) -D__OPTIMIZE__ -DSTDC_HEADERS -Damiga -DNO_CLISP_H -DHAVE_AFFI $(MPFLAGS) $(WPFLAGS)
  94. CC1FLAGS = -quiet -O2 -W -Wimplicit -Wreturn-type -Wswitch -Wcomment -Wpointer-arith\
  95.  -ffixed-a4 -fomit-frame-pointer -fno-strength-reduce $(MCFLAGS)
  96. ASFLAGS  = $(MAFLAGS)
  97. LDFLAGS  =
  98. CFLAGS   = $(LDFLAGS) $(CPPFLAGS) $(CC1FLAGS)
  99.  
  100. TMPDIR   = T:
  101. FSTMPDIR = RAM:
  102.  
  103. MV=mv
  104. RM=delete
  105. AR=ar
  106. RANLIB=ranlib
  107. COMMENT  = lisp:utils/comment5
  108. CVTMSGS  = lisp:utils/cvtmsgs
  109. ANSIDECL = lisp:utils/ansidecl
  110. PRESTACK = 20000
  111.  
  112. # Remote file prefix
  113. R=/src/
  114.  
  115. D_INC_MACHINE = amiga.d
  116. D_INC_SPECIAL = amiga2.d
  117. D_INC_FURTHER = avl.d sort.d ari68000.d ari68020.d arilev1e.d arilev1i.d bytecode.d
  118. D_INC_NORMAL = lispbibl.d fsubr.d subr.d subrkw.d pseudofun.d constsym.d \
  119.  constobj.d constpack.d aridecl.d arilev0.d $(D_INC_MACHINE)
  120. D_INC_ALL = $(D_INC_NORMAL) $(D_INC_SPECIAL) $(D_INC_FURTHER)
  121. #D_LISPARIT = arilev1c.d arilev1e.d arilev1i.d arlev1m.d $(D_ARI)
  122. ifdef C20
  123. D_AMODULES = ari68020.d
  124. else
  125. D_AMODULES = ari68000.d
  126. endif
  127. ifndef FFI
  128. D_EMODULES = affi.d
  129. else
  130. D_EMODULES = affi.d foreign.d
  131. endif
  132. D_CMODULES_SPECIAL = rexx.d
  133. D_CMODULES = misc.d spvw.d spvwtabf.d spvwtabs.d spvwtabo.d \
  134.  eval.d control.d pathname.d stream.d io.d error.d time.d \
  135.  array.d hashtabl.d list.d package.d record.d sequence.d \
  136.  charstrg.d debug.d predtype.d symbol.d dbxtypes.d \
  137.  lisparit0.d modules.d $(D_CMODULES_SPECIAL) $(D_EMODULES)
  138. #D_MODULES = $(D_CMODULES) $(D_AMODULES)
  139. DFILES_OTHERARIT = \
  140.  aridecl.d arilev0.d arilev1.d intelem.d intlog.d intplus.d \
  141.  intcomp.d intbyte.d intmal.d intdiv.d intgcd.d int2adic.d \
  142.  intsqrt.d intprint.d intread.d rational.d sfloat.d ffloat.d \
  143.  dfloat.d lfloat.d flo_konv.d flo_rest.d realelem.d realrand.d \
  144.  realtran.d compelem.d comptran.d
  145. RDFILES_OTHERARIT = $(addprefix $(R),$(DFILES_OTHERARIT))
  146.  
  147. C_INC_SPECIAL = $(subst .d,.c,$(D_INC_SPECIAL))
  148. C_INC_NORMAL = $(subst .d,.c,$(D_INC_NORMAL))
  149. C_INC_ALL = $(subst .d,.c,$(D_INC_ALL))
  150. C_DIST = modules.c genclisph.c
  151.  
  152. OBJECTS_SPECIAL = $(subst .d,.o,$(D_CMODULES_SPECIAL))
  153. OBJECTS_C = $(subst .d,.o,$(D_CMODULES))
  154. OBJECTS_A = $(subst .d,.o,$(D_AMODULES))
  155. OBJECTS = $(OBJECTS_C) $(OBJECTS_A)
  156. LIBOBJECTS = $(filter-out modules.o,$(OBJECTS))
  157.  
  158. E_LSPFILES =
  159. ifdef FFI
  160. E_LSPFILES =foreign1.lsp
  161. endif
  162. LSPFILES = \
  163.  init.lsp defseq.lsp backquot.lsp defmacro.lsp macros1.lsp macros2.lsp \
  164.  defs1.lsp places.lsp floatpri.lsp type.lsp defstruc.lsp format.lsp \
  165.  user1.lsp user2.lsp trace.lsp macros3.lsp config.lsp compiler.lsp \
  166.  timezone.lsp defs2.lsp clos.lsp conditio.lsp defs3.lsp gstream.lsp \
  167.  screen.lsp loop.lsp rexx1.lsp affi1.lsp $(E_LSPFILES)
  168. FASFILES = $(subst .lsp,.fas,$(LSPFILES))
  169. RFASFILES = $(addprefix $(R),$(FASFILES))
  170.  
  171. IMEMFILE = interpreted.mem
  172. HMEMFILE = halfinterp.mem
  173. CMEMFILE = lispinit.mem
  174. CLISPEXE = lisp.run
  175. DMEMFILE = compiler.mem
  176. SMEMFILE = small.mem
  177.  
  178. .SUFFIXES: .d .lsp
  179.  
  180. # No need to make .d or .lsp files
  181. %.d:
  182.  
  183. %.lsp:
  184.  
  185. #%.c: $(R)%.d
  186.  
  187. all: init allc allo lisp.run
  188.  
  189. #init: .NEVER
  190.  
  191. allc: $(C_INC_ALL)
  192.  
  193. allo: $(OBJECTS)
  194.  
  195. # Various dependencies
  196. $(OBJECTS_C): $(C_INC_NORMAL)
  197.  
  198. $(OBJECTS_SPECIAL): $(C_INC_SPECIAL)
  199.  
  200. spvw.o: avl.c sort.c
  201.  
  202. eval.o: bytecode.c
  203.  
  204. modules.o: $(R)modules.h
  205.  
  206. lisparit0.o: ari68000.c ari68020.c arilev1e.c arilev1i.c
  207.  
  208. .PHONY: all init allc allo clean force
  209.  
  210. $(R)lisparit1.d: $(R)lisparit.d
  211.     head >$@ -19 $<
  212. $(R)lisparit2.d: $(R)lisparit.d
  213.     tail >$@ +53 $<
  214. $(R)lisparit0.d: $(R)lisparit1.d $(RDFILES_OTHERARIT) $(R)lisparit2.d
  215.     join $(R)lisparit1.d $(RDFILES_OTHERARIT) $(R)lisparit2.d as $@
  216.  
  217. # In order to save diskspace, we don't keep intermediary .c, .i or .s files
  218.  
  219. # Make all include files
  220. $(C_INC_ALL) $(C_DIST): %.c: $(R)%.d
  221.     stack $(PRESTACK)
  222. #    Named pipes make it slower!
  223. #    run $(COMMENT) $(R)$*.d >FIFO:prepclisp/mwek
  224. #    $(ANSIDECL) <FIFO:prepclisp/r >$@
  225. #    run $(COMMENT) $(R)$*.d >PIPE:prepclisp
  226. #    $(ANSIDECL) <PIPE:prepclisp/r >$@
  227.     $(COMMENT) $(R)$*.d $(FSTMPDIR)$*.cd
  228.     $(CVTMSGS) <$(FSTMPDIR)$*.cd >$(FSTMPDIR)$*.dc
  229.     $(RM) $(FSTMPDIR)$*.cd
  230.     $(ANSIDECL) <$(FSTMPDIR)$*.dc >$@
  231.     $(RM) $(FSTMPDIR)$*.dc
  232.  
  233. # Make all assembly objects
  234. # Here only when .c is available
  235. $(OBJECTS_A): %.o: %.c
  236.     stack $(CPPSTACK)
  237.     $(CPP) -DUNDERSCORE $(CPPFLAGS) $*.c $(TMPDIR)$*.s
  238.     stack $(CC1STACK)
  239.     $(AS) $(ASFLAGS) -o $@ $(TMPDIR)$*.s
  240.     $(RM) $(TMPDIR)$*.s
  241.  
  242. # Make all C objects
  243. $(OBJECTS_C) testd.o testn.o: %.o: $(R)%.d
  244.     @date
  245.     stack $(PRESTACK)
  246.     $(COMMENT) $(R)$*.d $(FSTMPDIR)$*.cd
  247.     $(CVTMSGS) <$(FSTMPDIR)$*.cd >$(FSTMPDIR)$*.dc
  248.     $(RM) $(FSTMPDIR)$*.cd
  249.     $(ANSIDECL) <$(FSTMPDIR)$*.dc >$(TMPDIR)$*.c
  250.     $(RM) $(FSTMPDIR)$*.dc
  251. ifdef LMEM
  252.     @avail >nil: flush
  253.     @$(IXCONFIG) $(IXCFLAGS)
  254. endif
  255.     stack $(CPPSTACK)
  256.     $(CPP) $(CPPFLAGS) $(TMPDIR)$*.c $(TMPDIR)$*.i
  257. ifndef KI
  258.     $(RM) $(TMPDIR)$*.c
  259. endif
  260. ifdef LMEM
  261.     @avail >nil: flush
  262.     @$(IXCONFIG) $(IXCFLAGS)
  263. endif
  264.     stack $(CC1STACK)
  265.     -$(CC1) $(CC1FLAGS) -o $(TMPDIR)$*.s $(TMPDIR)$*.i
  266. ifndef KI
  267.     $(RM) $(TMPDIR)$*.i
  268. endif
  269. ifdef YES_HIGH
  270.     copy $(TMPDIR)$*.s to $(FSTMPDIR)$*.es
  271. #    Some lines are too long for Edit
  272.     sed >$(TMPDIR)$*.s -e "s/^I.even/^I.align 2/" $(FSTMPDIR)$*.es
  273.     $(RM) $(FSTMPDIR)$*.es
  274. endif
  275.     $(AS) $(ASFLAGS) -o $@ $(TMPDIR)$*.s
  276. ifndef KA
  277.     $(RM) $(TMPDIR)$*.s
  278. endif
  279.  
  280. lisp.run: $(OBJECTS)
  281.     @date
  282.     stack $(LDSTACK)
  283.     $(LD) $(LDFLAGS) -o $@ $(OBJECTS) $(LIBS)
  284.  
  285. testd: testd.o
  286.     stack $(LDSTACK)
  287.     $(LD) $(LDFLAGS) -o $@ $*.o $(LIBS)
  288.  
  289. testn: testn.o
  290.     stack 300000
  291.     $(CC) -v -o $@ $*.o -lc
  292.  
  293. # make an interpreted world
  294. $(IMEMFILE):
  295. ifdef LMEM
  296.     @avail >nil: flush
  297. endif
  298.     @date
  299.     $(CLISPEXE) -x (cd"/src/")(load"init.lsp")(saveinitmem)(exit)
  300.     @date
  301.     $(MV) $(R)lispinit.mem $@
  302.  
  303. # compile LISP files
  304. $(RFASFILES): %.fas: %.lsp
  305. ifdef LMEM
  306.     @avail >nil: flush
  307. endif
  308.     @date
  309.     $(CLISPEXE) -M $(DMEMFILE) -c $*.lsp
  310.     @date
  311.  
  312. # make a useful bootstrap world, set DMEMFILE=interpreted.mem
  313. $(HMEMFILE): $(addprefix $(R),compiler.fas)
  314. ifdef LMEM
  315.     @avail >nil: flush
  316. endif
  317.     @date
  318.     $(CLISPEXE) -x (cd"/src/")(load"init.lsp")(saveinitmem)(exit)
  319.     @date
  320.     $(MV) $(R)lispinit.mem $@
  321.  
  322. # make a compiled world, set DMEMFILE=halfinterp.mem when bootstrapping
  323. $(CMEMFILE): $(RFASFILES)
  324. ifdef LMEM
  325.     @avail >nil: flush
  326. endif
  327.     @date
  328.     $(CLISPEXE) -x (cd"/src/")(load"init.fas")(saveinitmem)(exit)
  329.     @date
  330.     $(MV) $(R)lispinit.mem $@
  331.  
  332. # small image without compiler, disassem, loop, clos, conditio, defs3, gstream, screen
  333. # init-small.fas is init-small.fas with these lines commented out (near end of file)
  334. $(SMEMFILE): $(RFASFILES)
  335. ifdef LMEM
  336.     @avail >nil: flush
  337. endif
  338.     @date
  339.     $(CLISPEXE) -x (cd"/src/")(load"init-small.fas")(saveinitmem)(exit)
  340.     @date
  341.     $(MV) $(R)lispinit.mem $@
  342.  
  343. clean:
  344.     $(RM) $(C_INC_ALL) $(OBJECTS)
  345. force:
  346.  
  347. libclisp.a: $(LIBOBJECTS)
  348.     -$(RM) $@
  349.     $(AR) qv $@ $(LIBOBJECTS)
  350.     $(RANLIB) $@
  351.  
  352. # generate it using the normal libnix/ixemul environment
  353. #gcc -v -O2 -m68020 -DAMIGA3000 -DHAVE_FFI -I. -c genclisph.c
  354. genclisph.o: genclisph.c
  355.     $(CC) $(WPFLAGS) $(MCFLAGS) -I. -o $@ $*.c
  356.  
  357. #gcc -v -m68020 -Wl,-defsym,asciz_out=printf
  358. genclisp: genclisp.o
  359.     $(CC) $(MCFLAGS) -o $@ $<
  360.