Allow testing cg_clif using ./x.py test
This commit is contained in:
parent
01ce2d0ea1
commit
238d8e3ec7
@ -737,6 +737,7 @@ macro_rules! describe {
|
|||||||
test::Incremental,
|
test::Incremental,
|
||||||
test::Debuginfo,
|
test::Debuginfo,
|
||||||
test::UiFullDeps,
|
test::UiFullDeps,
|
||||||
|
test::CodegenCranelift,
|
||||||
test::Rustdoc,
|
test::Rustdoc,
|
||||||
test::RunCoverageRustdoc,
|
test::RunCoverageRustdoc,
|
||||||
test::Pretty,
|
test::Pretty,
|
||||||
|
@ -2967,3 +2967,129 @@ fn run(self, builder: &Builder<'_>) {
|
|||||||
.compile("rust_test_helpers");
|
.compile("rust_test_helpers");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
|
pub struct CodegenCranelift {
|
||||||
|
compiler: Compiler,
|
||||||
|
target: TargetSelection,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Step for CodegenCranelift {
|
||||||
|
type Output = ();
|
||||||
|
const DEFAULT: bool = true;
|
||||||
|
const ONLY_HOSTS: bool = true;
|
||||||
|
|
||||||
|
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
|
||||||
|
run.paths(&["compiler/rustc_codegen_cranelift"])
|
||||||
|
}
|
||||||
|
|
||||||
|
fn make_run(run: RunConfig<'_>) {
|
||||||
|
let builder = run.builder;
|
||||||
|
let host = run.build_triple();
|
||||||
|
let compiler = run.builder.compiler_for(run.builder.top_stage, host, host);
|
||||||
|
|
||||||
|
if builder.doc_tests == DocTests::Only {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let triple = run.target.triple;
|
||||||
|
let target_supported = if triple.contains("linux") {
|
||||||
|
triple.contains("x86_64") || triple.contains("aarch64") || triple.contains("s390x")
|
||||||
|
} else if triple.contains("darwin") || triple.contains("windows") {
|
||||||
|
triple.contains("x86_64")
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
};
|
||||||
|
if !target_supported {
|
||||||
|
builder.info("target not supported by rustc_codegen_cranelift. skipping");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if builder.remote_tested(run.target) {
|
||||||
|
builder.info("remote testing is not supported by rustc_codegen_cranelift. skipping");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if !builder.config.rust_codegen_backends.contains(&INTERNER.intern_str("cranelift")) {
|
||||||
|
builder.info("cranelift not in rust.codegen-backends. skipping");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.ensure(CodegenCranelift { compiler, target: run.target });
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run(self, builder: &Builder<'_>) {
|
||||||
|
let compiler = self.compiler;
|
||||||
|
let target = self.target;
|
||||||
|
|
||||||
|
builder.ensure(compile::Std::new(compiler, target));
|
||||||
|
|
||||||
|
// If we're not doing a full bootstrap but we're testing a stage2
|
||||||
|
// version of libstd, then what we're actually testing is the libstd
|
||||||
|
// produced in stage1. Reflect that here by updating the compiler that
|
||||||
|
// we're working with automatically.
|
||||||
|
let compiler = builder.compiler_for(compiler.stage, compiler.host, target);
|
||||||
|
|
||||||
|
let build_cargo = || {
|
||||||
|
let mut cargo = builder.cargo(
|
||||||
|
compiler,
|
||||||
|
Mode::Codegen, // Must be codegen to ensure dlopen on compiled dylibs works
|
||||||
|
SourceType::InTree,
|
||||||
|
target,
|
||||||
|
"run",
|
||||||
|
);
|
||||||
|
cargo.current_dir(&builder.src.join("compiler/rustc_codegen_cranelift"));
|
||||||
|
cargo
|
||||||
|
.arg("--manifest-path")
|
||||||
|
.arg(builder.src.join("compiler/rustc_codegen_cranelift/build_system/Cargo.toml"));
|
||||||
|
compile::rustc_cargo_env(builder, &mut cargo, target, compiler.stage);
|
||||||
|
|
||||||
|
// Avoid incremental cache issues when changing rustc
|
||||||
|
cargo.env("CARGO_BUILD_INCREMENTAL", "false");
|
||||||
|
|
||||||
|
cargo
|
||||||
|
};
|
||||||
|
|
||||||
|
builder.info(&format!(
|
||||||
|
"{} cranelift stage{} ({} -> {})",
|
||||||
|
Kind::Test.description(),
|
||||||
|
compiler.stage,
|
||||||
|
&compiler.host,
|
||||||
|
target
|
||||||
|
));
|
||||||
|
let _time = util::timeit(&builder);
|
||||||
|
|
||||||
|
// FIXME handle vendoring for source tarballs before removing the --skip-test below
|
||||||
|
let download_dir = builder.out.join("cg_clif_download");
|
||||||
|
|
||||||
|
/*
|
||||||
|
let mut prepare_cargo = build_cargo();
|
||||||
|
prepare_cargo.arg("--").arg("prepare").arg("--download-dir").arg(&download_dir);
|
||||||
|
#[allow(deprecated)]
|
||||||
|
builder.config.try_run(&mut prepare_cargo.into()).unwrap();
|
||||||
|
*/
|
||||||
|
|
||||||
|
let mut cargo = build_cargo();
|
||||||
|
cargo
|
||||||
|
.arg("--")
|
||||||
|
.arg("test")
|
||||||
|
.arg("--download-dir")
|
||||||
|
.arg(&download_dir)
|
||||||
|
.arg("--out-dir")
|
||||||
|
.arg(builder.stage_out(compiler, Mode::ToolRustc).join("cg_clif"))
|
||||||
|
.arg("--no-unstable-features")
|
||||||
|
.arg("--use-backend")
|
||||||
|
.arg("cranelift")
|
||||||
|
// Avoid having to vendor the standard library dependencies
|
||||||
|
.arg("--sysroot")
|
||||||
|
.arg("llvm")
|
||||||
|
// These tests depend on crates that are not yet vendored
|
||||||
|
// FIXME remove once vendoring is handled
|
||||||
|
.arg("--skip-test")
|
||||||
|
.arg("testsuite.extended_sysroot");
|
||||||
|
cargo.args(builder.config.test_args());
|
||||||
|
|
||||||
|
#[allow(deprecated)]
|
||||||
|
builder.config.try_run(&mut cargo.into()).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -123,6 +123,9 @@ else
|
|||||||
|
|
||||||
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.verify-llvm-ir"
|
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.verify-llvm-ir"
|
||||||
|
|
||||||
|
# Test the Cranelift backend in on CI, but don't ship it.
|
||||||
|
RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set rust.codegen-backends=llvm,cranelift"
|
||||||
|
|
||||||
# We enable this for non-dist builders, since those aren't trying to produce
|
# We enable this for non-dist builders, since those aren't trying to produce
|
||||||
# fresh binaries. We currently don't entirely support distributing a fresh
|
# fresh binaries. We currently don't entirely support distributing a fresh
|
||||||
# copy of the compiler (including llvm tools, etc.) if we haven't actually
|
# copy of the compiler (including llvm tools, etc.) if we haven't actually
|
||||||
|
Loading…
Reference in New Issue
Block a user