]> git.k1024.org Git - perf-null.git/blob - Makefile
Add a simple README
[perf-null.git] / Makefile
1 PROGS = \
2         asm/null \
3         c/c-diet-static-null c/c-diet-dynamic-null \
4         c/c-libc-static-null c/c-libc-dynamic-null \
5         c/c++-static-null c/c++-dynamic-null \
6         haskell/null-single haskell/null-threaded \
7         ocaml/null-byte ocaml/null-opt \
8         java/null-gcj
9
10 SCRIPTS = \
11         dash/null.dash bash/null.bash \
12         lua/null.lua51 lua/null.lua52 lua/null.luajit \
13         perl/null.pl ruby/null.rb \
14         php/null.php php/null.php-n \
15         tcl/null.tcl84 tcl/null.tcl85 tcl/null.tcl86 \
16         python/null.py26 python/null.py26-s \
17         python/null.py27 python/null.py27-s \
18         python/null.py32 python/null.py32-s \
19         python/null.pypy
20
21 #METRICS = \
22 #       cycles,instructions,branches,branch-misses \
23 #       dtlb-loads,dtlb-load-misses,itlb-loads,itlb-load-misses \
24 #       cycles,instructions,cache-references,cache-misses \
25 #       cycles,instructions,stalled-cycles-frontend,stalled-cycles-backend
26
27 METRICS = cycles,instructions,branches,branch-misses,cpu-clock,task-clock,major-faults,minor-faults,cs
28
29 JAVA_VMS = server zero cacao jamvm
30 # see below for how this is called
31 JAVA_INVOCS = $(JAVA_VMS:%="java -cp java -% Null")
32
33 REPS = 100
34
35 all: $(PROGS) java/Null.class
36
37 $(PROGS): Makefile
38
39 asm/null: asm/null.s
40         as -o asm/null.o $<
41         ld -o $@ asm/null.o
42         strip $@
43
44 c-diet-static-%: %.c
45         diet gcc -static -O2 -Wall -o $@ $<
46         strip $@
47
48 c-diet-dynamic-%: %.c
49         diet gcc -O2 -Wall -o $@ $<
50         strip $@
51
52 c-libc-static-%: %.c
53         gcc -static -O2 -Wall -o $@ $<
54         strip $@
55
56 c-libc-dynamic-%: %.c
57         gcc -O2 -Wall -o $@ $<
58         strip $@
59
60 c++-static-%: %.c
61         g++ -static -O2 -Wall -o $@ $<
62         strip $@
63
64 c++-dynamic-%: %.c
65         g++ -O2 -Wall -o $@ $<
66         strip $@
67
68 haskell/null-single: haskell/null.hs
69         ghc --make -O2 -Wall -o $@ $<
70         strip $@
71
72 haskell/null-threaded: haskell/null.hs
73         ghc --make -O2 -Wall -threaded -o $@ $<
74         strip $@
75
76 ocaml/null-byte: ocaml/null.ml
77         ocamlc -o $@ $<
78         # no stripping as this is not an elf file
79
80 ocaml/null-opt: ocaml/null.ml
81         ocamlopt -o $@ $<
82         strip $@
83
84 java/null-gcj: java/Null.java
85         gcj-4.6 --main=Null -o $@ $<
86         strip $@
87
88 java/Null.class: java/Null.java Makefile
89         javac $<
90
91 log: $(PROGS) $(SCRIPTS) java/Null.class Makefile
92         rm -f log; \
93         for prog in $(PROGS:%=./%) $(SCRIPTS:%=./%) $(JAVA_INVOCS); do \
94           echo $$prog; \
95           for metric in $(METRICS); do \
96             LC_ALL=C perf stat -e "$$metric" -r $(REPS) -o log --append $$prog; \
97           done; \
98         done
99
100 .PHONY: log
101
102 clean:
103         cd asm && rm -f *.o
104         cd haskell && rm -f *.hi *.o
105         cd ocaml && rm -f *.cmo *.cmi *.cmx *.o
106         cd java && rm -f *.class
107         rm -f $(PROGS)