tests.mk 11.4 KB
Newer Older
G
Graydon Hoare 已提交
1 2 3 4 5 6 7 8
######################################################################
# Testing variables
######################################################################

ALL_TEST_INPUTS = $(wildcard $(S)src/test/*/*.rs   \
                              $(S)src/test/*/*/*.rs \
                              $(S)src/test/*/*.rc)

9
RPASS_RC := $(wildcard $(S)src/test/run-pass/*.rc)
B
Brian Anderson 已提交
10
RPASS_RS := $(wildcard $(S)src/test/run-pass/*.rs)
11 12 13 14
RFAIL_RC := $(wildcard $(S)src/test/run-fail/*.rc)
RFAIL_RS := $(wildcard $(S)src/test/run-fail/*.rs)
CFAIL_RC := $(wildcard $(S)src/test/compile-fail/*.rc)
CFAIL_RS := $(wildcard $(S)src/test/compile-fail/*.rs)
15 16
BENCH_RS := $(wildcard $(S)src/test/bench/*.rs)
PRETTY_RS := $(wildcard $(S)src/test/pretty/*.rs)
G
Graydon Hoare 已提交
17

18 19 20 21
# perf tests are the same as bench tests only they run under
# a performance monitor.
PERF_RS := $(wildcard $(S)src/test/bench/*.rs)

B
Brian Anderson 已提交
22 23 24
RPASS_TESTS := $(RPASS_RC) $(RPASS_RS)
RFAIL_TESTS := $(RFAIL_RC) $(RFAIL_RS)
CFAIL_TESTS := $(CFAIL_RC) $(CFAIL_RS)
25
BENCH_TESTS := $(BENCH_RS)
26
PERF_TESTS := $(PERF_RS)
27
PRETTY_TESTS := $(PRETTY_RS)
G
Graydon Hoare 已提交
28

29 30 31 32 33
FT := run_pass_stage2
FT_LIB := $(call CFG_LIB_NAME,$(FT))
FT_DRIVER := $(FT)_driver
GENERATED += test/$(FT).rc test/$(FT_DRIVER).rs

B
Brian Anderson 已提交
34 35 36 37 38 39 40 41 42 43 44 45 46
# The arguments to all test runners
ifdef TESTNAME
  TESTARGS += $(TESTNAME)
endif

ifdef CHECK_XFAILS
  TESTARGS += --ignored
endif

# Arguments to the cfail/rfail/rpass/bench tests
ifdef CFG_VALGRIND
  CTEST_RUNTOOL = --runtool "$(CFG_VALGRIND)"
endif
47

48 49 50 51 52
# Arguments to the perf tests
ifdef CFG_PERF_TOOL
  CTEST_PERF_RUNTOOL = --runtool "$(CFG_PERF_TOOL)"
endif

B
Brian Anderson 已提交
53
CTEST_TESTARGS := $(TESTARGS)
G
Graydon Hoare 已提交
54

B
Brian Anderson 已提交
55 56 57
ifdef VERBOSE
  CTEST_TESTARGS += --verbose
endif
58

B
Brian Anderson 已提交
59 60 61
# The standard library test crate
STDTEST_CRATE := $(S)src/test/stdtest/stdtest.rc
STDTEST_INPUTS := $(wildcard $(S)src/test/stdtest/*rs)
62

63 64 65 66
# Run the compiletest runner itself under valgrind
ifdef CTEST_VALGRIND
  CFG_RUN_CTEST=$(call CFG_RUN_TEST,$(2))
else
67
  CFG_RUN_CTEST=$(call CFG_RUN,$(TARGET_HOST_LIB$(1)),$(2))
68
endif
69

B
Brian Anderson 已提交
70 71 72 73 74
######################################################################
# Main test targets
######################################################################

check: tidy check-stage2 \
75

B
Brian Anderson 已提交
76
check-full: tidy check-stage1 check-stage2 check-stage3 \
77

78
check-fast: tidy \
B
Brian Anderson 已提交
79
	check-stage2-rustc check-stage2-std \
N
Niko Matsakis 已提交
80
	test/$(FT_DRIVER).out
81

82
# Run the tidy script in multiple parts to avoid huge 'echo' commands
B
Brian Anderson 已提交
83 84 85 86
tidy:
	@$(call E, check: formatting)
	$(Q)echo \
	    $(addprefix $(S)src/, $(RUSTLLVM_LIB_CS) $(RUSTLLVM_OBJS_CS) \
87
	      $(RUSTLLVM_HDR) \
B
Brian Anderson 已提交
88
              $(RUNTIME_CS) $(RUNTIME_HDR) $(RUNTIME_S)) \
89
            $(wildcard $(S)src/etc/*.py)  \
B
Brian Anderson 已提交
90 91 92 93 94 95
            $(COMPILER_CRATE) \
            $(COMPILER_INPUTS) \
            $(STDLIB_CRATE) \
            $(STDLIB_INPUTS) \
            $(COMPILETEST_CRATE) \
            $(COMPILETEST_INPUTS) \
96 97
	  | xargs -n 10 python $(S)src/etc/tidy.py
	$(Q)echo \
98
            $(ALL_TEST_INPUTS) \
B
Brian Anderson 已提交
99
	  | xargs -n 10 python $(S)src/etc/tidy.py
G
Graydon Hoare 已提交
100

101 102

######################################################################
B
Brian Anderson 已提交
103
# Rules for the test runners
104 105
######################################################################

B
Brian Anderson 已提交
106
define TEST_STAGEN
107

B
Brian Anderson 已提交
108
# All the per-stage build rules you might want to call from the
109 110 111 112
# command line.
#
# $(1) is the stage number
# $(2) is the target triple
113

114 115 116 117 118 119 120 121
check-stage$(1)-$(2): tidy \
	check-stage$(1)-$(2)-rustc \
	check-stage$(1)-$(2)-std \
	check-stage$(1)-$(2)-rpass \
	check-stage$(1)-$(2)-rfail \
	check-stage$(1)-$(2)-cfail \
	check-stage$(1)-$(2)-bench \
	check-stage$(1)-$(2)-pretty
122

123
check-stage$(1)-$(2)-std: check-stage$(1)-$(2)-std-dummy
124

125
check-stage$(1)-$(2)-rustc: check-stage$(1)-$(2)-rustc-dummy
126

127
check-stage$(1)-$(2)-cfail: check-stage$(1)-$(2)-cfail-dummy
G
Graydon Hoare 已提交
128

129
check-stage$(1)-$(2)-rfail: check-stage$(1)-$(2)-rfail-dummy
130

131
check-stage$(1)-$(2)-rpass: check-stage$(1)-$(2)-rpass-dummy
132

133
check-stage$(1)-$(2)-bench: check-stage$(1)-$(2)-bench-dummy
134

135
check-stage$(1)-$(2)-perf: check-stage$(1)-$(2)-perf-dummy
136

137 138 139 140
check-stage$(1)-$(2)-pretty: check-stage$(1)-$(2)-pretty-rpass \
                        check-stage$(1)-$(2)-pretty-rfail \
                        check-stage$(1)-$(2)-pretty-bench \
                        check-stage$(1)-$(2)-pretty-pretty
G
Graydon Hoare 已提交
141

142
check-stage$(1)-$(2)-pretty-rpass: check-stage$(1)-$(2)-pretty-rpass-dummy
G
Graydon Hoare 已提交
143

144
check-stage$(1)-$(2)-pretty-rfail: check-stage$(1)-$(2)-pretty-rfail-dummy
G
Graydon Hoare 已提交
145

146
check-stage$(1)-$(2)-pretty-bench: check-stage$(1)-$(2)-pretty-bench-dummy
G
Graydon Hoare 已提交
147

148
check-stage$(1)-$(2)-pretty-pretty: check-stage$(1)-$(2)-pretty-pretty-dummy
G
Graydon Hoare 已提交
149

150

B
Brian Anderson 已提交
151
# Rules for the standard library test runner
152

153
test/stdtest.stage$(1)-$(2)$$(X): $$(STDTEST_CRATE) $$(STDTEST_INPUTS) \
N
Niko Matsakis 已提交
154
                            $$(SREQ$(1)$(2))
B
Brian Anderson 已提交
155
	@$$(call E, compile_and_link: $$@)
156
	$$(STAGE$(1)_$(2)) -o $$@ $$< --test
157

158
check-stage$(1)-$(2)-std-dummy: test/stdtest.stage$(1)-$(2)$$(X)
B
Brian Anderson 已提交
159 160
	@$$(call E, run: $$<)
	$$(Q)$$(call CFG_RUN_TEST,$$<) $$(TESTARGS)
161

162

B
Brian Anderson 已提交
163
# Rules for the rustc test runner
164

165
test/rustctest.stage$(1)-$(2)$$(X): \
N
Niko Matsakis 已提交
166 167
	$$(COMPILER_CRATE) $$(COMPILER_INPUTS) $$(SREQ$(1)$(2)) \
	$$(TARGET_LIB$(1)$(2))/$$(CFG_RUSTLLVM)
B
Brian Anderson 已提交
168
	@$$(call E, compile_and_link: $$@)
169
	$$(STAGE$(1)_$(2)) -o $$@ $$< --test
170

171
check-stage$(1)-$(2)-rustc-dummy: test/rustctest.stage$(1)-$(2)$$(X)
B
Brian Anderson 已提交
172
	@$$(call E, run: $$<)
173
	$$(Q)$$(call CFG_RUN_TEST,$$<) \
B
Brian Anderson 已提交
174
	  $$(TESTARGS)
175

176

B
Brian Anderson 已提交
177
# Rules for the cfail/rfail/rpass/bench/perf test runner
178

179
CTEST_COMMON_ARGS$(1)-$(2) := --compile-lib-path $$(HOST_LIB$(1)) \
B
Brian Anderson 已提交
180 181
                         --run-lib-path $$(TARGET_LIB$(1)$$(CFG_HOST_TRIPLE)) \
                         --rustc-path $$(HOST_BIN$(1))/rustc$$(X) \
182 183
                         --stage-id stage$(1)-$(2) \
                         --rustcflags "$$(CFG_RUSTC_FLAGS) --target=$(2)" \
184
                         $$(CTEST_TESTARGS)
185

186
CFAIL_ARGS$(1)-$(2) := $$(CTEST_COMMON_ARGS$(1)-$(2)) \
B
Brian Anderson 已提交
187 188
                  --src-base $$(S)src/test/compile-fail/ \
                  --build-base test/compile-fail/ \
189
                  --mode compile-fail
190

191
RFAIL_ARGS$(1)-$(2) := $$(CTEST_COMMON_ARGS$(1)-$(2)) \
B
Brian Anderson 已提交
192 193 194
                  --src-base $$(S)src/test/run-fail/ \
                  --build-base test/run-fail/ \
                  --mode run-fail \
195
                  $$(CTEST_RUNTOOL)
196

197
RPASS_ARGS$(1)-$(2) := $$(CTEST_COMMON_ARGS$(1)-$(2)) \
198
                  --src-base $$(S)src/test/run-pass/ \
B
Brian Anderson 已提交
199 200
                  --build-base test/run-pass/ \
                  --mode run-pass \
201
                  $$(CTEST_RUNTOOL)
202

203
BENCH_ARGS$(1)-$(2) := $$(CTEST_COMMON_ARGS$(1)-$(2)) \
204
                  --src-base $$(S)src/test/bench/ \
B
Brian Anderson 已提交
205 206
                  --build-base test/bench/ \
                  --mode run-pass \
207
                  $$(CTEST_RUNTOOL)
208

209
PERF_ARGS$(1)-$(2) := $$(CTEST_COMMON_ARGS$(1)-$(2)) \
210
                  --src-base $$(S)src/test/bench/ \
211 212
                  --build-base test/perf/ \
                  --mode run-pass \
213
                  $$(CTEST_PERF_RUNTOOL)
214

215
PRETTY_RPASS_ARGS$(1)-$(2) := $$(CTEST_COMMON_ARGS$(1)-$(2)) \
216 217
                         --src-base $$(S)src/test/run-pass/ \
                         --build-base test/run-pass/ \
218
                         --mode pretty
219

220
PRETTY_RFAIL_ARGS$(1)-$(2) := $$(CTEST_COMMON_ARGS$(1)-$(2)) \
221 222
                         --src-base $$(S)src/test/run-fail/ \
                         --build-base test/run-fail/ \
223
                         --mode pretty
224

225
PRETTY_BENCH_ARGS$(1)-$(2) := $$(CTEST_COMMON_ARGS$(1)-$(2)) \
226 227
                         --src-base $$(S)src/test/bench/ \
                         --build-base test/bench/ \
228
                         --mode pretty
229

230
PRETTY_PRETTY_ARGS$(1)-$(2) := $$(CTEST_COMMON_ARGS$(1)-$(2)) \
231 232
                          --src-base $$(S)src/test/pretty/ \
                          --build-base test/pretty/ \
233
                          --mode pretty
234

235
check-stage$(1)-$(2)-cfail-dummy: $$(HOST_BIN$(1))/compiletest$$(X) \
N
Niko Matsakis 已提交
236 237
	                              $$(SREQ$(1)$(2)) \
                                  $$(CFAIL_TESTS)
B
Brian Anderson 已提交
238
	@$$(call E, run: $$<)
239
	$$(Q)$$(call CFG_RUN_CTEST,$(1),$$<) $$(CFAIL_ARGS$(1)-$(2))
240

241
check-stage$(1)-$(2)-rfail-dummy: $$(HOST_BIN$(1))/compiletest$$(X) \
N
Niko Matsakis 已提交
242 243
	                              $$(SREQ$(1)$(2)) \
                                  $$(RFAIL_TESTS)
B
Brian Anderson 已提交
244
	@$$(call E, run: $$<)
245
	$$(Q)$$(call CFG_RUN_CTEST,$(1),$$<) $$(RFAIL_ARGS$(1)-$(2))
B
Brian Anderson 已提交
246

247
check-stage$(1)-$(2)-rpass-dummy: $$(HOST_BIN$(1))/compiletest$$(X) \
N
Niko Matsakis 已提交
248 249
	                              $$(SREQ$(1)$(2)) \
                                  $$(RPASS_TESTS)
B
Brian Anderson 已提交
250
	@$$(call E, run: $$<)
251
	$$(Q)$$(call CFG_RUN_CTEST,$(1),$$<) $$(RPASS_ARGS$(1)-$(2))
B
Brian Anderson 已提交
252

253
check-stage$(1)-$(2)-bench-dummy: $$(HOST_BIN$(1))/compiletest$$(X) \
N
Niko Matsakis 已提交
254 255
	                              $$(SREQ$(1)$(2)) \
                                  $$(BENCH_TESTS)
B
Brian Anderson 已提交
256
	@$$(call E, run: $$<)
257
	$$(Q)$$(call CFG_RUN_CTEST,$(1),$$<) $$(BENCH_ARGS$(1)-$(2))
258

259
check-stage$(1)-$(2)-perf-dummy: $$(HOST_BIN$(1))/compiletest$$(X) \
N
Niko Matsakis 已提交
260 261
                                 $$(SREQ$(1)$(2)) \
                                 $$(BENCH_TESTS)
262
	@$$(call E, perf: $$<)
263
	$$(Q)$$(call CFG_RUN_CTEST,$(1),$$<) $$(PERF_ARGS$(1)-$(2))
264

265
check-stage$(1)-$(2)-pretty-rpass-dummy: $$(HOST_BIN$(1))/compiletest$$(X) \
N
Niko Matsakis 已提交
266 267
                                         $$(SREQ$(1)$(2)) \
                                         $$(RPASS_TESTS)
268
	@$$(call E, run: $$<)
269
	$$(Q)$$(call CFG_RUN_CTEST,$(1),$$<) $$(PRETTY_RPASS_ARGS$(1)-$(2))
270

271
check-stage$(1)-$(2)-pretty-rfail-dummy: $$(HOST_BIN$(1))/compiletest$$(X) \
N
Niko Matsakis 已提交
272 273
                                         $$(SREQ$(1)$(2)) \
                                         $$(RFAIL_TESTS)
274
	@$$(call E, run: $$<)
275
	$$(Q)$$(call CFG_RUN_CTEST,$(1),$$<) $$(PRETTY_RFAIL_ARGS$(1)-$(2))
276

277
check-stage$(1)-$(2)-pretty-bench-dummy: $$(HOST_BIN$(1))/compiletest$$(X) \
N
Niko Matsakis 已提交
278 279
                                         $$(SREQ$(1)$(2)) \
                                         $$(BENCH_TESTS)
280
	@$$(call E, run: $$<)
281
	$$(Q)$$(call CFG_RUN_CTEST,$(1),$$<) $$(PRETTY_BENCH_ARGS$(1)-$(2))
282

283
check-stage$(1)-$(2)-pretty-pretty-dummy: $$(HOST_BIN$(1))/compiletest$$(X) \
N
Niko Matsakis 已提交
284 285
                                          $$(SREQ$(1)$(2)) \
                                          $$(PRETTY_TESTS)
286
	@$$(call E, run: $$<)
287
	$$(Q)$$(call CFG_RUN_CTEST,$(1),$$<) $$(PRETTY_PRETTY_ARGS$(1)-$(2))
288

B
Brian Anderson 已提交
289
endef
290

291
# Instantiate the template for stage 0, 1, 2, 3
292

293 294 295 296 297
$(foreach target,$(CFG_TARGET_TRIPLES), \
 $(eval $(call TEST_STAGEN,0,$(target))) \
 $(eval $(call TEST_STAGEN,1,$(target))) \
 $(eval $(call TEST_STAGEN,2,$(target))) \
 $(eval $(call TEST_STAGEN,3,$(target))))
B
Brian Anderson 已提交
298

299 300 301 302 303 304 305 306 307
# Make convenient Shorthand Targets for use on command
# line or by other rules:
check-stage0:        check-stage0-$(CFG_HOST_TRIPLE)
check-stage1:        check-stage1-$(CFG_HOST_TRIPLE)
check-stage2:        check-stage2-$(CFG_HOST_TRIPLE)
check-stage2-perf:   check-stage2-$(CFG_HOST_TRIPLE)-perf
check-stage2-rustc:  check-stage2-$(CFG_HOST_TRIPLE)-rustc
check-stage2-std:    check-stage2-$(CFG_HOST_TRIPLE)-std
check-stage3:        check-stage3-$(CFG_HOST_TRIPLE)
B
Brian Anderson 已提交
308 309 310 311 312 313 314 315 316 317

######################################################################
# Fast-test rules
######################################################################

test/$(FT).rc test/$(FT_DRIVER).rs: $(TEST_RPASS_SOURCES_STAGE2) \
    $(S)src/etc/combine-tests.py
	@$(call E, check: building combined stage2 test runner)
	$(Q)$(S)src/etc/combine-tests.py

318
$(TARGET_HOST_LIB2)/$(FT_LIB): test/$(FT).rc $(SREQ2$(CFG_HOST_TRIPLE))
B
Brian Anderson 已提交
319
	@$(call E, compile_and_link: $@)
N
Niko Matsakis 已提交
320
	$(STAGE2_$(CFG_HOST_TRIPLE)) --lib -o $@ $<
B
Brian Anderson 已提交
321

322 323
test/$(FT_DRIVER)$(X): test/$(FT_DRIVER).rs $(TARGET_HOST_LIB2)/$(FT_LIB) \
	$(SREQ2$(CFG_HOST_TRIPLE))
B
Brian Anderson 已提交
324
	@$(call E, compile_and_link: $@)
N
Niko Matsakis 已提交
325
	$(STAGE2_$(CFG_HOST_TRIPLE)) -L $(HOST_LIB2) -o $@ $<
B
Brian Anderson 已提交
326

327
test/$(FT_DRIVER).out: test/$(FT_DRIVER)$(X) $(SREQ2$(CFG_HOST_TRIPLE))
328
	$(Q)$(call CFG_RUN_TEST, $<)