diff --git a/src/bootstrap/src/bin/rustdoc.rs b/src/bootstrap/src/bin/rustdoc.rs index dbbce6fe22047..d32c3e78d5e54 100644 --- a/src/bootstrap/src/bin/rustdoc.rs +++ b/src/bootstrap/src/bin/rustdoc.rs @@ -3,7 +3,6 @@ //! See comments in `src/bootstrap/rustc.rs` for more information. use std::env; -use std::ffi::OsString; use std::path::PathBuf; use std::process::Command; @@ -52,15 +51,6 @@ fn main() { if env::var_os("RUSTC_FORCE_UNSTABLE").is_some() { cmd.arg("-Z").arg("force-unstable-if-unmarked"); } - if let Some(linker) = env::var_os("RUSTDOC_LINKER") { - let mut arg = OsString::from("-Clinker="); - arg.push(&linker); - cmd.arg(arg); - } - if let Ok(no_threads) = env::var("RUSTDOC_LLD_NO_THREADS") { - cmd.arg("-Clink-arg=-fuse-ld=lld"); - cmd.arg(format!("-Clink-arg=-Wl,{no_threads}")); - } // Cargo doesn't pass RUSTDOCFLAGS to proc_macros: // https://github.com/rust-lang/cargo/issues/4423 // Thus, if we are on stage 0, we explicitly set `--cfg=bootstrap`. diff --git a/src/bootstrap/src/core/build_steps/test.rs b/src/bootstrap/src/core/build_steps/test.rs index d2aa89dee284f..dc9b56f30db16 100644 --- a/src/bootstrap/src/core/build_steps/test.rs +++ b/src/bootstrap/src/core/build_steps/test.rs @@ -29,7 +29,7 @@ use crate::utils; use crate::utils::cache::{Interned, INTERNER}; use crate::utils::exec::BootstrapCommand; use crate::utils::helpers::{ - self, add_link_lib_path, dylib_path, dylib_path_var, output, t, + self, add_link_lib_path, add_rustdoc_lld_flags, dylib_path, dylib_path_var, output, t, target_supports_cranelift_backend, up_to_date, }; use crate::utils::render_tests::{add_flags_and_try_run_tests, try_run_tests}; @@ -862,15 +862,8 @@ impl Step for RustdocTheme { .env("CFG_RELEASE_CHANNEL", &builder.config.channel) .env("RUSTDOC_REAL", builder.rustdoc(self.compiler)) .env("RUSTC_BOOTSTRAP", "1"); - if let Some(linker) = builder.linker(self.compiler.host) { - cmd.env("RUSTDOC_LINKER", linker); - } - if builder.is_fuse_ld_lld(self.compiler.host) { - cmd.env( - "RUSTDOC_LLD_NO_THREADS", - helpers::lld_flag_no_threads(self.compiler.host.contains("windows")), - ); - } + add_rustdoc_lld_flags(&mut cmd, builder, self.compiler.host, true); + builder.run_delaying_failure(&mut cmd); } } diff --git a/src/bootstrap/src/core/builder.rs b/src/bootstrap/src/core/builder.rs index cd276674dee6b..301d3dfe2997b 100644 --- a/src/bootstrap/src/core/builder.rs +++ b/src/bootstrap/src/core/builder.rs @@ -18,7 +18,9 @@ use crate::core::build_steps::{check, clean, compile, dist, doc, install, run, s use crate::core::config::flags::{Color, Subcommand}; use crate::core::config::{DryRun, SplitDebuginfo, TargetSelection}; use crate::utils::cache::{Cache, Interned, INTERNER}; -use crate::utils::helpers::{self, add_dylib_path, add_link_lib_path, exe, libdir, output, t}; +use crate::utils::helpers::{ + self, add_dylib_path, add_link_lib_path, add_rustdoc_lld_flags, exe, libdir, output, t, +}; use crate::Crate; use crate::EXTRA_CHECK_CFGS; use crate::{Build, CLang, DocTests, GitRepo, Mode}; @@ -1173,9 +1175,7 @@ impl<'a> Builder<'a> { cmd.env_remove("MAKEFLAGS"); cmd.env_remove("MFLAGS"); - if let Some(linker) = self.linker(compiler.host) { - cmd.env("RUSTDOC_LINKER", linker); - } + add_rustdoc_lld_flags(&mut cmd, self, compiler.host, false); cmd } diff --git a/src/bootstrap/src/utils/helpers.rs b/src/bootstrap/src/utils/helpers.rs index 5bc81f2d983e8..c53cc626b971b 100644 --- a/src/bootstrap/src/utils/helpers.rs +++ b/src/bootstrap/src/utils/helpers.rs @@ -470,3 +470,22 @@ pub fn extract_beta_rev(version: &str) -> Option { count } + +pub fn add_rustdoc_lld_flags( + cmd: &mut Command, + builder: &Builder<'_>, + target: TargetSelection, + single_threaded: bool, +) { + if let Some(linker) = builder.linker(target) { + let mut flag = std::ffi::OsString::from("-Clinker="); + flag.push(linker); + cmd.arg(flag); + } + if builder.is_fuse_ld_lld(target) { + cmd.arg("-Clink-arg=-fuse-ld=lld"); + if single_threaded { + cmd.arg(format!("-Clink-arg=-Wl,{}", lld_flag_no_threads(target.contains("windows")))); + } + } +}