test.mk 4.42 KB
Newer Older
1 2 3 4 5 6 7 8 9
# -----------------------------------------------------------------------------
# Examples of use:
#
# 	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
#
# The following variables may be set on the make command line:
#
10 11
#	TEST		-- specific test to run
#	TESTS		-- specific tests to run (same as $TEST really)
12 13 14
#	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
ross's avatar
ross committed
15
#	COMPILER	-- select a configuration file from config/
ei@vuokko.info's avatar
ei@vuokko.info committed
16
#       THREADS         -- run n tests at once
17 18 19
#
# -----------------------------------------------------------------------------

dons's avatar
dons committed
20 21 22
# export the value of $MAKE for invocation in ghc-regress/driver/
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 30 31 32
RUNTEST_OPTS =

$(eval $(call get-ghc-rts-field,WORDSIZE,Word size))
$(eval $(call get-ghc-rts-field,TARGETPLATFORM,Target platform))
$(eval $(call get-ghc-rts-field,TargetOS_CPP,Target OS))
33
$(eval $(call get-ghc-rts-field,TargetARCH_CPP,Target architecture))
34 35
ifeq "$(filter $(TargetOS_CPP), cygwin32 mingw32)" ""
exeext =
36
else
37
exeext = .exe
38
endif
39

40
$(eval $(call get-ghc-feature-bool,GhcWithNativeCodeGen,Have native code generator))
41
ifeq "$(GhcWithNativeCodeGen)" "YES"
42 43 44
RUNTEST_OPTS += -e ghc_with_native_codegen=1
else
RUNTEST_OPTS += -e ghc_with_native_codegen=0
45 46
endif

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

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

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

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

68
$(eval $(call get-ghc-feature-bool,GhcWithInterpreter,Have interpreter))
69 70 71 72 73 74
ifeq "$(GhcWithInterpreter)" "YES"
RUNTEST_OPTS += -e ghc_with_interpreter=1
else
RUNTEST_OPTS += -e ghc_with_interpreter=0
endif

75
$(eval $(call get-ghc-feature-bool,GhcUnregisterised,Unregisterised))
76 77 78 79 80 81
ifeq "$(GhcUnregisterised)" "YES"
RUNTEST_OPTS += -e ghc_unregisterised=1
else
RUNTEST_OPTS += -e ghc_unregisterised=0
endif

82
$(eval $(call get-ghc-feature-bool,GhcWithSMP,Support SMP))
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

Ian Lynagh's avatar
Ian Lynagh committed
89 90 91 92 93 94
ifeq "$(WINDOWS)" "YES"
RUNTEST_OPTS += -e windows=True
else
RUNTEST_OPTS += -e windows=False
endif

95 96 97 98 99 100
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
101
ifneq "$(THREADS)" ""
102
RUNTEST_OPTS += --threads=$(THREADS)
ei@vuokko.info's avatar
ei@vuokko.info committed
103 104
endif

105
RUNTEST_OPTS +=  \
106
	--rootdir=. \
107
	--config=$(CONFIG) \
Ian Lynagh's avatar
Ian Lynagh committed
108 109 110 111 112 113 114 115 116
	-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)"' \
117
	-e 'config.arch="$(TargetARCH_CPP)"' \
Ian Lynagh's avatar
Ian Lynagh committed
118 119
	-e 'config.wordsize="$(WORDSIZE)"' \
	-e 'default_testopts.cleanup="$(CLEANUP)"' \
Ian Lynagh's avatar
Ian Lynagh committed
120
	-e 'config.timeout=int($(TIMEOUT)) or config.timeout' \
Ian Lynagh's avatar
Ian Lynagh committed
121 122 123
	-e 'config.timeout_prog="$(TIMEOUT_PROGRAM)"' \
	-e 'config.exeext="$(exeext)"' \
	-e 'config.top="$(TOP_ABS)"' \
124 125
	$(EXTRA_RUNTEST_OPTS)

126 127 128 129 130 131 132 133 134 135 136 137
ifeq "$(fast)" "YES"
setfast = -e config.fast=1
else
setfast = 
endif

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

138
TESTS	     = 
139
TEST	     = 
140
WAY =
141

142 143 144 145
.PHONY: all boot test verbose accept fast

all: test

146
TIMEOUT_PROGRAM = $(TOP)/timeout/install-inplace/bin/timeout$(exeext)
147

148 149
boot: $(TIMEOUT_PROGRAM)

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

154
test: $(TIMEOUT_PROGRAM)
155
	$(PYTHON) $(RUNTESTS) $(RUNTEST_OPTS) \
156
		$(patsubst %, --only=%, $(TEST)) \
157
		$(patsubst %, --only=%, $(TESTS)) \
158
		$(patsubst %, --way=%, $(WAY)) \
159
		$(patsubst %, --skipway=%, $(SKIPWAY)) \
160
		$(setfast) \
161
		$(setaccept)
162

163
verbose: test
164 165

accept:
166 167 168
	$(MAKE) accept=YES

fast:
169
	$(MAKE) fast=YES
170