test.mk 4.96 KB
Newer Older
1 2 3
# -----------------------------------------------------------------------------
# Examples of use:
#
dterei's avatar
dterei committed
4 5 6
#  make           -- run all the tests in the current directory
#  make verbose   -- as make test, but up the verbosity
#  make accept    -- run the tests, accepting the current output
7 8 9
#
# The following variables may be set on the make command line:
#
dterei's avatar
dterei committed
10 11 12 13 14 15 16
#  TEST      -- specific test to run
#  TESTS     -- specific tests to run (same as $TEST really)
#  EXTRA_HC_OPTS      -- extra flags to send to the Haskell compiler
#  EXTRA_RUNTEST_OPTS -- extra flags to give the test driver
#  CONFIG    -- use a different configuration file
#  COMPILER  -- select a configuration file from config/
#  THREADS   -- run n tests at once
17 18 19
#
# -----------------------------------------------------------------------------

20
# export the value of $MAKE for invocation in tests/driver/
dons's avatar
dons committed
21 22
export MAKE

23
RUNTESTS     = $(TOP)/driver/runtests.py
ross's avatar
ross committed
24
COMPILER     = ghc
25 26
CONFIGDIR    = $(TOP)/config
CONFIG       = $(CONFIGDIR)/$(COMPILER)
27

28 29
# TEST_HC_OPTS is passed to every invocation of TEST_HC 
# in nested Makefiles
30
TEST_HC_OPTS = -fforce-recomp -dcore-lint -dcmm-lint -dno-debug-output -no-user-package-conf -rtsopts $(EXTRA_HC_OPTS)
31

32 33 34 35
RUNTEST_OPTS =

ifeq "$(filter $(TargetOS_CPP), cygwin32 mingw32)" ""
exeext =
36
else
37
exeext = .exe
38
endif
39

40 41
RUNTEST_OPTS += -e ghc_compiler_always_flags="'$(TEST_HC_OPTS)'"

42
ifeq "$(GhcWithNativeCodeGen)" "YES"
43 44 45
RUNTEST_OPTS += -e ghc_with_native_codegen=1
else
RUNTEST_OPTS += -e ghc_with_native_codegen=0
46 47
endif

48
HASKELL98_LIBDIR := $(shell "$(GHC_PKG)" field haskell98 library-dirs | sed 's/^[^:]*: *//')
49
HAVE_PROFILING := $(shell if [ -f $(subst \,/,$(HASKELL98_LIBDIR))/libHShaskell98-*_p.a ]; then echo YES; else echo NO; fi)
50 51

ifeq "$(HAVE_PROFILING)" "YES"
52 53 54
RUNTEST_OPTS += -e ghc_with_profiling=1
else
RUNTEST_OPTS += -e ghc_with_profiling=0
55
endif
56

57 58 59 60 61 62
ifeq "$(filter thr, $(GhcRTSWays))" "thr"
RUNTEST_OPTS += -e ghc_with_threaded_rts=1
else
RUNTEST_OPTS += -e ghc_with_threaded_rts=0
endif

63 64 65 66 67 68
ifeq "$(filter dyn, $(GhcRTSWays))" "dyn"
RUNTEST_OPTS += -e ghc_with_dynamic_rts=1
else
RUNTEST_OPTS += -e ghc_with_dynamic_rts=0
endif

69 70 71
ifeq "$(GhcWithInterpreter)" "NO"
RUNTEST_OPTS += -e ghc_with_interpreter=0
else ifeq "$(GhcStage)" "1"
72
RUNTEST_OPTS += -e ghc_with_interpreter=0
73 74
else
RUNTEST_OPTS += -e ghc_with_interpreter=1
75 76
endif

77 78 79 80 81 82
ifeq "$(GhcUnregisterised)" "YES"
RUNTEST_OPTS += -e ghc_unregisterised=1
else
RUNTEST_OPTS += -e ghc_unregisterised=0
endif

83 84 85 86 87 88
ifeq "$(GhcWithSMP)" "YES"
RUNTEST_OPTS += -e ghc_with_smp=1
else
RUNTEST_OPTS += -e ghc_with_smp=0
endif

89 90 91 92
LLVM_VERSION = $(shell $(SHELL) -c "llvmc --version | grep version | sed 's/^.*version \([0-9]*\)\.\([0-9]*\).*$$/\1\.\2/'" 2> /dev/null)

ifneq "$(LLVM_VERSION)" ""
ifneq "$(LLVM_VERSION)" "2.7"
93 94 95 96
RUNTEST_OPTS += -e ghc_with_llvm=1
else
RUNTEST_OPTS += -e ghc_with_llvm=0
endif
97 98 99
else
RUNTEST_OPTS += -e ghc_with_llvm=0
endif
100

