2018-07-22 12:24:36 +00:00
|
|
|
|
# GNU Mes --- Maxwell Equations of Software
|
2018-07-21 22:43:39 +00:00
|
|
|
|
# Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
|
|
|
|
#
|
2018-07-22 12:24:36 +00:00
|
|
|
|
# This file is part of GNU Mes.
|
2018-07-21 22:43:39 +00:00
|
|
|
|
#
|
2018-07-22 12:24:36 +00:00
|
|
|
|
# GNU Mes is free software; you can redistribute it and/or modify it
|
2018-07-21 22:43:39 +00:00
|
|
|
|
# under the terms of the GNU General Public License as published by
|
|
|
|
|
# the Free Software Foundation; either version 3 of the License, or (at
|
|
|
|
|
# your option) any later version.
|
|
|
|
|
#
|
2018-07-22 12:24:36 +00:00
|
|
|
|
# GNU Mes is distributed in the hope that it will be useful, but
|
2018-07-21 22:43:39 +00:00
|
|
|
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
# GNU General Public License for more details.
|
|
|
|
|
#
|
|
|
|
|
# You should have received a copy of the GNU General Public License
|
2018-07-22 12:24:36 +00:00
|
|
|
|
# along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
|
2018-07-21 22:43:39 +00:00
|
|
|
|
|
2018-07-25 06:14:13 +00:00
|
|
|
|
SHELL=@BASH@
|
|
|
|
|
srcdest=@srcdest@
|
|
|
|
|
srcdir=@srcdir@
|
|
|
|
|
abs_top_srcdir=@abs_top_srcdir@
|
|
|
|
|
abs_top_builddir=@abs_top_builddir@
|
|
|
|
|
|
|
|
|
|
GUILE_FLAGS:=--no-auto-compile -L . -L module -C . -C module
|
|
|
|
|
|
|
|
|
|
cleaning-p:=$(filter clean%, $(MAKECMDGOALS))$(filter %clean, $(MAKECMDGOALS))
|
|
|
|
|
|
|
|
|
|
ifndef cleaning-p
|
|
|
|
|
include .config.make
|
|
|
|
|
.config.make:
|
|
|
|
|
${srcdir}/configure --prefix=$(prefix)
|
|
|
|
|
endif
|
|
|
|
|
|
2018-07-23 18:03:57 +00:00
|
|
|
|
PHONY_TARGETS:=\
|
|
|
|
|
TAGS\
|
|
|
|
|
all-go\
|
|
|
|
|
all\
|
|
|
|
|
build\
|
|
|
|
|
check\
|
|
|
|
|
clean-go\
|
|
|
|
|
clean\
|
|
|
|
|
default\
|
|
|
|
|
dist\
|
|
|
|
|
distclean\
|
|
|
|
|
doc\
|
|
|
|
|
dvi\
|
|
|
|
|
gcc\
|
|
|
|
|
generate-ChangeLog\
|
|
|
|
|
help\
|
|
|
|
|
html\
|
|
|
|
|
info\
|
|
|
|
|
install-dvi\
|
|
|
|
|
install-html\
|
|
|
|
|
install-pdf\
|
|
|
|
|
install-ps\
|
|
|
|
|
install-strip\
|
|
|
|
|
install\
|
|
|
|
|
installcheck\
|
|
|
|
|
installdirs\
|
|
|
|
|
maintainer-clean\
|
|
|
|
|
man\
|
|
|
|
|
mes-gcc\
|
|
|
|
|
mes-tcc\
|
|
|
|
|
mes\
|
|
|
|
|
mostlyclean\
|
|
|
|
|
pdf\
|
|
|
|
|
ps\
|
2018-07-28 09:37:47 +00:00
|
|
|
|
sign\
|
2018-07-23 18:03:57 +00:00
|
|
|
|
uninstall\
|
2018-07-28 09:37:47 +00:00
|
|
|
|
web\
|
2018-07-23 18:03:57 +00:00
|
|
|
|
#
|
|
|
|
|
|
2018-07-21 22:43:39 +00:00
|
|
|
|
.PHONY: $(PHONY_TARGETS)
|
|
|
|
|
|
|
|
|
|
default: all
|
|
|
|
|
|
2018-08-09 09:00:10 +00:00
|
|
|
|
all: doc
|
|
|
|
|
|
|
|
|
|
doc: build
|
2018-07-23 18:03:57 +00:00
|
|
|
|
|
2018-07-25 06:14:13 +00:00
|
|
|
|
build:
|
|
|
|
|
./build.sh
|
|
|
|
|
|
2018-08-09 09:00:10 +00:00
|
|
|
|
src/mes: build
|
|
|
|
|
|
2018-07-25 06:14:13 +00:00
|
|
|
|
gcc:
|
|
|
|
|
${srcdest}build-aux/build-cc.sh
|
|
|
|
|
|
|
|
|
|
mes-gcc:
|
|
|
|
|
${srcdest}build-aux/build-cc32.sh
|
|
|
|
|
|
|
|
|
|
mes-tcc:
|
|
|
|
|
ifdef TCC
|
|
|
|
|
CC32=$(TCC) ${srcdest}build-aux/build-cc32.sh
|
|
|
|
|
else
|
|
|
|
|
|
|
|
|
|
$(warning skipping mes-tcc: no tcc)
|
2018-07-23 18:03:57 +00:00
|
|
|
|
endif
|
|
|
|
|
|
2018-07-25 06:14:13 +00:00
|
|
|
|
mes:
|
|
|
|
|
${srcdest}build-aux/build-mes.sh
|
|
|
|
|
|
2018-08-10 09:15:43 +00:00
|
|
|
|
x86_64-mes:
|
|
|
|
|
${srcdest}build-aux/build-x86_64-mes.sh
|
|
|
|
|
|
2018-07-23 18:03:57 +00:00
|
|
|
|
clean:
|
2018-07-25 06:14:13 +00:00
|
|
|
|
git clean -dfx\
|
|
|
|
|
-e GNUmakefile\
|
|
|
|
|
-e build.sh\
|
|
|
|
|
-e check.sh\
|
|
|
|
|
-e install.sh\
|
|
|
|
|
-e pre-inst-env\
|
|
|
|
|
-e uninstall.sh\
|
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
# Mes does not cache anything on the file system; therefore clean
|
|
|
|
|
distclean:
|
|
|
|
|
git clean -dfX
|
|
|
|
|
|
|
|
|
|
mostlyclean: clean
|
|
|
|
|
|
|
|
|
|
maintainer-clean:
|
2018-07-23 18:03:57 +00:00
|
|
|
|
git clean -dfx
|
|
|
|
|
|
2018-07-25 06:14:13 +00:00
|
|
|
|
TAGS:
|
|
|
|
|
etags ${srcdest}lib/*.c ${srcdest}lib/*/*.c ${srcdest}src/*.c ${srcdest}include/*.h ${srcdest}include/sys/*.h
|
2018-07-21 22:43:39 +00:00
|
|
|
|
|
2018-07-25 06:14:13 +00:00
|
|
|
|
all-go:
|
|
|
|
|
${srcdest}build-aux/build-guile.sh
|
|
|
|
|
|
|
|
|
|
clean-go:
|
|
|
|
|
rm -f $(shell find . -name '*.go')
|
|
|
|
|
|
|
|
|
|
check:
|
|
|
|
|
./check.sh
|
|
|
|
|
|
|
|
|
|
# Mes does not feature post-install checks yet, so we're great!
|
|
|
|
|
installcheck:
|
|
|
|
|
true
|
|
|
|
|
|
2018-08-09 09:00:10 +00:00
|
|
|
|
install:
|
2018-07-25 06:14:13 +00:00
|
|
|
|
./install.sh
|
|
|
|
|
|
|
|
|
|
uninstall:
|
|
|
|
|
./uninstall.sh
|
|
|
|
|
|
|
|
|
|
seed: all-go mes-gcc mes-tcc
|
|
|
|
|
cd $(MES_SEED) && git reset --hard HEAD
|
|
|
|
|
MES=$(GUILE) GUILE=$(GUILE) SEED=1 ${srcdest}build-aux/build-mes.sh
|
|
|
|
|
cd $(MES_SEED) && MES_PREFIX=$(PWD) ./refresh.sh
|
|
|
|
|
MES=$(GUILE) GUILE=$(GUILE) SEED=1 ${srcdest}build-aux/build-mes.sh
|
|
|
|
|
cp lib/x86-mes/elf32-header.hex2\
|
|
|
|
|
lib/x86-mes/x86.M1\
|
|
|
|
|
lib/x86-mes/libc+tcc.S\
|
|
|
|
|
lib/x86-mes/libc.S\
|
|
|
|
|
lib/x86-mes/crt1.S\
|
|
|
|
|
lib/x86-mes/libgetopt.S\
|
|
|
|
|
$(MESCC_TOOLS_SEED)/libs
|
|
|
|
|
cd $(MESCC_TOOLS_SEED) && MES_PREFIX=$(PWD) ./bootstrap.sh
|
2018-08-12 08:10:36 +00:00
|
|
|
|
ifdef TCC
|
|
|
|
|
cd $(TINYCC_SEED) && MES_PREFIX=$(PWD) ./refresh.sh
|
|
|
|
|
endif
|
2018-07-25 06:14:13 +00:00
|
|
|
|
|
2018-08-09 09:00:10 +00:00
|
|
|
|
doc/version.texi: ${srcdest}doc/mes.texi GNUmakefile
|
2018-07-25 06:14:13 +00:00
|
|
|
|
@mkdir -p $(@D)
|
|
|
|
|
(set `LANG= date -r $< +'%d %B %Y'`;\
|
|
|
|
|
echo "@set UPDATED $$1 $$2 $$3"; \
|
|
|
|
|
echo "@set UPDATED-MONTH $$2 $$3"; \
|
|
|
|
|
echo "@set EDITION $(VERSION)"; \
|
|
|
|
|
echo "@set VERSION $(VERSION)") > $@
|
|
|
|
|
|
|
|
|
|
doc: doc/version.texi
|
|
|
|
|
ifdef MAKEINFO
|
|
|
|
|
doc: info
|
|
|
|
|
else
|
|
|
|
|
$(warning skipping info: no makeinfo)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
ifdef HELP2MAN
|
|
|
|
|
doc: man
|
|
|
|
|
else
|
|
|
|
|
$(warning skipping man: no help2man)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
info: doc/mes.info
|
|
|
|
|
|
|
|
|
|
doc/mes.info: ${srcdest}doc/mes.texi doc/version.texi ${srcdest}doc/images/gcc-mesboot-graph.dot GNUmakefile
|
|
|
|
|
$(MAKEINFO) -o $@ -I doc -I doc $<
|
|
|
|
|
|
2018-07-28 09:37:47 +00:00
|
|
|
|
doc/images/%.eps: ${srcdest}doc/images/%.dot
|
|
|
|
|
ifdef DOT
|
|
|
|
|
$(DOT) -T eps $< > $@
|
|
|
|
|
else
|
|
|
|
|
touch $@
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
doc/images/%.pdf: ${srcdest}doc/images/%.dot
|
|
|
|
|
ifdef DOT
|
|
|
|
|
$(DOT) -T pdf $< > $@
|
|
|
|
|
else
|
|
|
|
|
touch $@
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
doc/images/%.png: ${srcdest}doc/images/%.dot
|
2018-07-25 06:14:13 +00:00
|
|
|
|
ifdef DOT
|
|
|
|
|
$(DOT) -T png $< > $@
|
|
|
|
|
else
|
|
|
|
|
touch $@
|
|
|
|
|
$(warning info: graphvis missing: no images)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
man: doc/mes.1 doc/mescc.1
|
|
|
|
|
|
2018-08-09 09:00:10 +00:00
|
|
|
|
# disable builtin-rules
|
|
|
|
|
%.o: %.s
|
|
|
|
|
%.s: %.S
|
|
|
|
|
%.o: %.S
|
|
|
|
|
%.o: %.c
|
|
|
|
|
%: %.S
|
|
|
|
|
%: %.o
|
|
|
|
|
%: %.c
|
2018-07-25 06:14:13 +00:00
|
|
|
|
|
2018-08-09 09:00:10 +00:00
|
|
|
|
doc/mes.1: src/mes | build
|
2018-07-25 06:14:13 +00:00
|
|
|
|
MES_ARENA=10000000 ./pre-inst-env $(HELP2MAN) $(<F) > $@
|
|
|
|
|
|
2018-08-10 07:20:30 +00:00
|
|
|
|
doc/mescc.1: scripts/mescc src/mes | build
|
2018-07-25 06:14:13 +00:00
|
|
|
|
MES_ARENA=10000000 ./pre-inst-env $(HELP2MAN) $(<F) > $@
|
|
|
|
|
|
|
|
|
|
html: doc/html/index.html
|
|
|
|
|
|
|
|
|
|
doc/html/index.html: ${srcdest}doc/mes.texi doc/version.texi doc/images/gcc-mesboot-graph.png
|
|
|
|
|
$(MAKEINFO) --html -o $(@D) -I ${srcdest}doc -I doc $<
|
|
|
|
|
|
|
|
|
|
dvi: doc/mes.dvi
|
|
|
|
|
|
|
|
|
|
doc/mes.dvi: ${srcdest}doc/mes.texi
|
|
|
|
|
$(MAKEINFO) --dvi -I ${srcdest}doc -I doc -o doc/mes.dvi $<
|
|
|
|
|
|
|
|
|
|
pdf: doc/mes.pdf
|
|
|
|
|
|
|
|
|
|
doc/mes.pdf: ${srcdest}doc/mes.texi
|
|
|
|
|
$(MAKEINFO) --pdf -I ${srcdest}doc -I doc -o doc/mes.pdf $<
|
|
|
|
|
|
|
|
|
|
ps: doc/mes.ps
|
|
|
|
|
|
|
|
|
|
doc/mes.ps: ${srcdest}doc/mes.texi
|
|
|
|
|
$(MAKEINFO) --ps -I ${srcdest}doc -I doc -o doc/mes.ps $<
|
|
|
|
|
|
2018-07-28 09:37:47 +00:00
|
|
|
|
WEB_IMAGES:=\
|
|
|
|
|
doc/images/gcc-mesboot-graph.eps\
|
|
|
|
|
doc/images/gcc-mesboot-graph.pdf\
|
|
|
|
|
doc/images/gcc-mesboot-graph.png
|
|
|
|
|
|
|
|
|
|
web: info $(WEB_IMAGES)
|
2018-08-09 09:00:10 +00:00
|
|
|
|
GENDOCS_TEMPLATE_DIR=doc build-aux/gendocs.sh -I doc -s ${srcdest}doc/mes.texi -o doc/web/manual --email bug-mes@gnu.org mes "GNU Mes manual"
|
2018-07-28 09:37:47 +00:00
|
|
|
|
|
2018-07-25 06:14:13 +00:00
|
|
|
|
### dist
|
|
|
|
|
COMMIT=$(shell test -d ${srcdest}.git && (cd ${srcdir} && git describe --dirty 2>/dev/null) || cat ${srcdest}.tarball-version)
|
|
|
|
|
TARBALL_VERSION=$(COMMIT:v%=%)
|
|
|
|
|
TARBALL_DIR:=$(PACKAGE)-$(TARBALL_VERSION)
|
|
|
|
|
TARBALL:=$(TARBALL_DIR).tar.gz
|
|
|
|
|
|
|
|
|
|
.tarball-version:
|
|
|
|
|
echo $(COMMIT) > $@
|
|
|
|
|
|
|
|
|
|
GIT_ARCHIVE_HEAD:=git archive HEAD --
|
|
|
|
|
GIT_LS_FILES:=git ls-files
|
|
|
|
|
ifeq ($(wildcard .git),)
|
|
|
|
|
GIT_ARCHIVE_HEAD:=tar -cf-
|
|
|
|
|
GIT_LS_FILES:=find
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
dist: $(TARBALL)
|
|
|
|
|
|
2018-07-28 09:37:47 +00:00
|
|
|
|
sign: $(TARBALL)
|
|
|
|
|
gpg --detach-sign $<
|
|
|
|
|
|
2018-07-25 06:14:13 +00:00
|
|
|
|
tree-clean-p:
|
|
|
|
|
test ! -d .git || git diff --exit-code > /dev/null
|
|
|
|
|
test ! -d .git || git diff --cached --exit-code > /dev/null
|
|
|
|
|
@echo commit:$(COMMIT)
|
|
|
|
|
|
|
|
|
|
generate-ChangeLog:
|
2018-07-26 17:17:12 +00:00
|
|
|
|
$(PERL) ${srcdest}build-aux/gitlog-to-changelog --srcdir=${srcdir} > $@
|
|
|
|
|
cat ChangeLog >> generate-ChangeLog
|
|
|
|
|
mv generate-ChangeLog ChangeLog
|
2018-07-25 06:14:13 +00:00
|
|
|
|
|
|
|
|
|
$(TARBALL): .tarball-version | generate-ChangeLog
|
|
|
|
|
($(GIT_LS_FILES)\
|
|
|
|
|
--exclude=$(TARBALL_DIR);\
|
|
|
|
|
echo $^ | tr ' ' '\n')\
|
|
|
|
|
| GZIP=-n tar --sort=name --mtime=@0 --owner=0 --group=0 --numeric-owner\
|
|
|
|
|
--transform=s,^,$(TARBALL_DIR)/,S -T- -czf $@
|
|
|
|
|
git checkout ChangeLog
|
|
|
|
|
|
|
|
|
|
ifdef GUIX
|
|
|
|
|
update-hash: $(TARBALL)
|
|
|
|
|
$(GUIX) download file://$(PWD)/$<
|
|
|
|
|
sed -i -e 's,(base32 #!mes!# "[^"]*"),(base32 #!mes!# "$(shell $(GUIX) hash $<)"),' guix/git/mes.scm
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
$(warning update-hash: no guix)
|
|
|
|
|
endif
|
|
|
|
|
|
2018-07-22 14:21:50 +00:00
|
|
|
|
tag:
|
|
|
|
|
git tag -s v$(VERSION) -m "GNU Mes $(VERSION)."
|
|
|
|
|
|
|
|
|
|
# Release process
|
|
|
|
|
# 0. doc: Release update, Release commit, make seed, test guix bootstrap
|
|
|
|
|
# 1. make tag
|
|
|
|
|
# 2. make dist
|
|
|
|
|
# 3. make release
|
|
|
|
|
|
|
|
|
|
guix-build:
|
2018-07-25 06:14:13 +00:00
|
|
|
|
./pre-inst-env $(GUIX) build mes@$(VERSION) --with-source=$(TARBALL)
|
|
|
|
|
|
2018-07-22 14:21:50 +00:00
|
|
|
|
release: update-hash | gen-announce guix-build
|
|
|
|
|
|
2018-08-09 09:00:10 +00:00
|
|
|
|
GPG_KEY_ID:=1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273
|
|
|
|
|
gen-announce:
|
|
|
|
|
../gnulib/build-aux/announce-gen\
|
|
|
|
|
--release-type=alpha\
|
|
|
|
|
--package-name=mes\
|
|
|
|
|
--previous-version='0.16 '\
|
|
|
|
|
--current-version=$(VERSION)\
|
|
|
|
|
--gpg-key-id=$(GPG_KEY_ID)\
|
|
|
|
|
--url-directory=https://alpha.gnu.org/gnu/mes\
|
|
|
|
|
--news=NEWS\
|
|
|
|
|
> doc/announce/ANNOUNCE-$(VERSION)-
|
|
|
|
|
|
|
|
|
|
|
2018-07-25 06:14:13 +00:00
|
|
|
|
installdirs: mkinstalldirs
|
|
|
|
|
mkdir -p\
|
|
|
|
|
$(DESTDIR)$(bindir)\
|
|
|
|
|
$(DESTDIR)$(datadir)\
|
|
|
|
|
$(DESTDIR)$(libdir)\
|
|
|
|
|
$(DESTDIR)$(infodir)\
|
|
|
|
|
$(DESTDIR)$(mandir)
|
|
|
|
|
|
|
|
|
|
install-dvi: dvi
|
|
|
|
|
mkdir -p $(DESTDIR)${docdir}
|
|
|
|
|
cp doc/mes.dvi $(DESTDIR)${docdir}
|
|
|
|
|
|
|
|
|
|
install-html: html
|
|
|
|
|
mkdir -p $(DESTDIR)${docdir}
|
|
|
|
|
tar -cf- -C doc html | tar -xf- -C $(DESTDIR)${docdir}
|
|
|
|
|
|
|
|
|
|
install-pdf: pdf
|
|
|
|
|
mkdir -p $(DESTDIR)${docdir}
|
|
|
|
|
cp doc/mes.pdf $(DESTDIR)${docdir}
|
|
|
|
|
|
|
|
|
|
install-ps: ps
|
|
|
|
|
mkdir -p $(DESTDIR)${docdir}
|
|
|
|
|
cp doc/mes.ps $(DESTDIR)${docdir}
|
|
|
|
|
|
|
|
|
|
# We do not strip binaries, binutils' strip corrupts M1+hex2-generated ELFs
|
|
|
|
|
install-strip: install
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
define HELP_TOP
|
|
|
|
|
Usage: make [OPTION]... [TARGET]...
|
|
|
|
|
|
|
|
|
|
Main and non-standard targets:
|
|
|
|
|
all update everything
|
|
|
|
|
all-go update .go files
|
|
|
|
|
gcc update src/mes.gcc-out
|
|
|
|
|
dist update $(TARBALL)
|
|
|
|
|
doc update documentation
|
|
|
|
|
mes-gcc update src/mes.mes-gcc-out
|
|
|
|
|
mes-tcc update src/mes.mes-tcc-out
|
|
|
|
|
mes update src/mes
|
|
|
|
|
check run unit tests
|
|
|
|
|
clean run git clean -dfx
|
|
|
|
|
clean-go clean .go files
|
|
|
|
|
info update info documentation
|
|
|
|
|
install install in $(prefix)
|
|
|
|
|
install-info install info docs in $(prefix)/share/info
|
|
|
|
|
release dist and tag
|
|
|
|
|
seed update mes-seed in $(MES_SEED)
|
|
|
|
|
uninstall uninstall from $(prefix)
|
|
|
|
|
endef
|
|
|
|
|
export HELP_TOP
|
|
|
|
|
help:
|
|
|
|
|
@echo "$$HELP_TOP"
|
|
|
|
|
|
|
|
|
|
include ${srcdest}build-aux/export.make
|