##===- safecode/test/TEST.abc.Makefile ---------------------*- Makefile -*-===##
#
# This test runs SAFECode on all of the Programs, producing some
# performance numbers and statistics.
#
##===----------------------------------------------------------------------===##

include $(PROJ_OBJ_ROOT)/Makefile.common

CFLAGS = -O3 -fno-strict-aliasing
ABCFLAGS = -include /home/vadve/criswell/Downloads/SAFECode/lib/poolcheck.c -I/home/vadve/criswell/Downloads/SAFECode/include

CURDIR  := $(shell cd .; pwd)
PROGDIR := $(shell cd $(LLVM_SRC_ROOT)/projects/llvm-test; pwd)/
RELDIR  := $(subst $(PROGDIR),,$(CURDIR))
GCCLD   =  $(LLVM_OBJ_ROOT)/$(CONFIGURATION)/bin/gccld

# Pool allocator pass shared object
PA_SO    := /home/vadve/criswell/Downloads/SAFECode/bin/boundschecker

# Pool allocator runtime library
#PA_RT    := $(PROJECT_DIR)/lib/Bytecode/libpoolalloc_fl_rt.bc
#PA_RT_O  := $(PROJECT_DIR)/$(CONFIGURATION)/lib/libpoolalloc_splay_rt.bca
#PA_RT_O  := $(PROJECT_DIR)/$(CONFIGURATION)/lib/poolalloc_splay_rt.o
#PA_RT_O  := $(PROJECT_DIR)/$(CONFIGURATION)/lib/poolalloc_safe_rt.o
#PA_RT_O  := $(PROJECT_DIR)/Release/lib/poolalloc_rt.o
#PA_RT_O  := $(PROJECT_DIR)/lib/Release/poolalloc_fl_rt.o
PA_RT_O  := /home/vadve/criswell/Downloads/SAFECode/lib/libpoolalloc_splay_rt.a

# Command to run opt with the pool allocator pass loaded
OPT_SC := /home/vadve/criswell/Downloads/SAFECode/bin/boundschecker \
          -poolalloc-disable-alignopt \
          -poolalloc-usetd-resolve  \
          -budatastructures-update-from-globals \
          -poolalloc-force-simple-pool-init \
          -poolalloc-force-all-poolfrees \
          -poolalloc-add-pooldescs-globalstack-arrays \
          -poolalloc-add-pooldescs-collapsed \
          -poolalloc-heuristic=AllNodes \
          -poolalloc-keep-DSA-results

#OPT_SC := /home/vadve/criswell/Downloads/SAFECode/bin/boundschecker \
          #-poolalloc-force-simple-pool-init \
          #-poolalloc-force-all-poolfrees \
          #-poolalloc-add-pooldescs-globalstack-arrays \
          #-poolalloc-heuristic=AllNodes \
          #-poolalloc-keep-DSA-results

# OPT_SC_STATS - Run opt with the -stats and -time-passes options, capturing the
# output to a file.
OPT_SC_STATS = $(OPT_SC) -info-output-file=$(CURDIR)/$@.info -stats -time-passes

#OPTZN_PASSES := -globaldce -ipsccp -deadargelim -adce -instcombine -simplifycfg
OPTZN_PASSES :=


#
# This rule runs SAFECode on the .llvm.bc file to produce a new .bc
# file
#
$(PROGRAMS_TO_TEST:%=Output/%.$(TEST).bc): \
Output/%.$(TEST).bc: Output/%.llvm.bc $(PA_SO) $(LOPT)
	-@rm -f $(CURDIR)/$@.info
	-$(OPT_SC_STATS) $(OPTZN_PASSES) $< -o $@ -f 2>&1 > $@.out

$(PROGRAMS_TO_TEST:%=Output/%.nonsc.bc): \
Output/%.nonsc.bc: Output/%.llvm.bc $(LOPT)
	-@rm -f $(CURDIR)/$@.info
	-$(LOPT) $(OPTZN_PASSES) $< -o $@ -f 2>&1 > $@.out

#
# These rules compile the new .bc file into a .c file using CBE
#
$(PROGRAMS_TO_TEST:%=Output/%.abc.cbe.c): \
Output/%.abc.cbe.c: Output/%.$(TEST).bc $(LLC)
	-$(LLC) -march=c -f $< -o $@

$(PROGRAMS_TO_TEST:%=Output/%.nonsc.cbe.c): \
Output/%.nonsc.cbe.c: Output/%.nonsc.bc $(LLC)
	-$(LLC) -march=c -f $< -o $@

