Skip to content

Commit

Permalink
Fix enabling wasm-component-ld to match other tools
Browse files Browse the repository at this point in the history
It was [pointed out recently][comment] that enabling `wasm-component-ld`
as a host tool is different from other host tools. This commit refactors
the logic to match by deduplicating selection of when to build other
tools and then using the same logic for `wasm-component-ld`.

[comment]: rust-lang#127866 (comment)
  • Loading branch information
alexcrichton committed Sep 6, 2024
1 parent c1ff6fd commit c15469a
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 42 deletions.
2 changes: 1 addition & 1 deletion src/bootstrap/src/core/build_steps/compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1912,7 +1912,7 @@ impl Step for Assemble {
// delegates to the `rust-lld` binary for linking and then runs
// logic to create the final binary. This is used by the
// `wasm32-wasip2` target of Rust.
if builder.build_wasm_component_ld() {
if builder.tool_enabled("wasm-component-ld") {
let wasm_component_ld_exe =
builder.ensure(crate::core::build_steps::tool::WasmComponentLd {
compiler: build_compiler,
Expand Down
2 changes: 1 addition & 1 deletion src/bootstrap/src/core/build_steps/dist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,7 @@ impl Step for Rustc {
);
}
}
if builder.build_wasm_component_ld() {
if builder.tool_enabled("wasm-component-ld") {
let src_dir = builder.sysroot_libdir(compiler, host).parent().unwrap().join("bin");
let ld = exe("wasm-component-ld", compiler.host);
builder.copy_link(&src_dir.join(&ld), &dst_dir.join(&ld));
Expand Down
38 changes: 6 additions & 32 deletions src/bootstrap/src/core/build_steps/tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -693,14 +693,7 @@ impl Step for Cargo {

fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
let builder = run.builder;
run.path("src/tools/cargo").default_condition(
builder.config.extended
&& builder.config.tools.as_ref().map_or(
true,
// If `tools` is set, search list for this tool.
|tools| tools.iter().any(|tool| tool == "cargo"),
),
)
run.path("src/tools/cargo").default_condition(builder.tool_enabled("cargo"))
}

fn make_run(run: RunConfig<'_>) {
Expand Down Expand Up @@ -772,14 +765,7 @@ impl Step for RustAnalyzer {

fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
let builder = run.builder;
run.path("src/tools/rust-analyzer").default_condition(
builder.config.extended
&& builder
.config
.tools
.as_ref()
.map_or(true, |tools| tools.iter().any(|tool| tool == "rust-analyzer")),
)
run.path("src/tools/rust-analyzer").default_condition(builder.tool_enabled("rust-analyzer"))
}

fn make_run(run: RunConfig<'_>) {
Expand Down Expand Up @@ -821,12 +807,8 @@ impl Step for RustAnalyzerProcMacroSrv {
run.path("src/tools/rust-analyzer")
.path("src/tools/rust-analyzer/crates/proc-macro-srv-cli")
.default_condition(
builder.config.extended
&& builder.config.tools.as_ref().map_or(true, |tools| {
tools.iter().any(|tool| {
tool == "rust-analyzer" || tool == "rust-analyzer-proc-macro-srv"
})
}),
builder.tool_enabled("rust-analyzer")
|| builder.tool_enabled("rust-analyzer-proc-macro-srv"),
)
}

Expand Down Expand Up @@ -874,16 +856,8 @@ impl Step for LlvmBitcodeLinker {

fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
let builder = run.builder;
run.path("src/tools/llvm-bitcode-linker").default_condition(
builder.config.extended
&& builder
.config
.tools
.as_ref()
.map_or(builder.build.unstable_features(), |tools| {
tools.iter().any(|tool| tool == "llvm-bitcode-linker")
}),
)
run.path("src/tools/llvm-bitcode-linker")
.default_condition(builder.tool_enabled("llvm-bitcode-linker"))
}

fn make_run(run: RunConfig<'_>) {
Expand Down
17 changes: 9 additions & 8 deletions src/bootstrap/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1407,16 +1407,17 @@ Executed at: {executed_at}"#,
None
}

/// Returns whether it's requested that `wasm-component-ld` is built as part
/// of the sysroot. This is done either with the `extended` key in
/// `config.toml` or with the `tools` set.
fn build_wasm_component_ld(&self) -> bool {
if self.config.extended {
return true;
/// Returns whether the specified tool is configured as part of this build.
///
/// This requires that both the `extended` key is set and the `tools` key is
/// either unset or specifically contains the specified tool.
fn tool_enabled(&self, tool: &str) -> bool {
if !self.config.extended {
return false;
}
match &self.config.tools {
Some(set) => set.contains("wasm-component-ld"),
None => false,
Some(set) => set.contains(tool),
None => true,
}
}

Expand Down

0 comments on commit c15469a

Please sign in to comment.