Ian Lynagh's avatar
Ian Lynagh committed
101 102 103 104 105 106
ifeq "$(WINDOWS)" "YES"
RUNTEST_OPTS += -e windows=True
else
RUNTEST_OPTS += -e windows=False
endif

Ian Lynagh's avatar
Ian Lynagh committed
107 108 109 110 111 112
ifeq "$(DARWIN)" "YES"
RUNTEST_OPTS += -e darwin=True
else
RUNTEST_OPTS += -e darwin=False
endif

113 114 115 116 117 118
ifeq "$(IN_TREE_COMPILER)" "YES"
RUNTEST_OPTS += -e in_tree_compiler=True
else
RUNTEST_OPTS += -e in_tree_compiler=False
endif

ei@vuokko.info's avatar
ei@vuokko.info committed
119
ifneq "$(THREADS)" ""
120
RUNTEST_OPTS += --threads=$(THREADS)
ei@vuokko.info's avatar
ei@vuokko.info committed
121 122
endif

123 124 125 126 127 128
ifneq "$(CLEAN_ONLY)" ""
RUNTEST_OPTS += -e clean_only=True
else
RUNTEST_OPTS += -e clean_only=False
endif

129 130 131 132
ifneq "$(CHECK_FILES_WRITTEN)" ""
RUNTEST_OPTS += --check-files-written
endif

133
RUNTEST_OPTS +=  \
134
	--rootdir=. \
135
	--config=$(CONFIG) \
Ian Lynagh's avatar
Ian Lynagh committed
136 137 138 139 140 141 142 143 144
	-e 'config.confdir="$(CONFIGDIR)"' \
	-e 'config.compiler="$(TEST_HC)"' \
	-e 'config.compiler_always_flags.append("$(EXTRA_HC_OPTS)")' \
	-e 'config.ghc_pkg="$(GHC_PKG)"' \
	-e 'config.hp2ps="$(HP2PS_ABS)"' \
	-e 'config.hpc="$(HPC)"' \
	-e 'config.gs="$(GS)"' \
	-e 'config.platform="$(TARGETPLATFORM)"' \
	-e 'config.os="$(TargetOS_CPP)"' \
145
	-e 'config.arch="$(TargetARCH_CPP)"' \
Ian Lynagh's avatar
Ian Lynagh committed
146 147
	-e 'config.wordsize="$(WORDSIZE)"' \
	-e 'default_testopts.cleanup="$(CLEANUP)"' \
Ian Lynagh's avatar
Ian Lynagh committed
148
	-e 'config.timeout=int($(TIMEOUT)) or config.timeout' \
Ian Lynagh's avatar
Ian Lynagh committed
149 150
	-e 'config.timeout_prog="$(TIMEOUT_PROGRAM)"' \
	-e 'config.exeext="$(exeext)"' \
151 152 153 154 155 156 157 158
	-e 'config.top="$(TOP_ABS)"'

ifneq "$(OUTPUT_SUMMARY)" ""
RUNTEST_OPTS +=  \
	--output-summary "$(OUTPUT_SUMMARY)"
endif

RUNTEST_OPTS +=  \
159 160
	$(EXTRA_RUNTEST_OPTS)

161 162 163 164 165 166 167 168 169 170 171 172
ifeq "$(fast)" "YES"
setfast = -e config.fast=1
else
setfast = 
endif

ifeq "$(accept)" "YES"
setaccept = -e config.accept=1
else
setaccept = 
endif

173
TESTS	     = 
174
TEST	     = 
175
WAY =
176

177 178 179 180
.PHONY: all boot test verbose accept fast

all: test

181
TIMEOUT_PROGRAM = $(TOP)/timeout/install-inplace/bin/timeout$(exeext)
182

183 184
boot: $(TIMEOUT_PROGRAM)

185
$(TIMEOUT_PROGRAM) :
186
	@echo "Looks like you don't have timeout, building it first..."
Ian Lynagh's avatar
Ian Lynagh committed
187
	$(MAKE) -C $(TOP)/timeout all
188

189
test: $(TIMEOUT_PROGRAM)
190
	$(PYTHON) $(RUNTESTS) $(RUNTEST_OPTS) \
191
		$(patsubst %, --only=%, $(TEST)) \
192
		$(patsubst %, --only=%, $(TESTS)) \
193
		$(patsubst %, --way=%, $(WAY)) \
194
		$(patsubst %, --skipway=%, $(SKIPWAY)) \
195
		$(setfast) \
196
		$(setaccept)
197

198
verbose: test
199 200

accept:
201 202 203
	$(MAKE) accept=YES

fast:
204
	$(MAKE) fast=YES
205