Daniel Dunbar | 6d52ca0 | 2009-05-08 00:49:21 +0000 | [diff] [blame] | 1 | # -*- Makefile -*- |
| 2 | |
Daniel Dunbar | b80ce01 | 2009-05-08 22:49:52 +0000 | [diff] [blame] | 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 | ### |
Daniel Dunbar | 238a318 | 2009-05-08 20:10:52 +0000 | [diff] [blame] | 23 | |
Daniel Dunbar | 6d52ca0 | 2009-05-08 00:49:21 +0000 | [diff] [blame] | 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; \ |
Eli Friedman | d9d38c4 | 2009-05-25 22:07:09 +0000 | [diff] [blame] | 39 | if [ $$ok -eq 1 ]; then \ |
Daniel Dunbar | 6d52ca0 | 2009-05-08 00:49:21 +0000 | [diff] [blame] | 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) > $@ |