tests.mk 29.0 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
TEST_TARGET_CRATES = std extra
18
TEST_HOST_CRATES = rust rusti rustpkg rustc rustdoc syntax
19
TEST_CRATES = $(TEST_TARGET_CRATES) $(TEST_HOST_CRATES)
G
Graydon Hoare 已提交
20

21
# Markdown files under doc/ that should have their code extracted and run
G
Graydon Hoare 已提交
22
DOC_TEST_NAMES = tutorial tutorial-ffi tutorial-macros tutorial-borrowed-ptr \
23
                 tutorial-tasks tutorial-conditions tutorial-container rust
24

25 26 27
######################################################################
# Environment configuration
######################################################################
28

B
Brian Anderson 已提交
29 30 31 32 33 34 35 36 37
# The arguments to all test runners
ifdef TESTNAME
  TESTARGS += $(TESTNAME)
endif

ifdef CHECK_XFAILS
  TESTARGS += --ignored
endif

38
TEST_BENCH = --bench
39

B
Brian Anderson 已提交
40 41 42
# Arguments to the cfail/rfail/rpass/bench tests
ifdef CFG_VALGRIND
  CTEST_RUNTOOL = --runtool "$(CFG_VALGRIND)"
43
  TEST_BENCH =
B
Brian Anderson 已提交
44
endif
45

46 47
ifdef NO_BENCH
  TEST_BENCH =
B
Brian Anderson 已提交
48
endif
49

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

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

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

61 62 63 64 65 66 67
# 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

68 69
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
70

71 72 73 74 75 76
TEST_RATCHET_FILE=tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4)-metrics.json
TEST_RATCHET_NOISE_PERCENT=10.0

# Whether to ratchet or merely save benchmarks
ifdef CFG_RATCHET_BENCH
CRATE_TEST_BENCH_ARGS=\
77
  --test $(TEST_BENCH) \
78 79 80 81
  --ratchet-metrics $(call TEST_RATCHET_FILE,$(1),$(2),$(3),$(4)) \
  --ratchet-noise-percent $(TEST_RATCHET_NOISE_PERCENT)
else
CRATE_TEST_BENCH_ARGS=\
82
  --test $(TEST_BENCH) \
83 84 85
  --save-metrics $(call TEST_RATCHET_FILE,$(1),$(2),$(3),$(4))
endif

86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
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))))

D
Daniel Micay 已提交
118
# Target platform specific variables
119
# for arm-linux-androidabi
120 121
define DEF_ADB_DEVICE_STATUS
CFG_ADB_DEVICE_STATUS=$(1)
122 123 124
endef

$(foreach target,$(CFG_TARGET_TRIPLES), \
125 126
  $(if $(findstring $(target),"arm-linux-androideabi"), \
    $(if $(findstring adb,$(CFG_ADB)), \
127
      $(if $(findstring device,$(shell $(CFG_ADB) devices 2>/dev/null | grep -E '^[_A-Za-z0-9-]+[[:blank:]]+device')), \
128 129 130 131 132 133
        $(info check: $(target) test enabled \
          $(info check: android device attached) \
          $(eval $(call DEF_ADB_DEVICE_STATUS, true))), \
        $(info check: $(target) test disabled \
          $(info check: android device not attached) \
          $(eval $(call DEF_ADB_DEVICE_STATUS, false))) \
134
      ), \
135 136 137 138
      $(info check: $(target) test disabled \
        $(info check: adb not found) \
        $(eval $(call DEF_ADB_DEVICE_STATUS, false))) \
    ), \
139 140 141
  ) \
)

142 143
ifeq ($(CFG_ADB_DEVICE_STATUS),true)
CFG_ADB_TEST_DIR=/data/tmp
144

