Skip to content

Commit

Permalink
Conditionally build wasm-component-ld when lld is enabled
Browse files Browse the repository at this point in the history
This commit updates the support for the `wasm-component-ld` tool
from #126967 to conditionally build it when LLD is enabled rather than
unconditionally building it when LLD is enabled. This support is
disabled by default and can be enabled by one of two means:

* the `extended` field in `config.toml` which dist builders use to build
  a complete set of tools for each host platform.
* a `"wasm-component-ld"` entry in the `tools` section of `config.toml`.

Neither of these are enabled by default meaning that most local builds
will likely not have this new tool built. Dist builders should still,
however, build the tool.
  • Loading branch information
alexcrichton committed Jul 17, 2024
1 parent 3de0a7c commit a930388
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 9 deletions.
1 change: 1 addition & 0 deletions config.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,7 @@
# "rust-analyzer-proc-macro-srv",
# "analysis",
# "src",
# "wasm-component-ld",
#]

# Verbosity level: 0 == not verbose, 1 == verbose, 2 == very verbose, 3 == print environment variables on each rustc invocation
Expand Down
20 changes: 11 additions & 9 deletions src/bootstrap/src/core/build_steps/compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1826,15 +1826,17 @@ 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.
let wasm_component_ld_exe =
builder.ensure(crate::core::build_steps::tool::WasmComponentLd {
compiler: build_compiler,
target: target_compiler.host,
});
builder.copy_link(
&wasm_component_ld_exe,
&libdir_bin.join(wasm_component_ld_exe.file_name().unwrap()),
);
if builder.build_wasm_component_ld() {
let wasm_component_ld_exe =
builder.ensure(crate::core::build_steps::tool::WasmComponentLd {
compiler: build_compiler,
target: target_compiler.host,
});
builder.copy_link(
&wasm_component_ld_exe,
&libdir_bin.join(wasm_component_ld_exe.file_name().unwrap()),
);
}
}

if builder.config.llvm_enabled(target_compiler.host) {
Expand Down
6 changes: 6 additions & 0 deletions src/bootstrap/src/core/sanity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -375,4 +375,10 @@ $ pacman -R cmake && pacman -S mingw-w64-x86_64-cmake
if let Some(ref s) = build.config.ccache {
cmd_finder.must_have(s);
}

// Verify that if the `wasm-component-ld` tool is requested to be built that
// it's dependency, lld, is also being built.
if build.build_wasm_component_ld() && !build.config.lld_enabled {
panic!("when wasm-component-ld is requested to be built LLD must be enabled as well");
}
}
13 changes: 13 additions & 0 deletions src/bootstrap/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1413,6 +1413,19 @@ 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;
}
match &self.config.tools {
Some(set) => set.contains("wasm-component-ld"),
None => false,
}
}

/// Returns the root of the "rootfs" image that this target will be using,
/// if one was configured.
///
Expand Down

0 comments on commit a930388

Please sign in to comment.