/mk/tests.mk

http://github.com/jruderman/rust · Makefile · 787 lines · 610 code · 132 blank · 45 comment · 0 complexity · 79e856476c206a91152419f8d042ec50 MD5 · raw file

  1. ######################################################################
  2. # Testing variables
  3. ######################################################################
  4. RPASS_RC := $(wildcard $(S)src/test/run-pass/*.rc)
  5. RPASS_RS := $(wildcard $(S)src/test/run-pass/*.rs)
  6. RPASS_FULL_RC := $(wildcard $(S)src/test/run-pass-fulldeps/*.rc)
  7. RPASS_FULL_RS := $(wildcard $(S)src/test/run-pass-fulldeps/*.rs)
  8. RFAIL_RC := $(wildcard $(S)src/test/run-fail/*.rc)
  9. RFAIL_RS := $(wildcard $(S)src/test/run-fail/*.rs)
  10. CFAIL_RC := $(wildcard $(S)src/test/compile-fail/*.rc)
  11. CFAIL_RS := $(wildcard $(S)src/test/compile-fail/*.rs)
  12. BENCH_RS := $(wildcard $(S)src/test/bench/*.rs)
  13. PRETTY_RS := $(wildcard $(S)src/test/pretty/*.rs)
  14. # perf tests are the same as bench tests only they run under
  15. # a performance monitor.
  16. PERF_RS := $(wildcard $(S)src/test/bench/*.rs)
  17. RPASS_TESTS := $(RPASS_RC) $(RPASS_RS)
  18. RPASS_FULL_TESTS := $(RPASS_FULL_RC) $(RPASS_FULL_RS)
  19. RFAIL_TESTS := $(RFAIL_RC) $(RFAIL_RS)
  20. CFAIL_TESTS := $(CFAIL_RC) $(CFAIL_RS)
  21. BENCH_TESTS := $(BENCH_RS)
  22. PERF_TESTS := $(PERF_RS)
  23. PRETTY_TESTS := $(PRETTY_RS)
  24. FT := run_pass_stage2
  25. FT_LIB := $(call CFG_LIB_NAME,$(FT))
  26. FT_DRIVER := $(FT)_driver
  27. # The arguments to all test runners
  28. ifdef TESTNAME
  29. TESTARGS += $(TESTNAME)
  30. endif
  31. ifdef CHECK_XFAILS
  32. TESTARGS += --ignored
  33. endif
  34. # Arguments to the cfail/rfail/rpass/bench tests
  35. ifdef CFG_VALGRIND
  36. CTEST_RUNTOOL = --runtool "$(CFG_VALGRIND)"
  37. endif
  38. # Arguments to the perf tests
  39. ifdef CFG_PERF_TOOL
  40. CTEST_PERF_RUNTOOL = --runtool "$(CFG_PERF_TOOL)"
  41. endif
  42. CTEST_TESTARGS := $(TESTARGS)
  43. ifdef VERBOSE
  44. CTEST_TESTARGS += --verbose
  45. endif
  46. # Run the compiletest runner itself under valgrind
  47. ifdef CTEST_VALGRIND
  48. CFG_RUN_CTEST=$(call CFG_RUN_TEST,$(2),$(3))
  49. else
  50. CFG_RUN_CTEST=$(call CFG_RUN,$(TLIB$(1)_T_$(3)_H_$(3)),$(2))
  51. endif
  52. # If we're running perf then set this environment variable
  53. # to put the benchmarks into 'hard mode'
  54. ifeq ($(MAKECMDGOALS),perf)
  55. RUST_BENCH=1
  56. export RUST_BENCH
  57. endif
  58. ######################################################################
  59. # Main test targets
  60. ######################################################################
  61. .PHONY: cleantmptestlogs cleantestlibs
  62. cleantmptestlogs:
  63. $(Q)rm -f tmp/*.log
  64. cleantestlibs:
  65. $(Q)find $(CFG_HOST_TRIPLE)/test \
  66. -name '*.[odasS]' -o \
  67. -name '*.so' -o \
  68. -name '*.dylib' -o \
  69. -name '*.dll' -o \
  70. -name '*.def' -o \
  71. -name '*.bc' -o \
  72. -name '*.dSYM' -o \
  73. -name '*.libaux' -o \
  74. -name '*.out' -o \
  75. -name '*.err' \
  76. | xargs rm -rf
  77. check: cleantestlibs cleantmptestlogs tidy all check-stage2
  78. $(Q)$(S)src/etc/check-summary.py tmp/*.log
  79. check-notidy: cleantestlibs cleantmptestlogs all check-stage2
  80. $(Q)$(S)src/etc/check-summary.py tmp/*.log
  81. check-full: cleantestlibs cleantmptestlogs tidy \
  82. all check-stage1 check-stage2 check-stage3
  83. $(Q)$(S)src/etc/check-summary.py tmp/*.log
  84. check-test: cleantestlibs cleantmptestlogs all check-stage2-rfail
  85. $(Q)$(S)src/etc/check-summary.py tmp/*.log
  86. check-lite: cleantestlibs cleantmptestlogs rustc-stage2 \
  87. check-stage2-core check-stage2-std check-stage2-rpass \
  88. check-stage2-rfail check-stage2-cfail
  89. $(Q)$(S)src/etc/check-summary.py tmp/*.log
  90. # Run the tidy script in multiple parts to avoid huge 'echo' commands
  91. ifdef CFG_NOTIDY
  92. tidy:
  93. else
  94. ALL_CS := $(wildcard $(S)src/rt/*.cpp \
  95. $(S)src/rt/*/*.cpp \
  96. $(S)src/rt/*/*/*.cpp \
  97. $(S)srcrustllvm/*.cpp)
  98. ALL_CS := $(filter-out $(S)src/rt/bigint/bigint_ext.cpp \
  99. $(S)src/rt/bigint/bigint_int.cpp \
  100. ,$(ALL_CS))
  101. ALL_HS := $(wildcard $(S)src/rt/*.h \
  102. $(S)src/rt/*/*.h \
  103. $(S)src/rt/*/*/*.h \
  104. $(S)srcrustllvm/*.h)
  105. ALL_HS := $(filter-out $(S)src/rt/vg/valgrind.h \
  106. $(S)src/rt/vg/memcheck.h \
  107. $(S)src/rt/uthash/uthash.h \
  108. $(S)src/rt/uthash/utlist.h \
  109. $(S)src/rt/msvc/typeof.h \
  110. $(S)src/rt/msvc/stdint.h \
  111. $(S)src/rt/msvc/inttypes.h \
  112. $(S)src/rt/bigint/bigint.h \
  113. ,$(ALL_HS))
  114. tidy:
  115. @$(call E, check: formatting)
  116. $(Q)find $(S)src -name '*.r[sc]' \
  117. | grep '^$(S)src/test' -v \
  118. | xargs -n 10 python $(S)src/etc/tidy.py
  119. $(Q)find $(S)src/etc -name '*.py' \
  120. | xargs -n 10 python $(S)src/etc/tidy.py
  121. $(Q)echo $(ALL_CS) \
  122. | xargs -n 10 python $(S)src/etc/tidy.py
  123. $(Q)echo $(ALL_HS) \
  124. | xargs -n 10 python $(S)src/etc/tidy.py
  125. endif
  126. ######################################################################
  127. # Extracting tests for docs
  128. ######################################################################
  129. EXTRACT_TESTS := "$(CFG_PYTHON)" $(S)src/etc/extract-tests.py
  130. define DEF_DOC_TEST_HOST
  131. doc-tutorial-extract$(1):
  132. @$$(call E, extract: tutorial tests)
  133. $$(Q)rm -f $(1)/test/doc-tutorial/*.rs
  134. $$(Q)$$(EXTRACT_TESTS) $$(S)doc/tutorial.md $(1)/test/doc-tutorial
  135. doc-ref-extract$(1):
  136. @$$(call E, extract: ref tests)
  137. $$(Q)rm -f $(1)/test/doc-ref/*.rs
  138. $$(Q)$$(EXTRACT_TESTS) $$(S)doc/rust.md $(1)/test/doc-ref
  139. endef
  140. $(foreach host,$(CFG_TARGET_TRIPLES), \
  141. $(eval $(call DEF_DOC_TEST_HOST,$(host))))
  142. ######################################################################
  143. # Rules for the test runners
  144. ######################################################################
  145. define TEST_STAGEN
  146. # All the per-stage build rules you might want to call from the
  147. # command line.
  148. #
  149. # $(1) is the stage number
  150. # $(2) is the target triple to test
  151. # $(3) is the host triple to test
  152. # Prerequisites for compiletest tests
  153. TEST_SREQ$(1)_T_$(2)_H_$(3) = \
  154. $$(HBIN$(1)_H_$(3))/compiletest$$(X) \
  155. $$(SREQ$(1)_T_$(2)_H_$(3))
  156. # Prerequisites for compiletest tests that have deps on librustc, etc
  157. FULL_TEST_SREQ$(1)_T_$(2)_H_$(3) = \
  158. $$(HBIN$(1)_H_$(3))/compiletest$$(X) \
  159. $$(SREQ$(1)_T_$(2)_H_$(3)) \
  160. $$(TLIBRUSTC_DEFAULT$(1)_T_$(2)_H_$(3))
  161. check-stage$(1)-T-$(2)-H-$(3): tidy \
  162. check-stage$(1)-T-$(2)-H-$(3)-rustc \
  163. check-stage$(1)-T-$(2)-H-$(3)-core \
  164. check-stage$(1)-T-$(2)-H-$(3)-std \
  165. check-stage$(1)-T-$(2)-H-$(3)-rpass \
  166. check-stage$(1)-T-$(2)-H-$(3)-rpass-full \
  167. check-stage$(1)-T-$(2)-H-$(3)-rfail \
  168. check-stage$(1)-T-$(2)-H-$(3)-cfail \
  169. check-stage$(1)-T-$(2)-H-$(3)-bench \
  170. check-stage$(1)-T-$(2)-H-$(3)-pretty \
  171. check-stage$(1)-T-$(2)-H-$(3)-rustdoc \
  172. check-stage$(1)-T-$(2)-H-$(3)-cargo \
  173. check-stage$(1)-T-$(2)-H-$(3)-doc-tutorial \
  174. check-stage$(1)-T-$(2)-H-$(3)-doc-ref
  175. check-stage$(1)-T-$(2)-H-$(3)-core: \
  176. check-stage$(1)-T-$(2)-H-$(3)-core-dummy
  177. check-stage$(1)-T-$(2)-H-$(3)-std: \
  178. check-stage$(1)-T-$(2)-H-$(3)-std-dummy
  179. check-stage$(1)-T-$(2)-H-$(3)-rustc: \
  180. check-stage$(1)-T-$(2)-H-$(3)-rustc-dummy
  181. check-stage$(1)-T-$(2)-H-$(3)-cfail: \
  182. check-stage$(1)-T-$(2)-H-$(3)-cfail-dummy
  183. check-stage$(1)-T-$(2)-H-$(3)-rfail: \
  184. check-stage$(1)-T-$(2)-H-$(3)-rfail-dummy
  185. check-stage$(1)-T-$(2)-H-$(3)-rpass: \
  186. check-stage$(1)-T-$(2)-H-$(3)-rpass-dummy
  187. check-stage$(1)-T-$(2)-H-$(3)-rpass-full: \
  188. check-stage$(1)-T-$(2)-H-$(3)-rpass-full-dummy
  189. check-stage$(1)-T-$(2)-H-$(3)-bench: \
  190. check-stage$(1)-T-$(2)-H-$(3)-bench-dummy
  191. check-stage$(1)-T-$(2)-H-$(3)-perf: \
  192. check-stage$(1)-T-$(2)-H-$(3)-perf-dummy
  193. check-stage$(1)-T-$(2)-H-$(3)-pretty: \
  194. check-stage$(1)-T-$(2)-H-$(3)-pretty-rpass \
  195. check-stage$(1)-T-$(2)-H-$(3)-pretty-rpass-full \
  196. check-stage$(1)-T-$(2)-H-$(3)-pretty-rfail \
  197. check-stage$(1)-T-$(2)-H-$(3)-pretty-bench \
  198. check-stage$(1)-T-$(2)-H-$(3)-pretty-pretty
  199. check-stage$(1)-T-$(2)-H-$(3)-pretty-rpass: \
  200. check-stage$(1)-T-$(2)-H-$(3)-pretty-rpass-dummy
  201. check-stage$(1)-T-$(2)-H-$(3)-pretty-rpass-full: \
  202. check-stage$(1)-T-$(2)-H-$(3)-pretty-rpass-full-dummy
  203. check-stage$(1)-T-$(2)-H-$(3)-pretty-rfail: \
  204. check-stage$(1)-T-$(2)-H-$(3)-pretty-rfail-dummy
  205. check-stage$(1)-T-$(2)-H-$(3)-pretty-bench: \
  206. check-stage$(1)-T-$(2)-H-$(3)-pretty-bench-dummy
  207. check-stage$(1)-T-$(2)-H-$(3)-pretty-pretty: \
  208. check-stage$(1)-T-$(2)-H-$(3)-pretty-pretty-dummy
  209. check-stage$(1)-T-$(2)-H-$(3)-rustdoc: \
  210. check-stage$(1)-T-$(2)-H-$(3)-rustdoc-dummy
  211. check-stage$(1)-T-$(2)-H-$(3)-cargo: \
  212. check-stage$(1)-T-$(2)-H-$(3)-cargo-dummy
  213. check-stage$(1)-T-$(2)-H-$(3)-doc-tutorial: \
  214. check-stage$(1)-T-$(2)-H-$(3)-doc-tutorial-dummy
  215. check-stage$(1)-T-$(2)-H-$(3)-doc-ref: \
  216. check-stage$(1)-T-$(2)-H-$(3)-doc-ref-dummy
  217. # Rules for the core library test runner
  218. $(3)/test/coretest.stage$(1)-$(2)$$(X): \
  219. $$(CORELIB_CRATE) $$(CORELIB_INPUTS) \
  220. $$(SREQ$(1)_T_$(2)_H_$(3))
  221. @$$(call E, compile_and_link: $$@)
  222. $$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
  223. check-stage$(1)-T-$(2)-H-$(3)-core-dummy: \
  224. $(3)/test/coretest.stage$(1)-$(2)$$(X)
  225. @$$(call E, run: $$<)
  226. $$(Q)$$(call CFG_RUN_TEST,$$<,$(2),$(3)) $$(TESTARGS) \
  227. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-core.log
  228. # Rules for the standard library test runner
  229. $(3)/test/stdtest.stage$(1)-$(2)$$(X): \
  230. $$(STDLIB_CRATE) $$(STDLIB_INPUTS) \
  231. $$(SREQ$(1)_T_$(2)_H_$(3))
  232. @$$(call E, compile_and_link: $$@)
  233. $$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
  234. check-stage$(1)-T-$(2)-H-$(3)-std-dummy: \
  235. $(3)/test/stdtest.stage$(1)-$(2)$$(X)
  236. @$$(call E, run: $$<)
  237. $$(Q)$$(call CFG_RUN_TEST,$$<,$(2),$(3)) $$(TESTARGS) \
  238. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-std.log
  239. # Rules for the rustc test runner
  240. $(3)/test/rustctest.stage$(1)-$(2)$$(X): \
  241. $$(COMPILER_CRATE) \
  242. $$(COMPILER_INPUTS) \
  243. $$(SREQ$(1)_T_$(2)_H_$(3)) \
  244. $$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_RUSTLLVM)
  245. @$$(call E, compile_and_link: $$@)
  246. $$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
  247. check-stage$(1)-T-$(2)-H-$(3)-rustc-dummy: \
  248. $(3)/test/rustctest.stage$(1)-$(2)$$(X)
  249. @$$(call E, run: $$<)
  250. $$(Q)$$(call CFG_RUN_TEST,$$<,$(2),$(3)) $$(TESTARGS) \
  251. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-rustc.log
  252. # Rules for the rustdoc test runner
  253. $(3)/test/rustdoctest.stage$(1)-$(2)$$(X): \
  254. $$(RUSTDOC_CRATE) $$(RUSTDOC_INPUTS) \
  255. $$(TSREQ$(1)_T_$(2)_H_$(3)) \
  256. $$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_CORELIB) \
  257. $$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_STDLIB) \
  258. $$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC)
  259. @$$(call E, compile_and_link: $$@)
  260. $$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
  261. check-stage$(1)-T-$(2)-H-$(3)-rustdoc-dummy: \
  262. $(3)/test/rustdoctest.stage$(1)-$(2)$$(X)
  263. @$$(call E, run: $$<)
  264. $$(Q)$$(call CFG_RUN_TEST,$$<,$(2),$(3)) $$(TESTARGS) \
  265. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-rustdoc.log
  266. # Rules for the cargo test runner
  267. $(3)/test/cargotest.stage$(1)-$(2)$$(X): \
  268. $$(CARGO_CRATE) $$(CARGO_INPUTS) \
  269. $$(TSREQ$(1)_T_$(2)_H_$(3)) \
  270. $$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_CORELIB) \
  271. $$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_STDLIB) \
  272. $$(TLIB$(1)_T_$(2)_H_$(3))/$$(CFG_LIBRUSTC)
  273. @$$(call E, compile_and_link: $$@)
  274. $$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< --test
  275. check-stage$(1)-T-$(2)-H-$(3)-cargo-dummy: \
  276. $(3)/test/cargotest.stage$(1)-$(2)$$(X)
  277. @$$(call E, run: $$<)
  278. $$(Q)$$(call CFG_RUN_TEST,$$<,$(2),$(3)) $$(TESTARGS) \
  279. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-cargo.log
  280. # Rules for the cfail/rfail/rpass/bench/perf test runner
  281. CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) := \
  282. --compile-lib-path $$(HLIB$(1)_H_$(3)) \
  283. --run-lib-path $$(TLIB$(1)_T_$(2)_H_$(3)) \
  284. --rustc-path $$(HBIN$(1)_H_$(3))/rustc$$(X) \
  285. --aux-base $$(S)src/test/auxiliary/ \
  286. --stage-id stage$(1)-$(2) \
  287. --rustcflags "$$(CFG_RUSTC_FLAGS) --target=$(2)" \
  288. $$(CTEST_TESTARGS)
  289. CFAIL_ARGS$(1)-T-$(2)-H-$(3) := \
  290. $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3)) \
  291. --src-base $$(S)src/test/compile-fail/ \
  292. --build-base $(3)/test/compile-fail/ \
  293. --mode compile-fail
  294. RFAIL_ARGS$(1)-T-$(2)-H-$(3) := \
  295. $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3)) \
  296. --src-base $$(S)src/test/run-fail/ \
  297. --build-base $(3)/test/run-fail/ \
  298. --mode run-fail \
  299. $$(CTEST_RUNTOOL)
  300. RPASS_ARGS$(1)-T-$(2)-H-$(3) := \
  301. $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3)) \
  302. --src-base $$(S)src/test/run-pass/ \
  303. --build-base $(3)/test/run-pass/ \
  304. --mode run-pass \
  305. $$(CTEST_RUNTOOL)
  306. RPASS_FULL_ARGS$(1)-T-$(2)-H-$(3) := \
  307. $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3)) \
  308. --src-base $$(S)src/test/run-pass-fulldeps/ \
  309. --build-base $(3)/test/run-pass-fulldeps/ \
  310. --mode run-pass \
  311. $$(CTEST_RUNTOOL)
  312. BENCH_ARGS$(1)-T-$(2)-H-$(3) := \
  313. $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3)) \
  314. --src-base $$(S)src/test/bench/ \
  315. --build-base $(3)/test/bench/ \
  316. --mode run-pass \
  317. $$(CTEST_RUNTOOL)
  318. PERF_ARGS$(1)-T-$(2)-H-$(3) := \
  319. $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3)) \
  320. --src-base $$(S)src/test/bench/ \
  321. --build-base $(3)/test/perf/ \
  322. --mode run-pass \
  323. $$(CTEST_PERF_RUNTOOL)
  324. PRETTY_RPASS_ARGS$(1)-T-$(2)-H-$(3) := \
  325. $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3)) \
  326. --src-base $$(S)src/test/run-pass/ \
  327. --build-base $(3)/test/run-pass/ \
  328. --mode pretty
  329. PRETTY_RPASS_FULL_ARGS$(1)-T-$(2)-H-$(3) := \
  330. $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3)) \
  331. --src-base $$(S)src/test/run-pass-fulldeps/ \
  332. --build-base $(3)/test/run-pass-fulldeps/ \
  333. --mode pretty
  334. PRETTY_RFAIL_ARGS$(1)-T-$(2)-H-$(3) := \
  335. $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3)) \
  336. --src-base $$(S)src/test/run-fail/ \
  337. --build-base $(3)/test/run-fail/ \
  338. --mode pretty
  339. PRETTY_BENCH_ARGS$(1)-T-$(2)-H-$(3) := \
  340. $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3)) \
  341. --src-base $$(S)src/test/bench/ \
  342. --build-base $(3)/test/bench/ \
  343. --mode pretty
  344. PRETTY_PRETTY_ARGS$(1)-T-$(2)-H-$(3) := \
  345. $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3)) \
  346. --src-base $$(S)src/test/pretty/ \
  347. --build-base $(3)/test/pretty/ \
  348. --mode pretty
  349. DOC_TUTORIAL_ARGS$(1)-T-$(2)-H-$(3) := \
  350. $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3)) \
  351. --src-base $(3)/test/doc-tutorial/ \
  352. --build-base $(3)/test/doc-tutorial/ \
  353. --mode run-pass
  354. DOC_REF_ARGS$(1)-T-$(2)-H-$(3) := \
  355. $$(CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3)) \
  356. --src-base $(3)/test/doc-ref/ \
  357. --build-base $(3)/test/doc-ref/ \
  358. --mode run-pass
  359. check-stage$(1)-T-$(2)-H-$(3)-cfail-dummy: \
  360. $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
  361. $$(CFAIL_TESTS)
  362. @$$(call E, run cfail: $$<)
  363. $$(Q)$$(call CFG_RUN_CTEST,$(1),$$<,$(3)) \
  364. $$(CFAIL_ARGS$(1)-T-$(2)-H-$(3)) \
  365. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-cfail.log
  366. check-stage$(1)-T-$(2)-H-$(3)-rfail-dummy: \
  367. $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
  368. $$(RFAIL_TESTS)
  369. @$$(call E, run rfail: $$<)
  370. $$(Q)$$(call CFG_RUN_CTEST,$(1),$$<,$(3)) \
  371. $$(RFAIL_ARGS$(1)-T-$(2)-H-$(3)) \
  372. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-rfail.log
  373. check-stage$(1)-T-$(2)-H-$(3)-rpass-dummy: \
  374. $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
  375. $$(RPASS_TESTS)
  376. @$$(call E, run rpass-full: $$<)
  377. $$(Q)$$(call CFG_RUN_CTEST,$(1),$$<,$(3)) \
  378. $$(RPASS_ARGS$(1)-T-$(2)-H-$(3)) \
  379. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-rpass.log
  380. check-stage$(1)-T-$(2)-H-$(3)-rpass-full-dummy: \
  381. $$(FULL_TEST_SREQ$(1)_T_$(2)_H_$(3)) \
  382. $$(RPASS_FULL_TESTS)
  383. @$$(call E, run rpass: $$<)
  384. $$(Q)$$(call CFG_RUN_CTEST,$(1),$$<,$(3)) \
  385. $$(RPASS_FULL_ARGS$(1)-T-$(2)-H-$(3)) \
  386. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-rpass-full.log
  387. check-stage$(1)-T-$(2)-H-$(3)-bench-dummy: \
  388. $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
  389. $$(BENCH_TESTS)
  390. @$$(call E, run bench: $$<)
  391. $$(Q)$$(call CFG_RUN_CTEST,$(1),$$<,$(3)) \
  392. $$(BENCH_ARGS$(1)-T-$(2)-H-$(3)) \
  393. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-bench.log
  394. check-stage$(1)-T-$(2)-H-$(3)-perf-dummy: \
  395. $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
  396. $$(BENCH_TESTS)
  397. @$$(call E, perf: $$<)
  398. $$(Q)$$(call CFG_RUN_CTEST,$(1),$$<,$(3)) \
  399. $$(PERF_ARGS$(1)-T-$(2)-H-$(3)) \
  400. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-perf.log
  401. check-stage$(1)-T-$(2)-H-$(3)-pretty-rpass-dummy: \
  402. $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
  403. $$(RPASS_TESTS)
  404. @$$(call E, run pretty-rpass: $$<)
  405. $$(Q)$$(call CFG_RUN_CTEST,$(1),$$<,$(3)) \
  406. $$(PRETTY_RPASS_ARGS$(1)-T-$(2)-H-$(3)) \
  407. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-pretty-rpass.log
  408. check-stage$(1)-T-$(2)-H-$(3)-pretty-rpass-full-dummy: \
  409. $$(FULL_TEST_SREQ$(1)_T_$(2)_H_$(3)) \
  410. $$(RPASS_FULL_TESTS)
  411. @$$(call E, run pretty-rpass-full: $$<)
  412. $$(Q)$$(call CFG_RUN_CTEST,$(1),$$<,$(3)) \
  413. $$(PRETTY_RPASS_FULL_ARGS$(1)-T-$(2)-H-$(3)) \
  414. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-pretty-rpass-full.log
  415. check-stage$(1)-T-$(2)-H-$(3)-pretty-rfail-dummy: \
  416. $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
  417. $$(RFAIL_TESTS)
  418. @$$(call E, run pretty-rfail: $$<)
  419. $$(Q)$$(call CFG_RUN_CTEST,$(1),$$<,$(3)) \
  420. $$(PRETTY_RFAIL_ARGS$(1)-T-$(2)-H-$(3)) \
  421. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-pretty-rfail.log
  422. check-stage$(1)-T-$(2)-H-$(3)-pretty-bench-dummy: \
  423. $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
  424. $$(BENCH_TESTS)
  425. @$$(call E, run pretty-bench: $$<)
  426. $$(Q)$$(call CFG_RUN_CTEST,$(1),$$<,$(3)) \
  427. $$(PRETTY_BENCH_ARGS$(1)-T-$(2)-H-$(3)) \
  428. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-pretty-bench.log
  429. check-stage$(1)-T-$(2)-H-$(3)-pretty-pretty-dummy: \
  430. $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
  431. $$(PRETTY_TESTS)
  432. @$$(call E, run pretty-pretty: $$<)
  433. $$(Q)$$(call CFG_RUN_CTEST,$(1),$$<,$(3)) \
  434. $$(PRETTY_PRETTY_ARGS$(1)-T-$(2)-H-$(3)) \
  435. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-pretty-pretty.log
  436. check-stage$(1)-T-$(2)-H-$(3)-doc-tutorial-dummy: \
  437. $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
  438. doc-tutorial-extract$(3)
  439. @$$(call E, run doc-tutorial: $$<)
  440. $$(Q)$$(call CFG_RUN_CTEST,$(1),$$<,$(3)) \
  441. $$(DOC_TUTORIAL_ARGS$(1)-T-$(2)-H-$(3)) \
  442. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-doc-tutorial.log
  443. check-stage$(1)-T-$(2)-H-$(3)-doc-ref-dummy: \
  444. $$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
  445. doc-ref-extract$(3)
  446. @$$(call E, run doc-ref: $$<)
  447. $$(Q)$$(call CFG_RUN_CTEST,$(1),$$<,$(3)) \
  448. $$(DOC_REF_ARGS$(1)-T-$(2)-H-$(3)) \
  449. --logfile tmp/check-stage$(1)-T-$(2)-H-$(3)-doc-ref.log
  450. endef
  451. # Instantiate the template for stage 0, 1, 2, 3
  452. $(foreach host,$(CFG_TARGET_TRIPLES), \
  453. $(eval $(foreach target,$(CFG_TARGET_TRIPLES), \
  454. $(eval $(foreach stage,$(STAGES), \
  455. $(eval $(call TEST_STAGEN,$(stage),$(target),$(host))))))))
  456. ######################################################################
  457. # Fast-test rules
  458. ######################################################################
  459. GENERATED += tmp/$(FT).rc tmp/$(FT_DRIVER).rs
  460. tmp/$(FT).rc tmp/$(FT_DRIVER).rs: \
  461. $(RPASS_TESTS) \
  462. $(S)src/etc/combine-tests.py
  463. @$(call E, check: building combined stage2 test runner)
  464. $(Q)$(S)src/etc/combine-tests.py
  465. define DEF_CHECK_FAST_FOR_T_H
  466. # $(1) unused
  467. # $(2) target triple
  468. # $(3) host triple
  469. $$(TLIB2_T_$(2)_H_$(3))/$$(FT_LIB): \
  470. tmp/$$(FT).rc \
  471. $$(SREQ2_T_$(2)_H_$(3))
  472. @$$(call E, compile_and_link: $$@)
  473. $$(STAGE2_T_$(2)_H_$(3)) --lib -o $$@ $$<
  474. $(3)/test/$$(FT_DRIVER)-$(2)$$(X): \
  475. tmp/$$(FT_DRIVER).rs \
  476. $$(TLIB2_T_$(2)_H_$(3))/$$(FT_LIB) \
  477. $$(SREQ2_T_$(2)_H_$(3))
  478. @$$(call E, compile_and_link: $$@ $$<)
  479. $$(STAGE2_T_$(2)_H_$(3)) -o $$@ $$<
  480. $(3)/test/$$(FT_DRIVER)-$(2).out: \
  481. $(3)/test/$$(FT_DRIVER)-$(2)$$(X) \
  482. $$(SREQ2_T_$(2)_H_$(3))
  483. $$(Q)$$(call CFG_RUN_TEST,$$<,$(2),$(3)) \
  484. --logfile tmp/$$(FT_DRIVER)-$(2).log
  485. check-fast-T-$(2)-H-$(3): tidy \
  486. check-stage2-T-$(2)-H-$(3)-rustc \
  487. check-stage2-T-$(2)-H-$(3)-core \
  488. check-stage2-T-$(2)-H-$(3)-std \
  489. $(3)/test/$$(FT_DRIVER)-$(2).out
  490. endef
  491. $(foreach host,$(CFG_TARGET_TRIPLES), \
  492. $(eval $(foreach target,$(CFG_TARGET_TRIPLES), \
  493. $(eval $(call DEF_CHECK_FAST_FOR_T_H,,$(target),$(host))))))
  494. ######################################################################
  495. # Shortcut rules
  496. ######################################################################
  497. define DEF_CHECK_FOR_STAGE_H
  498. check-stage$(1)-H-$(2): \
  499. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  500. check-stage$(1)-T-$$(target)-H-$(2))
  501. check-stage$(1)-H-$(2)-perf: \
  502. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  503. check-stage$(1)-T-$$(target)-H-$(2)-perf)
  504. check-stage$(1)-H-$(2)-rustc: \
  505. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  506. check-stage$(1)-T-$$(target)-H-$(2)-rustc)
  507. check-stage$(1)-H-$(2)-core: \
  508. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  509. check-stage$(1)-T-$$(target)-H-$(2)-core)
  510. check-stage$(1)-H-$(2)-std: \
  511. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  512. check-stage$(1)-T-$$(target)-H-$(2)-std)
  513. check-stage$(1)-H-$(2)-rpass: \
  514. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  515. check-stage$(1)-T-$$(target)-H-$(2)-rpass)
  516. check-stage$(1)-H-$(2)-rpass-full: \
  517. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  518. check-stage$(1)-T-$$(target)-H-$(2)-rpass-full)
  519. check-stage$(1)-H-$(2)-rfail: \
  520. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  521. check-stage$(1)-T-$$(target)-H-$(2)-rfail)
  522. check-stage$(1)-H-$(2)-cfail: \
  523. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  524. check-stage$(1)-T-$$(target)-H-$(2)-cfail)
  525. check-stage$(1)-H-$(2)-bench: \
  526. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  527. check-stage$(1)-T-$$(target)-H-$(2)-bench)
  528. check-stage$(1)-H-$(2)-pretty: \
  529. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  530. check-stage$(1)-T-$$(target)-H-$(2)-pretty)
  531. check-stage$(1)-H-$(2)-pretty-rpass: \
  532. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  533. check-stage$(1)-T-$$(target)-H-$(2)-pretty-rpass)
  534. check-stage$(1)-H-$(2)-pretty-rpass-full: \
  535. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  536. check-stage$(1)-T-$$(target)-H-$(2)-pretty-rpass-full)
  537. check-stage$(1)-H-$(2)-pretty-rfail: \
  538. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  539. check-stage$(1)-T-$$(target)-H-$(2)-pretty-rfail)
  540. check-stage$(1)-H-$(2)-pretty-bench: \
  541. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  542. check-stage$(1)-T-$$(target)-H-$(2)-pretty-bench)
  543. check-stage$(1)-H-$(2)-pretty-pretty: \
  544. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  545. check-stage$(1)-T-$$(target)-H-$(2)-pretty-pretty)
  546. check-stage$(1)-H-$(2)-rustdoc: \
  547. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  548. check-stage$(1)-T-$$(target)-H-$(2)-rustdoc)
  549. check-stage$(1)-H-$(2)-cargo: \
  550. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  551. check-stage$(1)-T-$$(target)-H-$(2)-cargo)
  552. check-stage$(1)-H-$(2)-doc-tutorial: \
  553. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  554. check-stage$(1)-T-$$(target)-H-$(2)-doc-tutorial)
  555. check-stage$(1)-H-$(2)-doc-ref: \
  556. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  557. check-stage$(1)-T-$$(target)-H-$(2)-doc-ref)
  558. endef
  559. $(foreach stage,$(STAGES), \
  560. $(eval $(foreach target,$(CFG_TARGET_TRIPLES), \
  561. $(eval $(call DEF_CHECK_FOR_STAGE_H,$(stage),$(target))))))
  562. define DEF_CHECK_FAST_FOR_H
  563. check-fast-H-$(1): check-fast-T-$(1)-H-$(1)
  564. endef
  565. $(foreach target,$(CFG_TARGET_TRIPLES), \
  566. $(eval $(call DEF_CHECK_FAST_FOR_H,$(target))))
  567. define DEF_CHECK_ALL_FOR_STAGE
  568. check-stage$(1)-H-all: \
  569. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  570. check-stage$(1)-H-$$(target))
  571. check-stage$(1)-H-all-perf: \
  572. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  573. check-stage$(1)-H-$$(target)-perf)
  574. check-stage$(1)-H-all-rustc: \
  575. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  576. check-stage$(1)-H-$$(target)-rustc)
  577. check-stage$(1)-H-all-core: \
  578. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  579. check-stage$(1)-H-$$(target)-core)
  580. check-stage$(1)-H-all-std: \
  581. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  582. check-stage$(1)-H-$$(target)-std)
  583. check-stage$(1)-H-all-rpass: \
  584. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  585. check-stage$(1)-H-$$(target)-rpass)
  586. check-stage$(1)-H-all-rpass-full: \
  587. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  588. check-stage$(1)-H-$$(target)-rpass-full)
  589. check-stage$(1)-H-all-rfail: \
  590. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  591. check-stage$(1)-H-$$(target)-rfail)
  592. check-stage$(1)-H-all-cfail: \
  593. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  594. check-stage$(1)-H-$$(target)-cfail)
  595. check-stage$(1)-H-all-bench: \
  596. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  597. check-stage$(1)-H-$$(target)-bench)
  598. check-stage$(1)-H-all-pretty: \
  599. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  600. check-stage$(1)-H-$$(target)-pretty)
  601. check-stage$(1)-H-all-pretty-rpass: \
  602. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  603. check-stage$(1)-H-$$(target)-pretty-rpass)
  604. check-stage$(1)-H-all-pretty-rpass-full: \
  605. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  606. check-stage$(1)-H-$$(target)-pretty-rpass-full)
  607. check-stage$(1)-H-all-pretty-rfail: \
  608. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  609. check-stage$(1)-H-$$(target)-pretty-rfail)
  610. check-stage$(1)-H-all-pretty-bench: \
  611. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  612. check-stage$(1)-H-$$(target)-pretty-bench)
  613. check-stage$(1)-H-all-pretty-pretty: \
  614. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  615. check-stage$(1)-H-$$(target)-pretty-pretty)
  616. check-stage$(1)-H-all-rustdoc: \
  617. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  618. check-stage$(1)-H-$$(target)-rustdoc)
  619. check-stage$(1)-H-all-cargo: \
  620. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  621. check-stage$(1)-H-$$(target)-cargo)
  622. check-stage$(1)-H-all-doc-tutorial: \
  623. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  624. check-stage$(1)-H-$$(target)-doc-tutorial)
  625. check-stage$(1)-H-all-doc-ref: \
  626. $$(foreach target,$$(CFG_TARGET_TRIPLES), \
  627. check-stage$(1)-H-$$(target)-doc-ref)
  628. endef
  629. $(foreach stage,$(STAGES), \
  630. $(eval $(call DEF_CHECK_ALL_FOR_STAGE,$(stage))))
  631. define DEF_CHECK_FOR_STAGE
  632. check-stage$(1): check-stage$(1)-H-$$(CFG_HOST_TRIPLE)
  633. check-stage$(1)-perf: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-perf
  634. check-stage$(1)-rustc: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-rustc
  635. check-stage$(1)-core: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-core
  636. check-stage$(1)-std: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-std
  637. check-stage$(1)-rpass: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-rpass
  638. check-stage$(1)-rpass-full: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-rpass-full
  639. check-stage$(1)-rfail: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-rfail
  640. check-stage$(1)-cfail: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-cfail
  641. check-stage$(1)-bench: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-bench
  642. check-stage$(1)-pretty: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-pretty
  643. check-stage$(1)-pretty-rpass: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-pretty-rpass
  644. check-stage$(1)-pretty-rpass-full: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-pretty-rpass-full
  645. check-stage$(1)-pretty-rfail: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-pretty-rfail
  646. check-stage$(1)-pretty-bench: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-pretty-bench
  647. check-stage$(1)-pretty-pretty: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-pretty-pretty
  648. check-stage$(1)-rustdoc: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-rustdoc
  649. check-stage$(1)-cargo: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-cargo
  650. check-stage$(1)-doc-tutorial: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-doc-tutorial
  651. check-stage$(1)-doc-ref: check-stage$(1)-H-$$(CFG_HOST_TRIPLE)-doc-ref
  652. endef
  653. $(foreach stage,$(STAGES), \
  654. $(eval $(call DEF_CHECK_FOR_STAGE,$(stage))))
  655. check-fast: check-fast-H-$(CFG_HOST_TRIPLE)