test.mk 4.07 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
#
# -----------------------------------------------------------------------------

20
21
include $(TOP)/mk/wordsize.mk

22
23
24
$(TOP)/mk/wordsize.mk : $(TOP)/mk/wordsize.mk.in
	$(CPP) $(RAWCPP_FLAGS) -x c $(TOP)/mk/wordsize.mk.in > $(TOP)/mk/wordsize.mk

25
26
27
28
ifeq "$(PYTHON)" ""
$(error Python must be installed in order to use the testsuite)
endif

dons's avatar
dons committed
29
30
31
# export the value of $MAKE for invocation in ghc-regress/driver/
export MAKE

rrt's avatar
rrt committed
32
# ghastly hack, because the driver requires that $tool be an absolute path name.
33
34
35
GHC_STAGE1_ABS	= $(GHC_COMPILER_DIR_ABS)/stage1/ghc-inplace
GHC_STAGE2_ABS	= $(GHC_COMPILER_DIR_ABS)/stage2/ghc-inplace
GHC_STAGE3_ABS	= $(GHC_COMPILER_DIR_ABS)/stage3/ghc-inplace
36
GHC_PKG_ABS     = $(GHC_PKG_DIR_ABS)/ghc-pkg-inplace
37
38
HP2PS_ABS	= $(GHC_HP2PS_DIR_ABS)/hp2ps
GS = gs
39

40
RUNTESTS     = $(TOP)/driver/runtests.py
ross's avatar
ross committed
41
COMPILER     = ghc
42
43
CONFIGDIR    = $(TOP)/config
CONFIG       = $(CONFIGDIR)/$(COMPILER)
44
45

# can be overriden from the command line
46
47
48
49
50
ifneq "$(stage)" ""
TEST_HC = $(GHC_STAGE$(stage)_ABS)
else
TEST_HC = $(GHC_STAGE1_ABS)
endif
51

52
53
GHC_PKG = $(GHC_PKG_ABS)

54
RUNTEST_OPTS =
55

56
ifeq "$(GhcWithNativeCodeGen)" "YES"
57
58
59
RUNTEST_OPTS += -e ghc_with_native_codegen=1
else
RUNTEST_OPTS += -e ghc_with_native_codegen=0
60
61
endif

62
ifeq "$(filter p, $(GhcLibWays))" "p"
63
64
65
RUNTEST_OPTS += -e ghc_with_profiling=1
else
RUNTEST_OPTS += -e ghc_with_profiling=0
66
endif
67

68
69
70
71
72
73
ifeq "$(GhcWithInterpreter)" "YES"
RUNTEST_OPTS += -e ghc_with_interpreter=1
else
RUNTEST_OPTS += -e ghc_with_interpreter=0
endif

74
75
76
77
78
79
ifeq "$(GhcUnregisterised)" "YES"
RUNTEST_OPTS += -e ghc_unregisterised=1
else
RUNTEST_OPTS += -e ghc_unregisterised=0
endif

80
81
82
83
84
85
ifeq "$(filter thr, $(GhcRTSWays))" "thr"
RUNTEST_OPTS += -e ghc_with_threaded_rts=1
else
RUNTEST_OPTS += -e ghc_with_threaded_rts=0
endif

86
87
88
89
90
91
ifeq "$(GhcWithSMP)" "YES"
RUNTEST_OPTS += -e ghc_with_smp=1
else
RUNTEST_OPTS += -e ghc_with_smp=0
endif

ei@vuokko.info's avatar
ei@vuokko.info committed
92
93
ifneq "$(THREADS)" ""
RUNTEST_OPTS += --thread=$(THREADS)
94
95
else
USETHREADS=0
ei@vuokko.info's avatar
ei@vuokko.info committed
96
97
endif

98
RUNTEST_OPTS +=  \
99
	--rootdir=. \
100
	--config=$(CONFIG) \
101
	-e config.confdir=\"$(CONFIGDIR)\" \
102
	-e config.compiler=\"$(TEST_HC)\" \
103
	-e config.compiler_always_flags.append"(\"-D$(HostPlatform_CPP)\")" \
104
	-e config.compiler_always_flags.append"(\"$(EXTRA_HC_OPTS)\")" \
105
	-e config.ghc_pkg=\"$(GHC_PKG)\" \
106
107
	-e config.hp2ps=\"$(HP2PS_ABS)\" \
	-e config.gs=\"$(GS)\" \
108
	-e config.platform=\"$(TARGETPLATFORM)\" \
109
	-e config.wordsize=\"$(WORDSIZE)\" \
110
	-e default_testopts.cleanup=\"$(CLEANUP)\" \
111
	-e "if '$(USETHREADS)': config.use_threads=int($(USETHREADS))" \
112
	-e config.timeout="int($(TIMEOUT)) or config.timeout" \
113
	-e config.timeout_prog=\"$(TOP)/timeout/timeout\" \
114
	-e config.top=\"$(TOP)\" \
115
116
	$(EXTRA_RUNTEST_OPTS)

117
118
# HostPlatform_CPP should ideally be TargetPlatform_CPP, but that
# doesn't exist; they're always the same anyway
119

120
121
122
123
124
125
126
127
128
129
130
131
ifeq "$(fast)" "YES"
setfast = -e config.fast=1
else
setfast = 
endif

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

132
TESTS	     = 
133
TEST	     = 
134
WAY =
135
136
137

all :: test

138
139
140
141
142
143
144
timeout : $(TOP)/timeout/timeout$(exeext)

$(TOP)/timeout/timeout$(exeext) :
	@echo "Looks like you don't have timeout, building it first..."
	cd $(TOP)/timeout && $(MAKE) $(MFLAGS) all

test: timeout
145
	$(PYTHON) $(RUNTESTS) $(RUNTEST_OPTS) \
146
		$(patsubst %, --only=%, $(TEST)) \
147
		$(patsubst %, --only=%, $(TESTS)) \
148
		$(patsubst %, --way=%, $(WAY)) \
149
		$(patsubst %, --skipway=%, $(SKIPWAY)) \
150
		$(setfast) \
151
		$(setaccept)
152

153
verbose: test
154
155

accept:
156
157
158
	$(MAKE) accept=YES

fast:
159
	$(MAKE) fast=YES
160