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

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

9 10 11 12 13
ifneq ($(findstring check,$(MAKECMDGOALS)),)
XFAIL_INPUTS := $(shell grep -l xfail $(ALL_TEST_INPUTS))
TEST_XFAILS_STAGE0 := $(shell grep -l xfail-stage0 $(XFAIL_INPUTS))
TEST_XFAILS_STAGE1 := $(shell grep -l xfail-stage1 $(XFAIL_INPUTS))
TEST_XFAILS_STAGE2 := $(shell grep -l xfail-stage2 $(XFAIL_INPUTS))
G
Graydon Hoare 已提交
14 15 16 17 18 19 20 21 22 23 24

ifdef MINGW_CROSS
TEST_XFAILS_STAGE0 += $(S)src/test/run-pass/native-mod.rc
TEST_XFAILS_STAGE1 += $(S)src/test/run-pass/native-mod.rc
TEST_XFAILS_STAGE2 += $(S)src/test/run-pass/native-mod.rc
endif
ifdef CFG_WINDOWSY
TEST_XFAILS_STAGE0 += $(S)src/test/run-pass/native-mod.rc
TEST_XFAILS_STAGE1 += $(S)src/test/run-pass/native-mod.rc
TEST_XFAILS_STAGE2 += $(S)src/test/run-pass/native-mod.rc
endif
25 26
endif

G
Graydon Hoare 已提交
27

