3 ### Build script for start-up benchmarks
5 ### (c) 2020 Mark Wooding
8 ###----- Licensing notice ---------------------------------------------------
10 ### This file is part of Runlisp, a tool for invoking Common Lisp scripts.
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.
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
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/>.
25 include $(top_srcdir)/vars.am
33 ###--------------------------------------------------------------------------
36 v_bench = $(v_bench_@AM_V@)
37 v_bench_ = $(v_bench_@AM_DEFAULT_V@)
38 v_bench_0 = @echo " BENCH $@";
43 noinst_PROGRAMS += timeit
44 timeit_SOURCES = timeit.c
46 CLEANFILES += *.out *.bench
48 ###--------------------------------------------------------------------------
49 ### Lisp systems using `runlisp'.
51 RUNLISP = $(top_builddir)/runlisp \
52 -c$(top_srcdir)/runlisp-base.conf \
53 -oimage-dir=$(top_builddir)
56 RUNLISP_BENCHES = $(foreach l,$(LISPS), runlisp.$l.bench)
57 BENCHES += $(RUNLISP_BENCHES)
58 $(RUNLISP_BENCHES): runlisp.%.bench: timeit $(FORCE)
59 $(v_bench)./timeit $(RUNLISP) -L$* -- \
60 $(srcdir)/t.lisp a b c >runlisp.$*.out 2>$@
62 RUNLISP_NOIMAGE_BENCHES = $(foreach l,$(LISPS), runlisp-noimage.$l.bench)
63 BENCHES += $(RUNLISP_NOIMAGE_BENCHES)
64 $(RUNLISP_NOIMAGE_BENCHES): runlisp-noimage.%.bench: timeit $(FORCE)
65 $(v_bench)./timeit $(RUNLISP) -D -L$* -- \
66 $(srcdir)/t.lisp a b c >runlisp-noimage.$*.out 2>$@
68 ###--------------------------------------------------------------------------
69 ### Lisp systems using `cl-launch'.
71 CL_LAUNCH_BENCHES = $(foreach l,$(LISPS), cl-launch.$l.bench)
72 BENCHES += $(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>$@
76 ###--------------------------------------------------------------------------
77 ### C programs (as a baseline).
79 BENCHES += c.tcc.bench
80 c.tcc.bench: timeit $(FORCE)
81 $(v_bench)./timeit tcc -run $(srcdir)/t.c a b c >c.tcc.out 2>$@
83 BENCHES += c.gcc.bench
84 noinst_PROGRAMS += t.c.gcc
86 c.gcc.bench: t.c.gcc timeit $(FORCE)
87 $(v_bench)./timeit ./t.c.gcc a b c >c.gcc.out 2>$@
89 ###--------------------------------------------------------------------------
90 ### Other scripting languages.
94 perl.bench: timeit $(FORCE)
95 $(v_bench)./timeit perl -- $(srcdir)/t.pl a b c >perl.out 2>$@
97 BENCHES += python.bench
99 python.bench: timeit $(FORCE)
100 $(v_bench)./timeit python -- $(srcdir)/t.py a b c >python.out 2>$@
102 SHELLS = dash bash zsh
104 SHELL_BENCHES = $(foreach s,$(SHELLS), shell.$s.bench)
105 BENCHES += $(SHELL_BENCHES)
106 $(SHELL_BENCHES): shell.%.bench: timeit $(FORCE)
107 $(v_bench)TEST_SHELL=$* ./timeit $* -- $(srcdir)/t.sh a b c >shell.$*.out 2>$@
109 ###--------------------------------------------------------------------------
113 noinst_DATA += $(GRAPHS)
114 CLEANFILES += $(GRAPHS)
116 v_massage = $(v_massage_@AM_V@)
117 v_massage_ = $(v_massage_@AM_DEFAULT_V@)
118 v_massage_0 = @echo " MASSAGE $@";
120 v_gnuplot = $(v_gnuplot_@AM_V@)
121 v_gnuplot_ = $(v_gnuplot_@AM_DEFAULT_V@)
122 v_gnuplot_0 = @echo " GNUPLOT $@";
124 CLEANFILES += bench.data
125 bench.data: $(BENCHES) massage-benchmarks
126 $(v_massage)$(srcdir)/massage-benchmarks >$@.new && mv $@.new $@
128 GRAPHS += lisp-graph.tikz
129 lisp-graph.tikz: lisp-graph.gp bench.data
130 $(v_gnuplot)$(GNUPLOT) $< >$@.new && mv $@.new $@
132 GRAPHS += interp-graph.tikz
133 interp-graph.tikz: interp-graph.gp bench.data
134 $(v_gnuplot)$(GNUPLOT) $< >$@.new && mv $@.new $@
139 ###----- That's all, folks --------------------------------------------------