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

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