Skip to content

Commit 2136a0f

Browse files
committed
Allow testing cg_clif using ./x.py test
1 parent bd9785c commit 2136a0f

File tree

2 files changed

+127
-0
lines changed

2 files changed

+127
-0
lines changed

src/bootstrap/builder.rs

+1
Original file line numberDiff line numberDiff line change
@@ -736,6 +736,7 @@ impl<'a> Builder<'a> {
736736
test::Incremental,
737737
test::Debuginfo,
738738
test::UiFullDeps,
739+
test::CodegenCranelift,
739740
test::Rustdoc,
740741
test::RunCoverageRustdoc,
741742
test::Pretty,

src/bootstrap/test.rs

+126
Original file line numberDiff line numberDiff line change
@@ -2943,3 +2943,129 @@ impl Step for TestHelpers {
29432943
.compile("rust_test_helpers");
29442944
}
29452945
}
2946+
2947+
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
2948+
pub struct CodegenCranelift {
2949+
compiler: Compiler,
2950+
target: TargetSelection,
2951+
}
2952+
2953+
impl Step for CodegenCranelift {
2954+
type Output = ();
2955+
const DEFAULT: bool = true;
2956+
const ONLY_HOSTS: bool = true;
2957+
2958+
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
2959+
run.paths(&["compiler/rustc_codegen_cranelift"])
2960+
}
2961+
2962+
fn make_run(run: RunConfig<'_>) {
2963+
let builder = run.builder;
2964+
let host = run.build_triple();
2965+
let compiler = run.builder.compiler_for(run.builder.top_stage, host, host);
2966+
2967+
if builder.kind != Kind::Test {
2968+
return;
2969+
}
2970+
2971+
if builder.doc_tests == DocTests::Only {
2972+
return;
2973+
}
2974+
2975+
let triple = run.target.triple;
2976+
let target_supported = if triple.contains("linux") {
2977+
triple.contains("x86_64") || triple.contains("aarch64") || triple.contains("s390x")
2978+
} else if triple.contains("darwin") || triple.contains("windows") {
2979+
triple.contains("x86_64")
2980+
} else {
2981+
false
2982+
};
2983+
if !target_supported {
2984+
builder.info("target not supported by rustc_codegen_cranelift. skipping");
2985+
return;
2986+
}
2987+
2988+
if builder.remote_tested(run.target) {
2989+
builder.info("remote testing is not supported by rustc_codegen_cranelift. skipping");
2990+
return;
2991+
}
2992+
2993+
if !builder.config.rust_codegen_backends.contains(&INTERNER.intern_str("cranelift")) {
2994+
builder.info("cranelift not in rust.codegen-backends. skipping");
2995+
return;
2996+
}
2997+
2998+
builder.ensure(CodegenCranelift { compiler, target: run.target });
2999+
}
3000+
3001+
fn run(self, builder: &Builder<'_>) {
3002+
let compiler = self.compiler;
3003+
let target = self.target;
3004+
3005+
builder.ensure(compile::Std::new(compiler, target));
3006+
3007+
// If we're not doing a full bootstrap but we're testing a stage2
3008+
// version of libstd, then what we're actually testing is the libstd
3009+
// produced in stage1. Reflect that here by updating the compiler that
3010+
// we're working with automatically.
3011+
let compiler = builder.compiler_for(compiler.stage, compiler.host, target);
3012+
3013+
let build_cargo = || {
3014+
let mut cargo = builder.cargo(
3015+
compiler,
3016+
Mode::Codegen, // Must be codegen to ensure dlopen on compiled dylibs works
3017+
SourceType::InTree,
3018+
target,
3019+
"run",
3020+
);
3021+
cargo.current_dir(&builder.src.join("compiler/rustc_codegen_cranelift"));
3022+
cargo
3023+
.arg("--manifest-path")
3024+
.arg(builder.src.join("compiler/rustc_codegen_cranelift/build_system/Cargo.toml"));
3025+
compile::rustc_cargo_env(builder, &mut cargo, target, compiler.stage);
3026+
3027+
// Avoid incremental cache issues when changing rustc
3028+
cargo.env("CARGO_BUILD_INCREMENTAL", "false");
3029+
3030+
cargo
3031+
};
3032+
3033+
builder.info(&format!(
3034+
"{} cranelift stage{} ({} -> {})",
3035+
Kind::Test.description(),
3036+
compiler.stage,
3037+
&compiler.host,
3038+
target
3039+
));
3040+
let _time = util::timeit(&builder);
3041+
3042+
// FIXME handle vendoring for source tarballs before removing the --skip-test below
3043+
let download_dir = builder.out.join("cg_clif_download");
3044+
3045+
let mut prepare_cargo = build_cargo();
3046+
prepare_cargo.arg("--").arg("prepare").arg("--download-dir").arg(&download_dir);
3047+
try_run(builder, &mut prepare_cargo.into());
3048+
3049+
let mut cargo = build_cargo();
3050+
cargo
3051+
.arg("--")
3052+
.arg("test")
3053+
.arg("--download-dir")
3054+
.arg(&download_dir)
3055+
.arg("--out-dir")
3056+
.arg(builder.stage_out(compiler, Mode::ToolRustc).join("cg_clif"))
3057+
.arg("--no-unstable-features")
3058+
.arg("--use-backend")
3059+
.arg("cranelift")
3060+
// Avoid having to vendor the standard library dependencies
3061+
.arg("--sysroot")
3062+
.arg("llvm")
3063+
// These tests depend on crates that are not yet vendored
3064+
// FIXME remove once vendoring is handled
3065+
.arg("--skip-test")
3066+
.arg("testsuite.extended_sysroot");
3067+
cargo.args(builder.config.test_args());
3068+
3069+
try_run(builder, &mut cargo.into());
3070+
}
3071+
}

0 commit comments

Comments
 (0)