Skip to content

Commit c0c08e2

Browse files
committed
Auto merge of rust-lang#33093 - alexcrichton:rustbuild-rmake, r=nikomatsakis
test: Move run-make tests into compiletest Forcing them to be embedded in makefiles precludes being able to run them in rustbuild, and adding them to compiletest gives us a great way to leverage future enhancements to our "all encompassing test suite runner" as well as just moving more things into Rust. All tests are still Makefile-based in the sense that they rely on `make` being available to run them, but there's no longer any Makefile-trickery to run them and rustbuild can now run them out of the box as well.
2 parents 8da2bca + 126e09e commit c0c08e2

File tree

16 files changed

+237
-208
lines changed

16 files changed

+237
-208
lines changed

mk/cfg/i586-pc-windows-msvc.mk

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
# i586-pc-windows-msvc configuration
2-
CC_i586-pc-windows-msvc="$(CFG_MSVC_CL_i386)" -nologo
3-
LINK_i586-pc-windows-msvc="$(CFG_MSVC_LINK_i386)" -nologo
4-
CXX_i586-pc-windows-msvc="$(CFG_MSVC_CL_i386)" -nologo
5-
CPP_i586-pc-windows-msvc="$(CFG_MSVC_CL_i386)" -nologo
6-
AR_i586-pc-windows-msvc="$(CFG_MSVC_LIB_i386)" -nologo
2+
CC_i586-pc-windows-msvc=$(CFG_MSVC_CL_i386)
3+
LINK_i586-pc-windows-msvc=$(CFG_MSVC_LINK_i386)
4+
CXX_i586-pc-windows-msvc=$(CFG_MSVC_CL_i386)
5+
CPP_i586-pc-windows-msvc=$(CFG_MSVC_CL_i386)
6+
AR_i586-pc-windows-msvc=$(CFG_MSVC_LIB_i386)
77
CFG_LIB_NAME_i586-pc-windows-msvc=$(1).dll
88
CFG_STATIC_LIB_NAME_i586-pc-windows-msvc=$(1).lib
99
CFG_LIB_GLOB_i586-pc-windows-msvc=$(1)-*.{dll,lib}
1010
CFG_LIB_DSYM_GLOB_i586-pc-windows-msvc=$(1)-*.dylib.dSYM
1111
CFG_JEMALLOC_CFLAGS_i586-pc-windows-msvc :=
12-
CFG_GCCISH_CFLAGS_i586-pc-windows-msvc := -MD -arch:IA32
13-
CFG_GCCISH_CXXFLAGS_i586-pc-windows-msvc := -MD -arch:IA32
12+
CFG_GCCISH_CFLAGS_i586-pc-windows-msvc := -MD -arch:IA32 -nologo
13+
CFG_GCCISH_CXXFLAGS_i586-pc-windows-msvc := -MD -arch:IA32 -nologo
1414
CFG_GCCISH_LINK_FLAGS_i586-pc-windows-msvc :=
1515
CFG_GCCISH_DEF_FLAG_i586-pc-windows-msvc :=
1616
CFG_LLC_FLAGS_i586-pc-windows-msvc :=

mk/cfg/i686-pc-windows-msvc.mk

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
# i686-pc-windows-msvc configuration
2-
CC_i686-pc-windows-msvc="$(CFG_MSVC_CL_i386)" -nologo
3-
LINK_i686-pc-windows-msvc="$(CFG_MSVC_LINK_i386)" -nologo
4-
CXX_i686-pc-windows-msvc="$(CFG_MSVC_CL_i386)" -nologo
5-
CPP_i686-pc-windows-msvc="$(CFG_MSVC_CL_i386)" -nologo
6-
AR_i686-pc-windows-msvc="$(CFG_MSVC_LIB_i386)" -nologo
2+
CC_i686-pc-windows-msvc=$(CFG_MSVC_CL_i386)
3+
LINK_i686-pc-windows-msvc=$(CFG_MSVC_LINK_i386)
4+
CXX_i686-pc-windows-msvc=$(CFG_MSVC_CL_i386)
5+
CPP_i686-pc-windows-msvc=$(CFG_MSVC_CL_i386)
6+
AR_i686-pc-windows-msvc=$(CFG_MSVC_LIB_i386)
77
CFG_LIB_NAME_i686-pc-windows-msvc=$(1).dll
88
CFG_STATIC_LIB_NAME_i686-pc-windows-msvc=$(1).lib
99
CFG_LIB_GLOB_i686-pc-windows-msvc=$(1)-*.{dll,lib}
1010
CFG_LIB_DSYM_GLOB_i686-pc-windows-msvc=$(1)-*.dylib.dSYM
1111
CFG_JEMALLOC_CFLAGS_i686-pc-windows-msvc :=
12-
CFG_GCCISH_CFLAGS_i686-pc-windows-msvc := -MD
13-
CFG_GCCISH_CXXFLAGS_i686-pc-windows-msvc := -MD
12+
CFG_GCCISH_CFLAGS_i686-pc-windows-msvc := -MD -nologo
13+
CFG_GCCISH_CXXFLAGS_i686-pc-windows-msvc := -MD -nologo
1414
CFG_GCCISH_LINK_FLAGS_i686-pc-windows-msvc :=
1515
CFG_GCCISH_DEF_FLAG_i686-pc-windows-msvc :=
1616
CFG_LLC_FLAGS_i686-pc-windows-msvc :=

