@@@ work in progress
[runlisp] / bench / Makefile.am
CommitLineData
e29834b8
MW
1### -*-makefile-*-
2###
3### Build script for start-up benchmarks
4###
5### (c) 2020 Mark Wooding
6###
7
8###----- Licensing notice ---------------------------------------------------
9###
10### This file is part of Runlisp, a tool for invoking Common Lisp scripts.
11###
12### Runlisp is free software: you can redistribute it and/or modify it
13### under the terms of the GNU General Public License as published by the
14### Free Software Foundation; either version 3 of the License, or (at your
15### option) any later version.
16###
17### Runlisp is distributed in the hope that it will be useful, but WITHOUT
18### ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19### FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
20### for more details.
21###
22### You should have received a copy of the GNU General Public License
23### along with Runlisp. If not, see <https://www.gnu.org/licenses/>.
24
25include $(top_srcdir)/vars.am
26
27GNUPLOT = gnuplot
28
29FORCE =
30FORCE:
31.PHONY: FORCE
32
33###--------------------------------------------------------------------------
34### Preliminaries.
35
36v_bench = $(v_bench_@AM_V@)
37v_bench_ = $(v_bench_@AM_DEFAULT_V@)
38v_bench_0 = @echo " BENCH $@";
39
40BENCHES =
41bench: $(BENCHES)
42
43noinst_PROGRAMS += timeit
44timeit_SOURCES = timeit.c
45
46CLEANFILES += *.out *.bench
47
48###--------------------------------------------------------------------------
49### Lisp systems using `runlisp'.
50
7b8ff279
MW
51RUNLISP = $(top_builddir)/runlisp \
52 -c$(top_srcdir)/runlisp.conf \
53 -oimage-dir=$(top_builddir)
e29834b8
MW
54EXTRA_DIST += t.lisp
55
56RUNLISP_BENCHES = $(foreach l,$(LISPS), runlisp.$l.bench)
57BENCHES += $(RUNLISP_BENCHES)
58$(RUNLISP_BENCHES): runlisp.%.bench: timeit $(FORCE)
7b8ff279
MW
59 $(v_bench)./timeit $(RUNLISP) -L$* -- \
60 $(srcdir)/t.lisp a b c >runlisp.$*.out 2>$@
e29834b8
MW
61
62RUNLISP_NOIMAGE_BENCHES = $(foreach l,$(LISPS), runlisp-noimage.$l.bench)
63BENCHES += $(RUNLISP_NOIMAGE_BENCHES)
64$(RUNLISP_NOIMAGE_BENCHES): runlisp-noimage.%.bench: timeit $(FORCE)
7b8ff279
MW
65 $(v_bench)./timeit $(RUNLISP) -D -L$* -- \
66 $(srcdir)/t.lisp a b c >runlisp-noimage.$*.out 2>$@
e29834b8
MW
67
68###--------------------------------------------------------------------------
69### Lisp systems using `cl-launch'.
70
71CL_LAUNCH_BENCHES = $(foreach l,$(LISPS), cl-launch.$l.bench)
72BENCHES += $(CL_LAUNCH_BENCHES)
73$(CL_LAUNCH_BENCHES): cl-launch.%.bench: timeit $(FORCE)
74 $(v_bench)./timeit cl-launch -X -l $* -- $(srcdir)/t.lisp a b c >cl-launch.$*.out 2>$@
75
76###--------------------------------------------------------------------------
77### C programs (as a baseline).
78
79BENCHES += c.tcc.bench
80c.tcc.bench: timeit $(FORCE)
81 $(v_bench)./timeit tcc -run $(srcdir)/t.c a b c >c.tcc.out 2>$@
82
83BENCHES += c.gcc.bench
84noinst_PROGRAMS += t.c.gcc
85t_c_gcc_SOURCES = t.c
86c.gcc.bench: t.c.gcc timeit $(FORCE)
87 $(v_bench)./timeit ./t.c.gcc a b c >c.gcc.out 2>$@
88
89###--------------------------------------------------------------------------
90### Other scripting languages.
91
92BENCHES += perl.bench
93EXTRA_DIST += t.pl
94perl.bench: timeit $(FORCE)
95 $(v_bench)./timeit perl -- $(srcdir)/t.pl a b c >perl.out 2>$@
96
97BENCHES += python.bench
98EXTRA_DIST += t.py
99python.bench: timeit $(FORCE)
100 $(v_bench)./timeit python -- $(srcdir)/t.py a b c >python.out 2>$@
101
102SHELLS = dash bash zsh
103EXTRA_DIST += t.sh
104SHELL_BENCHES = $(foreach s,$(SHELLS), shell.$s.bench)
105BENCHES += $(SHELL_BENCHES)
106$(SHELL_BENCHES): shell.%.bench: timeit $(FORCE)
107 $(v_bench)TEST_SHELL=$* ./timeit $* -- $(srcdir)/t.sh a b c >shell.$*.out 2>$@
108
109###--------------------------------------------------------------------------
110### Reporting.
111
112GRAPHS =
113noinst_DATA += $(GRAPHS)
114CLEANFILES += $(GRAPHS)
115
116v_massage = $(v_massage_@AM_V@)
117v_massage_ = $(v_massage_@AM_DEFAULT_V@)
118v_massage_0 = @echo " MASSAGE $@";
119
120v_gnuplot = $(v_gnuplot_@AM_V@)
121v_gnuplot_ = $(v_gnuplot_@AM_DEFAULT_V@)
122v_gnuplot_0 = @echo " GNUPLOT $@";
123
124CLEANFILES += bench.data
125bench.data: $(BENCHES) massage-benchmarks
126 $(v_massage)$(srcdir)/massage-benchmarks >$@.new && mv $@.new $@
127
128GRAPHS += lisp-graph.tikz
129lisp-graph.tikz: lisp-graph.gp bench.data
130 $(v_gnuplot)$(GNUPLOT) $< >$@.new && mv $@.new $@
131
132GRAPHS += interp-graph.tikz
133interp-graph.tikz: interp-graph.gp bench.data
134 $(v_gnuplot)$(GNUPLOT) $< >$@.new && mv $@.new $@
135
136graphs: $(GRAPHS)
137.PHONY: graphs
138
139###----- That's all, folks --------------------------------------------------