65c6c168209a85a02d7887bf9e7c02a5243ae191
[mes.git] / GNUmakefile
1 .PHONY: all check clean default distclean help install release
2 default: all
3
4 .config.make: configure GNUmakefile
5         ./configure
6
7 OUT:=out
8 CFLAGS:=-std=c99 -O3 -finline-functions
9 #CFLAGS:=-std=c99 -O0
10 #CFLAGS:=-pg -std=c99 -O0
11 #CFLAGS:=-std=c99 -O0 -g
12
13 include .config.make
14 include make/install.make
15
16 CPPFLAGS+=-DPREFIX='"$(PREFIX)"'
17
18 export BOOT
19 ifneq ($(BOOT),)
20 CPPFLAGS+=-DBOOT=1
21 endif
22
23 -include .local.make
24
25 all: mes module/mes/read-0.mo
26
27 mes.o: GNUmakefile
28 mes.o: mes.c
29 mes.o: mes.c mes.h mes.i mes.environment.i mes.symbols.i
30 mes.o: define.c define.h define.i define.environment.i
31 mes.o: display.c display.h display.i display.environment.i
32 mes.o: lib.c lib.h lib.i lib.environment.i
33 mes.o: math.c math.h math.i math.environment.i
34 mes.o: posix.c posix.h posix.i posix.environment.i
35 mes.o: quasiquote.c quasiquote.h quasiquote.i quasiquote.environment.i
36 mes.o: reader.c reader.h reader.i reader.environment.i
37 mes.o: string.c string.h string.i string.environment.i
38 mes.o: type.c type.h type.i type.environment.i
39
40 clean:
41         rm -f mes mes.o *.environment.i *.symbols.i *.environment.h *.cat a.out
42
43 distclean: clean
44         rm -f .config.make
45
46 %.h %.i %.environment.i %.symbols.i: %.c build-aux/mes-snarf.scm
47         build-aux/mes-snarf.scm $<
48
49 check: all guile-check mes-check
50
51 TESTS:=\
52  tests/read.test\
53  tests/base.test\
54  tests/closure.test\
55  tests/quasiquote.test\
56  tests/let.test\
57  tests/vector.test\
58  tests/scm.test\
59  tests/cwv.test\
60  tests/optargs.test\
61  tests/psyntax.test\
62  tests/let-syntax.test\
63  tests/record.test\
64  tests/match.test\
65 #
66
67 BASE-0:=module/mes/base-0.mes
68 MES-0:=guile/mes-0.scm
69 MES:=./mes
70 # use module/mes/read-0.mes rather than C-core reader
71 MES_FLAGS:=--load
72 export MES_FLAGS
73 MES_DEBUG:=1
74 #export MES_DEBUG
75
76 mes-check: all
77         set -e; for i in $(TESTS); do ./$$i; done
78
79 module/mes/read-0.mo: module/mes/read-0.mes mes 
80         ./mes --dump < $< > $@
81
82 dump: module/mes/read-0.mo
83
84 guile-check:
85         set -e; for i in $(TESTS); do\
86                 guile -s <(cat $(MES-0) module/mes/test.mes $$i);\
87         done
88
89 MAIN_C:=doc/examples/main.c
90 mescc: all
91         scripts/mescc.mes $(MAIN_C)
92         ./a.out
93
94 mescc.cat: $(MES-0) module/mes/lalr.mes module/mes/elf.mes module/mes/libc-i386.mes $(shell scripts/include.mes scripts/mescc.mes | grep -Ev '/mes/|/srfi/')
95         echo '(compile)' | cat $^ - > $@
96
97 guile-mescc: mescc.cat
98         cat $(MAIN_C) | guile -s $^ > a.out
99         chmod +x a.out
100         ./a.out
101
102 paren: all
103         scripts/paren.mes
104
105 help: help-top
106
107 install: all
108
109 release: all
110
111 help:
112         @echo
113
114 define HELP_TOP
115 Usage: make [OPTION]... [TARGET]...
116
117 Targets:
118   all             update everything
119   check           run unit tests
120   clean           remove all generated stuff
121   dist            create tarball in $(TARBALL)
122   distclean       also clean configuration
123   mescc           compile cc/main.c to a.out
124   install         install in $$(PREFIX) [$(PREFIX)]
125   release         make a release
126   update-hash     update hash in guix.scm
127 endef
128 export HELP_TOP
129 help-top:
130         @echo "$$HELP_TOP"