Merge pull request #345 from asarhaddon/ada.2
[jackhill/mal.git] / scheme / Makefile
1 BINS = step0_repl step1_read_print step2_eval step3_env step4_if_fn_do step5_tco
2 BINS += step6_file step7_quote step8_macros step9_try stepA_mal
3 scheme_MODE ?= chibi
4
5 CLASSSTEPS = out/step0_repl.class out/step1_read_print.class \
6 out/step3_env.class out/step4_if_fn_do.class out/step5_tco.class \
7 out/step6_file.class out/step7_quote.class out/step8_macros.class \
8 out/step9_try.class out/stepA_mal.class
9 STEPS = $(if $(filter kawa,$(scheme_MODE)),$(CLASSSTEPS),\
10 $(if $(filter chicken,$(scheme_MODE)),$(BINS),\
11 $(if $(filter cyclone,$(scheme_MODE)),$(BINS))))
12
13 KAWA_STEP1_DEPS = out/lib/util.class out/lib/reader.class \
14 out/lib/printer.class out/lib/types.class
15 KAWA_STEP3_DEPS = $(KAWA_STEP1_DEPS) out/lib/env.class
16 KAWA_STEP4_DEPS = $(KAWA_STEP3_DEPS) out/lib/core.class
17 GAUCHE_STEP1_DEPS = lib/util.scm lib/reader.scm lib/printer.scm lib/types.scm
18 GAUCHE_STEP3_DEPS = $(GAUCHE_STEP1_DEPS) lib/env.scm
19 GAUCHE_STEP4_DEPS = $(GAUCHE_STEP3_DEPS) lib/core.scm
20 CHICKEN_STEP1_DEPS = eggs/lib.util.so eggs/lib.types.so \
21 eggs/lib.reader.so eggs/lib.printer.so
22 CHICKEN_STEP3_DEPS = $(CHICKEN_STEP1_DEPS) eggs/lib.env.so
23 CHICKEN_STEP4_DEPS = $(CHICKEN_STEP3_DEPS) eggs/lib.core.so
24 CYCLONE_STEP1_DEPS = lib/util.so lib/reader.so lib/printer.so lib/types.so
25 CYCLONE_STEP3_DEPS = $(CYCLONE_STEP1_DEPS) lib/env.so
26 CYCLONE_STEP4_DEPS = $(CYCLONE_STEP3_DEPS) lib/core.so
27
28 STEP1_DEPS = $(if $(filter kawa,$(scheme_MODE)),$(KAWA_STEP1_DEPS),\
29 $(if $(filter gauche,$(scheme_MODE)),$(GAUCHE_STEP1_DEPS),\
30 $(if $(filter chicken,$(scheme_MODE)),$(CHICKEN_STEP1_DEPS),\
31 $(if $(filter cyclone,$(scheme_MODE)),$(CYCLONE_STEP1_DEPS)))))
32 STEP3_DEPS = $(if $(filter kawa,$(scheme_MODE)),$(KAWA_STEP3_DEPS),\
33 $(if $(filter gauche,$(scheme_MODE)),$(GAUCHE_STEP3_DEPS),\
34 $(if $(filter chicken,$(scheme_MODE)),$(CHICKEN_STEP3_DEPS),\
35 $(if $(filter cyclone,$(scheme_MODE)),$(CYCLONE_STEP3_DEPS)))))
36 STEP4_DEPS = $(if $(filter kawa,$(scheme_MODE)),$(KAWA_STEP4_DEPS),\
37 $(if $(filter gauche,$(scheme_MODE)),$(GAUCHE_STEP4_DEPS),\
38 $(if $(filter chicken,$(scheme_MODE)),$(CHICKEN_STEP4_DEPS),\
39 $(if $(filter cyclone,$(scheme_MODE)),$(CYCLONE_STEP4_DEPS)))))
40
41 KAWALIB = kawa --r7rs --no-warn-unused -d out -C
42 KAWA = kawa --r7rs --no-warn-unused -d out --main -C
43 CHICKEN = CHICKEN_REPOSITORY=$(CURDIR)/eggs csc -O3 -R r7rs
44 CHICKENLIB = $(CHICKEN) -sJ
45 CYCLONELIB = cyclone -O2
46 CYCLONE = $(CYCLONELIB)
47
48 SCMLIB = $(if $(filter kawa,$(scheme_MODE)),$(KAWALIB),\
49 $(if $(filter chicken,$(scheme_MODE)),$(CHICKENLIB),\
50 $(if $(filter cyclone,$(scheme_MODE)),$(CYCLONELIB))))
51 SCM = $(if $(filter kawa,$(scheme_MODE)),$(KAWA),\
52 $(if $(filter chicken,$(scheme_MODE)),$(CHICKEN),\
53 $(if $(filter cyclone,$(scheme_MODE)),$(CYCLONE))))
54
55 MKDIR = mkdir -p
56 SYMLINK = ln -sfr
57 RM = rm -f
58 RMR = rm -rf
59
60 all: $(STEPS)
61
62 .PHONY: clean
63 .PRECIOUS: lib/%.scm eggs/lib.%.scm
64
65 eggs/r7rs.so:
66 chicken-install -init eggs
67 CHICKEN_REPOSITORY=$(CURDIR)/eggs chicken-install r7rs
68
69 lib/%.scm: lib/%.sld
70 $(SYMLINK) $< $@
71
72 eggs/lib.%.scm: lib/%.sld
73 $(SYMLINK) $< $@
74
75 out/lib/%.class: lib/%.scm
76 $(SCMLIB) $<
77
78 out/%.class: %.scm
79 $(SCM) $<
80
81 eggs/lib.%.so: eggs/lib.%.scm
82 $(SCMLIB) $<
83
84 lib/%.so: lib/%.sld
85 $(SCMLIB) $<
86
87 %: %.scm
88 $(SCM) $<
89
90 out/step1_read_print.class out/step2_eval.class: $(STEP1_DEPS)
91 out/step3_env.class: $(STEP3_DEPS)
92 out/step4_if_fn_do.class out/step5_tco.class out/step6_file.class out/step7_quote.class out/step8_macros.class out/step9_try.class out/stepA_mal.class: $(STEP4_DEPS)
93
94 step0_repl: $(if $(filter chicken,$(scheme_MODE)),eggs/r7rs.so,)
95
96 step1_read_print.scm step2_eval.scm: $(STEP1_DEPS)
97 step3_env.scm: $(STEP3_DEPS)
98 step4_if_fn_do.scm step5_tco.scm step6_file.scm step7_quote.scm step8_macros.scm step9_try.scm stepA_mal.scm: $(STEP4_DEPS)
99
100 clean:
101 $(RM) lib/*.scm lib/*.so lib/*.c lib/*.o lib/*.meta
102 $(RM) lib.*.scm *.so *.c *.o $(BINS)
103 $(RM) eggs/*
104 $(RMR) out