##===- safecode/test/Makefile ------------------------------*- Makefile -*-===## # # Define the default test rule, which allows people to just type 'make test' in # this directory. # ##===----------------------------------------------------------------------===## # The default target in this directory is the test:: target test:: LEVEL = .. include $(LEVEL)/Makefile.common ifndef NO_STABLE_NUMBERS STABLERUN := GET_STABLE_NUMBERS=1 else STABLERUN := endif ifndef NO_LARGE_SIZE LARGESIZE := LARGE_PROBLEM_SIZE=1 else LARGESIZE := endif ifdef ENABLE_OPTIMIZED OPTIMIZED := ENABLE_OPTIMIZED=1 else OPTIMIZED := endif RUNTIMELIMIT=3600 PROFILING_DAT_DIR := $(shell pwd)/data PROFILING_RESULT_DIR := $(shell pwd)/data/profiling LARGE_PROBLEM_SIZE_DIRS := LARGE_PROBLEM_SIZE_DIRS := \ $(addprefix $(TEST_OBJDIR)/,$(LARGE_PROBLEM_SIZE_DIRS)) #DEBUG_SAFECODE := DEBUG_SAFECODE=1 NORMAL_PROBLEM_SIZE_DIRS := \ MultiSource/Benchmarks/Olden \ External/SPEC/CINT2000 \ External/SPEC/CINT2006 \ #MultiSource/Benchmarks/Olden/bisort \ #External/SPEC/CINT2000/197.parser \ #External/SPEC/CINT2000/164.gzip \ #External/SPEC/CINT2000/256.bzip2 \ #External/Povray \ #MultiSource/Benchmarks/Olden/tsp \ #SingleSource/Benchmarks \ #MultiSource/Benchmarks/Olden/bh \ #MultiSource/Benchmarks/Olden/em3d \ #External/SPEC/CINT2000/181.mcf \ #External/SPEC/CINT2000/254.gap \ #External/SPEC/CINT2000/300.twolf \ #External/SPEC/CINT2000/175.vpr \ #External/SPEC/CINT2000/186.crafty \ #MultiSource/Benchmarks/Olden/mst \ #External/SPEC/CINT2000/197.parser \ #MultiSource/Benchmarks/Olden/power \ #External/SPEC/CINT2000/253.perlbmk \ #External/SPEC/CINT2000/252.eon \ #External/SPEC/CINT2000/186.crafty \ #External/SPEC/CINT2000/181.mcf \ #External/SPEC/CINT2000/164.gzip \ #External/SPEC/CINT2000/255.vortex \ #External/SPEC/CINT2000/175.vpr \ #External/SPEC/CINT2000/186.crafty \ #External/SPEC/CINT2000/254.gap \ ## WORKING: \ # \ #External/SPEC/CINT2000/164.gzip \ #External/SPEC/CINT2000/197.parser \ ## FULL LIST: \ # \ #MultiSource/Benchmarks/Olden \ #External/SPEC/CINT2000 \ #External/SPEC/CINT2000/181.mcf \ #MultiSource/Benchmarks/Olden/voronoi \ #External/SPEC/CINT2000/176.gcc \ #External/Namd \ #External/SPEC/CINT2000/175.vpr \ #External/SPEC/CINT2000 \ #External/SPEC/CINT2000/252.eon \ #MultiSource/Applications/Burg \ #MultiSource/Benchmarks/Olden/health \ #MultiSource/Benchmarks/Olden/perimeter \ #MultiSource/Benchmarks/Olden/treeadd \ # MultiSource/Benchmarks/Olden \ # MultiSource/Benchmarks/Olden/em3d \ # MultiSource/Benchmarks/Olden \ # MultiSource/Benchmarks/Ptrdist \ # SingleSource \ # External/SPEC/CINT2000/300.twolf \ # SingleSource \ # MultiSource \ # MultiSource/Benchmarks \ # External/SPEC/CINT2000 \ #External/SPEC/CFP2000/188.ammp \ #MultiSource/Applications/ghttpd \ #MultiSource/Benchmarks/Olden/bh \ #MultiSource/Benchmarks/Ptrdist \ #MultiSource/Applications \ #MultiSource/Benchmarks NORMAL_PROBLEM_SIZE_DIRS := \ $(addprefix $(TEST_OBJDIR)/,$(NORMAL_PROBLEM_SIZE_DIRS)) ############################################################################## # Target for preparing the test suite for a clean run ############################################################################## prepare: (cd $(TEST_OBJDIR); $(MAKE) clean) ############################################################################## # Targets for gathering statistics for programs for papers ############################################################################## # Program tests for Parallel Checking partest:: for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=par \ POOLALLOC_OBJDIR=$(POOLALLOC_OBJDIR) \ $(LARGESIZE) $(STABLERUN) $(OPTIMIZED) \ report.html report.csv; \ mkdir -p $(PROFILING_RESULT_DIR)/`basename $$dir`; \ mv $(PROFILING_DAT_DIR)/profiler.*.dat $(PROFILING_RESULT_DIR)/`basename $$dir` || true;) \ done @for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s -j1 TEST=par \ report) \ done # Program tests for Pool Allocation progtest:: for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) TEST=safecode \ POOLALLOC_OBJDIR=$(POOLALLOC_OBJDIR) \ RUNTIMELIMIT=$(RUNTIMELIMIT) \ LARGE_PROBLEM_SIZE=1 \ report.html report.csv) \ done for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) TEST=safecode \ POOLALLOC_OBJDIR=$(POOLALLOC_OBJDIR) \ RUNTIMELIMIT=$(RUNTIMELIMIT) \ $(LARGESIZE) $(STABLERUN) $(OPTIMIZED) \ report.html report.csv; \ mkdir -p $(PROFILING_RESULT_DIR)/`basename $$dir`; \ mv $(PROFILING_DAT_DIR)/profiler.*.dat $(PROFILING_RESULT_DIR)/`basename $$dir` || true;) \ done @for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s TEST=safecode \ LARGE_PROBLEM_SIZE=1 report) \ done @for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s TEST=safecode \ report) \ done @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" # Program tests for SAFECode debug tool progdebug:: for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ USE_LTO=$(USE_LTO) \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) TEST=debug \ POOLALLOC_OBJDIR=$(POOLALLOC_OBJDIR) \ RUNTIMELIMIT=$(RUNTIMELIMIT) \ LARGE_PROBLEM_SIZE=1 \ report.html report.csv) \ done for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ USE_LTO=$(USE_LTO) \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) TEST=debug \ POOLALLOC_OBJDIR=$(POOLALLOC_OBJDIR) \ RUNTIMELIMIT=$(RUNTIMELIMIT) $(DEBUG_SAFECODE) \ $(LARGESIZE) $(STABLERUN) $(OPTIMIZED) \ report.html report.csv; \ ) \ done @for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s TEST=debug \ LARGE_PROBLEM_SIZE=1 report) \ done @for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s TEST=debug \ report) \ done @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" progbb:: for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) TEST=bb \ POOLALLOC_OBJDIR=$(POOLALLOC_OBJDIR) \ RUNTIMELIMIT=$(RUNTIMELIMIT) \ LARGE_PROBLEM_SIZE=1 \ report.html report.csv) \ done for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) TEST=bb \ POOLALLOC_OBJDIR=$(POOLALLOC_OBJDIR) \ RUNTIMELIMIT=$(RUNTIMELIMIT) $(DEBUG_SAFECODE) \ $(LARGESIZE) $(STABLERUN) $(OPTIMIZED) \ report.html report.csv; \ ) \ done @for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s TEST=bb \ LARGE_PROBLEM_SIZE=1 report) \ done @for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s TEST=bb \ report) \ done @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" # Program tests for measuring all the different SAFECode overhead progfull:: for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) TEST=full \ POOLALLOC_OBJDIR=$(POOLALLOC_OBJDIR) \ RUNTIMELIMIT=$(RUNTIMELIMIT) \ LARGE_PROBLEM_SIZE=1 \ report.html report.csv) \ done for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) TEST=full \ POOLALLOC_OBJDIR=$(POOLALLOC_OBJDIR) \ RUNTIMELIMIT=$(RUNTIMELIMIT) \ $(LARGESIZE) $(STABLERUN) $(OPTIMIZED) \ report.html report.csv;) \ done @for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s TEST=full \ LARGE_PROBLEM_SIZE=1 report) \ done @for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s TEST=full \ report) \ done @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" progabc:: for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) TEST=abc \ POOLALLOC_OBJDIR=$(POOLALLOC_OBJDIR) LARGE_PROBLEM_SIZE=1 report.html) \ done for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) TEST=abc \ report.html) \ done @for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s TEST=abc \ LARGE_PROBLEM_SIZE=1 report) \ done @for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s TEST=abc \ report) \ done @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" # Run tests comparing SAFECode and Valgrind progvg:: for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) TEST=valgrind \ POOLALLOC_OBJDIR=$(POOLALLOC_OBJDIR) \ RUNTIMELIMIT=$(RUNTIMELIMIT) \ LARGE_PROBLEM_SIZE=1\ report.html report.csv) \ done for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) TEST=valgrind \ RUNTIMELIMIT=$(RUNTIMELIMIT) \ report.html report.csv) \ done @for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s TEST=valgrind \ LARGE_PROBLEM_SIZE=1 report) \ done @for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s TEST=valgrind \ report) \ done @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" progperf:: for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=perf \ LARGE_PROBLEM_SIZE=1 report.html report.csv) \ done for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=perf \ report.html report.csv) \ done @for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s -j1 TEST=perf \ LARGE_PROBLEM_SIZE=1 report report.csv) \ done @for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s -j1 TEST=perf \ report report.csv) \ done @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" progp4perf:: for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=p4perf \ LARGE_PROBLEM_SIZE=1 report.html report.csv) \ done for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=p4perf \ report.html report.csv) \ done @for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s -j1 TEST=p4perf \ LARGE_PROBLEM_SIZE=1 report report.csv) \ done @for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s -j1 TEST=p4perf \ report report.csv) \ done @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" progcputrack:: for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=cputrack \ LARGE_PROBLEM_SIZE=1 report.html report.csv) \ done for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=cputrack \ report.html report.csv) \ done @for dir in $(LARGE_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s -j1 TEST=cputrack \ LARGE_PROBLEM_SIZE=1 report report.csv) \ done @for dir in $(NORMAL_PROBLEM_SIZE_DIRS); do \ (cd $$dir; \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -s -j1 TEST=cputrack \ report report.csv) \ done @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" ############################################################################## # Targets for running tests and gathering statistics for arbitrary tests ############################################################################## # test target - Descend into projects/test-suite and run the TEST.safecode.Makefile # tests... test:: (cd $(TEST_OBJDIR)/$(SUBDIR); \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=safecode \ $(LARGESIZE) $(STABLERUN) report report.html) @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" pacompiletime:: (cd $(TEST_OBJDIR)/$(SUBDIR); \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=pacompiletime \ report report.html) @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" ptrcomp:: (cd $(TEST_OBJDIR)/$(SUBDIR); \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=ptrcomp \ $(LARGESIZE) $(STABLERUN) report report.html) @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" ptrcomptest:: (cd $(TEST_OBJDIR)/$(SUBDIR); \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=ptrcomp \ $(LARGESIZE) report) @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" vtl:: (cd $(TEST_OBJDIR)/$(SUBDIR); \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=pavtl \ test report report.csv) @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" perf:: (cd $(TEST_OBJDIR)/$(SUBDIR); \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=perf \ test report report.csv) @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" optzn:: (cd $(TEST_OBJDIR)/$(SUBDIR); \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=optzn \ $(LARGESIZE) $(STABLERUN) test report report.csv) @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" p4perf:: (cd $(TEST_OBJDIR)/$(SUBDIR); \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=p4perf \ test report report.csv) @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" strace:: (cd $(TEST_OBJDIR)/$(SUBDIR); \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=strace \ test) @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" cputrack:: (cd $(TEST_OBJDIR)/$(SUBDIR); \ PROJECT_DIR=$(PROJ_OBJ_ROOT) $(MAKE) -j1 TEST=cputrack \ report report.csv) @printf "\a"; sleep 1; printf "\a"; sleep 1; printf "\a" ##===----------------------------------------------------------------------===## # Lit tests ##===----------------------------------------------------------------------===## .PHONY: lit litclean lit-core lit-cstdlib lit-formatstrings clean \ lit-bodiagsuite # Path to SAFECode libraries SC_LIB := $(PROJ_OBJ_ROOT)/$(BuildMode)/lib SC_BIN := $(PROJ_OBJ_ROOT)/$(BuildMode)/bin/clang SETENV = TARGET_TRIPLE=$(TARGET_TRIPLE) \ PYTHON=$(PYTHON) \ PATH=$(PROJ_OBJ_ROOT)/test/tools:$(PATH) \ SC_OBJ_ROOT=$(PROJ_OBJ_ROOT) # Path to test files CORESRC=$(PROJ_SRC_ROOT)/test/core CSTDLIB=$(PROJ_SRC_ROOT)/test/cstdlib FMTSTR=$(PROJ_SRC_ROOT)/test/formatstrings REGRSN=$(PROJ_SRC_ROOT)/test/regression BODIAGSRC=$(PROJ_SRC_ROOT)/test/BOdiagsuite-20050808/testcases COREOBJ=$(PROJ_OBJ_ROOT)/test/cstdlib CSTDLIBOBJ=$(PROJ_OBJ_ROOT)/test/cstdlib FMTSTROBJ=$(PROJ_OBJ_ROOT)/test/formatstrings REGRSNOBJ=$(PROJ_OBJ_ROOT)/test/regression BODIAGOBJ=$(PROJ_OBJ_ROOT)/test/bodiagsuite TESTSCRIPT=$(PROJ_OBJ_ROOT)/test/tools/test.sh # ulimit settings ULIMIT="ulimit -t 30 ; ulimit -d 512000 ; ulimit -m 512000 ; ulimit -v 1500000 ;" # Run all lit tests lit: lit-core lit-formatstrings lit-cstdlib lit-regression lit-bodiagsuite # Run the lit tests for core SAFECode lit-core: $(TESTSCRIPT) @mkdir -p $(COREOBJ) $(Verb) $(SETENV) $(MAKE) -C $(LLVM_OBJ_ROOT)/test check-local-lit TESTSUITE=$(CORESRC) LIT_ARGS=-j1 ULIMIT=$(ULIMIT) # Run the lit tests for cstdlib lit-cstdlib: $(TESTSCRIPT) @mkdir -p $(CSTDLIBOBJ) $(Verb) $(SETENV) $(MAKE) -C $(LLVM_OBJ_ROOT)/test check-local-lit TESTSUITE=$(CSTDLIB) LIT_ARGS=-j1 ULIMIT=$(ULIMIT) # Run the lit tests for format string functions lit-formatstrings: $(TESTSCRIPT) @mkdir -p $(FMTSTROBJ) $(Verb) $(SETENV) $(MAKE) -C $(LLVM_OBJ_ROOT)/test check-local-lit TESTSUITE=$(FMTSTR) LIT_ARGS=-j1 ULIMIT=$(ULIMIT) # Run regression tests lit-regression: $(TESTSCRIPT) @mkdir -p $(REGRSNOBJ) $(Verb) $(SETENV) \ PATH=$(PROJ_OBJ_ROOT)/$(BuildMode)/bin:$(LLVMToolDir):$(PATH) \ $(MAKE) -C $(LLVM_OBJ_ROOT)/test check-local-lit TESTSUITE=$(REGRSN) ULIMIT=$(ULIMIT) # All names of the files in the BOdiagsuite BODIAG_FILE_NAMES := $(notdir $(wildcard $(BODIAGSRC)/*.c)) # List of XFAIL'd tests; handled separately BODIAG_XFAILS := $(shell awk '!/^\#/ { print $$1 }' $(BODIAGSRC)/../xfails) # The names of the files without errors in them BODIAG_CORRECT_NAMES := \ $(filter-out $(BODIAG_XFAILS),$(notdir $(wildcard $(BODIAGSRC)/*ok.c))) # The names of the files with errors in them BODIAG_BAD_NAMES := \ $(filter-out $(BODIAG_XFAILS) $(BODIAG_CORRECT_NAMES),$(BODIAG_FILE_NAMES)) # The paths to the test files annotated with lit run lines. BODIAG_ANNOTATED := $(addprefix $(BODIAGOBJ)/,$(BODIAG_FILE_NAMES)) $(BODIAG_XFAILS:%=$(BODIAGOBJ)/%): $(BODIAGOBJ)/%: $(BODIAGSRC)/% @mkdir -p $(BODIAGOBJ) @printf > $@ '/*\n * RUN: test.sh -%s -t %%t %%s\n * XFAIL: %s\n */\n' \ `if [[ $@ == *ok.c ]]; then printf p; else printf e; fi` \ "`awk '!/^#/' $(BODIAGSRC)/../xfails | grep -F "$(notdir $<)" | cut -f2- -d' '`" @cat $< >> $@ $(BODIAG_CORRECT_NAMES:%=$(BODIAGOBJ)/%): $(BODIAGOBJ)/%: $(BODIAGSRC)/% @mkdir -p $(BODIAGOBJ) @printf '/*\n * RUN: test.sh -p -t %%t %%s\n */\n' > $@ @cat $< >> $@ $(BODIAG_BAD_NAMES:%=$(BODIAGOBJ)/%): $(BODIAGOBJ)/%: $(BODIAGSRC)/% @mkdir -p $(BODIAGOBJ) @printf '/*\n * RUN: test.sh -e -t %%t %%s\n */\n' > $@ @cat $< >> $@ # Build the script to run the lit tests $(TESTSCRIPT): $(PROJ_SRC_ROOT)/test/tools/test.sh.in @echo Creating test script... @mkdir -p `dirname $@` @sed -e 's#@SC@#$(SC_BIN)#g' \ -e 's#@SC_LIB@#$(SC_LIB)#g' < $< > $@ chmod +x $@ # Run the BOdiagsuite lit-bodiagsuite: $(TESTSCRIPT) $(BODIAG_ANNOTATED) @cp $(BODIAGSRC)/TestInputFile1 $(BODIAGOBJ) $(Verb) $(SETENV) $(MAKE) -C $(LLVM_OBJ_ROOT)/test check-local-lit \ TESTSUITE=$(BODIAGSRC)/.. LIT_ARGS=-j2 ULIMIT=$(ULIMIT) clean:: litclean # Clean all files generated by the lit tests litclean: -rm -f $(PROJ_OBJ_ROOT)/test/tools/test.sh -rm -rf $(PROJ_OBJ_ROOT)/test/core/Output -rm -rf $(PROJ_OBJ_ROOT)/test/cstdlib/Output -rm -rf $(PROJ_OBJ_ROOT)/test/formatstrings/Output -rm -rf $(PROJ_OBJ_ROOT)/test/regression/Output -rm -rf $(BODIAGOBJ)/Output