mk/cfg/x86_64-pc-windows-msvc.mk

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
# x86_64-pc-windows-msvc configuration
2-
CC_x86_64-pc-windows-msvc="$(CFG_MSVC_CL_x86_64)" -nologo
3-
LINK_x86_64-pc-windows-msvc="$(CFG_MSVC_LINK_x86_64)" -nologo
4-
CXX_x86_64-pc-windows-msvc="$(CFG_MSVC_CL_x86_64)" -nologo
5-
CPP_x86_64-pc-windows-msvc="$(CFG_MSVC_CL_x86_64)" -nologo
6-
AR_x86_64-pc-windows-msvc="$(CFG_MSVC_LIB_x86_64)" -nologo
2+
CC_x86_64-pc-windows-msvc=$(CFG_MSVC_CL_x86_64)
3+
LINK_x86_64-pc-windows-msvc=$(CFG_MSVC_LINK_x86_64)
4+
CXX_x86_64-pc-windows-msvc=$(CFG_MSVC_CL_x86_64)
5+
CPP_x86_64-pc-windows-msvc=$(CFG_MSVC_CL_x86_64)
6+
AR_x86_64-pc-windows-msvc=$(CFG_MSVC_LIB_x86_64)
77
CFG_LIB_NAME_x86_64-pc-windows-msvc=$(1).dll
88
CFG_STATIC_LIB_NAME_x86_64-pc-windows-msvc=$(1).lib
99
CFG_LIB_GLOB_x86_64-pc-windows-msvc=$(1)-*.{dll,lib}
1010
CFG_LIB_DSYM_GLOB_x86_64-pc-windows-msvc=$(1)-*.dylib.dSYM
1111
CFG_JEMALLOC_CFLAGS_x86_64-pc-windows-msvc :=
12-
CFG_GCCISH_CFLAGS_x86_64-pc-windows-msvc := -MD
13-
CFG_GCCISH_CXXFLAGS_x86_64-pc-windows-msvc := -MD
12+
CFG_GCCISH_CFLAGS_x86_64-pc-windows-msvc := -MD -nologo
13+
CFG_GCCISH_CXXFLAGS_x86_64-pc-windows-msvc := -MD -nologo
1414
CFG_GCCISH_LINK_FLAGS_x86_64-pc-windows-msvc :=
1515
CFG_GCCISH_DEF_FLAG_x86_64-pc-windows-msvc :=
1616
CFG_LLC_FLAGS_x86_64-pc-windows-msvc :=

mk/platform.mk

+3-3
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ define CC_MACROS
148148
CFG_CC_INCLUDE_$(1)=-I $$(1)
149149
ifeq ($$(findstring msvc,$(1)),msvc)
150150
CFG_CC_OUTPUT_$(1)=-Fo:$$(1)
151-
CFG_CREATE_ARCHIVE_$(1)=$$(AR_$(1)) -OUT:$$(1)
151+
CFG_CREATE_ARCHIVE_$(1)='$$(AR_$(1))' -OUT:$$(1)
152152
else
153153
CFG_CC_OUTPUT_$(1)=-o $$(1)
154154
CFG_CREATE_ARCHIVE_$(1)=$$(AR_$(1)) crus $$(1)
@@ -187,7 +187,7 @@ define CFG_MAKE_TOOLCHAIN
187187
endif
188188
endif
189189

