tests.mk 28.8 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 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
# The arguments to all test runners
ifdef TESTNAME
  TESTARGS += $(TESTNAME)
endif

ifdef CHECK_XFAILS
  TESTARGS += --ignored
endif

37
TEST_BENCH = --bench
38

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

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

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

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

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

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

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

70 71 72 73 74 75
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=\
76
  --test $(TEST_BENCH) \
77 78 79 80
  --ratchet-metrics $(call TEST_RATCHET_FILE,$(1),$(2),$(3),$(4)) \
  --ratchet-noise-percent $(TEST_RATCHET_NOISE_PERCENT)
else
CRATE_TEST_BENCH_ARGS=\
81
  --test $(TEST_BENCH) \
82 83 84
  --save-metrics $(call TEST_RATCHET_FILE,$(1),$(2),$(3),$(4))
endif

85 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
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 已提交
117
# Target platform specific variables
118
# for arm-linux-androidabi
119 120
define DEF_ADB_DEVICE_STATUS
CFG_ADB_DEVICE_STATUS=$(1)
121 122 123
endef

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

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

144 145 146
$(info check: android device test dir $(CFG_ADB_TEST_DIR) ready \
 $(shell adb remount 1>/dev/null) \
 $(shell adb shell mkdir $(CFG_ADB_TEST_DIR) 1>/dev/null) \
147
 $(shell adb shell rm -rf $(CFG_ADB_TEST_DIR)/* 1>/dev/null) \
148
 $(shell adb push $(S)src/etc/adb_run_wrapper.sh $(CFG_ADB_TEST_DIR) 1>/dev/null) \
149 150
 $(shell adb push $(CFG_ANDROID_CROSS_PATH)/arm-linux-androideabi/lib/armv7-a/libgnustl_shared.so \
                  $(CFG_ADB_TEST_DIR) 1>/dev/null) \
151 152 153 154 155 156
 $(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)) \
157
 )
158 159
else
CFG_ADB_TEST_DIR=
160
endif
161 162


B
Brian Anderson 已提交
163 164 165 166
######################################################################
# Main test targets
######################################################################

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

186 187
.PHONY: cleantmptestlogs cleantestlibs

188 189
cleantmptestlogs:
	$(Q)rm -f tmp/*.log
190

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

206

207 208 209
######################################################################
# Tidy
######################################################################
B
Brian Anderson 已提交
210

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

ALL_CS := $(wildcard $(S)src/rt/*.cpp \
                     $(S)src/rt/*/*.cpp \
                     $(S)src/rt/*/*/*.cpp \
218
                     $(S)src/rustllvm/*.cpp)
219
ALL_CS := $(filter-out $(S)src/rt/miniz.cpp \
220
                       $(S)src/rt/linenoise/linenoise.c \
B
Brian Anderson 已提交
221
                       $(S)src/rt/linenoise/utf8.c \
222 223 224 225
	,$(ALL_CS))
ALL_HS := $(wildcard $(S)src/rt/*.h \
                     $(S)src/rt/*/*.h \
                     $(S)src/rt/*/*/*.h \
226
                     $(S)src/rustllvm/*.h)
227 228 229 230 231
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 \
232
                       $(S)src/rt/linenoise/linenoise.h \
B
Brian Anderson 已提交
233
                       $(S)src/rt/linenoise/utf8.h \
234 235
	,$(ALL_HS))

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

249
endif
250

251

B
Brian Anderson 已提交
252
######################################################################
253
# Sets of tests
B
Brian Anderson 已提交
254 255
######################################################################

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

270 271 272 273
# 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)),)

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

278 279 280 281 282 283 284 285
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

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

B
Brian Anderson 已提交
297 298
endef

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

B
Brian Anderson 已提交
304

305
######################################################################
306
# Crate testing
307 308
######################################################################

309
define TEST_RUNNER
310

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

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

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

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

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

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

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

A
Alex Crichton 已提交
365
$(3)/stage$(1)/test/rusttest-$(2)$$(X_$(2)):					\
366
		$$(RUST_LIB) $$(RUST_INPUTS)		\
367
		$$(SREQ$(1)_T_$(2)_H_$(3)) \
368 369 370
		$$(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 已提交
371
		$$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC_$(2))
372 373 374
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test

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

383 384
endef

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

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

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

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

404 405 406 407
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 已提交
408
		$(3)/stage$(1)/test/$(4)test-$(2)$$(X_$(2))
409
	@$$(call E, run: $$< via adb)
410 411 412
	@$(CFG_ADB) push $$< $(CFG_ADB_TEST_DIR)
	@$(CFG_ADB) shell LD_LIBRARY_PATH=$(CFG_ADB_TEST_DIR) \
        $(CFG_ADB_TEST_DIR)/`echo $$< | sed 's/.*\///'` \
413 414 415 416
		--logfile $(CFG_ADB_TEST_DIR)/check-stage$(1)-T-$(2)-H-$(3)-$(4).log > \
		tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp
	@cat tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).tmp
	@touch tmp/check-stage$(1)-T-$(2)-H-$(3)-$(4).log
417 418
	@$(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
419 420 421 422 423 424 425 426 427 428 429 430 431 432
	@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 已提交
433
		$(3)/stage$(1)/test/$(4)test-$(2)$$(X_$(2))
434 435 436 437
	@$$(call E, run: skipped $$< )
	@touch $$@
endef

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


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

471 472 473
# perf tests are the same as bench tests only they run under
# a performance monitor.
PERF_RS := $(wildcard $(S)src/test/bench/*.rs)
474

475 476 477 478 479 480 481
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 已提交
482
DEBUGINFO_TESTS := $(DEBUGINFO_RS)
483
CODEGEN_TESTS := $(CODEGEN_RS) $(CODEGEN_CC)
B
Brian Anderson 已提交
484

485 486 487 488
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 已提交
489

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

520 521 522 523 524
CTEST_SRC_BASE_codegen = codegen
CTEST_BUILD_BASE_codegen = codegen
CTEST_MODE_codegen = codegen
CTEST_RUNTOOL_codegen = $(CTEST_RUNTOOL)

525 526 527 528
ifeq ($(CFG_GDB),)
CTEST_DISABLE_debuginfo = "no gdb found"
endif

529 530 531 532
ifeq ($(CFG_CLANG),)
CTEST_DISABLE_codegen = "no clang found"
endif

533 534 535 536
ifeq ($(CFG_OSTYPE),apple-darwin)
CTEST_DISABLE_debuginfo = "gdb on darwing needs root"
endif

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

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

553 554
# The tests select when to use debug configuration on their own;
# remove directive, if present, from CFG_RUSTC_FLAGS (issue #7898).
555 556 557 558 559 560 561 562 563
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
564

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

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

588
endef
N
Niko Matsakis 已提交
589

590
$(foreach host,$(CFG_HOST_TRIPLES), \
591 592 593
 $(eval $(foreach target,$(CFG_TARGET_TRIPLES), \
  $(eval $(foreach stage,$(STAGES), \
   $(eval $(call DEF_CTEST_VARS,$(stage),$(target),$(host))))))))
N
Niko Matsakis 已提交
594

595
define DEF_RUN_COMPILETEST
596

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

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

607 608
ifeq ($$(CTEST_DISABLE_$(4)),)

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

618 619 620 621 622
else

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

endif

629
endef
N
Niko Matsakis 已提交
630

631
CTEST_NAMES = rpass rpass-full rfail cfail bench perf debuginfo codegen
632

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

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

670
endef
N
Niko Matsakis 已提交
671

672
$(foreach host,$(CFG_HOST_TRIPLES), \
673 674 675 676
 $(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 已提交
677

678
define DEF_RUN_DOC_TEST
679

680
DOC_TEST_ARGS$(1)-T-$(2)-H-$(3)-doc-$(4) := \
681 682 683
        $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3))	\
        --src-base $(3)/test/doc-$(4)/	\
        --build-base $(3)/test/doc-$(4)/	\
684 685
        --mode run-pass

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

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

697
endef
698

699
$(foreach host,$(CFG_HOST_TRIPLES), \
700 701 702 703
 $(foreach target,$(CFG_TARGET_TRIPLES), \
  $(foreach stage,$(STAGES), \
   $(foreach docname,$(DOC_TEST_NAMES), \
    $(eval $(call DEF_RUN_DOC_TEST,$(stage),$(target),$(host),$(docname)))))))
704

705

706 707 708
######################################################################
# Extracting tests for docs
######################################################################
B
Brian Anderson 已提交
709

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

712
define DEF_DOC_TEST_HOST
713

714 715 716 717
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)
718

719
endef
720

721
$(foreach host,$(CFG_HOST_TRIPLES), \
722 723
 $(foreach docname,$(DOC_TEST_NAMES), \
  $(eval $(call DEF_DOC_TEST_HOST,$(host),$(docname)))))
724

725

726 727 728
######################################################################
# Shortcut rules
######################################################################
729

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

755 756
$(foreach stage,$(STAGES), \
 $(foreach target,$(CFG_TARGET_TRIPLES), \
757
  $(foreach host,$(CFG_HOST_TRIPLES), \
758
   $(eval $(call DEF_CHECK_FOR_STAGE_AND_TARGET_AND_HOST,$(stage),$(target),$(host))))))
759

760 761 762
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 已提交
763

764 765
$(foreach stage,$(STAGES), \
 $(foreach target,$(CFG_TARGET_TRIPLES), \
766
  $(foreach host,$(CFG_HOST_TRIPLES), \
767 768
   $(foreach group,$(TEST_GROUPS), \
    $(eval $(call DEF_CHECK_FOR_STAGE_AND_TARGET_AND_HOST_AND_GROUP,$(stage),$(target),$(host),$(group)))))))
769

770
define DEF_CHECK_FOR_STAGE
771
check-stage$(1): check-stage$(1)-H-$$(CFG_BUILD_TRIPLE)
772
check-stage$(1)-H-all: $$(foreach target,$$(CFG_TARGET_TRIPLES), \
773 774
                           check-stage$(1)-H-$$(target))
endef
775

776 777
$(foreach stage,$(STAGES), \
 $(eval $(call DEF_CHECK_FOR_STAGE,$(stage))))
778

779
define DEF_CHECK_FOR_STAGE_AND_GROUP
780
check-stage$(1)-$(2): check-stage$(1)-H-$$(CFG_BUILD_TRIPLE)-$(2)
781
check-stage$(1)-H-all-$(2): $$(foreach target,$$(CFG_TARGET_TRIPLES), \
782 783
                               check-stage$(1)-H-$$(target)-$(2))
endef
784

785 786 787
$(foreach stage,$(STAGES), \
 $(foreach group,$(TEST_GROUPS), \
  $(eval $(call DEF_CHECK_FOR_STAGE_AND_GROUP,$(stage),$(group)))))
788

789 790

define DEF_CHECK_FOR_STAGE_AND_HOSTS
791
check-stage$(1)-H-$(2): $$(foreach target,$$(CFG_TARGET_TRIPLES), \
792
                           check-stage$(1)-T-$$(target)-H-$(2))
B
Brian Anderson 已提交
793
endef
794

795
$(foreach stage,$(STAGES), \
796
 $(foreach host,$(CFG_HOST_TRIPLES), \
797 798 799
  $(eval $(call DEF_CHECK_FOR_STAGE_AND_HOSTS,$(stage),$(host)))))

define DEF_CHECK_FOR_STAGE_AND_HOSTS_AND_GROUP
800
check-stage$(1)-H-$(2)-$(3): $$(foreach target,$$(CFG_TARGET_TRIPLES), \
801 802 803 804
                                check-stage$(1)-T-$$(target)-H-$(2)-$(3))
endef

$(foreach stage,$(STAGES), \
805
 $(foreach host,$(CFG_HOST_TRIPLES), \
806 807
  $(foreach group,$(TEST_GROUPS), \
   $(eval $(call DEF_CHECK_FOR_STAGE_AND_HOSTS_AND_GROUP,$(stage),$(host),$(group))))))
808

N
Niko Matsakis 已提交
809
######################################################################
810
# check-fast rules
N
Niko Matsakis 已提交
811
######################################################################
812

813
FT := run_pass_stage2
814
FT_LIB := $(call CFG_LIB_NAME_$(CFG_BUILD_TRIPLE),$(FT))
815 816
FT_DRIVER := $(FT)_driver

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

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

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

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

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

849
check-fast-T-$(2)-H-$(3):     			\
N
Niko Matsakis 已提交
850
	$(3)/test/$$(FT_DRIVER)-$(2).out
N
Niko Matsakis 已提交
851 852 853

endef

854
$(foreach host,$(CFG_HOST_TRIPLES), \
N
Niko Matsakis 已提交
855 856 857
 $(eval $(foreach target,$(CFG_TARGET_TRIPLES), \
   $(eval $(call DEF_CHECK_FAST_FOR_T_H,,$(target),$(host))))))

858
check-fast: tidy check-fast-H-$(CFG_BUILD_TRIPLE)
N
Niko Matsakis 已提交
859 860 861 862 863 864

define DEF_CHECK_FAST_FOR_H

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

endef
N
Niko Matsakis 已提交
865

866 867
$(foreach host,$(CFG_HOST_TRIPLES),			\
 $(eval $(call DEF_CHECK_FAST_FOR_H,$(host))))