ARCH ?= bochs
BUILD_DIR := build-${ARCH}
EXPERIMENTS := $(patsubst %.c,%,$(shell echo *.c))

include arch/${ARCH}.mk

$(foreach element,$(EXPERIMENTS),$(eval $(call arch-make-targets,$(element))))

all: help

help:
	@echo "Small Playground for FAIL* Injections"
	@echo "-------------------------------------"
	@echo "Current Configuartion"
	@echo "	ARCH=${ARCH}"

clean:
	# rm -f *.wasm
	# rm -f *.aot
	# rm -f *_wasm.c
	# rm -f *.d
	# rm -f *.o
	# rm -f embed/*_host.c
	# rm -f *_host.elf
	rm -rf ${BUILD_DIR}/*

clean-%:
	rm -rf ${BUILD_DIR}/$(patsubst clean-%,%,$@)
	contrib/clean-db '${ARCH}/$(patsubst clean-%,%,$@)'

build-%:
	@echo "****************************************************************\n\
	* The next step is to trace a golden run. The golden run executes the\n \
	* system-under-test (SUT) within the emulator. A trace file is \n \
	* produced and saved as: ${BUILD_DIR}/main/trace.pb\n \
	*\n \
	*    $ make trace-$(patsubst build-%,%,$@)\n \
	****************************************************************"

trace-%:
	@echo "****************************************************************\n\
	* The trace is now generated. It can be viewed with\n \
	*\n \
	*   $ make dump-$(patsubst trace-%,%,$@)\n \
	*\n \
	* Next, we have to import the trace into the database\n \
	*\n \
	*    $ make import-$(patsubst trace-%,%,$@)\n \
	****************************************************************"

dump-%: ${BUILD_DIR}/%/trace.pb
	${FAIL_DUMP} $(shell dirname $<)/trace.pb

${HOME}/.my.cnf:
	@echo "[client]" > $@
	@echo "user=fail" >> $@
	@echo "database=fail" >> $@
	@echo "password=fail" >> $@
	@echo "host=db" >> $@
	@echo "port=3306" >> $@

import-%: import-arch-%
	@echo "****************************************************************\n\
	* The golden run sits now within the MySQL database. If you are interested,\n \
	* use the 'mysql' command to inspect the curent state of the DB. The tables\n \
	* trace, fsppilot, and fspgroup are of special interest.\n \
	*\n \
	* Next, we have to run the campaign sever and the injection client\n \
	*\n \
	*   $ make server-$(patsubst import-%,%,$@) &\n \
	*   $ make client-$(patsubst import-%,%,$@) \n\n \
	* Afterwards, the results can be viewd with\n \
	*   $ make result-$(subst import-,,$@)\n \
	****************************************************************"

result-%:
	@echo "select variant, benchmark, resulttype, sum(t.time2 - t.time1 + 1) as faults\
			FROM variant v \
			JOIN trace t ON v.id = t.variant_id \
			JOIN fspgroup g ON g.variant_id = t.variant_id AND g.instr2 = t.instr2 AND g.data_address = t.data_address \
			JOIN result_GenericExperimentMessage r ON r.pilot_id = g.pilot_id \
			JOIN fsppilot p ON r.pilot_id = p.id \
			WHERE v.variant = \"${ARCH}/$(patsubst result-%,%,$@)\" \
			GROUP BY v.id, resulttype \
			ORDER BY variant, benchmark, resulttype;"  |mysql -t

resultbrowser:
	${RESULT_BROWSER} --host=0.0.0.0 --port=5000

# Do never remove implicitly generated stuff
.SECONDARY:
