commit:     2a0f0fc6c80b928f5b9589a4df301045d49ae7cf
Author:     Michal R <vad.sol <AT> proton <DOT> me>
AuthorDate: Thu Oct 30 15:58:53 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Nov  4 14:47:57 2025 +0000
URL:        https://gitweb.gentoo.org/proj/rust-patches.git/commit/?id=2a0f0fc6

1.90.0: add patch fixing bootstrap with `-C linker=clang`

Bug: https://bugs.gentoo.org/963657
Signed-off-by: Michal Rostecki <vadorovsky <AT> protonmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>
(cherry picked from commit 1ac89e3be4dc14b42fc54c956589a24a64e370d6)

 1.90.0/1.9.0-bootstrap-linker-features.patch | 187 +++++++++++++++++++++++++++
 1 file changed, 187 insertions(+)

diff --git a/1.90.0/1.9.0-bootstrap-linker-features.patch 
b/1.90.0/1.9.0-bootstrap-linker-features.patch
new file mode 100644
index 0000000..35db09f
--- /dev/null
+++ b/1.90.0/1.9.0-bootstrap-linker-features.patch
@@ -0,0 +1,187 @@
+From 2fc4243d58b838a3ae4eda0c02de95953ddcdaac Mon Sep 17 00:00:00 2001
+From: Boxy <[email protected]>
+Date: Wed, 6 Aug 2025 13:31:17 +0100
+Subject: [PATCH] handle bootstrap cfgs
+
+---
+ src/bootstrap/src/core/build_steps/test.rs | 20 ++++---------------
+ src/bootstrap/src/core/builder/cargo.rs    | 15 +++++---------
+ src/bootstrap/src/core/builder/mod.rs      |  2 +-
+ src/bootstrap/src/utils/helpers.rs         | 23 ++++------------------
+ 4 files changed, 14 insertions(+), 46 deletions(-)
+
+diff --git a/src/bootstrap/src/core/build_steps/test.rs 
b/src/bootstrap/src/core/build_steps/test.rs
+index 9f0d1cc8892..3f63f58ae99 100644
+--- a/src/bootstrap/src/core/build_steps/test.rs
++++ b/src/bootstrap/src/core/build_steps/test.rs
+@@ -264,13 +264,7 @@ fn run(self, builder: &Builder<'_>) {
+             .args(builder.config.test_args())
+             .env("RUSTC", builder.rustc(compiler))
+             .env("RUSTDOC", builder.rustdoc(compiler));
+-        add_rustdoc_cargo_linker_args(
+-            &mut cmd,
+-            builder,
+-            compiler.host,
+-            LldThreads::No,
+-            compiler.stage,
+-        );
++        add_rustdoc_cargo_linker_args(&mut cmd, builder, compiler.host, 
LldThreads::No);
+         cmd.delay_failure().run(builder);
+     }
+ }
+@@ -880,7 +874,7 @@ fn run(self, builder: &Builder<'_>) {
+             .env("CFG_RELEASE_CHANNEL", &builder.config.channel)
+             .env("RUSTDOC_REAL", builder.rustdoc(self.compiler))
+             .env("RUSTC_BOOTSTRAP", "1");
+-        cmd.args(linker_args(builder, self.compiler.host, LldThreads::No, 
self.compiler.stage));
++        cmd.args(linker_args(builder, self.compiler.host, LldThreads::No));
+ 
+         cmd.delay_failure().run(builder);
+     }
+@@ -1056,13 +1050,7 @@ fn run(self, builder: &Builder<'_>) {
+         cmd.env("RUSTDOC", builder.rustdoc(self.compiler))
+             .env("RUSTC", builder.rustc(self.compiler));
+ 
+-        add_rustdoc_cargo_linker_args(
+-            &mut cmd,
+-            builder,
+-            self.compiler.host,
+-            LldThreads::No,
+-            self.compiler.stage,
+-        );
++        add_rustdoc_cargo_linker_args(&mut cmd, builder, self.compiler.host, 
LldThreads::No);
+ 
+         for path in &builder.paths {
+             if let Some(p) = helpers::is_valid_test_suite_arg(path, 
"tests/rustdoc-gui", builder) {
+@@ -1879,7 +1867,7 @@ fn run(self, builder: &Builder<'_>) {
+         }
+ 
+         let mut hostflags = flags.clone();
+-        hostflags.extend(linker_flags(builder, compiler.host, LldThreads::No, 
compiler.stage));
++        hostflags.extend(linker_flags(builder, compiler.host, 
LldThreads::No));
+ 
+         let mut targetflags = flags;
+ 
+diff --git a/src/bootstrap/src/core/builder/cargo.rs 
b/src/bootstrap/src/core/builder/cargo.rs
+index 6b3236ef47e..22c171865d1 100644
+--- a/src/bootstrap/src/core/builder/cargo.rs
++++ b/src/bootstrap/src/core/builder/cargo.rs
+@@ -115,7 +115,7 @@ pub fn new(
+             // No need to configure the target linker for these command types.
+             Kind::Clean | Kind::Check | Kind::Format | Kind::Setup => {}
+             _ => {
+-                cargo.configure_linker(builder, mode);
++                cargo.configure_linker(builder);
+             }
+         }
+ 
+@@ -209,7 +209,7 @@ pub fn allow_features(&mut self, features: &str) -> &mut 
Cargo {
+ 
+     // FIXME(onur-ozkan): Add coverage to make sure modifications to this 
function
+     // doesn't cause cache invalidations (e.g., #130108).
+-    fn configure_linker(&mut self, builder: &Builder<'_>, mode: Mode) -> &mut 
Cargo {
++    fn configure_linker(&mut self, builder: &Builder<'_>) -> &mut Cargo {
+         let target = self.target;
+         let compiler = self.compiler;
+ 
+@@ -264,12 +264,7 @@ fn configure_linker(&mut self, builder: &Builder<'_>, 
mode: Mode) -> &mut Cargo
+             }
+         }
+ 
+-        // We use the snapshot compiler when building host code (build 
scripts/proc macros) of
+-        // `Mode::Std` tools, so we need to determine the current stage here 
to pass the proper
+-        // linker args (e.g. -C vs -Z).
+-        // This should stay synchronized with the [cargo] function.
+-        let host_stage = if mode == Mode::Std { 0 } else { compiler.stage };
+-        for arg in linker_args(builder, compiler.host, LldThreads::Yes, 
host_stage) {
++        for arg in linker_args(builder, compiler.host, LldThreads::Yes) {
+             self.hostflags.arg(&arg);
+         }
+ 
+@@ -279,10 +274,10 @@ fn configure_linker(&mut self, builder: &Builder<'_>, 
mode: Mode) -> &mut Cargo
+         }
+         // We want to set -Clinker using Cargo, therefore we only call 
`linker_flags` and not
+         // `linker_args` here.
+-        for flag in linker_flags(builder, target, LldThreads::Yes, 
compiler.stage) {
++        for flag in linker_flags(builder, target, LldThreads::Yes) {
+             self.rustflags.arg(&flag);
+         }
+-        for arg in linker_args(builder, target, LldThreads::Yes, 
compiler.stage) {
++        for arg in linker_args(builder, target, LldThreads::Yes) {
+             self.rustdocflags.arg(&arg);
+         }
+ 
+diff --git a/src/bootstrap/src/core/builder/mod.rs 
b/src/bootstrap/src/core/builder/mod.rs
+index deee041490b..ba1cc9e0e68 100644
+--- a/src/bootstrap/src/core/builder/mod.rs
++++ b/src/bootstrap/src/core/builder/mod.rs
+@@ -1605,7 +1605,7 @@ pub fn rustdoc_cmd(&self, compiler: Compiler) -> 
BootstrapCommand {
+             cmd.arg("-Dwarnings");
+         }
+         cmd.arg("-Znormalize-docs");
+-        cmd.args(linker_args(self, compiler.host, LldThreads::Yes, 
compiler.stage));
++        cmd.args(linker_args(self, compiler.host, LldThreads::Yes));
+         cmd
+     }
+ 
+diff --git a/src/bootstrap/src/utils/helpers.rs 
b/src/bootstrap/src/utils/helpers.rs
+index eb00ed566c2..451482717b6 100644
+--- a/src/bootstrap/src/utils/helpers.rs
++++ b/src/bootstrap/src/utils/helpers.rs
+@@ -404,9 +404,8 @@ pub fn linker_args(
+     builder: &Builder<'_>,
+     target: TargetSelection,
+     lld_threads: LldThreads,
+-    stage: u32,
+ ) -> Vec<String> {
+-    let mut args = linker_flags(builder, target, lld_threads, stage);
++    let mut args = linker_flags(builder, target, lld_threads);
+ 
+     if let Some(linker) = builder.linker(target) {
+         args.push(format!("-Clinker={}", linker.display()));
+@@ -421,29 +420,16 @@ pub fn linker_flags(
+     builder: &Builder<'_>,
+     target: TargetSelection,
+     lld_threads: LldThreads,
+-    stage: u32,
+ ) -> Vec<String> {
+     let mut args = vec![];
+     if !builder.is_lld_direct_linker(target) && 
builder.config.lld_mode.is_used() {
+         match builder.config.lld_mode {
+             LldMode::External => {
+-                // cfg(bootstrap) - remove the stage 0 check after updating 
the bootstrap compiler:
+-                // `-Clinker-features` has been stabilized.
+-                if stage == 0 {
+-                    args.push("-Zlinker-features=+lld".to_string());
+-                } else {
+-                    args.push("-Clinker-features=+lld".to_string());
+-                }
++                args.push("-Clinker-features=+lld".to_string());
+                 args.push("-Zunstable-options".to_string());
+             }
+             LldMode::SelfContained => {
+-                // cfg(bootstrap) - remove the stage 0 check after updating 
the bootstrap compiler:
+-                // `-Clinker-features` has been stabilized.
+-                if stage == 0 {
+-                    args.push("-Zlinker-features=+lld".to_string());
+-                } else {
+-                    args.push("-Clinker-features=+lld".to_string());
+-                }
++                args.push("-Clinker-features=+lld".to_string());
+                 args.push("-Clink-self-contained=+linker".to_string());
+                 args.push("-Zunstable-options".to_string());
+             }
+@@ -465,9 +451,8 @@ pub fn add_rustdoc_cargo_linker_args(
+     builder: &Builder<'_>,
+     target: TargetSelection,
+     lld_threads: LldThreads,
+-    stage: u32,
+ ) {
+-    let args = linker_args(builder, target, lld_threads, stage);
++    let args = linker_args(builder, target, lld_threads);
+     let mut flags = cmd
+         .get_envs()
+         .find_map(|(k, v)| if k == OsStr::new("RUSTDOCFLAGS") { v } else { 
None })
+-- 
+2.51.0
+

Reply via email to