tests.mk 22.7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
# Copyright 2012 The Rust Project Developers. See the COPYRIGHT
# file at the top-level directory of this distribution and at
# http://rust-lang.org/COPYRIGHT.
#
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
# option. This file may not be copied, modified, or distributed
# except according to those terms.

11

G
Graydon Hoare 已提交
12
######################################################################
13
# Test variables
G
Graydon Hoare 已提交
14 15
######################################################################

16
# The names of crates that must be tested
17 18 19
TEST_TARGET_CRATES = core std
TEST_HOST_CRATES = syntax rustc rustdoc rusti rust rustpkg
TEST_CRATES = $(TEST_TARGET_CRATES) $(TEST_HOST_CRATES)
G
Graydon Hoare 已提交
20

21 22
# Markdown files under doc/ that should have their code extracted and run
DOC_TEST_NAMES = tutorial tutorial-ffi tutorial-macros tutorial-borrowed-ptr tutorial-tasks rust
23

24 25 26
######################################################################
# Environment configuration
######################################################################
27

B
Brian Anderson 已提交
28 29 30 31 32 33 34 35 36 37 38 39 40
# 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
41

42 43 44 45 46
# Arguments to the perf tests
ifdef CFG_PERF_TOOL
  CTEST_PERF_RUNTOOL = --runtool "$(CFG_PERF_TOOL)"
endif

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

B
Brian Anderson 已提交
49 50 51
ifdef VERBOSE
  CTEST_TESTARGS += --verbose
endif
52

53 54 55 56 57 58 59
# If we're running perf then set this environment variable
# to put the benchmarks into 'hard mode'
ifeq ($(MAKECMDGOALS),perf)
  RUST_BENCH=1
  export RUST_BENCH
endif

60 61
TEST_LOG_FILE=tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).log
TEST_OK_FILE=tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).ok
62

63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
define DEF_TARGET_COMMANDS

ifdef CFG_UNIXY_$(1)
  CFG_RUN_TEST_$(1)=$$(call CFG_RUN_$(1),,$$(CFG_VALGRIND) $$(1))
endif

ifdef CFG_WINDOWSY_$(1)
  CFG_TESTLIB_$(1)=$$(CFG_BUILD_DIR)/$$(2)/$$(strip \
   $$(if $$(findstring stage0,$$(1)), \
       stage0/$$(CFG_LIBDIR), \
      $$(if $$(findstring stage1,$$(1)), \
           stage1/$$(CFG_LIBDIR), \
          $$(if $$(findstring stage2,$$(1)), \
               stage2/$$(CFG_LIBDIR), \
               $$(if $$(findstring stage3,$$(1)), \
                    stage3/$$(CFG_LIBDIR), \
               )))))/rustc/$$(CFG_BUILD_TRIPLE)/$$(CFG_LIBDIR)
  CFG_RUN_TEST_$(1)=$$(call CFG_RUN_$(1),$$(call CFG_TESTLIB_$(1),$$(1),$$(3)),$$(1))
endif

# Run the compiletest runner itself under valgrind
ifdef CTEST_VALGRIND
CFG_RUN_CTEST_$(1)=$$(call CFG_RUN_TEST_$$(CFG_BUILD_TRIPLE),$$(2),$$(3))
else
CFG_RUN_CTEST_$(1)=$$(call CFG_RUN_$$(CFG_BUILD_TRIPLE),$$(TLIB$$(1)_T_$$(3)_H_$$(3)),$$(2))
endif

endef

$(foreach target,$(CFG_TARGET_TRIPLES), \
  $(eval $(call DEF_TARGET_COMMANDS,$(target))))


B
Brian Anderson 已提交
96 97 98 99
######################################################################
# Main test targets
######################################################################