#
# These rules compile the CBE .c file into a final executable
#
$(PROGRAMS_TO_TEST:%=Output/%.abc.cbe): \
Output/%.abc.cbe: Output/%.abc.cbe.c $(PA_RT_O)
	-$(CC) $(CFLAGS) $(ABCFLAGS) $< $(LLCLIBS) $(LDFLAGS) $(PA_RT_O) -o $@

$(PROGRAMS_TO_TEST:%=Output/%.nonsc.cbe): \
Output/%.nonsc.cbe: Output/%.nonsc.cbe.c $(PA_RT_O)
	-$(CC) $(CFLAGS) $< $(LLCLIBS) $(LDFLAGS) -o $@



ifndef PROGRAMS_HAVE_CUSTOM_RUN_RULES

#
# This rule runs the generated executable, generating timing information, for
# normal test programs
#
$(PROGRAMS_TO_TEST:%=Output/%.abc.out-cbe): \
Output/%.abc.out-cbe: Output/%.abc.cbe
	-$(RUNSAFELY) $(STDIN_FILENAME) $@ $< $(RUN_OPTIONS)

$(PROGRAMS_TO_TEST:%=Output/%.nonsc.out-cbe): \
Output/%.nonsc.out-cbe: Output/%.nonsc.cbe
	-$(RUNSAFELY) $(STDIN_FILENAME) $@ $< $(RUN_OPTIONS)

else

#
# This rule runs the generated executable, generating timing information, for
# SPEC
#
$(PROGRAMS_TO_TEST:%=Output/%.abc.out-cbe): \
Output/%.abc.out-cbe: Output/%.abc.cbe
	-$(SPEC_SANDBOX) abccbe-$(RUN_TYPE) $@ $(REF_IN_DIR) \
             $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \
                  ../../$< $(RUN_OPTIONS)
	-(cd Output/abccbe-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@
	-cp Output/abccbe-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time

$(PROGRAMS_TO_TEST:%=Output/%.nonsc.out-cbe): \
Output/%.nonsc.out-cbe: Output/%.nonsc.cbe
	-$(SPEC_SANDBOX) nonsccbe-$(RUN_TYPE) $@ $(REF_IN_DIR) \
             $(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \
                  ../../$< $(RUN_OPTIONS)
	-(cd Output/nonsccbe-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@
	-cp Output/nonsccbe-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time

endif


# This rule diffs the post-poolallocated version to make sure we didn't break
# the program!
$(PROGRAMS_TO_TEST:%=Output/%.abc.diff-cbe): \
Output/%.abc.diff-cbe: Output/%.out-nat Output/%.abc.out-cbe
	@cp Output/$*.out-nat Output/$*.abc.out-nat
	-$(DIFFPROG) cbe $*.abc $(HIDEDIFF)

$(PROGRAMS_TO_TEST:%=Output/%.nonsc.diff-cbe): \
Output/%.nonsc.diff-cbe: Output/%.out-nat Output/%.nonsc.out-cbe
	@cp Output/$*.out-nat Output/$*.nonsc.out-nat
	-$(DIFFPROG) cbe $*.nonsc $(HIDEDIFF)


# This rule wraps everything together to build the actual output the report is
# generated from.
$(PROGRAMS_TO_TEST:%=Output/%.$(TEST).report.txt): \
Output/%.$(TEST).report.txt: Output/%.out-nat                \
                             Output/%.nonsc.diff-cbe         \
                             Output/%.abc.diff-cbe     \
                             Output/%.LOC.txt
	@echo > $@
	@-if test -f Output/$*.nonsc.diff-cbe; then \
	  printf "GCC-RUN-TIME: " >> $@;\
	  grep "^program" Output/$*.out-nat.time >> $@;\
        fi
	@-if test -f Output/$*.nonsc.diff-cbe; then \
	  printf "CBE-RUN-TIME-NORMAL: " >> $@;\
	  grep "^program" Output/$*.nonsc.out-cbe.time >> $@;\
        fi
	@-if test -f Output/$*.abc.diff-cbe; then \
	  printf "CBE-RUN-TIME-SAFECODE: " >> $@;\
	  grep "^program" Output/$*.abc.out-cbe.time >> $@;\
	fi
	printf "LOC: " >> $@
	cat Output/$*.LOC.txt >> $@
	@cat Output/$*.$(TEST).bc.info >> $@

$(PROGRAMS_TO_TEST:%=test.$(TEST).%): \
test.$(TEST).%: Output/%.$(TEST).report.txt
	@echo "---------------------------------------------------------------"
	@echo ">>> ========= '$(RELDIR)/$*' Program"
	@echo "---------------------------------------------------------------"
	@cat $<

REPORT_DEPENDENCIES := $(PA_RT_O) $(PA_SO) $(PROGRAMS_TO_TEST:%=Output/%.llvm.bc) $(LLC) $(LOPT)
