blob: 76b91ca81a4b5fa0adecc4bf6758b8387dc2a4f3 [file] [log] [blame]
##===- 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