100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
check: cleantestlibs cleantmptestlogs tidy all check-stage2
	$(Q)$(CFG_PYTHON) $(S)src/etc/check-summary.py tmp/*.log

check-notidy: cleantestlibs cleantmptestlogs all check-stage2
	$(Q)$(CFG_PYTHON) $(S)src/etc/check-summary.py tmp/*.log

check-full: cleantestlibs cleantmptestlogs tidy \
            all check-stage1 check-stage2 check-stage3
	$(Q)$(CFG_PYTHON) $(S)src/etc/check-summary.py tmp/*.log

check-test: cleantestlibs cleantmptestlogs all check-stage2-rfail
	$(Q)$(CFG_PYTHON) $(S)src/etc/check-summary.py tmp/*.log

check-lite: cleantestlibs cleantmptestlogs \
	check-stage2-core check-stage2-std check-stage2-rpass \
	check-stage2-rfail check-stage2-cfail
	$(Q)$(CFG_PYTHON) $(S)src/etc/check-summary.py tmp/*.log

118 119
.PHONY: cleantmptestlogs cleantestlibs

120 121
cleantmptestlogs:
	$(Q)rm -f tmp/*.log
122

123
cleantestlibs:
124
	$(Q)find $(CFG_BUILD_TRIPLE)/test \
125 126 127 128 129 130 131
         -name '*.[odasS]' -o \
         -name '*.so' -o      \
         -name '*.dylib' -o   \
         -name '*.dll' -o     \
         -name '*.def' -o     \
         -name '*.bc' -o      \
         -name '*.dSYM' -o    \
132
         -name '*.libaux' -o      \
133
         -name '*.out' -o     \
B
Brian Leibig 已提交
134 135
         -name '*.err' -o     \
	 -name '*.debugger.script' \
136
         | xargs rm -rf
137

138

139 140 141
######################################################################
# Tidy
######################################################################
B
Brian Anderson 已提交
142

143
ifdef CFG_NOTIDY
B
Brian Anderson 已提交
144
tidy:
145
else
146 147 148 149 150 151 152

ALL_CS := $(wildcard $(S)src/rt/*.cpp \
                     $(S)src/rt/*/*.cpp \
                     $(S)src/rt/*/*/*.cpp \
                     $(S)srcrustllvm/*.cpp)
ALL_CS := $(filter-out $(S)src/rt/bigint/bigint_ext.cpp \
                       $(S)src/rt/bigint/bigint_int.cpp \
153
                       $(S)src/rt/miniz.cpp \
154
                       $(S)src/rt/linenoise/linenoise.c \
B
Brian Anderson 已提交
155
                       $(S)src/rt/linenoise/utf8.c \
156 157 158 159 160 161 162 163 164 165 166 167 168
	,$(ALL_CS))
ALL_HS := $(wildcard $(S)src/rt/*.h \
                     $(S)src/rt/*/*.h \
                     $(S)src/rt/*/*/*.h \
                     $(S)srcrustllvm/*.h)
ALL_HS := $(filter-out $(S)src/rt/vg/valgrind.h \
                       $(S)src/rt/vg/memcheck.h \
                       $(S)src/rt/uthash/uthash.h \
                       $(S)src/rt/uthash/utlist.h \
                       $(S)src/rt/msvc/typeof.h \
                       $(S)src/rt/msvc/stdint.h \
                       $(S)src/rt/msvc/inttypes.h \
                       $(S)src/rt/bigint/bigint.h \
169
                       $(S)src/rt/linenoise/linenoise.h \
B
Brian Anderson 已提交
170
                       $(S)src/rt/linenoise/utf8.h \
171 172
	,$(ALL_HS))

173
# Run the tidy script in multiple parts to avoid huge 'echo' commands
174 175
tidy:
		@$(call E, check: formatting)
176
		$(Q)find $(S)src -name '*.r[sc]' \
177
		| grep '^$(S)src/test' -v \
178
		| xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py
179
		$(Q)find $(S)src/etc -name '*.py' \
180
		| xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py
181
		$(Q)echo $(ALL_CS) \
182
	  	| xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py
183
		$(Q)echo $(ALL_HS) \
184
	  	| xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py
185

186
endif
187

188

B
Brian Anderson 已提交
189
######################################################################
190
# Sets of tests
B
Brian Anderson 已提交
191 192
######################################################################

193 194 195 196 197 198 199 200 201
define DEF_TEST_SETS

check-stage$(1)-T-$(2)-H-$(3)-exec:     				\
	check-stage$(1)-T-$(2)-H-$(3)-rpass-exec			\
	check-stage$(1)-T-$(2)-H-$(3)-rfail-exec			\
	check-stage$(1)-T-$(2)-H-$(3)-cfail-exec			\
	check-stage$(1)-T-$(2)-H-$(3)-rpass-full-exec			\
        check-stage$(1)-T-$(2)-H-$(3)-crates-exec                      \
	check-stage$(1)-T-$(2)-H-$(3)-bench-exec			\
202
	check-stage$(1)-T-$(2)-H-$(3)-debuginfo-exec \
203 204 205
	check-stage$(1)-T-$(2)-H-$(3)-doc-exec \
	check-stage$(1)-T-$(2)-H-$(3)-pretty-exec

206 207 208 209
# Only test the compiler-dependent crates when the target is
# able to build a compiler (when the target triple is in the set of host triples)
ifneq ($$(findstring $(2),$$(CFG_HOST_TRIPLES)),)

210 211 212 213
check-stage$(1)-T-$(2)-H-$(3)-crates-exec: \
	$$(foreach crate,$$(TEST_CRATES), \
           check-stage$(1)-T-$(2)-H-$(3)-$$(crate)-exec)

214 215 216 217 218 219 220 221
else

check-stage$(1)-T-$(2)-H-$(3)-crates-exec: \
	$$(foreach crate,$$(TEST_TARGET_CRATES), \
           check-stage$(1)-T-$(2)-H-$(3)-$$(crate)-exec)

endif

222 223 224 225 226 227 228 229 230 231
check-stage$(1)-T-$(2)-H-$(3)-doc-exec: \
        $$(foreach docname,$$(DOC_TEST_NAMES), \
           check-stage$(1)-T-$(2)-H-$(3)-doc-$$(docname)-exec)

check-stage$(1)-T-$(2)-H-$(3)-pretty-exec: \
	check-stage$(1)-T-$(2)-H-$(3)-pretty-rpass-exec	\
	check-stage$(1)-T-$(2)-H-$(3)-pretty-rpass-full-exec	\
	check-stage$(1)-T-$(2)-H-$(3)-pretty-rfail-exec	\
	check-stage$(1)-T-$(2)-H-$(3)-pretty-bench-exec	\
	check-stage$(1)-T-$(2)-H-$(3)-pretty-pretty-exec
232

B
Brian Anderson 已提交
233 234
endef

235
$(foreach host,$(CFG_HOST_TRIPLES), \
236 237 238 239
 $(foreach target,$(CFG_TARGET_TRIPLES), \
  $(foreach stage,$(STAGES), \
    $(eval $(call DEF_TEST_SETS,$(stage),$(target),$(host))))))

B
Brian Anderson 已提交
240

241
######################################################################
242
# Crate testing
243 244
######################################################################

245
define TEST_RUNNER
246

247 248 249 250 251 252 253 254
# If NO_REBUILD is set then break the dependencies on std so we can
# test crates without rebuilding core and std first
ifeq ($(NO_REBUILD),)
STDTESTDEP_$(1)_$(2)_$(3) = $$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_STDLIB_$(2))
else
STDTESTDEP_$(1)_$(2)_$(3) =
endif

255
$(3)/test/coretest.stage$(1)-$(2)$$(X_$(2)):			\
256
		$$(CORELIB_CRATE) $$(CORELIB_INPUTS)	\
257
		$$(STDTESTDEP_$(1)_$(2)_$(3))
258
	@$$(call E, compile_and_link: $$@)
259
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
260

261
$(3)/test/stdtest.stage$(1)-$(2)$$(X_$(2)):			\
262
		$$(STDLIB_CRATE) $$(STDLIB_INPUTS)	\
263
		$$(STDTESTDEP_$(1)_$(2)_$(3))
B
Brian Anderson 已提交
264
	@$$(call E, compile_and_link: $$@)
N
Niko Matsakis 已提交
265
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
266

267
$(3)/test/syntaxtest.stage$(1)-$(2)$$(X_$(2)):			\
268
		$$(LIBSYNTAX_CRATE) $$(LIBSYNTAX_INPUTS)	\
269
		$$(STDTESTDEP_$(1)_$(2)_$(3))
270 271 272
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test

273
$(3)/test/rustctest.stage$(1)-$(2)$$(X_$(2)):					\
274
		$$(COMPILER_CRATE) $$(COMPILER_INPUTS) \
B
Brian Anderson 已提交
275 276
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_RUSTLLVM_$(2)) \
                $$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBSYNTAX_$(2))
B
Brian Anderson 已提交
277
	@$$(call E, compile_and_link: $$@)
N
Niko Matsakis 已提交
278
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
279

280
$(3)/test/rustpkgtest.stage$(1)-$(2)$$(X_$(2)):					\
281
		$$(RUSTPKG_LIB) $$(RUSTPKG_INPUTS)		\
B
Brian Anderson 已提交
282
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
283 284
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
285

286
$(3)/test/rustitest.stage$(1)-$(2)$$(X_$(2)):					\
287
		$$(RUSTI_LIB) $$(RUSTI_INPUTS)		\
B
Brian Anderson 已提交
288
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
289 290
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
291

292
$(3)/test/rusttest.stage$(1)-$(2)$$(X_$(2)):					\
293
		$$(RUST_LIB) $$(RUST_INPUTS)		\
B
Brian Anderson 已提交
294
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
295 296 297
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test

298
$(3)/test/rustdoctest.stage$(1)-$(2)$$(X_$(2)):					\
299
		$$(RUSTDOC_LIB) $$(RUSTDOC_INPUTS)		\
B
Brian Anderson 已提交
300
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
301 302 303
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test

304 305
endef

306
$(foreach host,$(CFG_HOST_TRIPLES), \
307 308 309 310 311
 $(eval $(foreach target,$(CFG_TARGET_TRIPLES), \
  $(eval $(foreach stage,$(STAGES), \
   $(eval $(call TEST_RUNNER,$(stage),$(target),$(host))))))))

define DEF_TEST_CRATE_RULES
312 313 314
check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4))

$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
315
		$(3)/test/$(4)test.stage$(1)-$(2)$$(X_$(2))
316
	@$$(call E, run: $$<)
317
	$$(Q)$$(call CFG_RUN_TEST_$(2),$$<,$(2),$(3)) $$(TESTARGS)	\
318 319
	--logfile $$(call TEST_LOG_FILE,$(1),$(2),$(3),$(4)) \
	&& touch $$@
320
endef
321

322
$(foreach host,$(CFG_HOST_TRIPLES), \
323 324 325 326
 $(foreach target,$(CFG_TARGET_TRIPLES), \
  $(foreach stage,$(STAGES), \
   $(foreach crate, $(TEST_CRATES), \
    $(eval $(call DEF_TEST_CRATE_RULES,$(stage),$(target),$(host),$(crate)))))))
327 328


329 330 331 332 333 334 335 336 337 338 339 340 341 342
######################################################################
# Rules for the compiletest tests (rpass, rfail, etc.)
######################################################################

RPASS_RC := $(wildcard $(S)src/test/run-pass/*.rc)
RPASS_RS := $(wildcard $(S)src/test/run-pass/*.rs)
RPASS_FULL_RC := $(wildcard $(S)src/test/run-pass-fulldeps/*.rc)
RPASS_FULL_RS := $(wildcard $(S)src/test/run-pass-fulldeps/*.rs)
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)
BENCH_RS := $(wildcard $(S)src/test/bench/*.rs)
PRETTY_RS := $(wildcard $(S)src/test/pretty/*.rs)
B
Brian Anderson 已提交
343
DEBUGINFO_RS := $(wildcard $(S)src/test/debug-info/*.rs)
344

345 346 347
# perf tests are the same as bench tests only they run under
# a performance monitor.
PERF_RS := $(wildcard $(S)src/test/bench/*.rs)
348

349 350 351 352 353 354 355
RPASS_TESTS := $(RPASS_RC) $(RPASS_RS)
RPASS_FULL_TESTS := $(RPASS_FULL_RC) $(RPASS_FULL_RS)
RFAIL_TESTS := $(RFAIL_RC) $(RFAIL_RS)
CFAIL_TESTS := $(CFAIL_RC) $(CFAIL_RS)
BENCH_TESTS := $(BENCH_RS)
PERF_TESTS := $(PERF_RS)
PRETTY_TESTS := $(PRETTY_RS)
B
Brian Leibig 已提交
356
DEBUGINFO_TESTS := $(DEBUGINFO_RS)
B
Brian Anderson 已提交
357

358 359 360 361
CTEST_SRC_BASE_rpass = run-pass
CTEST_BUILD_BASE_rpass = run-pass
CTEST_MODE_rpass = run-pass
CTEST_RUNTOOL_rpass = $(CTEST_RUNTOOL)
B
Brian Anderson 已提交
362

363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387
CTEST_SRC_BASE_rpass-full = run-pass-full
CTEST_BUILD_BASE_rpass-full = run-pass-full
CTEST_MODE_rpass-full = run-pass
CTEST_RUNTOOL_rpass-full = $(CTEST_RUNTOOL)

CTEST_SRC_BASE_rfail = run-fail
CTEST_BUILD_BASE_rfail = run-fail
CTEST_MODE_rfail = run-fail
CTEST_RUNTOOL_rfail = $(CTEST_RUNTOOL)

CTEST_SRC_BASE_cfail = compile-fail
CTEST_BUILD_BASE_cfail = compile-fail
CTEST_MODE_cfail = compile-fail
CTEST_RUNTOOL_cfail = $(CTEST_RUNTOOL)

CTEST_SRC_BASE_bench = bench
CTEST_BUILD_BASE_bench = bench
CTEST_MODE_bench = run-pass
CTEST_RUNTOOL_bench = $(CTEST_RUNTOOL)

CTEST_SRC_BASE_perf = bench
CTEST_BUILD_BASE_perf = perf
CTEST_MODE_perf = run-pass
CTEST_RUNTOOL_perf = $(CTEST_PERF_RUNTOOL)

B
Brian Leibig 已提交
388 389 390 391 392
CTEST_SRC_BASE_debuginfo = debug-info
CTEST_BUILD_BASE_debuginfo = debug-info
CTEST_MODE_debuginfo = debug-info
CTEST_RUNTOOL_debuginfo = $(CTEST_RUNTOOL)

393 394 395 396
ifeq ($(CFG_GDB),)
CTEST_DISABLE_debuginfo = "no gdb found"
endif

397 398 399 400
ifeq ($(CFG_OSTYPE),apple-darwin)
CTEST_DISABLE_debuginfo = "gdb on darwing needs root"
endif

401 402 403 404 405 406 407 408 409 410 411
define DEF_CTEST_VARS

# All the per-stage build rules you might want to call from the
# command line.
#
# $(1) is the stage number
# $(2) is the target triple to test
# $(3) is the host triple to test

# Prerequisites for compiletest tests
TEST_SREQ$(1)_T_$(2)_H_$(3) = \
412
	$$(HBIN$(1)_H_$(3))/compiletest$$(X_$(3)) \
413
	$$(SREQ$(1)_T_$(2)_H_$(3))
B
Brian Anderson 已提交
414

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

N
Niko Matsakis 已提交
417
CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) :=						\
N
Niko Matsakis 已提交
418 419
		--compile-lib-path $$(HLIB$(1)_H_$(3))				\
        --run-lib-path $$(TLIB$(1)_T_$(2)_H_$(3))			\
420
        --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3))			\
421
        --aux-base $$(S)src/test/auxiliary/                 \
N
Niko Matsakis 已提交
422
        --stage-id stage$(1)-$(2)							\
423
        --rustcflags "$(RUSTC_FLAGS_$(2)) $$(CFG_RUSTC_FLAGS) --target=$(2)" \
N
Niko Matsakis 已提交
424 425
        $$(CTEST_TESTARGS)

426 427 428 429 430 431
CTEST_DEPS_rpass_$(1)-T-$(2)-H-$(3) = $$(RPASS_TESTS)
CTEST_DEPS_rpass_full_$(1)-T-$(2)-H-$(3) = $$(RPASS_FULL_TESTS) $$(TLIBRUSTC_DEFAULT$(1)_T_$(2)_H_$(3))
CTEST_DEPS_rfail_$(1)-T-$(2)-H-$(3) = $$(RFAIL_TESTS)
CTEST_DEPS_cfail_$(1)-T-$(2)-H-$(3) = $$(CFAIL_TESTS)
CTEST_DEPS_bench_$(1)-T-$(2)-H-$(3) = $$(BENCH_TESTS)
CTEST_DEPS_perf_$(1)-T-$(2)-H-$(3) = $$(PERF_TESTS)
B
Brian Leibig 已提交
432
CTEST_DEPS_debuginfo_$(1)-T-$(2)-H-$(3) = $$(DEBUGINFO_TESTS)
N
Niko Matsakis 已提交
433

434
endef
N
Niko Matsakis 已提交
435

436
$(foreach host,$(CFG_HOST_TRIPLES), \
437 438 439
 $(eval $(foreach target,$(CFG_TARGET_TRIPLES), \
  $(eval $(foreach stage,$(STAGES), \
   $(eval $(call DEF_CTEST_VARS,$(stage),$(target),$(host))))))))
N
Niko Matsakis 已提交
440

441
define DEF_RUN_COMPILETEST
442

443 444 445 446 447 448
CTEST_ARGS$(1)-T-$(2)-H-$(3)-$(4) := \
        $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3))	\
        --src-base $$(S)src/test/$$(CTEST_SRC_BASE_$(4))/ \
        --build-base $(3)/test/$$(CTEST_BUILD_BASE_$(4))/ \
        --mode $$(CTEST_MODE_$(4)) \
	$$(CTEST_RUNTOOL_$(4))
N
Niko Matsakis 已提交
449

450 451
check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4))

452 453
ifeq ($$(CTEST_DISABLE_$(4)),)

454
$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
455 456 457
		$$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
                $$(CTEST_DEPS_$(4)_$(1)-T-$(2)-H-$(3))
	@$$(call E, run $(4): $$<)
458
	$$(Q)$$(call CFG_RUN_CTEST_$(2),$(1),$$<,$(3)) \
459
		$$(CTEST_ARGS$(1)-T-$(2)-H-$(3)-$(4)) \
460 461
		--logfile $$(call TEST_LOG_FILE,$(1),$(2),$(3),$(4)) \
                && touch $$@
N
Niko Matsakis 已提交
462

463 464 465 466 467 468 469 470 471 472 473
else

$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
		$$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
                $$(CTEST_DEPS_$(4)_$(1)-T-$(2)-H-$(3))
	@$$(call E, run $(4): $$<)
	@$$(call E, warning: tests disabled: $$(CTEST_DISABLE_$(4)))
	touch $$@

endif

474
endef
N
Niko Matsakis 已提交
475

B
Brian Leibig 已提交
476
CTEST_NAMES = rpass rpass-full rfail cfail bench perf debuginfo
477

478
$(foreach host,$(CFG_HOST_TRIPLES), \
479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498
 $(eval $(foreach target,$(CFG_TARGET_TRIPLES), \
  $(eval $(foreach stage,$(STAGES), \
   $(eval $(foreach name,$(CTEST_NAMES), \
   $(eval $(call DEF_RUN_COMPILETEST,$(stage),$(target),$(host),$(name))))))))))

PRETTY_NAMES = pretty-rpass pretty-rpass-full pretty-rfail pretty-bench pretty-pretty
PRETTY_DEPS_pretty-rpass = $(RPASS_TESTS)
PRETTY_DEPS_pretty-rpass-full = $(RPASS_FULL_TESTS)
PRETTY_DEPS_pretty-rfail = $(RFAIL_TESTS)
PRETTY_DEPS_pretty-bench = $(BENCH_TESTS)
PRETTY_DEPS_pretty-pretty = $(PRETTY_TESTS)
PRETTY_DIRNAME_pretty-rpass = run-pass
PRETTY_DIRNAME_pretty-rpass-full = run-pass-full
PRETTY_DIRNAME_pretty-rfail = run-fail
PRETTY_DIRNAME_pretty-bench = bench
PRETTY_DIRNAME_pretty-pretty = pretty

define DEF_RUN_PRETTY_TEST

PRETTY_ARGS$(1)-T-$(2)-H-$(3)-$(4) :=			\
N
Niko Matsakis 已提交
499
		$$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3))	\
500 501
        --src-base $$(S)src/test/$$(PRETTY_DIRNAME_$(4))/ \
        --build-base $(3)/test/$$(PRETTY_DIRNAME_$(4))/ \
N
Niko Matsakis 已提交
502 503
        --mode pretty

504 505 506
check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4))

$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
507 508 509
	        $$(TEST_SREQ$(1)_T_$(2)_H_$(3))		\
	        $$(PRETTY_DEPS_$(4))
	@$$(call E, run pretty-rpass: $$<)
510
	$$(Q)$$(call CFG_RUN_CTEST_$(2),$(1),$$<,$(3)) \
511
		$$(PRETTY_ARGS$(1)-T-$(2)-H-$(3)-$(4)) \
512 513
		--logfile $$(call TEST_LOG_FILE,$(1),$(2),$(3),$(4)) \
                && touch $$@
N
Niko Matsakis 已提交
514

515
endef
N
Niko Matsakis 已提交
516

517
$(foreach host,$(CFG_HOST_TRIPLES), \
518 519 520 521
 $(foreach target,$(CFG_TARGET_TRIPLES), \
  $(foreach stage,$(STAGES), \
   $(foreach pretty-name,$(PRETTY_NAMES), \
    $(eval $(call DEF_RUN_PRETTY_TEST,$(stage),$(target),$(host),$(pretty-name)))))))
B
Brian Anderson 已提交
522

523
define DEF_RUN_DOC_TEST
524

525
DOC_TEST_ARGS$(1)-T-$(2)-H-$(3)-doc-$(4) := \
526 527 528
        $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3))	\
        --src-base $(3)/test/doc-$(4)/	\
        --build-base $(3)/test/doc-$(4)/	\
529 530
        --mode run-pass

531
check-stage$(1)-T-$(2)-H-$(3)-doc-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),doc-$(4))
532

533
$$(call TEST_OK_FILE,$(1),$(2),$(3),doc-$(4)): \
534 535 536
	        $$(TEST_SREQ$(1)_T_$(2)_H_$(3))		\
                doc-$(4)-extract$(3)
	@$$(call E, run doc-$(4): $$<)
537
	$$(Q)$$(call CFG_RUN_CTEST_$(2),$(1),$$<,$(3)) \
538
                $$(DOC_TEST_ARGS$(1)-T-$(2)-H-$(3)-doc-$(4)) \
539 540
		--logfile $$(call TEST_LOG_FILE,$(1),$(2),$(3),doc-$(4)) \
                && touch $$@
541

542
endef
543

544
$(foreach host,$(CFG_HOST_TRIPLES), \
545 546 547 548
 $(foreach target,$(CFG_TARGET_TRIPLES), \
  $(foreach stage,$(STAGES), \
   $(foreach docname,$(DOC_TEST_NAMES), \
    $(eval $(call DEF_RUN_DOC_TEST,$(stage),$(target),$(host),$(docname)))))))
549

550

551 552 553
######################################################################
# Extracting tests for docs
######################################################################
B
Brian Anderson 已提交
554

555
EXTRACT_TESTS := "$(CFG_PYTHON)" $(S)src/etc/extract-tests.py
B
Brian Anderson 已提交
556

557
define DEF_DOC_TEST_HOST
558

559 560 561 562
doc-$(2)-extract$(1):
	@$$(call E, extract: $(2) tests)
	$$(Q)rm -f $(1)/test/doc-$(2)/*.rs
	$$(Q)$$(EXTRACT_TESTS) $$(S)doc/$(2).md $(1)/test/doc-$(2)
563

564
endef
565

566
$(foreach host,$(CFG_HOST_TRIPLES), \
567 568
 $(foreach docname,$(DOC_TEST_NAMES), \
  $(eval $(call DEF_DOC_TEST_HOST,$(host),$(docname)))))
569

570

571 572 573
######################################################################
# Shortcut rules
######################################################################
574

575 576 577 578 579 580 581 582 583
TEST_GROUPS = \
	crates \
	$(foreach crate,$(TEST_CRATES),$(crate)) \
	rpass \
	rpass-full \
	rfail \
	cfail \
	bench \
	perf \
B
Brian Leibig 已提交
584
	debuginfo \
585 586 587 588 589 590 591 592 593 594 595 596 597
	doc \
	$(foreach docname,$(DOC_TEST_NAMES),$(docname)) \
	pretty \
	pretty-rpass \
	pretty-rpass-full \
	pretty-rfail \
	pretty-bench \
	pretty-pretty \
	$(NULL)

define DEF_CHECK_FOR_STAGE_AND_TARGET_AND_HOST
check-stage$(1)-T-$(2)-H-$(3): check-stage$(1)-T-$(2)-H-$(3)-exec
endef
598

599 600
$(foreach stage,$(STAGES), \
 $(foreach target,$(CFG_TARGET_TRIPLES), \
601
  $(foreach host,$(CFG_HOST_TRIPLES), \
602
   $(eval $(call DEF_CHECK_FOR_STAGE_AND_TARGET_AND_HOST,$(stage),$(target),$(host))))))
603

604 605 606
define DEF_CHECK_FOR_STAGE_AND_TARGET_AND_HOST_AND_GROUP
check-stage$(1)-T-$(2)-H-$(3)-$(4): check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec
endef
B
Brian Anderson 已提交
607

608 609
$(foreach stage,$(STAGES), \
 $(foreach target,$(CFG_TARGET_TRIPLES), \
610
  $(foreach host,$(CFG_HOST_TRIPLES), \
611 612
   $(foreach group,$(TEST_GROUPS), \
    $(eval $(call DEF_CHECK_FOR_STAGE_AND_TARGET_AND_HOST_AND_GROUP,$(stage),$(target),$(host),$(group)))))))
613

614
define DEF_CHECK_FOR_STAGE
615
check-stage$(1): check-stage$(1)-H-$$(CFG_BUILD_TRIPLE)
616
check-stage$(1)-H-all: $$(foreach target,$$(CFG_TARGET_TRIPLES), \
617 618
                           check-stage$(1)-H-$$(target))
endef
619

620 621
$(foreach stage,$(STAGES), \
 $(eval $(call DEF_CHECK_FOR_STAGE,$(stage))))
622

623
define DEF_CHECK_FOR_STAGE_AND_GROUP
624
check-stage$(1)-$(2): check-stage$(1)-H-$$(CFG_BUILD_TRIPLE)-$(2)
625
check-stage$(1)-H-all-$(2): $$(foreach target,$$(CFG_TARGET_TRIPLES), \
626 627
                               check-stage$(1)-H-$$(target)-$(2))
endef
628

629 630 631
$(foreach stage,$(STAGES), \
 $(foreach group,$(TEST_GROUPS), \
  $(eval $(call DEF_CHECK_FOR_STAGE_AND_GROUP,$(stage),$(group)))))
632

633 634

define DEF_CHECK_FOR_STAGE_AND_HOSTS
635
check-stage$(1)-H-$(2): $$(foreach target,$$(CFG_TARGET_TRIPLES), \
636
                           check-stage$(1)-T-$$(target)-H-$(2))
B
Brian Anderson 已提交
637
endef
638

639
$(foreach stage,$(STAGES), \
640
 $(foreach host,$(CFG_HOST_TRIPLES), \
641 642 643
  $(eval $(call DEF_CHECK_FOR_STAGE_AND_HOSTS,$(stage),$(host)))))

define DEF_CHECK_FOR_STAGE_AND_HOSTS_AND_GROUP
644
check-stage$(1)-H-$(2)-$(3): $$(foreach target,$$(CFG_TARGET_TRIPLES), \
645 646 647 648
                                check-stage$(1)-T-$$(target)-H-$(2)-$(3))
endef

$(foreach stage,$(STAGES), \
649
 $(foreach host,$(CFG_HOST_TRIPLES), \
650 651
  $(foreach group,$(TEST_GROUPS), \
   $(eval $(call DEF_CHECK_FOR_STAGE_AND_HOSTS_AND_GROUP,$(stage),$(host),$(group))))))
652

N
Niko Matsakis 已提交
653
######################################################################
654
# check-fast rules
N
Niko Matsakis 已提交
655
######################################################################
656

657
FT := run_pass_stage2
658
FT_LIB := $(call CFG_LIB_NAME_$(CFG_BUILD_TRIPLE),$(FT))
659 660
FT_DRIVER := $(FT)_driver

661
GENERATED += tmp/$(FT).rc tmp/$(FT_DRIVER).rs
N
Niko Matsakis 已提交
662

N
Niko Matsakis 已提交
663
tmp/$(FT).rc tmp/$(FT_DRIVER).rs: \
664
		$(RPASS_TESTS) \
N
Niko Matsakis 已提交
665 666
		$(S)src/etc/combine-tests.py
	@$(call E, check: building combined stage2 test runner)
667
	$(Q)$(CFG_PYTHON) $(S)src/etc/combine-tests.py
N
Niko Matsakis 已提交
668 669 670 671 672 673 674 675 676 677

define DEF_CHECK_FAST_FOR_T_H
# $(1) unused
# $(2) target triple
# $(3) host triple

$$(TLIB2_T_$(2)_H_$(3))/$$(FT_LIB): \
		tmp/$$(FT).rc \
		$$(SREQ2_T_$(2)_H_$(3))
	@$$(call E, compile_and_link: $$@)
N
Niko Matsakis 已提交
678
	$$(STAGE2_T_$(2)_H_$(3)) --lib -o $$@ $$<
N
Niko Matsakis 已提交
679

680
$(3)/test/$$(FT_DRIVER)-$(2)$$(X_$(2)): \
N
Niko Matsakis 已提交
681 682 683 684
		tmp/$$(FT_DRIVER).rs \
		$$(TLIB2_T_$(2)_H_$(3))/$$(FT_LIB) \
		$$(SREQ2_T_$(2)_H_$(3))
	@$$(call E, compile_and_link: $$@ $$<)
685
	$$(STAGE2_T_$(2)_H_$(3)) -o $$@ $$<
N
Niko Matsakis 已提交
686

N
Niko Matsakis 已提交
687
$(3)/test/$$(FT_DRIVER)-$(2).out: \
688
		$(3)/test/$$(FT_DRIVER)-$(2)$$(X_$(2)) \
N
Niko Matsakis 已提交
689
		$$(SREQ2_T_$(2)_H_$(3))
690
	$$(Q)$$(call CFG_RUN_TEST_$(2),$$<,$(2),$(3)) \
691
	--logfile tmp/$$(FT_DRIVER)-$(2).log
N
Niko Matsakis 已提交
692

693
check-fast-T-$(2)-H-$(3):     			\
N
Niko Matsakis 已提交
694
	$(3)/test/$$(FT_DRIVER)-$(2).out
N
Niko Matsakis 已提交
695 696 697

endef

698
$(foreach host,$(CFG_HOST_TRIPLES), \
N
Niko Matsakis 已提交
699 700 701
 $(eval $(foreach target,$(CFG_TARGET_TRIPLES), \
   $(eval $(call DEF_CHECK_FAST_FOR_T_H,,$(target),$(host))))))

702
check-fast: tidy check-fast-H-$(CFG_BUILD_TRIPLE)
N
Niko Matsakis 已提交
703 704 705 706 707 708

define DEF_CHECK_FAST_FOR_H

check-fast-H-$(1): 		check-fast-T-$(1)-H-$(1)

endef
N
Niko Matsakis 已提交
709

710 711
$(foreach host,$(CFG_HOST_TRIPLES),			\
 $(eval $(call DEF_CHECK_FAST_FOR_H,$(host))))
N
Niko Matsakis 已提交
712