# -*- 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) > $@
