| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- # -*- Makefile -*-
- # Usage: make test.N.report
- #
- # COUNT can be over-ridden to change the number of tests generated per
- # file, and TESTARGS is used to change the type generation. Make sure
- # to 'make clean' after changing either of these parameters.
- TESTARGS := --no-unsigned --no-vector --no-complex --no-bool
- COUNT := 1
- TIMEOUT := 5
- CFLAGS := -std=gnu99
- X_COMPILER := gcc
- X_LL_CFLAGS := -emit-llvm -S
- Y_COMPILER := clang
- Y_LL_CFLAGS := -emit-llvm -S
- CC := gcc
- ###
- ABITESTGEN := ../ABITestGen.py
- ifndef VERBOSE
- Verb := @
- endif
- .PHONY: test.%.report
- test.%.report: temps/test.%.xx.diff temps/test.%.xy.diff temps/test.%.yx.diff temps/test.%.yy.diff
- @ok=1;\
- for t in $^; do \
- if [ -s $$t ]; then \
- echo "TEST $*: $$t failed"; \
- ok=0;\
- fi; \
- done; \
- if [ $$ok -eq 1 ]; then \
- true; \
- else \
- false; \
- fi
- .PHONY: test.%.defs-report
- test.%.defs-report: temps/test.%.defs.diff
- @for t in $^; do \
- if [ -s $$t ]; then \
- echo "TEST $*: $$t failed"; \
- cat $$t; \
- fi; \
- done
- .PHONY: test.%.build
- 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
- @true
- ###
- # Diffs and output
- .PRECIOUS: temps/.dir
- .PRECIOUS: temps/test.%.xx.diff
- temps/test.%.xx.diff: temps/test.%.ref.out temps/test.%.xx.out
- $(Verb) diff $^ > $@ || true
- .PRECIOUS: temps/test.%.xy.diff
- temps/test.%.xy.diff: temps/test.%.ref.out temps/test.%.xy.out
- $(Verb) diff $^ > $@ || true
- .PRECIOUS: temps/test.%.yx.diff
- temps/test.%.yx.diff: temps/test.%.ref.out temps/test.%.yx.out
- $(Verb) diff $^ > $@ || true
- .PRECIOUS: temps/test.%.yy.diff
- temps/test.%.yy.diff: temps/test.%.ref.out temps/test.%.yy.out
- $(Verb) diff $^ > $@ || true
- .PRECIOUS: temps/test.%.defs.diff
- temps/test.%.defs.diff: temps/test.%.x.defs temps/test.%.y.defs
- $(Verb) zipdifflines \
- --replace "%struct.T[0-9]+" "%struct.s" \
- --replace "%union.T[0-9]+" "%struct.s" \
- --replace "byval align [0-9]+" "byval" \
- $^ > $@
- .PRECIOUS: temps/test.%.out
- temps/test.%.out: temps/test.%
- -$(Verb) ./$< > $@
- # Executables
- .PRECIOUS: temps/test.%.ref
- temps/test.%.ref: temps/test.%.driver.ref.o temps/test.%.a.ref.o temps/test.%.b.ref.o
- $(Verb) $(CC) $(CFLAGS) $(CC_CFLAGS) -O3 -o $@ $^
- .PRECIOUS: temps/test.%.xx
- temps/test.%.xx: temps/test.%.driver.ref.o temps/test.%.a.x.o temps/test.%.b.x.o
- $(Verb) $(CC) $(CFLAGS) $(CC_CFLAGS) -O3 -o $@ $^
- .PRECIOUS: temps/test.%.xy
- temps/test.%.xy: temps/test.%.driver.ref.o temps/test.%.a.x.o temps/test.%.b.y.o
- $(Verb) $(CC) $(CFLAGS) $(CC_CFLAGS) -O3 -o $@ $^
- .PRECIOUS: temps/test.%.yx
- temps/test.%.yx: temps/test.%.driver.ref.o temps/test.%.a.y.o temps/test.%.b.x.o
- $(Verb) $(CC) $(CFLAGS) $(CC_CFLAGS) -O3 -o $@ $^
- .PRECIOUS: temps/test.%.yy
- temps/test.%.yy: temps/test.%.driver.ref.o temps/test.%.a.y.o temps/test.%.b.y.o
- $(Verb) $(CC) $(CFLAGS) $(CC_CFLAGS) -O3 -o $@ $^
- # Object files
- .PRECIOUS: temps/test.%.ref.o
- temps/test.%.ref.o: inputs/test.%.c temps/.dir
- $(Verb) $(CC) -c $(CFLAGS) $(CC_CFLAGS) -o $@ $<
- .PRECIOUS: temps/test.%.x.o
- temps/test.%.x.o: inputs/test.%.c temps/.dir
- $(Verb) $(X_COMPILER) -c $(CFLAGS) $(X_CFLAGS) -o $@ $<
- .PRECIOUS: temps/test.%.y.o
- temps/test.%.y.o: inputs/test.%.c temps/.dir
- $(Verb) $(Y_COMPILER) -c $(CFLAGS) $(Y_CFLAGS) -o $@ $<
- .PRECIOUS: temps/test.%.x.defs
- temps/test.%.x.defs: temps/test.%.a.x.ll temps/.dir
- -$(Verb) -grep '^define ' $< > $@
- .PRECIOUS: temps/test.%.y.defs
- temps/test.%.y.defs: temps/test.%.a.y.ll temps/.dir
- -$(Verb) -grep '^define ' $< > $@
- .PRECIOUS: temps/test.%.a.x.ll
- temps/test.%.a.x.ll: inputs/test.%.a.c temps/.dir
- $(Verb) $(X_COMPILER) $(CFLAGS) $(X_LL_CFLAGS) $(X_CFLAGS) -o $@ $<
- .PRECIOUS: temps/test.%.b.x.ll
- temps/test.%.b.x.ll: inputs/test.%.b.c temps/.dir
- $(Verb) $(X_COMPILER) $(CFLAGS) $(X_LL_CFLAGS) $(X_CFLAGS) -o $@ $<
- .PRECIOUS: temps/test.%.a.y.ll
- temps/test.%.a.y.ll: inputs/test.%.a.c temps/.dir
- $(Verb) $(Y_COMPILER) $(CFLAGS) $(Y_LL_CFLAGS) $(Y_CFLAGS) -o $@ $<
- .PRECIOUS: temps/test.%.b.y.ll
- temps/test.%.b.y.ll: inputs/test.%.b.c temps/.dir
- $(Verb) $(Y_COMPILER) $(CFLAGS) $(Y_LL_CFLAGS) $(Y_CFLAGS) -o $@ $<
- # Input generation
- .PHONY: test.%.top
- test.%.top: inputs/test.%.a.c inputs/test.%.b.c inputs/test.%.driver.c
- @true
- .PRECIOUS: inputs/test.%.a.c inputs/test.%.b.c inputs/test.%.driver.c
- inputs/test.%.a.c: test.%.generate
- @true
- inputs/test.%.b.c: test.%.generate
- @true
- inputs/test.%.driver.c: test.%.generate
- @true
- .PHONY: test.%.generate
- .PRECIOUS: inputs/.dir
- test.%.generate: $(ABITESTGEN) inputs/.dir
- $(Verb) $(ABITESTGEN) $(TESTARGS) -o inputs/test.$*.a.c -T inputs/test.$*.b.c -D inputs/test.$*.driver.c --min=$(shell expr $* '*' $(COUNT)) --count=$(COUNT)
- # Cleaning
- clean-temps:
- $(Verb) rm -rf temps
- clean:
- $(Verb) rm -rf temps inputs
- # Etc.
- %/.dir:
- $(Verb) mkdir -p $* > /dev/null
- $(Verb) $(DATE) > $@
|