cb5eef7af70de6b34cac7293ea1542c715c83f10
[runlisp] / bench / Makefile.am
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
25 include $(top_srcdir)/vars.am
26
27 GNUPLOT = gnuplot
28
29 FORCE =
30 FORCE:
31 .PHONY: FORCE
32
33 ###--------------------------------------------------------------------------
34 ### Preliminaries.
35
36 v_bench = $(v_bench_@AM_V@)
37 v_bench_ = $(v_bench_@AM_DEFAULT_V@)
38 v_bench_0 = @echo " BENCH $@";
39
40 BENCHES =
41 bench: $(BENCHES)
42
43 noinst_PROGRAMS += timeit
44 timeit_SOURCES = timeit.c
45
46 CLEANFILES += *.out *.bench
47
48 ###--------------------------------------------------------------------------
49 ### Lisp systems using `runlisp'.
50
51 RUNLISP = $(top_builddir)/runlisp -I$(top_builddir)/
52 EXTRA_DIST += t.lisp
53
54 RUNLISP_BENCHES = $(foreach l,$(LISPS), runlisp.$l.bench)
55 BENCHES += $(RUNLISP_BENCHES)
56 $(RUNLISP_BENCHES): runlisp.%.bench: timeit $(FORCE)
57 $(v_bench)./timeit $(RUNLISP) -L$* -- $(srcdir)/t.lisp a b c >runlisp.$*.out 2>$@
58
59 RUNLISP_NOIMAGE_BENCHES = $(foreach l,$(LISPS), runlisp-noimage.$l.bench)
60 BENCHES += $(RUNLISP_NOIMAGE_BENCHES)
61 $(RUNLISP_NOIMAGE_BENCHES): runlisp-noimage.%.bench: timeit $(FORCE)
62 $(v_bench)./timeit $(RUNLISP) -D -L$* -- $(srcdir)/t.lisp a b c >runlisp-noimage.$*.out 2>$@
63
64 ###--------------------------------------------------------------------------
65 ### Lisp systems using `cl-launch'.
66
67 CL_LAUNCH_BENCHES = $(foreach l,$(LISPS), cl-launch.$l.bench)
68 BENCHES += $(CL_LAUNCH_BENCHES)
69 $(CL_LAUNCH_BENCHES): cl-launch.%.bench: timeit $(FORCE)
70 $(v_bench)./timeit cl-launch -X -l $* -- $(srcdir)/t.lisp a b c >cl-launch.$*.out 2>$@
71
72 ###--------------------------------------------------------------------------
73 ### C programs (as a baseline).
74
75 BENCHES += c.tcc.bench
76 c.tcc.bench: timeit $(FORCE)
77 $(v_bench)./timeit tcc -run $(srcdir)/t.c a b c >c.tcc.out 2>$@
78
79 BENCHES += c.gcc.bench
80 noinst_PROGRAMS += t.c.gcc
81 t_c_gcc_SOURCES = t.c
82 c.gcc.bench: t.c.gcc timeit $(FORCE)
83 $(v_bench)./timeit ./t.c.gcc a b c >c.gcc.out 2>$@
84
85 ###--------------------------------------------------------------------------
86 ### Other scripting languages.
87
88 BENCHES += perl.bench
89 EXTRA_DIST += t.pl
90 perl.bench: timeit $(FORCE)
91 $(v_bench)./timeit perl -- $(srcdir)/t.pl a b c >perl.out 2>$@
92
93 BENCHES += python.bench
94 EXTRA_DIST += t.py
95 python.bench: timeit $(FORCE)
96 $(v_bench)./timeit python -- $(srcdir)/t.py a b c >python.out 2>$@
97
98 SHELLS = dash bash zsh
99 EXTRA_DIST += t.sh
100 SHELL_BENCHES = $(foreach s,$(SHELLS), shell.$s.bench)
101 BENCHES += $(SHELL_BENCHES)
102 $(SHELL_BENCHES): shell.%.bench: timeit $(FORCE)
103 $(v_bench)TEST_SHELL=$* ./timeit $* -- $(srcdir)/t.sh a b c >shell.$*.out 2>$@
104
105 ###--------------------------------------------------------------------------
106 ### Reporting.
107
108 GRAPHS =
109 noinst_DATA += $(GRAPHS)
110 CLEANFILES += $(GRAPHS)
111
112 v_massage = $(v_massage_@AM_V@)
113 v_massage_ = $(v_massage_@AM_DEFAULT_V@)
114 v_massage_0 = @echo " MASSAGE $@";
115
116 v_gnuplot = $(v_gnuplot_@AM_V@)
117 v_gnuplot_ = $(v_gnuplot_@AM_DEFAULT_V@)
118 v_gnuplot_0 = @echo " GNUPLOT $@";
119
120 CLEANFILES += bench.data
121 bench.data: $(BENCHES) massage-benchmarks
122 $(v_massage)$(srcdir)/massage-benchmarks >$@.new && mv $@.new $@
123
124 GRAPHS += lisp-graph.tikz
125 lisp-graph.tikz: lisp-graph.gp bench.data
126 $(v_gnuplot)$(GNUPLOT) $< >$@.new && mv $@.new $@
127
128 GRAPHS += interp-graph.tikz
129 interp-graph.tikz: interp-graph.gp bench.data
130 $(v_gnuplot)$(GNUPLOT) $< >$@.new && mv $@.new $@
131
132 graphs: $(GRAPHS)
133 .PHONY: graphs
134
135 ###----- That's all, folks --------------------------------------------------