28
BENCH_RS := $(wildcard $(S)src/test/bench/shootout/*.rs) \
G
Graydon Hoare 已提交
29
            $(wildcard $(S)src/test/bench/99-bottles/*.rs)
30 31 32 33 34 35
RPASS_RC := $(wildcard $(S)src/test/run-pass/*.rc)
RPASS_RS := $(wildcard $(S)src/test/run-pass/*.rs) $(BENCH_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)
G
Graydon Hoare 已提交
36 37

ifdef CHECK_XFAILS
38 39 40 41 42 43
TEST_RPASS_CRATES_STAGE0 := $(filter $(TEST_XFAILS_STAGE0), $(RPASS_RC))
TEST_RPASS_CRATES_STAGE1 := $(filter $(TEST_XFAILS_STAGE1), $(RPASS_RC))
TEST_RPASS_CRATES_STAGE2 := $(filter $(TEST_XFAILS_STAGE2), $(RPASS_RC))
TEST_RPASS_SOURCES_STAGE0 := $(filter $(TEST_XFAILS_STAGE0), $(RPASS_RS))
TEST_RPASS_SOURCES_STAGE1 := $(filter $(TEST_XFAILS_STAGE1), $(RPASS_RS))
TEST_RPASS_SOURCES_STAGE2 := $(filter $(TEST_XFAILS_STAGE2), $(RPASS_RS))
G
Graydon Hoare 已提交
44
else
45 46 47 48 49 50
TEST_RPASS_CRATES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RPASS_RC))
TEST_RPASS_CRATES_STAGE1 := $(filter-out $(TEST_XFAILS_STAGE1), $(RPASS_RC))
TEST_RPASS_CRATES_STAGE1 := $(filter-out $(TEST_XFAILS_STAGE2), $(RPASS_RC))
TEST_RPASS_SOURCES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RPASS_RS))
TEST_RPASS_SOURCES_STAGE1 := $(filter-out $(TEST_XFAILS_STAGE1), $(RPASS_RS))
TEST_RPASS_SOURCES_STAGE2 := $(filter-out $(TEST_XFAILS_STAGE2), $(RPASS_RS))
G
Graydon Hoare 已提交
51 52
endif

53
TEST_RPASS_EXES_STAGE0 := \
G
Graydon Hoare 已提交
54 55
  $(subst $(S)src/,,$(TEST_RPASS_CRATES_STAGE0:.rc=.stage0$(X))) \
  $(subst $(S)src/,,$(TEST_RPASS_SOURCES_STAGE0:.rs=.stage0$(X)))
56
TEST_RPASS_EXES_STAGE1 := \
G
Graydon Hoare 已提交
57 58
  $(subst $(S)src/,,$(TEST_RPASS_CRATES_STAGE1:.rc=.stage1$(X))) \
  $(subst $(S)src/,,$(TEST_RPASS_SOURCES_STAGE1:.rs=.stage1$(X)))
59
TEST_RPASS_EXES_STAGE2 := \
60 61
  $(subst $(S)src/,,$(TEST_RPASS_CRATES_STAGE2:.rc=.stage2$(X))) \
  $(subst $(S)src/,,$(TEST_RPASS_SOURCES_STAGE2:.rs=.stage2$(X)))
G
Graydon Hoare 已提交
62

63
TEST_RPASS_OUTS_STAGE0 := \
G
Graydon Hoare 已提交
64
  $(TEST_RPASS_EXES_STAGE0:.stage0$(X)=.stage0.out)
65
TEST_RPASS_OUTS_STAGE1 := \
G
Graydon Hoare 已提交
66
  $(TEST_RPASS_EXES_STAGE1:.stage1$(X)=.stage1.out)
67
TEST_RPASS_OUTS_STAGE2 := \
G
Graydon Hoare 已提交
68 69
  $(TEST_RPASS_EXES_STAGE2:.stage2$(X)=.stage2.out)

70
TEST_RPASS_TMPS_STAGE0 := \
G
Graydon Hoare 已提交
71
  $(TEST_RPASS_EXES_STAGE0:.stage0$(X)=.stage0$(X).tmp)
72
TEST_RPASS_TMPS_STAGE1 := \
G
Graydon Hoare 已提交
73
  $(TEST_RPASS_EXES_STAGE1:.stage1$(X)=.stage1$(X).tmp)
74
TEST_RPASS_TMPS_STAGE2 := \
G
Graydon Hoare 已提交
75 76 77
  $(TEST_RPASS_EXES_STAGE2:.stage2$(X)=.stage2$(X).tmp)


78 79 80 81 82 83
TEST_RFAIL_CRATES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RFAIL_RC))
TEST_RFAIL_CRATES_STAGE1 := $(filter-out $(TEST_XFAILS_STAGE1), $(RFAIL_RC))
TEST_RFAIL_CRATES_STAGE2 := $(filter-out $(TEST_XFAILS_STAGE2), $(RFAIL_RC))
TEST_RFAIL_SOURCES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RFAIL_RS))
TEST_RFAIL_SOURCES_STAGE1 := $(filter-out $(TEST_XFAILS_STAGE1), $(RFAIL_RS))
TEST_RFAIL_SOURCES_STAGE2 := $(filter-out $(TEST_XFAILS_STAGE2), $(RFAIL_RS))
G
Graydon Hoare 已提交
84

85
TEST_RFAIL_EXES_STAGE0 := \
G
Graydon Hoare 已提交
86 87
  $(subst $(S)src/,,$(TEST_RFAIL_CRATES_STAGE0:.rc=.stage0$(X))) \
  $(subst $(S)src/,,$(TEST_RFAIL_SOURCES_STAGE0:.rs=.stage0$(X)))
88
TEST_RFAIL_EXES_STAGE1 := \
G
Graydon Hoare 已提交
89 90
  $(subst $(S)src/,,$(TEST_RFAIL_CRATES_STAGE1:.rc=.stage1$(X))) \
  $(subst $(S)src/,,$(TEST_RFAIL_SOURCES_STAGE1:.rs=.stage1$(X)))
91
TEST_RFAIL_EXES_STAGE2 := \
G
Graydon Hoare 已提交
92 93 94
  $(subst $(S)src/,,$(TEST_RFAIL_CRATES_STAGE2:.rc=.stage2$(X))) \
  $(subst $(S)src/,,$(TEST_RFAIL_SOURCES_STAGE2:.rs=.stage2$(X)))

95
TEST_RFAIL_OUTS_STAGE0 := \
G
Graydon Hoare 已提交
96
  $(TEST_RFAIL_EXES_STAGE0:.stage0$(X)=.stage0.out)
97
TEST_RFAIL_OUTS_STAGE1 := \
98
  $(TEST_RFAIL_EXES_STAGE1:.stage1$(X)=.stage1.out)
99
TEST_RFAIL_OUTS_STAGE2 := \
100
  $(TEST_RFAIL_EXES_STAGE2:.stage2$(X)=.stage2.out)
G
Graydon Hoare 已提交
101 102


103 104 105 106 107 108
TEST_CFAIL_CRATES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(CFAIL_RC))
TEST_CFAIL_CRATES_STAGE1 := $(filter-out $(TEST_XFAILS_STAGE1), $(CFAIL_RC))
TEST_CFAIL_CRATES_STAGE2 := $(filter-out $(TEST_XFAILS_STAGE2), $(CFAIL_RC))
TEST_CFAIL_SOURCES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(CFAIL_RS))
TEST_CFAIL_SOURCES_STAGE1 := $(filter-out $(TEST_XFAILS_STAGE1), $(CFAIL_RS))
TEST_CFAIL_SOURCES_STAGE2 := $(filter-out $(TEST_XFAILS_STAGE2), $(CFAIL_RS))
G
Graydon Hoare 已提交
109

110
TEST_CFAIL_OUTS_STAGE0 := \
111 112
  $(subst $(S)src/,,$(TEST_CFAIL_CRATES_STAGE0:.rc=.stage0.out)) \
  $(subst $(S)src/,,$(TEST_CFAIL_SOURCES_STAGE0:.rs=.stage0.out))
113
TEST_CFAIL_OUTS_STAGE1 := \
114 115
  $(subst $(S)src/,,$(TEST_CFAIL_CRATES_STAGE1:.rc=.stage1.out)) \
  $(subst $(S)src/,,$(TEST_CFAIL_SOURCES_STAGE1:.rs=.stage1.out))
116
TEST_CFAIL_OUTS_STAGE2 := \
117 118
  $(subst $(S)src/,,$(TEST_CFAIL_CRATES_STAGE2:.rc=.stage2.out)) \
  $(subst $(S)src/,,$(TEST_CFAIL_SOURCES_STAGE2:.rs=.stage2.out))
G
Graydon Hoare 已提交
119 120


121
ALL_TEST_CRATES := $(TEST_CFAIL_CRATES_STAGE0) \
G
Graydon Hoare 已提交
122 123 124 125 126 127 128 129 130
                   $(TEST_RFAIL_CRATES_STAGE0) \
                   $(TEST_RPASS_CRATES_STAGE0) \
                   $(TEST_CFAIL_CRATES_STAGE1) \
                   $(TEST_RFAIL_CRATES_STAGE1) \
                   $(TEST_RPASS_CRATES_STAGE1) \
                   $(TEST_CFAIL_CRATES_STAGE2) \
                   $(TEST_RFAIL_CRATES_STAGE2) \
                   $(TEST_RPASS_CRATES_STAGE2)

131
ALL_TEST_SOURCES := $(TEST_CFAIL_SOURCES_STAGE0) \
G
Graydon Hoare 已提交
132 133 134 135 136 137 138 139 140
                    $(TEST_RFAIL_SOURCES_STAGE0) \
                    $(TEST_RPASS_SOURCES_STAGE0) \
                    $(TEST_CFAIL_SOURCES_STAGE1) \
                    $(TEST_RFAIL_SOURCES_STAGE1) \
                    $(TEST_RPASS_SOURCES_STAGE1) \
                    $(TEST_CFAIL_SOURCES_STAGE2) \
                    $(TEST_RFAIL_SOURCES_STAGE2) \
                    $(TEST_RPASS_SOURCES_STAGE2)

141 142 143 144 145 146 147

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


148
check-nocompile: $(TEST_CFAIL_OUTS_STAGE0) \
149 150
                 $(TEST_CFAIL_OUTS_STAGE1) \
                 $(TEST_CFAIL_OUTS_STAGE2)
G
Graydon Hoare 已提交
151

152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
check-stage0: tidy \
       $(TEST_RPASS_EXES_STAGE0) $(TEST_RFAIL_EXES_STAGE0) \
       $(TEST_RPASS_OUTS_STAGE0) $(TEST_RFAIL_OUTS_STAGE0) \
       $(TEST_CFAIL_OUTS_STAGE0) \


check-stage1: tidy \
       $(TEST_RPASS_EXES_STAGE1) $(TEST_RFAIL_EXES_STAGE1) \
       $(TEST_RPASS_OUTS_STAGE1) $(TEST_RFAIL_OUTS_STAGE1) \
       $(TEST_CFAIL_OUTS_STAGE1) \


check-stage2: tidy \
       $(TEST_RPASS_EXES_STAGE2) $(TEST_RFAIL_EXES_STAGE2) \
       $(TEST_RPASS_OUTS_STAGE2) $(TEST_RFAIL_OUTS_STAGE2) \
       $(TEST_CFAIL_OUTS_STAGE2) \

169 170 171 172
# FIXME: This duplicate rule is only here until the tinderbox scripts
# are fixed to use the check-stage2 rule
stage2-check: tidy \
       check-stage2
173

G
Graydon Hoare 已提交
174
check: tidy \
175 176 177 178
       $(TEST_RPASS_EXES_STAGE2) $(TEST_RFAIL_EXES_STAGE2) \
       $(TEST_RPASS_OUTS_STAGE2) $(TEST_RFAIL_OUTS_STAGE2) \
       $(TEST_CFAIL_OUTS_STAGE2)

179 180 181
fast-check: tidy \
       test/$(FT_DRIVER).out

182
full-check: tidy \
G
Graydon Hoare 已提交
183 184
       $(TEST_RPASS_EXES_STAGE0) $(TEST_RFAIL_EXES_STAGE0) \
       $(TEST_RPASS_OUTS_STAGE0) $(TEST_RFAIL_OUTS_STAGE0) \
185 186 187 188 189 190 191
       $(TEST_CFAIL_OUTS_STAGE0) \
       $(TEST_RPASS_EXES_STAGE1) $(TEST_RFAIL_EXES_STAGE1) \
       $(TEST_RPASS_OUTS_STAGE1) $(TEST_RFAIL_OUTS_STAGE1) \
       $(TEST_CFAIL_OUTS_STAGE1) \
       $(TEST_RPASS_EXES_STAGE2) $(TEST_RFAIL_EXES_STAGE2) \
       $(TEST_RPASS_OUTS_STAGE2) $(TEST_RFAIL_OUTS_STAGE2) \
       $(TEST_CFAIL_OUTS_STAGE2)
G
Graydon Hoare 已提交
192 193 194 195 196 197 198

compile-check: tidy \
       $(TEST_RPASS_EXES_STAGE0) $(TEST_RFAIL_EXES_STAGE0) \
       $(TEST_RPASS_EXES_STAGE1) $(TEST_RFAIL_EXES_STAGE1) \
       $(TEST_RPASS_EXES_STAGE2) $(TEST_RFAIL_EXES_STAGE2)


199 200 201 202 203 204 205 206 207 208 209 210 211 212

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

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

stage2/lib/$(FT_LIB): test/$(FT).rc $(SREQ2)
	@$(call E, compile_and_link: $@)
	$(STAGE2) --shared -o $@ $<

G
Graydon Hoare 已提交
213
test/$(FT_DRIVER)$(X): test/$(FT_DRIVER).rs stage2/lib/$(FT_LIB) $(SREQ2)
214 215 216
	@$(call E, compile_and_link: $@)
	$(STAGE2) -o $@ $<

G
Graydon Hoare 已提交
217
test/$(FT_DRIVER).out: test/$(FT_DRIVER)$(X) $(SREQ2)
218 219 220
	$(Q)$(call CFG_RUN_TEST, $<) | tee $@


G
Graydon Hoare 已提交
221 222 223 224
######################################################################
# Testing rules
######################################################################

225 226 227 228 229 230 231 232 233
tidy:
	@$(call E, check: formatting)
	$(Q)echo \
      $(filter-out $(GENERATED) $(addprefix $(S)src/, $(GENERATED)) \
        $(addprefix $(S)src/, $(RUSTLLVM_LIB_CS) $(RUSTLLVM_OBJS_CS) \
          $(RUSTLLVM_HDR) $(PKG_3RDPARTY)) \
        $(S)src/etc/%, $(PKG_FILES)) \
    | xargs -n 10 python $(S)src/etc/tidy.py

234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
%.stage0$(X): %.rs $(SREQ0)
	@$(call E, compile_and_link: $@)
	$(STAGE0) -o $@ $<

%.stage0$(X): %.rc $(SREQ0)
	@$(call E, compile_and_link: $@)
	$(STAGE0) -o $@ $<

%.stage1$(X): %.rs $(SREQ1)
	@$(call E, compile_and_link: $@)
	$(STAGE1) -o $@ $<

%.stage1$(X): %.rc $(SREQ1)
	@$(call E, compile_and_link: $@)
	$(STAGE1) -o $@ $<
G
Graydon Hoare 已提交
249

250 251 252
%.stage2$(X): %.rs $(SREQ2)
	@$(call E, compile_and_link: $@)
	$(STAGE2) -o $@ $<
G
Graydon Hoare 已提交
253

254 255 256
%.stage2$(X): %.rc $(SREQ2)
	@$(call E, compile_and_link: $@)
	$(STAGE2) -o $@ $<
G
Graydon Hoare 已提交
257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283

# Cancel the implicit .out rule in GNU make.
%.out: %

%.out: %.out.tmp
	$(Q)mv $< $@

test/run-pass/%.out.tmp: test/run-pass/%$(X) rt/$(CFG_RUNTIME)
	$(Q)rm -f $<.tmp
	@$(call E, run: $@)
	$(Q)$(call CFG_RUN_TEST, $<) > $@

test/bench/shootout/%.out.tmp: test/bench/shootout/%$(X) \
                               rt/$(CFG_RUNTIME)
	$(Q)rm -f $<.tmp
	@$(call E, run: $@)
	$(Q)$(call CFG_RUN_TEST, $<) > $@

test/bench/99-bottles/%.out.tmp: test/bench/99-bottles/%$(X) \
                                 rt/$(CFG_RUNTIME)
	$(Q)rm -f $<.tmp
	@$(call E, run: $@)
	$(Q)$(call CFG_RUN_TEST, $<) > $@

test/run-fail/%.out.tmp: test/run-fail/%$(X) \
                         rt/$(CFG_RUNTIME)
	$(Q)rm -f $<.tmp
284
	@$(call E, run-fail: $@)
G
Graydon Hoare 已提交
285 286 287 288 289 290 291 292
	$(Q)grep -q error-pattern $(S)src/test/run-fail/$(basename $*).rs
	$(Q)rm -f $@
	$(Q)$(call CFG_RUN_TEST, $<) >$@ 2>&1 ; X=$$? ; \
      if [ $$X -eq 0 ] ; then exit 1 ; else exit 0 ; fi
	$(Q)grep --text --quiet \
      "$$(grep error-pattern $(S)src/test/run-fail/$(basename $*).rs \
        | cut -d : -f 2- | tr -d '\n\r')" $@

293
test/compile-fail/%.stage0.out.tmp: test/compile-fail/%.rs $(SREQ0)
294
	@$(call E, compile-fail [stage0]: $@)
G
Graydon Hoare 已提交
295 296
	$(Q)grep -q error-pattern $<
	$(Q)rm -f $@
297
	$(STAGE0) -c -o $(@:.o=$(X)) $< >$@ 2>&1; test $$? -ne 0
G
Graydon Hoare 已提交
298 299 300
	$(Q)grep --text --quiet \
      "$$(grep error-pattern $< | cut -d : -f 2- | tr -d '\n\r')" $@

301
test/compile-fail/%.stage1.out.tmp: test/compile-fail/%.rs $(SREQ1)
302
	@$(call E, compile-fail [stage1]: $@)
G
Graydon Hoare 已提交
303 304
	$(Q)grep -q error-pattern $<
	$(Q)rm -f $@
305
	$(STAGE1) -c -o $(@:.o=$(X)) $< >$@ 2>&1; test $$? -ne 0
306 307 308 309
	$(Q)grep --text --quiet \
      "$$(grep error-pattern $< | cut -d : -f 2- | tr -d '\n\r')" $@

test/compile-fail/%.stage2.out.tmp: test/compile-fail/%.rs $(SREQ2)
310
	@$(call E, compile-fail [stage2]: $@)
311 312
	$(Q)grep -q error-pattern $<
	$(Q)rm -f $@
313
	$(STAGE2) -c -o $(@:.o=$(X)) $< >$@ 2>&1; test $$? -ne 0
G
Graydon Hoare 已提交
314 315
	$(Q)grep --text --quiet \
      "$$(grep error-pattern $< | cut -d : -f 2- | tr -d '\n\r')" $@
316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339

test/compile-fail/%.stage0.out.tmp: test/compile-fail/%.rc $(SREQ0)
	@$(call E, compile-fail [stage0]: $@)
	$(Q)grep -q error-pattern $<
	$(Q)rm -f $@
	$(STAGE0) -c -o $(@:.o=$(X)) $< >$@ 2>&1; test $$? -ne 0
	$(Q)grep --text --quiet \
      "$$(grep error-pattern $< | cut -d : -f 2- | tr -d '\n\r')" $@

test/compile-fail/%.stage1.out.tmp: test/compile-fail/%.rc $(SREQ1)
	@$(call E, compile-fail [stage1]: $@)
	$(Q)grep -q error-pattern $<
	$(Q)rm -f $@
	$(STAGE1) -c -o $(@:.o=$(X)) $< >$@ 2>&1; test $$? -ne 0
	$(Q)grep --text --quiet \
      "$$(grep error-pattern $< | cut -d : -f 2- | tr -d '\n\r')" $@

test/compile-fail/%.stage2.out.tmp: test/compile-fail/%.rc $(SREQ2)
	@$(call E, compile-fail [stage2]: $@)
	$(Q)grep -q error-pattern $<
	$(Q)rm -f $@
	$(STAGE2) -c -o $(@:.o=$(X)) $< >$@ 2>&1; test $$? -ne 0
	$(Q)grep --text --quiet \
      "$$(grep error-pattern $< | cut -d : -f 2- | tr -d '\n\r')" $@