3fd2911049e92ce02f16759537fc110c1f041823
[mes.git] / GNUmakefile
1 # Mes --- Maxwell Equations of Software
2 # Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
3 #
4 # This file is part of Mes.
5 #
6 # Mes is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or (at
9 # your option) any later version.
10 #
11 # Mes is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with Mes.  If not, see <http://www.gnu.org/licenses/>.
18
19 GUILE_FLAGS:=--no-auto-compile -L . -L guile -C . -C guile
20
21 include .config.make
22
23 .config.make:
24         ./configure --prefix=$(prefix)
25
26 PHONY_TARGETS:= all all-go build check clean clean-go default doc help install install-info man\
27 cc mes mes-gcc mes-tcc
28
29 .PHONY: $(PHONY_TARGETS)
30
31 default: all
32
33 all: build doc
34
35 build:
36         ./build.sh
37
38 cc:
39         build-aux/build-cc.sh
40
41 mes-gcc:
42         build-aux/build-cc32.sh
43
44 mes-tcc:
45 ifdef TCC
46         CC32=$(TCC) build-aux/build-cc32.sh
47 else
48
49 $(warning skipping mes-tcc: no tcc)
50 endif
51
52 mes:
53         build-aux/build-mes.sh
54
55 clean:
56         git clean -dfx
57
58 all-go:
59         build-aux/build-guile.sh
60
61 clean-go:
62         rm -f $(shell find . -name '*.go')
63
64 check:
65         ./check.sh
66
67
68 install:
69         ./install.sh
70
71 .config.make: ./configure
72
73 seed: all-go mes-gcc mes-tcc
74 ifdef TCC
75         cd $(TINYCC_SEED) && MES_PREFIX=$(PWD) ./refresh.sh
76 endif
77         cd $(MES_SEED) && git reset --hard HEAD
78         MES=$(GUILE) GUILE=$(GUILE) SEED=1 build-aux/build-mes.sh
79         cd $(MES_SEED) && MES_PREFIX=$(PWD) ./refresh.sh
80         MES=$(GUILE) GUILE=$(GUILE) SEED=1 build-aux/build-mes.sh
81         cp lib/x86-mes/elf32-header.hex2\
82            lib/x86-mes/x86.M1\
83            lib/x86-mes/libc+tcc.S\
84            lib/x86-mes/libc.S\
85            lib/x86-mes/crt1.S\
86            lib/x86-mes/libgetopt.S\
87            $(MESCC_TOOLS_SEED)/libs
88         cd $(MESCC_TOOLS_SEED) && MES_PREFIX=$(PWD) ./bootstrap.sh
89
90 doc/version.texi: doc/mes.texi GNUmakefile
91         (set `LANG= date -r $< +'%d %B %Y'`;\
92         echo "@set UPDATED $$1 $$2 $$3"; \
93         echo "@set UPDATED-MONTH $$2 $$3"; \
94         echo "@set EDITION $(VERSION)"; \
95         echo "@set VERSION $(VERSION)") > $@
96
97 doc: doc/version.texi
98 ifdef MAKEINFO
99 doc: info
100 else
101 $(warning skipping info: no makeinfo)
102 endif
103
104 ifdef HELP2MAN
105 doc: man
106 else
107 $(warning skipping man: no help2man)
108 endif
109
110 info: doc/mes.info
111
112 doc/mes.info: doc/mes.texi doc/version.texi GNUmakefile
113         $(MAKEINFO) -o $@ -I doc $<
114
115 install-info: info
116
117 man: doc/mes.1 doc/mescc.1
118
119 doc/mes.1: src/mes.gcc-out
120         MES_ARENA=10000000 $(HELP2MAN) $< > $@
121
122 src/mes.gcc-out:
123         $(MAKE) cc
124
125 doc/mescc.1: src/mes.gcc-out scripts/mescc
126         MES_ARENA=10000000 $(HELP2MAN) $< > $@
127
128 html: mes/index.html
129
130 mes/index.html: doc/mes.texi
131         $(MAKEINFO) --html -o doc/mes $<
132
133 pdf: doc/mes.pdf
134
135 doc/mes.pdf: doc/mes.texi
136         $(MAKEINFO) --pdf -o doc/mes.pdf $<
137
138 define HELP_TOP
139 Usage: make [OPTION]... [TARGET]...
140
141 Targets:
142   all             update everything
143   all-go          update .go files
144   cc              update src/mes.gcc-out
145   doc             update documentation
146   mes-gcc         update src/mes.mes-gcc-out
147   mes-tcc         update src/mes.mes-tcc-out
148   mes             update src/mes
149   check           run unit tests
150   clean           run git clean -dfx
151   clean-go        clean .go files
152   info            update info documentation
153   install         install in $(prefix)
154   install-info    install info docs in $(prefix)/share/info
155   seed            update mes-seed in $(MES_SEED)
156 endef
157 export HELP_TOP
158 help:
159         @echo "$$HELP_TOP"
160
161 include build-aux/export.make