]>
Commit | Line | Data |
---|---|---|
223e47cc LB |
1 | # -*- Makefile -*- |
2 | ||
3 | # Usage: make test.N.report | |
4 | # | |
5 | # COUNT can be over-ridden to change the number of tests generated per | |
6 | # file, and TESTARGS is used to change the type generation. Make sure | |
7 | # to 'make clean' after changing either of these parameters. | |
8 | ||
9 | TESTARGS := --no-unsigned --no-vector --no-complex --no-bool | |
10 | ||
11 | COUNT := 1 | |
12 | TIMEOUT := 5 | |
13 | ||
14 | CFLAGS := -std=gnu99 | |
15 | ||
16 | X_COMPILER := gcc | |
17 | X_LL_CFLAGS := -emit-llvm -S | |
18 | Y_COMPILER := clang | |
19 | Y_LL_CFLAGS := -emit-llvm -S | |
20 | CC := gcc | |
21 | ||
22 | ### | |
23 | ||
24 | ABITESTGEN := ../ABITestGen.py | |
25 | ||
26 | ifndef VERBOSE | |
27 | Verb := @ | |
28 | endif | |
29 | ||
30 | .PHONY: test.%.report | |
31 | test.%.report: temps/test.%.xx.diff temps/test.%.xy.diff temps/test.%.yx.diff temps/test.%.yy.diff | |
32 | @ok=1;\ | |
33 | for t in $^; do \ | |
34 | if [ -s $$t ]; then \ | |
35 | echo "TEST $*: $$t failed"; \ | |
36 | ok=0;\ | |
37 | fi; \ | |
38 | done; \ | |
39 | if [ $$ok -eq 1 ]; then \ | |
40 | true; \ | |
41 | else \ | |
42 | false; \ | |
43 | fi | |
44 | ||
45 | ||
46 | .PHONY: test.%.defs-report | |
47 | test.%.defs-report: temps/test.%.defs.diff | |
48 | @for t in $^; do \ | |
49 | if [ -s $$t ]; then \ | |
50 | echo "TEST $*: $$t failed"; \ | |
51 | cat $$t; \ | |
52 | fi; \ | |
53 | done | |
54 | ||
55 | .PHONY: test.%.build | |
56 | test.%.build: temps/test.%.ref temps/test.%.xx temps/test.%.xy temps/test.%.yx temps/test.%.yy temps/test.%.x.defs temps/test.%.y.defs | |
57 | @true | |
58 | ||
59 | ### | |
60 | ||
61 | # Diffs and output | |
62 | ||
63 | .PRECIOUS: temps/.dir | |
64 | ||
65 | .PRECIOUS: temps/test.%.xx.diff | |
66 | temps/test.%.xx.diff: temps/test.%.ref.out temps/test.%.xx.out | |
67 | $(Verb) diff $^ > $@ || true | |
68 | .PRECIOUS: temps/test.%.xy.diff | |
69 | temps/test.%.xy.diff: temps/test.%.ref.out temps/test.%.xy.out | |
70 | $(Verb) diff $^ > $@ || true | |
71 | .PRECIOUS: temps/test.%.yx.diff | |
72 | temps/test.%.yx.diff: temps/test.%.ref.out temps/test.%.yx.out | |
73 | $(Verb) diff $^ > $@ || true | |
74 | .PRECIOUS: temps/test.%.yy.diff | |
75 | temps/test.%.yy.diff: temps/test.%.ref.out temps/test.%.yy.out | |
76 | $(Verb) diff $^ > $@ || true | |
77 | .PRECIOUS: temps/test.%.defs.diff | |
78 | temps/test.%.defs.diff: temps/test.%.x.defs temps/test.%.y.defs | |
79 | $(Verb) zipdifflines \ | |
80 | --replace "%struct.T[0-9]+" "%struct.s" \ | |
81 | --replace "%union.T[0-9]+" "%struct.s" \ | |
82 | --replace "byval align [0-9]+" "byval" \ | |
83 | $^ > $@ | |
84 | ||
85 | .PRECIOUS: temps/test.%.out | |
86 | temps/test.%.out: temps/test.% | |
87 | -$(Verb) ./$< > $@ | |
88 | ||
89 | # Executables | |
90 | ||
91 | .PRECIOUS: temps/test.%.ref | |
92 | temps/test.%.ref: temps/test.%.driver.ref.o temps/test.%.a.ref.o temps/test.%.b.ref.o | |
93 | $(Verb) $(CC) $(CFLAGS) $(CC_CFLAGS) -O3 -o $@ $^ | |
94 | .PRECIOUS: temps/test.%.xx | |
95 | temps/test.%.xx: temps/test.%.driver.ref.o temps/test.%.a.x.o temps/test.%.b.x.o | |
96 | $(Verb) $(CC) $(CFLAGS) $(CC_CFLAGS) -O3 -o $@ $^ | |
97 | .PRECIOUS: temps/test.%.xy | |
98 | temps/test.%.xy: temps/test.%.driver.ref.o temps/test.%.a.x.o temps/test.%.b.y.o | |
99 | $(Verb) $(CC) $(CFLAGS) $(CC_CFLAGS) -O3 -o $@ $^ | |
100 | .PRECIOUS: temps/test.%.yx | |
101 | temps/test.%.yx: temps/test.%.driver.ref.o temps/test.%.a.y.o temps/test.%.b.x.o | |
102 | $(Verb) $(CC) $(CFLAGS) $(CC_CFLAGS) -O3 -o $@ $^ | |
103 | .PRECIOUS: temps/test.%.yy | |
104 | temps/test.%.yy: temps/test.%.driver.ref.o temps/test.%.a.y.o temps/test.%.b.y.o | |
105 | $(Verb) $(CC) $(CFLAGS) $(CC_CFLAGS) -O3 -o $@ $^ | |
106 | ||
107 | # Object files | |
108 | ||
109 | .PRECIOUS: temps/test.%.ref.o | |
110 | temps/test.%.ref.o: inputs/test.%.c temps/.dir | |
111 | $(Verb) $(CC) -c $(CFLAGS) $(CC_CFLAGS) -o $@ $< | |
112 | .PRECIOUS: temps/test.%.x.o | |
113 | temps/test.%.x.o: inputs/test.%.c temps/.dir | |
114 | $(Verb) $(X_COMPILER) -c $(CFLAGS) $(X_CFLAGS) -o $@ $< | |
115 | .PRECIOUS: temps/test.%.y.o | |
116 | temps/test.%.y.o: inputs/test.%.c temps/.dir | |
117 | $(Verb) $(Y_COMPILER) -c $(CFLAGS) $(Y_CFLAGS) -o $@ $< | |
118 | ||
119 | .PRECIOUS: temps/test.%.x.defs | |
120 | temps/test.%.x.defs: temps/test.%.a.x.ll temps/.dir | |
121 | -$(Verb) -grep '^define ' $< > $@ | |
122 | .PRECIOUS: temps/test.%.y.defs | |
123 | temps/test.%.y.defs: temps/test.%.a.y.ll temps/.dir | |
124 | -$(Verb) -grep '^define ' $< > $@ | |
125 | ||
126 | .PRECIOUS: temps/test.%.a.x.ll | |
127 | temps/test.%.a.x.ll: inputs/test.%.a.c temps/.dir | |
128 | $(Verb) $(X_COMPILER) $(CFLAGS) $(X_LL_CFLAGS) $(X_CFLAGS) -o $@ $< | |
129 | .PRECIOUS: temps/test.%.b.x.ll | |
130 | temps/test.%.b.x.ll: inputs/test.%.b.c temps/.dir | |
131 | $(Verb) $(X_COMPILER) $(CFLAGS) $(X_LL_CFLAGS) $(X_CFLAGS) -o $@ $< | |
132 | .PRECIOUS: temps/test.%.a.y.ll | |
133 | temps/test.%.a.y.ll: inputs/test.%.a.c temps/.dir | |
134 | $(Verb) $(Y_COMPILER) $(CFLAGS) $(Y_LL_CFLAGS) $(Y_CFLAGS) -o $@ $< | |
135 | .PRECIOUS: temps/test.%.b.y.ll | |
136 | temps/test.%.b.y.ll: inputs/test.%.b.c temps/.dir | |
137 | $(Verb) $(Y_COMPILER) $(CFLAGS) $(Y_LL_CFLAGS) $(Y_CFLAGS) -o $@ $< | |
138 | ||
139 | # Input generation | |
140 | ||
141 | .PHONY: test.%.top | |
142 | test.%.top: inputs/test.%.a.c inputs/test.%.b.c inputs/test.%.driver.c | |
143 | @true | |
144 | ||
145 | .PRECIOUS: inputs/test.%.a.c inputs/test.%.b.c inputs/test.%.driver.c | |
146 | inputs/test.%.a.c: test.%.generate | |
147 | @true | |
148 | inputs/test.%.b.c: test.%.generate | |
149 | @true | |
150 | inputs/test.%.driver.c: test.%.generate | |
151 | @true | |
152 | ||
153 | .PHONY: test.%.generate | |
154 | .PRECIOUS: inputs/.dir | |
155 | test.%.generate: $(ABITESTGEN) inputs/.dir | |
156 | $(Verb) $(ABITESTGEN) $(TESTARGS) -o inputs/test.$*.a.c -T inputs/test.$*.b.c -D inputs/test.$*.driver.c --min=$(shell expr $* '*' $(COUNT)) --count=$(COUNT) | |
157 | ||
158 | # Cleaning | |
159 | ||
160 | clean-temps: | |
161 | $(Verb) rm -rf temps | |
162 | ||
163 | clean: | |
164 | $(Verb) rm -rf temps inputs | |
165 | ||
166 | # Etc. | |
167 | ||
168 | %/.dir: | |
169 | $(Verb) mkdir -p $* > /dev/null | |
170 | $(Verb) $(DATE) > $@ |