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) > $@ 171