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