all: initialize programs singlescripts dualscripts clean runsingle rundual

include ${TIGRESS_HOME}/makefile.inc

UNAME_M := $(shell uname -m)
UNAME_S := $(shell uname -s)

ifeq ($(strip $(UNAME_S)),Linux)
   PARALLEL=/usr/bin/parallel
else
   PARALLEL=/opt/local/bin/parallel
endif

ifeq ($(strip $(UNAME_M)),x86_64)
   allowInlineAssembly=1
else
   allowInlineAssembly=0
endif

# Run whenever the jitter changes
copyheaders:
	-tigress --Environment=${ENV} --Transform=Ident --out=/tmp/x.c ${TIGRESS_HOME}/test1.c
	/bin/cp header.h ${TIGRESS_HOME}/makefile.inc ${TIGRESS_HOME}/apple.h ${TIGRESS_HOME}/jitter-*.c generated/programs

initialize: .FORCE
	/bin/rm -rf generated/programs
	/bin/mkdir -p generated/programs
	${MAKE} copyheaders

programs:
	cd c-patterns/arith; ./generate.sh
	cd c-patterns/literals; ./generate.sh
	cd c-patterns/assign; ./generate.sh
	cd c-patterns/cast; ./generate.sh
	cd c-patterns/control; ./generate.sh
	cd c-patterns/struct; ./generate.sh
	cd c-patterns/call; ./generate.sh
	cd c-patterns/misc; ./generate.sh
	cd c-patterns/programs; ./generate.sh

singlescripts: .FORCE
	/bin/rm -rf generated/patterns/single
	scripts/genSingleTransform.sh ${allowInlineAssembly} generated/patterns/single
	/bin/rm -rf generated/scripts/single
	scripts/genScript.sh ${allowInlineAssembly} generated/patterns/single generated/scripts/single

dualscripts: .FORCE
	/bin/rm -rf generated/patterns/dual
	scripts/genDualTransform.sh ${allowInlineAssembly} generated/patterns/dual
	/bin/rm -rf generated/scripts/dual
	scripts/genScript.sh ${allowInlineAssembly} generated/patterns/dual generated/scripts/dual

scripts: singlescripts dualscripts

runsingle:
	scripts/runScripts.sh generated/scripts/single results/single

rundual:
	scripts/runScripts.sh generated/scripts/dual results/dual

runone:
	scripts/runOneScript.sh generated/scripts/single/antiBranchAnalysis1_branchFuns_true.sh results/single

run: runsingle rundual

nohup:
	-/bin/rm nohup.out
	nohup make run &

#prun:
#	scripts/runScripts.sh ${PARALLEL}

rerunfails:
	scripts/rerunFails.sh

fails: .FORCE
	egrep -r '^FAILURE' results | sed 's/:FAILURE//g'

succeeds: .FORCE
	egrep -r '^SUCCESS' results

clean: .FORCE
	-/bin/rm -r results/*

count:
	ls -1 generated/programs/*/*.c | wc -l

simple-tests.zip: .FORCE
	-/bin/rm ../simple-tests.zip
	cd ..; zip -r simple-tests.zip simple/makefile simple/scripts simple/c-patterns simple/t-patterns simple/header.h -x \*~ -x exe 
	mv ../simple-tests.zip .

.FORCE:
