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