diff options
| author | bit-aloo <sshourya17@gmail.com> | 2025-07-18 17:09:29 +0530 |
|---|---|---|
| committer | bit-aloo <sshourya17@gmail.com> | 2025-07-21 20:13:41 +0530 |
| commit | 4ca5afdc7ac807da8e1beac0813515cc36ef1ac0 (patch) | |
| tree | 3fae4f98278a8511ac6aeeeef8ee1b13a7ea6138 | |
| parent | 4e53043395b747b267bee975080896fb781fe19f (diff) | |
| download | rust-4ca5afdc7ac807da8e1beac0813515cc36ef1ac0.tar.gz rust-4ca5afdc7ac807da8e1beac0813515cc36ef1ac0.zip | |
add default_lld_opt_in_targets method and modified test accordingly
add test for lld opt in and also add thread_local defined state to change opt in targets make the config lld test parameter smoother to work, and have no_llvm_config set even when target_config is not present
| -rw-r--r-- | src/bootstrap/src/core/builder/tests.rs | 25 | ||||
| -rw-r--r-- | src/bootstrap/src/core/config/toml/rust.rs | 30 |
2 files changed, 51 insertions, 4 deletions
diff --git a/src/bootstrap/src/core/builder/tests.rs b/src/bootstrap/src/core/builder/tests.rs index 7f0c6fbd854..81a526593b4 100644 --- a/src/bootstrap/src/core/builder/tests.rs +++ b/src/bootstrap/src/core/builder/tests.rs @@ -642,6 +642,7 @@ mod snapshot { }; use crate::core::builder::{Builder, Kind, StepDescription, StepMetadata}; use crate::core::config::TargetSelection; + use crate::core::config::toml::rust::with_lld_opt_in_targets; use crate::utils::cache::Cache; use crate::utils::helpers::get_host_target; use crate::utils::tests::{ConfigBuilder, TestCtx}; @@ -1638,13 +1639,34 @@ mod snapshot { .render_steps(), @r" [build] llvm <host> [build] rustc 0 <host> -> rustc 1 <host> - [build] rustc 0 <host> -> LldWrapper 1 <host> [build] rustdoc 0 <host> [doc] std 1 <host> crates=[core] "); } #[test] + fn test_lld_opt_in() { + let target: &'static str = Box::leak(Box::new(host_target())); + let slice: &'static [&'static str] = Box::leak(Box::new([target])); + + with_lld_opt_in_targets(slice, || { + let ctx = TestCtx::new(); + + insta::assert_snapshot!( + ctx.config("doc") + .path("core") + .override_target_no_std(&host_target()) + .render_steps(), @r" + [build] llvm <host> + [build] rustc 0 <host> -> rustc 1 <host> + [build] rustc 0 <host> -> LldWrapper 1 <host> + [build] rustdoc 0 <host> + [doc] std 1 <host> crates=[core] + "); + }); + } + + #[test] fn doc_library_no_std_target() { let ctx = TestCtx::new(); insta::assert_snapshot!( @@ -1654,7 +1676,6 @@ mod snapshot { .render_steps(), @r" [build] llvm <host> [build] rustc 0 <host> -> rustc 1 <host> - [build] rustc 0 <host> -> LldWrapper 1 <host> [build] rustdoc 0 <host> [doc] std 1 <host> crates=[alloc,core] "); diff --git a/src/bootstrap/src/core/config/toml/rust.rs b/src/bootstrap/src/core/config/toml/rust.rs index 307aa52294b..60484ee9e90 100644 --- a/src/bootstrap/src/core/config/toml/rust.rs +++ b/src/bootstrap/src/core/config/toml/rust.rs @@ -410,6 +410,31 @@ pub(crate) fn validate_codegen_backends(backends: Vec<String>, section: &str) -> backends } +#[cfg(not(test))] +fn default_lld_opt_in_targets() -> Vec<String> { + vec!["x86_64-unknown-linux-gnu".to_string()] +} + +#[cfg(test)] +thread_local! { + static TEST_LLD_OPT_IN_TARGETS: std::cell::RefCell<Option<Vec<String>>> = std::cell::RefCell::new(None); +} + +#[cfg(test)] +fn default_lld_opt_in_targets() -> Vec<String> { + TEST_LLD_OPT_IN_TARGETS.with(|cell| cell.borrow().clone()).unwrap_or_default() +} + +#[cfg(test)] +pub fn with_lld_opt_in_targets<R>(targets: Vec<String>, f: impl FnOnce() -> R) -> R { + TEST_LLD_OPT_IN_TARGETS.with(|cell| { + let prev = cell.replace(Some(targets)); + let result = f(); + cell.replace(prev); + result + }) +} + impl Config { pub fn apply_rust_config(&mut self, toml_rust: Option<Rust>, warnings: Warnings) { let mut debug = None; @@ -609,12 +634,13 @@ impl Config { // thus, disabled // - similarly, lld will not be built nor used by default when explicitly asked not to, e.g. // when the config sets `rust.lld = false` - if self.host_target.triple == "x86_64-unknown-linux-gnu" && self.hosts == [self.host_target] + if default_lld_opt_in_targets().contains(&self.host_target.triple.to_string()) + && self.hosts == [self.host_target] { let no_llvm_config = self .target_config .get(&self.host_target) - .is_some_and(|target_config| target_config.llvm_config.is_none()); + .is_none_or(|target_config| target_config.llvm_config.is_none()); let enable_lld = self.llvm_from_ci || no_llvm_config; // Prefer the config setting in case an explicit opt-out is needed. self.lld_enabled = lld_enabled.unwrap_or(enable_lld); |