145 146
$(info check: android device test dir $(CFG_ADB_TEST_DIR) ready \
 $(shell adb remount 1>/dev/null) \
147 148 149
 $(shell adb shell rm -r $(CFG_ADB_TEST_DIR) >/dev/null) \
 $(shell adb shell mkdir $(CFG_ADB_TEST_DIR)) \
 $(shell adb shell mkdir $(CFG_ADB_TEST_DIR)/tmp) \
150
 $(shell adb push $(S)src/etc/adb_run_wrapper.sh $(CFG_ADB_TEST_DIR) 1>/dev/null) \
151 152
 $(shell adb push $(CFG_ANDROID_CROSS_PATH)/arm-linux-androideabi/lib/armv7-a/libgnustl_shared.so \
                  $(CFG_ADB_TEST_DIR) 1>/dev/null) \
153 154 155 156 157 158
 $(shell adb push $(TLIB2_T_arm-linux-androideabi_H_$(CFG_BUILD_TRIPLE))/$(CFG_RUNTIME_arm-linux-androideabi) \
                  $(CFG_ADB_TEST_DIR)) \
 $(shell adb push $(TLIB2_T_arm-linux-androideabi_H_$(CFG_BUILD_TRIPLE))/$(STDLIB_GLOB_arm-linux-androideabi) \
                  $(CFG_ADB_TEST_DIR)) \
 $(shell adb push $(TLIB2_T_arm-linux-androideabi_H_$(CFG_BUILD_TRIPLE))/$(EXTRALIB_GLOB_arm-linux-androideabi) \
                  $(CFG_ADB_TEST_DIR)) \
159
 )
160 161
else
CFG_ADB_TEST_DIR=
162
endif
163 164


B
Brian Anderson 已提交
165 166 167 168
######################################################################
# Main test targets
######################################################################

169 170 171 172 173 174 175 176 177 178 179 180 181 182
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 \
183
	check-stage2-std check-stage2-extra check-stage2-rpass \
A
Alex Crichton 已提交
184
	check-stage2-rustpkg check-stage2-rusti \
185 186 187
	check-stage2-rfail check-stage2-cfail
	$(Q)$(CFG_PYTHON) $(S)src/etc/check-summary.py tmp/*.log

188 189
.PHONY: cleantmptestlogs cleantestlibs

190 191
cleantmptestlogs:
	$(Q)rm -f tmp/*.log
192

193
cleantestlibs:
194
	$(Q)find $(CFG_BUILD_TRIPLE)/test \
195 196 197 198 199 200 201
         -name '*.[odasS]' -o \
         -name '*.so' -o      \
         -name '*.dylib' -o   \
         -name '*.dll' -o     \
         -name '*.def' -o     \
         -name '*.bc' -o      \
         -name '*.dSYM' -o    \
202
         -name '*.libaux' -o      \
203
         -name '*.out' -o     \
B
Brian Leibig 已提交
204 205
         -name '*.err' -o     \
	 -name '*.debugger.script' \
206
         | xargs rm -rf
207

208

209 210 211
######################################################################
# Tidy
######################################################################
B
Brian Anderson 已提交
212

213
ifdef CFG_NOTIDY
B
Brian Anderson 已提交
214
tidy:
215
else
216 217 218 219

ALL_CS := $(wildcard $(S)src/rt/*.cpp \
                     $(S)src/rt/*/*.cpp \
                     $(S)src/rt/*/*/*.cpp \
220
                     $(S)src/rustllvm/*.cpp)
221
ALL_CS := $(filter-out $(S)src/rt/miniz.cpp \
222
                       $(S)src/rt/linenoise/linenoise.c \
B
Brian Anderson 已提交
223
                       $(S)src/rt/linenoise/utf8.c \
224 225 226 227
	,$(ALL_CS))
ALL_HS := $(wildcard $(S)src/rt/*.h \
                     $(S)src/rt/*/*.h \
                     $(S)src/rt/*/*/*.h \
