diff options
| author | Stypox <stypox@pm.me> | 2025-07-10 14:33:32 +0200 |
|---|---|---|
| committer | Stypox <stypox@pm.me> | 2025-07-14 09:37:23 +0200 |
| commit | 937ef9381c45e9cad5fc31bdc85224b7f6e13df1 (patch) | |
| tree | 0a71cbc9558e303966230c2014756ffa0cd24253 | |
| parent | ad635e5d0696076b4412dd7db7b7e8c0867d6e0c (diff) | |
| download | rust-937ef9381c45e9cad5fc31bdc85224b7f6e13df1.tar.gz rust-937ef9381c45e9cad5fc31bdc85224b7f6e13df1.zip | |
Bootstrap's `tool.TOOL_NAME.features` now works on any subcommand
| -rw-r--r-- | src/bootstrap/src/core/build_steps/tool.rs | 30 | ||||
| -rw-r--r-- | src/bootstrap/src/utils/change_tracker.rs | 5 |
2 files changed, 20 insertions, 15 deletions
diff --git a/src/bootstrap/src/core/build_steps/tool.rs b/src/bootstrap/src/core/build_steps/tool.rs index 5de1b472d79..e3a0ab212a3 100644 --- a/src/bootstrap/src/core/build_steps/tool.rs +++ b/src/bootstrap/src/core/build_steps/tool.rs @@ -136,19 +136,6 @@ impl Step for ToolBuild { _ => panic!("unexpected Mode for tool build"), } - // build.tool.TOOL_NAME.features in bootstrap.toml allows specifying which features to - // enable for a specific tool. `extra_features` instead is not controlled by the toml and - // provides features that are always enabled for a specific tool (e.g. "in-rust-tree" for - // rust-analyzer). Finally, `prepare_tool_cargo` might add more features to adapt the build - // to the chosen flags (e.g. "all-static" for cargo if `cargo_native_static` is true). - let mut features = builder - .config - .tool - .get(self.tool) - .and_then(|tool| tool.features.clone()) - .unwrap_or_default(); - features.extend(self.extra_features.clone()); - let mut cargo = prepare_tool_cargo( builder, self.compiler, @@ -157,7 +144,7 @@ impl Step for ToolBuild { Kind::Build, path, self.source_type, - &features, + &self.extra_features, ); // The stage0 compiler changes infrequently and does not directly depend on code @@ -244,7 +231,8 @@ pub fn prepare_tool_cargo( ) -> CargoCommand { let mut cargo = builder::Cargo::new(builder, compiler, mode, source_type, target, cmd_kind); - let dir = builder.src.join(path); + let path = PathBuf::from(path); + let dir = builder.src.join(&path); cargo.arg("--manifest-path").arg(dir.join("Cargo.toml")); let mut features = extra_features.to_vec(); @@ -261,6 +249,18 @@ pub fn prepare_tool_cargo( } } + // build.tool.TOOL_NAME.features in bootstrap.toml allows specifying which features to enable + // for a specific tool. `extra_features` instead is not controlled by the toml and provides + // features that are always enabled for a specific tool (e.g. "in-rust-tree" for rust-analyzer). + // Finally, `prepare_tool_cargo` above here might add more features to adapt the build + // to the chosen flags (e.g. "all-static" for cargo if `cargo_native_static` is true). + builder + .config + .tool + .iter() + .filter(|(tool_name, _)| path.ends_with(tool_name)) + .for_each(|(_, tool)| features.extend(tool.features.clone().unwrap_or_default())); + // clippy tests need to know about the stage sysroot. Set them consistently while building to // avoid rebuilding when running tests. cargo.env("SYSROOT", builder.sysroot(compiler)); diff --git a/src/bootstrap/src/utils/change_tracker.rs b/src/bootstrap/src/utils/change_tracker.rs index c5d460ac55b..1f6ed8129da 100644 --- a/src/bootstrap/src/utils/change_tracker.rs +++ b/src/bootstrap/src/utils/change_tracker.rs @@ -471,4 +471,9 @@ pub const CONFIG_CHANGE_HISTORY: &[ChangeInfo] = &[ severity: ChangeSeverity::Info, summary: "A --compile-time-deps flag has been added to reduce the time it takes rust-analyzer to start", }, + ChangeInfo { + change_id: 143733, + severity: ChangeSeverity::Info, + summary: "Option `tool.TOOL_NAME.features` now works on any subcommand, not just `build`.", + }, ]; |
