1 ### Makefile for same-fringe implementations.
3 ###--------------------------------------------------------------------------
4 ### Notes about organization.
6 ### Most projects have lots of stuff in just a few languages, so it makes
7 ### sense to put the language configuration in one place. This one's
8 ### different. Its entire purpose is to demonstrate lots of different
11 ### So, at the top we declare the main targets; then each language has its
12 ### configuration and build rules.
17 TARGETS = $(patsubst %,%-fringe,$(LANGS))
18 CLEANFILES = $(TARGETS)
21 clean::; rm -f $(CLEANFILES)
23 ###--------------------------------------------------------------------------
24 ### Silent rules stuff.
26 ## Default verbosity setting.
30 v_echo = $(call v_echo_$V,$1)
32 v_echo_0 = @printf " %-6s %s\n" "$1" "$@";
36 ###--------------------------------------------------------------------------
42 for lang in $(LANGS); do \
43 echo >&3 "*** $$lang"; \
44 printf "Test $$lang..."; \
45 time=`command time -o/dev/stdout -f "%U user; %S system; %E" \
46 ./test ./$${lang}-fringe 2>&3`; \
47 if [ $$? -eq 0 ]; then \
48 win=$$(expr $$win + 1); \
49 printf " ok ($$time)\n"; \
51 lose=$$(expr $$lose + 1); \
55 if [ $$lose -eq 0 ]; then \
56 echo "All $$win test(s) OK"; \
58 echo "FAILED $$lose test(s)!"; \
62 ###--------------------------------------------------------------------------
66 wc -l $(SOURCES) | sort -n
68 ###--------------------------------------------------------------------------
72 CFLAGS = -O2 -g -pedantic -Wall
75 .c.o:; $(call v_echo,CC)$(CC) -c $(CFLAGS) -o $@ $<
80 $(call v_echo,CCLD)$(CC) -o $@ $^
82 ###--------------------------------------------------------------------------
87 CLEANFILES += *.hi *.hc
89 .hs.o:; $(call v_echo,HC)$(HC) -c $(HFLAGS) -o $@ $<
92 SOURCES += haskell-fringe.hs
93 haskell-fringe: haskell-fringe.o
94 $(call v_echo,HCLD)$(HC) -o $@ $^
96 ###--------------------------------------------------------------------------
103 SOURCES += icon-fringe.icn
104 icon-fringe: icon-fringe.icn
105 $(call v_echo,ICONT)$(ICONT) $(IFLAGS) -o $@ $^
107 ###--------------------------------------------------------------------------
110 CLEANFILES += *.core *.fasl
112 SBCL_BUILD = ./sbcl-build
114 .SUFFIXES: .lisp .fasl
116 $(call v_echo,CL)$(SBCL_BUILD) build $<
119 SOURCES += cl-fringe.lisp
120 cl-fringe: cl-fringe.fasl
121 $(call v_echo,CLLD)$(SBCL_BUILD) link $@ $^
123 ###--------------------------------------------------------------------------
130 .fs.exe:; $(call v_echo,FSC)$(FSC) --nologo $(FSCFLAGS) -o $@ $<
133 SOURCES += f\#-fringe.fs
134 f\#-fringe: f\#-fringe.exe
135 $(call v_echo,CP)chmod +x $< && cp $< $@
137 ###--------------------------------------------------------------------------
143 .scm.o:; $(call v_echo,SCMC)$(SCMC) $(SCMFLAGS) -o $@ $<
146 SOURCES += scheme-fringe.scm
147 scheme-fringe: scheme-fringe.o
148 $(call v_echo,SCMLD)$(SCMC) -o $@ $^
150 ###--------------------------------------------------------------------------
155 SOURCES += go-fringe.go
156 go-fringe: go-fringe.go
157 $(call v_echo,GO)$(GOBUILD) -o $@ $^
159 ###--------------------------------------------------------------------------
163 TARGETS += smalltalk-fringe.im
164 SOURCES += smalltalk-fringe.st
165 smalltalk-fringe.im: smalltalk-fringe.st
166 $(call v_echo,GSTIM)echo "ObjectMemory snapshot: '$@.new'" | gst $^ -
167 $(V_HIDE)mv $@.new $@
169 $(call v_echo,GENSH){ echo '#! /bin/sh'; \
170 echo '"exec" "gst" "-I" "$@.im" "-f" "$$0" "$$@"'; \
171 echo 'ObjectMemory quit: (Node main: Smalltalk arguments)'; \
173 $(V_HIDE)chmod +x $@.new && mv $@.new $@
175 ###--------------------------------------------------------------------------
179 TARGETS += forth-fringe
180 SOURCES += forth-fringe.fth
181 forth-fringe: forth-fringe.fth
182 $(call v_echo,FORTHI)gforthmi $@ $<
184 ###--------------------------------------------------------------------------
188 CLEANFILES += *.beam erl_crash.dump
189 .SUFFIXES: .erl .beam
190 .erl.beam:; $(call v_echo,ERLC)$(ERLC) $(ERLCFLAGS) $<
193 TARGETS += erlang-fringe.beam
194 SOURCES += erlang-fringe.erl
196 $(call v_echo,GENSH){ echo '#! /bin/sh'; \
197 echo 'exec erl -pa . -noshell -run erlang-fringe main -extra "$$@"'; \
199 $(V_HIDE)chmod +x $@.new && mv $@.new $@
201 ###--------------------------------------------------------------------------
204 A68G = /usr/local/bin/a68g
207 TARGETS += algol68-fringe
208 SOURCES += algol68-fringe.a68
210 algol68-fringe: algol68-fringe.a68
211 $(call v_echo,A68)$(A68G) --compile -O2 $< && mv $@.sh $@
213 ###--------------------------------------------------------------------------
217 CLEANFILES += dylan-*.c *.mak
220 TARGETS += dylan-fringe
221 SOURCES += dylan-fringe.dylan dylan-fringe-exports.dylan
222 SOURCES += dylan-fringe.lid
224 dylan-fringe: dylan-fringe.lid dylan-fringe.dylan dylan-fringe-exports.dylan
225 $(call v_echo,D2C)d2c -g $<
227 ###----- That's all, folks --------------------------------------------------