build: Prepare for autoconfiscation.
[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 module -C . -C module
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 gcc mes src/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 gcc:
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 install: src/mes
68         ./install.sh
69
70 .config.make: ./configure
71
72 seed: all-go mes-gcc mes-tcc
73 ifdef TCC
74         cd $(TINYCC_SEED) && MES_PREFIX=$(PWD) ./refresh.sh
75 endif
76         cd $(MES_SEED) && git reset --hard HEAD
77         MES=$(GUILE) GUILE=$(GUILE) SEED=1 build-aux/build-mes.sh
78         cd $(MES_SEED) && MES_PREFIX=$(PWD) ./refresh.sh
79         MES=$(GUILE) GUILE=$(GUILE) SEED=1 build-aux/build-mes.sh
80         cp lib/x86-mes/elf32-header.hex2\
81            lib/x86-mes/x86.M1\
82            lib/x86-mes/libc+tcc.S\
83            lib/x86-mes/libc.S\
84            lib/x86-mes/crt1.S\
85            lib/x86-mes/libgetopt.S\
86            $(MESCC_TOOLS_SEED)/libs
87         cd $(MESCC_TOOLS_SEED) && MES_PREFIX=$(PWD) ./bootstrap.sh
88
89 doc/version.texi: doc/mes.texi GNUmakefile
90         (set `LANG= date -r $< +'%d %B %Y'`;\
91         echo "@set UPDATED $$1 $$2 $$3"; \
92         echo "@set UPDATED-MONTH $$2 $$3"; \
93         echo "@set EDITION $(VERSION)"; \
94         echo "@set VERSION $(VERSION)") > $@
95
96 doc: doc/version.texi
97 ifdef MAKEINFO
98 doc: info
99 else
100 $(warning skipping info: no makeinfo)
101 endif
102
103 ifdef HELP2MAN
104 doc: man
105 else
106 $(warning skipping man: no help2man)
107 endif
108
109 info: doc/mes.info
110
111 doc/mes.info: doc/mes.texi doc/version.texi GNUmakefile
112         $(MAKEINFO) -o $@ -I doc $<
113
114 install-info: info
115
116 man: doc/mes.1 doc/mescc.1
117
118 src/mes: build
119
120 doc/mes.1: src/mes
121         MES_ARENA=10000000 ./pre-inst-env $(HELP2MAN) $< > $@
122
123 doc/mescc.1: src/mes scripts/mescc
124         MES_ARENA=10000000 ./pre-inst-env $(HELP2MAN) $< > $@
125
126 html: mes/index.html
127
128 mes/index.html: doc/mes.texi
129         $(MAKEINFO) --html -o doc/mes $<
130
131 pdf: doc/mes.pdf
132
133 doc/mes.pdf: doc/mes.texi
134         $(MAKEINFO) --pdf -o doc/mes.pdf $<
135
136 define HELP_TOP
137 Usage: make [OPTION]... [TARGET]...
138
139 Targets:
140   all             update everything
141   all-go          update .go files
142   cc              update src/mes.gcc-out
143   doc             update documentation
144   mes-gcc         update src/mes.mes-gcc-out
145   mes-tcc         update src/mes.mes-tcc-out
146   mes             update src/mes
147   check           run unit tests
148   clean           run git clean -dfx
149   clean-go        clean .go files
150   info            update info documentation
151   install         install in $(prefix)
152   install-info    install info docs in $(prefix)/share/info
153   seed            update mes-seed in $(MES_SEED)
154 endef
155 export HELP_TOP
156 help:
157         @echo "$$HELP_TOP"
158
159 include build-aux/export.make