190-
CFG_COMPILE_C_$(1) = $$(CC_$(1)) \
190+
CFG_COMPILE_C_$(1) = '$$(CC_$(1))' \
191191
$$(CFLAGS) \
192192
$$(CFG_GCCISH_CFLAGS) \
193193
$$(CFG_GCCISH_CFLAGS_$(1)) \
@@ -198,7 +198,7 @@ define CFG_MAKE_TOOLCHAIN
198198
$$(CFG_GCCISH_LINK_FLAGS_$(1)) \
199199
$$(CFG_GCCISH_DEF_FLAG_$(1))$$(3) $$(2) \
200200
$$(call CFG_INSTALL_NAME_$(1),$$(4))
201-
CFG_COMPILE_CXX_$(1) = $$(CXX_$(1)) \
201+
CFG_COMPILE_CXX_$(1) = '$$(CXX_$(1))' \
202202
$$(CXXFLAGS) \
203203
$$(CFG_GCCISH_CFLAGS) \
204204
$$(CFG_GCCISH_CXXFLAGS) \

mk/tests.mk

+21-68
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,7 @@ CODEGEN_RS := $(call rwildcard,$(S)src/test/codegen/,*.rs)
450450
CODEGEN_CC := $(call rwildcard,$(S)src/test/codegen/,*.cc)
451451
CODEGEN_UNITS_RS := $(call rwildcard,$(S)src/test/codegen-units/,*.rs)
452452
INCREMENTAL_RS := $(call rwildcard,$(S)src/test/incremental/,*.rs)
453+
RMAKE_RS := $(wildcard $(S)src/test/run-make/*/Makefile)
453454
RUSTDOCCK_RS := $(call rwildcard,$(S)src/test/rustdoc/,*.rs)
454455

455456
RPASS_TESTS := $(RPASS_RS)
@@ -466,6 +467,7 @@ DEBUGINFO_LLDB_TESTS := $(DEBUGINFO_LLDB_RS)
466467
CODEGEN_TESTS := $(CODEGEN_RS) $(CODEGEN_CC)
467468
CODEGEN_UNITS_TESTS := $(CODEGEN_UNITS_RS)
468469
INCREMENTAL_TESTS := $(INCREMENTAL_RS)
470+
RMAKE_TESTS := $(RMAKE_RS)
469471
RUSTDOCCK_TESTS := $(RUSTDOCCK_RS)
470472

471473
CTEST_SRC_BASE_rpass = run-pass
@@ -533,6 +535,11 @@ CTEST_BUILD_BASE_incremental = incremental
533535
CTEST_MODE_incremental = incremental
534536
CTEST_RUNTOOL_incremental = $(CTEST_RUNTOOL)
535537

538+
CTEST_SRC_BASE_rmake = run-make
539+
CTEST_BUILD_BASE_rmake = run-make
540+
CTEST_MODE_rmake = run-make
541+
CTEST_RUNTOOL_rmake = $(CTEST_RUNTOOL)
542+
536543
CTEST_SRC_BASE_rustdocck = rustdoc
537544
CTEST_BUILD_BASE_rustdocck = rustdoc
538545
CTEST_MODE_rustdocck = rustdoc
@@ -629,6 +636,11 @@ CTEST_COMMON_ARGS$(1)-T-$(2)-H-$(3) := \
629636
--host-rustcflags "$(RUSTC_FLAGS_$(3)) $$(CTEST_RUSTC_FLAGS) -L $$(RT_OUTPUT_DIR_$(3))" \
630637
--lldb-python-dir=$(CFG_LLDB_PYTHON_DIR) \
631638
--target-rustcflags "$(RUSTC_FLAGS_$(2)) $$(CTEST_RUSTC_FLAGS) -L $$(RT_OUTPUT_DIR_$(2))" \
639+
--cc '$$(CC_$(3))' \
640+
--cxx '$$(CXX_$(3))' \
641+
--cflags "$$(CFG_GCCISH_CFLAGS_$(3))" \
642+
--llvm-components "$$(LLVM_ALL_COMPONENTS_$(3))" \
643+
--llvm-cxxflags "$$(LLVM_CXXFLAGS_$(3))" \
632644
$$(CTEST_TESTARGS)
633645

634646
ifdef CFG_VALGRIND_RPASS
@@ -658,6 +670,9 @@ CTEST_DEPS_debuginfo-lldb_$(1)-T-$(2)-H-$(3) = $$(DEBUGINFO_LLDB_TESTS) \
658670
CTEST_DEPS_codegen_$(1)-T-$(2)-H-$(3) = $$(CODEGEN_TESTS)
659671
CTEST_DEPS_codegen-units_$(1)-T-$(2)-H-$(3) = $$(CODEGEN_UNITS_TESTS)
660672
CTEST_DEPS_incremental_$(1)-T-$(2)-H-$(3) = $$(INCREMENTAL_TESTS)
673+
CTEST_DEPS_rmake_$(1)-T-$(2)-H-$(3) = $$(RMAKE_TESTS) \
674+
$$(CSREQ$(1)_T_$(3)_H_$(3)) $$(SREQ$(1)_T_$(2)_H_$(3))
675+
661676
CTEST_DEPS_rustdocck_$(1)-T-$(2)-H-$(3) = $$(RUSTDOCCK_TESTS) \
662677
$$(HBIN$(1)_H_$(3))/rustdoc$$(X_$(3)) \
663678
$(S)src/etc/htmldocck.py
@@ -702,6 +717,10 @@ endif
702717
endif
703718

704719
ifeq ($$(CTEST_DONT_RUN_$(1)-T-$(2)-H-$(3)-$(4)),)
720+
$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
721+
export INCLUDE := $$(CFG_MSVC_INCLUDE_PATH_$$(HOST_$(3)))
722+
$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
723+
export LIB := $$(CFG_MSVC_LIB_PATH_$$(HOST_$(3)))
705724
$$(call TEST_OK_FILE,$(1),$(2),$(3),$(4)): \
706725
$$(TEST_SREQ$(1)_T_$(2)_H_$(3)) \
707726
$$(CTEST_DEPS_$(4)_$(1)-T-$(2)-H-$(3))
@@ -724,7 +743,8 @@ endif
724743
endef
725744

726745
CTEST_NAMES = rpass rpass-valgrind rpass-full rfail-full cfail-full rfail cfail pfail \
727-
debuginfo-gdb debuginfo-lldb codegen codegen-units rustdocck incremental
746+
debuginfo-gdb debuginfo-lldb codegen codegen-units rustdocck incremental \
747+
rmake
728748

729749
$(foreach host,$(CFG_HOST), \
730750
$(eval $(foreach target,$(CFG_TARGET), \
@@ -1009,70 +1029,3 @@ endef
10091029

10101030
$(foreach crate,$(TEST_CRATES), \
10111031
$(eval $(call DEF_CHECK_CRATE,$(crate))))
1012-
1013-
######################################################################
1014-
# RMAKE rules
1015-
######################################################################
1016-
1017-
RMAKE_TESTS := $(shell ls -d $(S)src/test/run-make/*/)
1018-
RMAKE_TESTS := $(RMAKE_TESTS:$(S)src/test/run-make/%/=%)
1019-
1020-
define DEF_RMAKE_FOR_T_H
1021-
# $(1) the stage
1022-
# $(2) target triple
1023-
# $(3) host triple
1024-
1025-
1026-
ifeq ($(2)$(3),$$(CFG_BUILD)$$(CFG_BUILD))
1027-
check-stage$(1)-T-$(2)-H-$(3)-rmake-exec: \
1028-
$$(call TEST_OK_FILE,$(1),$(2),$(3),rmake)
1029-
1030-
$$(call TEST_OK_FILE,$(1),$(2),$(3),rmake): \
1031-
$$(RMAKE_TESTS:%=$(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok)
1032-
@touch $$@
1033-
1034-
$(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \
1035-
export INCLUDE := $$(CFG_MSVC_INCLUDE_PATH_$$(HOST_$(3)))
1036-
$(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \
1037-
export LIB := $$(CFG_MSVC_LIB_PATH_$$(HOST_$(3)))
1038-
$(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \
1039-
export MSVC_LIB := "$$(CFG_MSVC_LIB_$$(HOST_$(3)))"
1040-
$(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \
1041-
$(S)src/test/run-make/%/Makefile \
1042-
$$(CSREQ$(1)_T_$(2)_H_$(3))
1043-
@rm -rf $(3)/test/run-make/$$*
1044-
@mkdir -p $(3)/test/run-make/$$*
1045-
$$(Q)touch $$@.start_time
1046-
$$(Q)$$(CFG_PYTHON) $(S)src/etc/maketest.py $$(dir $$<) \
1047-
$$(MAKE) \
1048-
$$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \
1049-
$(3)/test/run-make/$$* \
1050-
'$$(CC_$(3))' \
1051-
"$$(CFG_GCCISH_CFLAGS_$(3))" \
1052-
$$(HBIN$(1)_H_$(3))/rustdoc$$(X_$(3)) \
1053-
"$$(TESTNAME)" \
1054-
$$(LD_LIBRARY_PATH_ENV_NAME$(1)_T_$(2)_H_$(3)) \
1055-
"$$(LD_LIBRARY_PATH_ENV_HOSTDIR$(1)_T_$(2)_H_$(3))" \
1056-
"$$(LD_LIBRARY_PATH_ENV_TARGETDIR$(1)_T_$(2)_H_$(3))" \
1057-
$(1) \
1058-
$$(S) \
1059-
$(3) \
1060-
"$$(LLVM_LIBDIR_RUSTFLAGS_$(3))" \
1061-
"$$(LLVM_ALL_COMPONENTS_$(3))" \
1062-
"$$(LLVM_CXXFLAGS_$(3))" \
1063-
'$$(CXX_$(3))'
1064-
@touch -r [email protected]_time $$@ && rm [email protected]_time
1065-
else
1066-
# FIXME #11094 - The above rule doesn't work right for multiple targets
1067-
check-stage$(1)-T-$(2)-H-$(3)-rmake-exec:
1068-
@true
1069-
1070-
endif
1071-
1072-
1073-
endef
1074-
1075-
$(foreach stage,$(STAGES), \
1076-
$(foreach target,$(CFG_TARGET), \
1077-
$(foreach host,$(CFG_HOST), \
1078-
$(eval $(call DEF_RMAKE_FOR_T_H,$(stage),$(target),$(host))))))

src/bootstrap/build/check.rs

+29
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ use std::fs;
1212
use std::path::{PathBuf, Path};
1313
use std::process::Command;
1414

15+
use build_helper::output;
16+
1517
use build::{Build, Compiler};
1618

1719
pub fn linkcheck(build: &Build, stage: u32, host: &str) {
@@ -112,6 +114,33 @@ pub fn compiletest(build: &Build,
112114
cmd.arg("--verbose");
113115
}
114116

117+
if suite == "run-make" {
118+
let llvm_config = build.llvm_config(target);
119+
let llvm_components = output(Command::new(&llvm_config).arg("--components"));
120+
let llvm_cxxflags = output(Command::new(&llvm_config).arg("--cxxflags"));
121+
cmd.arg("--cc").arg(build.cc(target))
122+
.arg("--cxx").arg(build.cxx(target))
123+
.arg("--cflags").arg(build.cflags(target).join(" "))
124+
.arg("--llvm-components").arg(llvm_components.trim())
125+
.arg("--llvm-cxxflags").arg(llvm_cxxflags.trim());
126+
} else {
127+
cmd.arg("--cc").arg("")
128+
.arg("--cxx").arg("")
129+
.arg("--cflags").arg("")
130+
.arg("--llvm-components").arg("")
131+
.arg("--llvm-cxxflags").arg("");
132+
}
133+
134+
// Running a C compiler on MSVC requires a few env vars to be set, to be
135+
// sure to set them here.
136+
if target.contains("msvc") {
137+
for &(ref k, ref v) in build.cc[target].0.env() {
138+
if k != "PATH" {
139+
cmd.env(k, v);
140+
}
141+
}
142+
}
143+
115144
build.run(&mut cmd);
116145
}
117146

src/bootstrap/build/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,10 @@ impl Build {
314314
CheckErrorIndex { compiler } => {
315315
check::error_index(self, &compiler);
316316
}
317+
CheckRMake { compiler } => {
318+
check::compiletest(self, &compiler, target.target,
319+
"run-make", "run-make")
320+
}
317321

318322
DistDocs { stage } => dist::docs(self, stage, target.target),
319323
DistMingw { _dummy } => dist::mingw(self, target.target),

src/bootstrap/build/step.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ macro_rules! targets {
9898
(check_cfail_full, CheckCFailFull { compiler: Compiler<'a> }),
9999
(check_docs, CheckDocs { compiler: Compiler<'a> }),
100100
(check_error_index, CheckErrorIndex { compiler: Compiler<'a> }),
101+
(check_rmake, CheckRMake { compiler: Compiler<'a> }),
101102

102103
// Distribution targets, creating tarballs
103104
(dist, Dist { stage: u32 }),
@@ -345,6 +346,7 @@ impl<'a> Step<'a> {
345346
self.check_cfail_full(compiler),
346347
self.check_error_index(compiler),
347348
self.check_docs(compiler),
349+
self.check_rmake(compiler),
348350
self.check_linkcheck(stage),
349351
self.check_tidy(stage),
350352
self.dist(stage),
@@ -384,7 +386,8 @@ impl<'a> Step<'a> {
384386
]
385387
}
386388
Source::CheckRPassFull { compiler } |
387-
Source::CheckCFailFull { compiler } => {
389+
Source::CheckCFailFull { compiler } |
390+
Source::CheckRMake { compiler } => {
388391
vec![self.librustc(compiler),
389392
self.tool_compiletest(compiler.stage)]
390393
}

0 commit comments

Comments
 (0)