Home | History | Annotate | Download | only in ABITest
      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