228
                     $(S)src/rustllvm/*.h)
229 230 231 232 233
ALL_HS := $(filter-out $(S)src/rt/vg/valgrind.h \
                       $(S)src/rt/vg/memcheck.h \
                       $(S)src/rt/msvc/typeof.h \
                       $(S)src/rt/msvc/stdint.h \
                       $(S)src/rt/msvc/inttypes.h \
234
                       $(S)src/rt/linenoise/linenoise.h \
B
Brian Anderson 已提交
235
                       $(S)src/rt/linenoise/utf8.h \
236 237
	,$(ALL_HS))

238
# Run the tidy script in multiple parts to avoid huge 'echo' commands
239 240
tidy:
		@$(call E, check: formatting)
241
		$(Q)find $(S)src -name '*.r[sc]' \
242
		| grep '^$(S)src/test' -v \
243
		| xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py
244
		$(Q)find $(S)src/etc -name '*.py' \
245
		| xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py
246
		$(Q)echo $(ALL_CS) \
247
		| xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py
248
		$(Q)echo $(ALL_HS) \
249
		| xargs -n 10 $(CFG_PYTHON) $(S)src/etc/tidy.py
250

251
endif
252

253

B
Brian Anderson 已提交
254
######################################################################
255
# Sets of tests
B
Brian Anderson 已提交
256 257
######################################################################

258 259 260 261 262 263 264 265 266
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			\
267
	check-stage$(1)-T-$(2)-H-$(3)-debuginfo-exec \
268
	check-stage$(1)-T-$(2)-H-$(3)-codegen-exec \
269 270 271
	check-stage$(1)-T-$(2)-H-$(3)-doc-exec \
	check-stage$(1)-T-$(2)-H-$(3)-pretty-exec

272 273 274 275
# 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)),)

276 277 278 279
check-stage$(1)-T-$(2)-H-$(3)-crates-exec: \
	$$(foreach crate,$$(TEST_CRATES), \
           check-stage$(1)-T-$(2)-H-$(3)-$$(crate)-exec)

280 281 282 283 284 285 286 287
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

288 289 290 291 292 293 294 295 296 297
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
298

B
Brian Anderson 已提交
299 300
endef

301
$(foreach host,$(CFG_HOST_TRIPLES), \
302 303 304 305
 $(foreach target,$(CFG_TARGET_TRIPLES), \
  $(foreach stage,$(STAGES), \
    $(eval $(call DEF_TEST_SETS,$(stage),$(target),$(host))))))

B
Brian Anderson 已提交
306

307
######################################################################
308
# Crate testing
309 310
######################################################################

311
define TEST_RUNNER
312

313 314
# If NO_REBUILD is set then break the dependencies on extra so we can
# test crates without rebuilding std and extra first
315
ifeq ($(NO_REBUILD),)
316 317
STDTESTDEP_$(1)_$(2)_$(3) = $$(SREQ$(1)_T_$(2)_H_$(3)) \
                            $$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_EXTRALIB_$(2))
318 319 320 321
else
STDTESTDEP_$(1)_$(2)_$(3) =
endif

322 323
$(3)/stage$(1)/test/stdtest-$(2)$$(X_$(2)):			\
		$$(STDLIB_CRATE) $$(STDLIB_INPUTS)	\
324
		$$(STDTESTDEP_$(1)_$(2)_$(3))
325
	@$$(call E, compile_and_link: $$@)
326
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
327

328 329
$(3)/stage$(1)/test/extratest-$(2)$$(X_$(2)):			\
		$$(EXTRALIB_CRATE) $$(EXTRALIB_INPUTS)	\
330
		$$(STDTESTDEP_$(1)_$(2)_$(3))
B
Brian Anderson 已提交
331
	@$$(call E, compile_and_link: $$@)
N
Niko Matsakis 已提交
332
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
333

A
Alex Crichton 已提交
334
$(3)/stage$(1)/test/syntaxtest-$(2)$$(X_$(2)):			\
335
		$$(LIBSYNTAX_CRATE) $$(LIBSYNTAX_INPUTS)	\
336
		$$(STDTESTDEP_$(1)_$(2)_$(3))
337 338 339
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test

340
$(3)/stage$(1)/test/rustctest-$(2)$$(X_$(2)): CFG_COMPILER_TRIPLE = $(2)
A
Alex Crichton 已提交
341
$(3)/stage$(1)/test/rustctest-$(2)$$(X_$(2)):					\
342
		$$(COMPILER_CRATE) $$(COMPILER_INPUTS) \
343
		$$(SREQ$(1)_T_$(2)_H_$(3)) \
B
Brian Anderson 已提交
344 345
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_RUSTLLVM_$(2)) \
                $$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBSYNTAX_$(2))
B
Brian Anderson 已提交
346
	@$$(call E, compile_and_link: $$@)
N
Niko Matsakis 已提交
347
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
348

A
Alex Crichton 已提交
349
$(3)/stage$(1)/test/rustpkgtest-$(2)$$(X_$(2)):					\
350
		$$(RUSTPKG_LIB) $$(RUSTPKG_INPUTS)		\
351
		$$(SREQ$(1)_T_$(2)_H_$(3)) \
352
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBSYNTAX_$(2)) \
353
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2)) \
354 355
		$$(TBIN$(1)_T_$(2)_H_$(3))/rustpkg$$(X_$(2)) \
		$$(TBIN$(1)_T_$(2)_H_$(3))/rustc$$(X_$(2))
356 357
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
358

A
Alex Crichton 已提交
359
$(3)/stage$(1)/test/rustitest-$(2)$$(X_$(2)):					\
360
		$$(RUSTI_LIB) $$(RUSTI_INPUTS)		\
361
		$$(SREQ$(1)_T_$(2)_H_$(3)) \
362
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBSYNTAX_$(2)) \
B
Brian Anderson 已提交
363
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
364 365
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
366

A
Alex Crichton 已提交
367
$(3)/stage$(1)/test/rusttest-$(2)$$(X_$(2)):					\
368
		$$(RUST_LIB) $$(RUST_INPUTS)		\
369
		$$(SREQ$(1)_T_$(2)_H_$(3)) \
370 371 372
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTPKG_$(2)) \
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTDOC_$(2)) \
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTI_$(2)) \
B
Brian Anderson 已提交
373
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
374 375 376
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test

A
Alex Crichton 已提交
377
$(3)/stage$(1)/test/rustdoctest-$(2)$$(X_$(2)):					\
378
		$$(RUSTDOC_LIB) $$(RUSTDOC_INPUTS)		\
379
		$$(SREQ$(1)_T_$(2)_H_$(3)) \
380
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBSYNTAX_$(2)) \
B
Brian Anderson 已提交
381
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
382 383 384
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test

385 386
endef

387
$(foreach host,$(CFG_HOST_TRIPLES), \
388 389 390 391 392
 $(eval $(foreach target,$(CFG_TARGET_TRIPLES), \
  $(eval $(foreach stage,$(STAGES), \
   $(eval $(call TEST_RUNNER,$(stage),$(target),$(host))))))))

define DEF_TEST_CRATE_RULES
393 394
check-stage$(1)-T-$(2)-H-$(3)-$(4)-exec: $$(call TEST_OK_FILE,$(1),$(2),$(3),$(4))

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

397
$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
A
Alex Crichton 已提交
398
		$(3)/stage$(1)/test/$(4)test-$(2)$$(X_$(2))
399
	@$$(call E, run: $$<)
400
	$$(Q)$$(call CFG_RUN_TEST_$(2),$$<,$(2),$(3)) $$(TESTARGS)	\
401
	--logfile $$(call TEST_LOG_FILE,$(1),$(2),$(3),$(4)) \
402
	$$(call CRATE_TEST_BENCH_ARGS,$(1),$(2),$(3),$(4)) \
403
	&& touch $$@
404
endef
405

406 407 408 409
define DEF_TEST_CRATE_RULES_arm-linux-androideabi
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)): \
A
Alex Crichton 已提交
410
		$(3)/stage$(1)/test/$(4)test-$(2)$$(X_$(2))
411
	@$$(call E, run: $$< via adb)
412
	@$(CFG_ADB) push $$< $(CFG_ADB_TEST_DIR)
413 414
	@$(CFG_ADB) shell '(cd $(CFG_ADB_TEST_DIR); LD_LIBRARY_PATH=. \
		./$$(notdir $$<) \
415 416
		--logfile $(CFG_ADB_TEST_DIR)/check-stage$(1)-T-$(2)-H-$(3)-$(4).log \
		$$(call CRATE_TEST_BENCH_ARGS,$(1),$(2),$(3),$(4)))' \
417
		> tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp
418 419
	@cat tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp
	@touch tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).log
420 421
	@$(CFG_ADB) pull $(CFG_ADB_TEST_DIR)/check-stage$(1)-T-$(2)-H-$(3)-$(4).log tmp/
	@$(CFG_ADB) shell rm $(CFG_ADB_TEST_DIR)/check-stage$(1)-T-$(2)-H-$(3)-$(4).log
422
	@$(CFG_ADB) pull $(CFG_ADB_TEST_DIR)/$$(call TEST_RATCHET_FILE,$(1),$(2),$(3),$(4)) tmp/
423 424 425 426 427 428 429 430 431 432 433 434 435 436
	@if grep -q "result: ok" tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp; \
	then \
		rm tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp; \
		touch $$@; \
	else \
		rm tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp; \
		exit 101; \
	fi
endef

define DEF_TEST_CRATE_RULES_null
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)): \
A
Alex Crichton 已提交
437
		$(3)/stage$(1)/test/$(4)test-$(2)$$(X_$(2))
438 439 440 441
	@$$(call E, run: skipped $$< )
	@touch $$@
endef

442
$(foreach host,$(CFG_HOST_TRIPLES), \
443 444 445
 $(foreach target,$(CFG_TARGET_TRIPLES), \
  $(foreach stage,$(STAGES), \
   $(foreach crate, $(TEST_CRATES), \
446 447 448
    $(if $(findstring $(target),$(CFG_BUILD_TRIPLE)), \
     $(eval $(call DEF_TEST_CRATE_RULES,$(stage),$(target),$(host),$(crate))), \
     $(if $(findstring $(target),"arm-linux-androideabi"), \
449
      $(if $(findstring $(CFG_ADB_DEVICE_STATUS),"true"), \
450 451 452
       $(eval $(call DEF_TEST_CRATE_RULES_arm-linux-androideabi,$(stage),$(target),$(host),$(crate))), \
       $(eval $(call DEF_TEST_CRATE_RULES_null,$(stage),$(target),$(host),$(crate))) \
      ), \
453
      $(eval $(call DEF_TEST_CRATE_RULES,$(stage),$(target),$(host),$(crate))) \
D
Daniel Micay 已提交
454
     ))))))
455 456


457 458 459 460 461 462 463 464 465 466 467 468 469 470
######################################################################
# 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 已提交
471
DEBUGINFO_RS := $(wildcard $(S)src/test/debug-info/*.rs)
472 473
CODEGEN_RS := $(wildcard $(S)src/test/codegen/*.rs)
CODEGEN_CC := $(wildcard $(S)src/test/codegen/*.cc)
474

475 476 477
# perf tests are the same as bench tests only they run under
# a performance monitor.
PERF_RS := $(wildcard $(S)src/test/bench/*.rs)
478

479 480 481 482 483 484 485
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 已提交
486
DEBUGINFO_TESTS := $(DEBUGINFO_RS)
487
CODEGEN_TESTS := $(CODEGEN_RS) $(CODEGEN_CC)
B
Brian Anderson 已提交
488

489 490 491 492
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 已提交
493

494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518
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 已提交
519 520 521 522 523
CTEST_SRC_BASE_debuginfo = debug-info
CTEST_BUILD_BASE_debuginfo = debug-info
CTEST_MODE_debuginfo = debug-info
CTEST_RUNTOOL_debuginfo = $(CTEST_RUNTOOL)

524 525 526 527 528
CTEST_SRC_BASE_codegen = codegen
CTEST_BUILD_BASE_codegen = codegen
CTEST_MODE_codegen = codegen
CTEST_RUNTOOL_codegen = $(CTEST_RUNTOOL)

529 530 531 532
ifeq ($(CFG_GDB),)
CTEST_DISABLE_debuginfo = "no gdb found"
endif

533 534 535 536
ifeq ($(CFG_CLANG),)
CTEST_DISABLE_codegen = "no clang found"
endif

537 538 539 540
ifeq ($(CFG_OSTYPE),apple-darwin)
CTEST_DISABLE_debuginfo = "gdb on darwing needs root"
endif

541 542 543 544 545 546 547 548 549 550 551
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) = \
552
	$$(HBIN$(1)_H_$(3))/compiletest$$(X_$(3)) \
553
	$$(SREQ$(1)_T_$(2)_H_$(3))
B
Brian Anderson 已提交
554

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

557 558
# The tests select when to use debug configuration on their own;
# remove directive, if present, from CFG_RUSTC_FLAGS (issue #7898).
559 560 561 562 563 564 565 566 567
CTEST_RUSTC_FLAGS := $$(subst --cfg debug,,$$(CFG_RUSTC_FLAGS))

# The tests can not be optimized while the rest of the compiler is optimized, so
# filter out the optimization (if any) from rustc and then figure out if we need
# to be optimized
CTEST_RUSTC_FLAGS := $$(subst -O,,$$(CTEST_RUSTC_FLAGS))
ifndef CFG_DISABLE_OPTIMIZE_TESTS
CTEST_RUSTC_FLAGS += -O
endif
568

N
Niko Matsakis 已提交
569
CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) :=						\
N
Niko Matsakis 已提交
570 571
		--compile-lib-path $$(HLIB$(1)_H_$(3))				\
        --run-lib-path $$(TLIB$(1)_T_$(2)_H_$(3))			\
572
        --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3))			\
573 574
        --clang-path $(if $(CFG_CLANG),$(CFG_CLANG),clang) \
        --llvm-bin-path $(CFG_LLVM_INST_DIR_$(CFG_BUILD_TRIPLE))/bin \
575
        --aux-base $$(S)src/test/auxiliary/                 \
N
Niko Matsakis 已提交
576
        --stage-id stage$(1)-$(2)							\
577
        --target $(2)                                       \
578
        --adb-path=$(CFG_ADB)                          \
579
        --adb-test-dir=$(CFG_ADB_TEST_DIR)                  \
580
        --rustcflags "$(RUSTC_FLAGS_$(2)) $$(CTEST_RUSTC_FLAGS) --target=$(2)" \
N
Niko Matsakis 已提交
581 582
        $$(CTEST_TESTARGS)

583 584 585 586 587 588
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 已提交
589
CTEST_DEPS_debuginfo_$(1)-T-$(2)-H-$(3) = $$(DEBUGINFO_TESTS)
590
CTEST_DEPS_codegen_$(1)-T-$(2)-H-$(3) = $$(CODEGEN_TESTS)
N
Niko Matsakis 已提交
591

592
endef
N
Niko Matsakis 已提交
593

594
$(foreach host,$(CFG_HOST_TRIPLES), \
595 596 597
 $(eval $(foreach target,$(CFG_TARGET_TRIPLES), \
  $(eval $(foreach stage,$(STAGES), \
   $(eval $(call DEF_CTEST_VARS,$(stage),$(target),$(host))))))))
N
Niko Matsakis 已提交
598

599
define DEF_RUN_COMPILETEST
600

601 602 603 604
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))/ \
605
        --ratchet-metrics $(call TEST_RATCHET_FILE,$(1),$(2),$(3),$(4)) \
606 607
        --mode $$(CTEST_MODE_$(4)) \
	$$(CTEST_RUNTOOL_$(4))
N
Niko Matsakis 已提交
608

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

611 612
ifeq ($$(CTEST_DISABLE_$(4)),)

613
$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
614 615
		$$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
                $$(CTEST_DEPS_$(4)_$(1)-T-$(2)-H-$(3))
616
	@$$(call E, run $(4) [$(2)]: $$<)
617
	$$(Q)$$(call CFG_RUN_CTEST_$(2),$(1),$$<,$(3)) \
618
		$$(CTEST_ARGS$(1)-T-$(2)-H-$(3)-$(4)) \
619 620
		--logfile $$(call TEST_LOG_FILE,$(1),$(2),$(3),$(4)) \
                && touch $$@
N
Niko Matsakis 已提交
621

622 623 624 625 626
else

$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
		$$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
                $$(CTEST_DEPS_$(4)_$(1)-T-$(2)-H-$(3))
627
	@$$(call E, run $(4) [$(2)]: $$<)
628 629 630 631 632
	@$$(call E, warning: tests disabled: $$(CTEST_DISABLE_$(4)))
	touch $$@

endif

633
endef
N
Niko Matsakis 已提交
634

635
CTEST_NAMES = rpass rpass-full rfail cfail bench perf debuginfo codegen
636

637
$(foreach host,$(CFG_HOST_TRIPLES), \
638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657
 $(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 已提交
658
		$$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3))	\
659 660
        --src-base $$(S)src/test/$$(PRETTY_DIRNAME_$(4))/ \
        --build-base $(3)/test/$$(PRETTY_DIRNAME_$(4))/ \
N
Niko Matsakis 已提交
661 662
        --mode pretty

663 664 665
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)): \
666 667
	        $$(TEST_SREQ$(1)_T_$(2)_H_$(3))		\
	        $$(PRETTY_DEPS_$(4))
668
	@$$(call E, run pretty-rpass [$(2)]: $$<)
669
	$$(Q)$$(call CFG_RUN_CTEST_$(2),$(1),$$<,$(3)) \
670
		$$(PRETTY_ARGS$(1)-T-$(2)-H-$(3)-$(4)) \
671 672
		--logfile $$(call TEST_LOG_FILE,$(1),$(2),$(3),$(4)) \
                && touch $$@
N
Niko Matsakis 已提交
673

674
endef
N
Niko Matsakis 已提交
675

676
$(foreach host,$(CFG_HOST_TRIPLES), \
677 678 679 680
 $(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 已提交
681

682
define DEF_RUN_DOC_TEST
683

684
DOC_TEST_ARGS$(1)-T-$(2)-H-$(3)-doc-$(4) := \
685 686 687
        $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3))	\
        --src-base $(3)/test/doc-$(4)/	\
        --build-base $(3)/test/doc-$(4)/	\
688 689
        --mode run-pass

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

692
$$(call TEST_OK_FILE,$(1),$(2),$(3),doc-$(4)): \
693 694
	        $$(TEST_SREQ$(1)_T_$(2)_H_$(3))		\
                doc-$(4)-extract$(3)
695
	@$$(call E, run doc-$(4) [$(2)]: $$<)
696
	$$(Q)$$(call CFG_RUN_CTEST_$(2),$(1),$$<,$(3)) \
697
                $$(DOC_TEST_ARGS$(1)-T-$(2)-H-$(3)-doc-$(4)) \
698 699
		--logfile $$(call TEST_LOG_FILE,$(1),$(2),$(3),doc-$(4)) \
                && touch $$@
700

701
endef
702

703
$(foreach host,$(CFG_HOST_TRIPLES), \
704 705 706 707
 $(foreach target,$(CFG_TARGET_TRIPLES), \
  $(foreach stage,$(STAGES), \
   $(foreach docname,$(DOC_TEST_NAMES), \
    $(eval $(call DEF_RUN_DOC_TEST,$(stage),$(target),$(host),$(docname)))))))
708

709

710 711 712
######################################################################
# Extracting tests for docs
######################################################################
B
Brian Anderson 已提交
713

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

716
define DEF_DOC_TEST_HOST
717

718 719 720 721
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)
722

723
endef
724

725
$(foreach host,$(CFG_HOST_TRIPLES), \
726 727
 $(foreach docname,$(DOC_TEST_NAMES), \
  $(eval $(call DEF_DOC_TEST_HOST,$(host),$(docname)))))
728

729

730 731 732
######################################################################
# Shortcut rules
######################################################################
733

734 735 736 737 738 739 740 741 742
TEST_GROUPS = \
	crates \
	$(foreach crate,$(TEST_CRATES),$(crate)) \
	rpass \
	rpass-full \
	rfail \
	cfail \
	bench \
	perf \
B
Brian Leibig 已提交
743
	debuginfo \
744
	codegen \
745
	doc \
746
	$(foreach docname,$(DOC_TEST_NAMES),doc-$(docname)) \
747 748 749 750 751 752 753 754 755 756 757
	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
758

759 760
$(foreach stage,$(STAGES), \
 $(foreach target,$(CFG_TARGET_TRIPLES), \
761
  $(foreach host,$(CFG_HOST_TRIPLES), \
762
   $(eval $(call DEF_CHECK_FOR_STAGE_AND_TARGET_AND_HOST,$(stage),$(target),$(host))))))
763

764 765 766
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 已提交
767

768 769
$(foreach stage,$(STAGES), \
 $(foreach target,$(CFG_TARGET_TRIPLES), \
770
  $(foreach host,$(CFG_HOST_TRIPLES), \
771 772
   $(foreach group,$(TEST_GROUPS), \
    $(eval $(call DEF_CHECK_FOR_STAGE_AND_TARGET_AND_HOST_AND_GROUP,$(stage),$(target),$(host),$(group)))))))
773

774
define DEF_CHECK_FOR_STAGE
775
check-stage$(1): check-stage$(1)-H-$$(CFG_BUILD_TRIPLE)
776
check-stage$(1)-H-all: $$(foreach target,$$(CFG_TARGET_TRIPLES), \
777 778
                           check-stage$(1)-H-$$(target))
endef
779

780 781
$(foreach stage,$(STAGES), \
 $(eval $(call DEF_CHECK_FOR_STAGE,$(stage))))
782

783
define DEF_CHECK_FOR_STAGE_AND_GROUP
784
check-stage$(1)-$(2): check-stage$(1)-H-$$(CFG_BUILD_TRIPLE)-$(2)
785
check-stage$(1)-H-all-$(2): $$(foreach target,$$(CFG_TARGET_TRIPLES), \
786 787
                               check-stage$(1)-H-$$(target)-$(2))
endef
788

789 790 791
$(foreach stage,$(STAGES), \
 $(foreach group,$(TEST_GROUPS), \
  $(eval $(call DEF_CHECK_FOR_STAGE_AND_GROUP,$(stage),$(group)))))
792

793 794

define DEF_CHECK_FOR_STAGE_AND_HOSTS
795
check-stage$(1)-H-$(2): $$(foreach target,$$(CFG_TARGET_TRIPLES), \
796
                           check-stage$(1)-T-$$(target)-H-$(2))
B
Brian Anderson 已提交
797
endef
798

799
$(foreach stage,$(STAGES), \
800
 $(foreach host,$(CFG_HOST_TRIPLES), \
801 802 803
  $(eval $(call DEF_CHECK_FOR_STAGE_AND_HOSTS,$(stage),$(host)))))

define DEF_CHECK_FOR_STAGE_AND_HOSTS_AND_GROUP
804
check-stage$(1)-H-$(2)-$(3): $$(foreach target,$$(CFG_TARGET_TRIPLES), \
805 806 807 808
                                check-stage$(1)-T-$$(target)-H-$(2)-$(3))
endef

$(foreach stage,$(STAGES), \
809
 $(foreach host,$(CFG_HOST_TRIPLES), \
810 811
  $(foreach group,$(TEST_GROUPS), \
   $(eval $(call DEF_CHECK_FOR_STAGE_AND_HOSTS_AND_GROUP,$(stage),$(host),$(group))))))
812

N
Niko Matsakis 已提交
813
######################################################################
814
# check-fast rules
N
Niko Matsakis 已提交
815
######################################################################
816

817
FT := run_pass_stage2
818
FT_LIB := $(call CFG_LIB_NAME_$(CFG_BUILD_TRIPLE),$(FT))
819 820
FT_DRIVER := $(FT)_driver

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

N
Niko Matsakis 已提交
823
tmp/$(FT).rc tmp/$(FT_DRIVER).rs: \
824
		$(RPASS_TESTS) \
N
Niko Matsakis 已提交
825 826
		$(S)src/etc/combine-tests.py
	@$(call E, check: building combined stage2 test runner)
827
	$(Q)$(CFG_PYTHON) $(S)src/etc/combine-tests.py
N
Niko Matsakis 已提交
828 829 830 831 832 833 834 835 836 837

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 已提交
838
	$$(STAGE2_T_$(2)_H_$(3)) --lib -o $$@ $$<
N
Niko Matsakis 已提交
839

840
$(3)/test/$$(FT_DRIVER)-$(2)$$(X_$(2)): \
N
Niko Matsakis 已提交
841 842 843 844
		tmp/$$(FT_DRIVER).rs \
		$$(TLIB2_T_$(2)_H_$(3))/$$(FT_LIB) \
		$$(SREQ2_T_$(2)_H_$(3))
	@$$(call E, compile_and_link: $$@ $$<)
845
	$$(STAGE2_T_$(2)_H_$(3)) -o $$@ $$<
N
Niko Matsakis 已提交
846

N
Niko Matsakis 已提交
847
$(3)/test/$$(FT_DRIVER)-$(2).out: \
848
		$(3)/test/$$(FT_DRIVER)-$(2)$$(X_$(2)) \
N
Niko Matsakis 已提交
849
		$$(SREQ2_T_$(2)_H_$(3))
850
	$$(Q)$$(call CFG_RUN_TEST_$(2),$$<,$(2),$(3)) \
851
	--logfile tmp/$$(FT_DRIVER)-$(2).log
N
Niko Matsakis 已提交
852

853
check-fast-T-$(2)-H-$(3):     			\
N
Niko Matsakis 已提交
854
	$(3)/test/$$(FT_DRIVER)-$(2).out
N
Niko Matsakis 已提交
855 856 857

endef

858
$(foreach host,$(CFG_HOST_TRIPLES), \
N
Niko Matsakis 已提交
859 860 861
 $(eval $(foreach target,$(CFG_TARGET_TRIPLES), \
   $(eval $(call DEF_CHECK_FAST_FOR_T_H,,$(target),$(host))))))

862
check-fast: tidy check-fast-H-$(CFG_BUILD_TRIPLE)
N
Niko Matsakis 已提交
863 864 865 866 867 868

define DEF_CHECK_FAST_FOR_H

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

endef
N
Niko Matsakis 已提交
869

870 871
$(foreach host,$(CFG_HOST_TRIPLES),			\
 $(eval $(call DEF_CHECK_FAST_FOR_H,$(host))))