Skip to content

Commit 2e7d684

Browse files
committed
Add LLD flags to rustdoc cargo invocations
1 parent e5038f3 commit 2e7d684

File tree

3 files changed

+64
-20
lines changed

3 files changed

+64
-20
lines changed

src/bootstrap/src/core/build_steps/test.rs

+13-10
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ use crate::utils;
2929
use crate::utils::cache::{Interned, INTERNER};
3030
use crate::utils::exec::BootstrapCommand;
3131
use crate::utils::helpers::{
32-
self, add_link_lib_path, add_rustdoc_lld_flags, dylib_path, dylib_path_var, output, t,
33-
target_supports_cranelift_backend, up_to_date,
32+
self, add_link_lib_path, add_rustdoc_cargo_lld_flags, add_rustdoc_lld_flags, dylib_path,
33+
dylib_path_var, output, t, target_supports_cranelift_backend, up_to_date, LldThreads,
3434
};
3535
use crate::utils::render_tests::{add_flags_and_try_run_tests, try_run_tests};
3636
use crate::{envify, CLang, DocTests, GitRepo, Mode};
@@ -271,13 +271,14 @@ impl Step for Cargotest {
271271

272272
let _time = helpers::timeit(&builder);
273273
let mut cmd = builder.tool_cmd(Tool::CargoTest);
274-
builder.run_delaying_failure(
275-
cmd.arg(&cargo)
276-
.arg(&out_dir)
277-
.args(builder.config.test_args())
278-
.env("RUSTC", builder.rustc(compiler))
279-
.env("RUSTDOC", builder.rustdoc(compiler)),
280-
);
274+
let mut cmd = cmd
275+
.arg(&cargo)
276+
.arg(&out_dir)
277+
.args(builder.config.test_args())
278+
.env("RUSTC", builder.rustc(compiler))
279+
.env("RUSTDOC", builder.rustdoc(compiler));
280+
add_rustdoc_cargo_lld_flags(&mut cmd, builder, compiler.host, LldThreads::No);
281+
builder.run_delaying_failure(cmd);
281282
}
282283
}
283284

@@ -862,7 +863,7 @@ impl Step for RustdocTheme {
862863
.env("CFG_RELEASE_CHANNEL", &builder.config.channel)
863864
.env("RUSTDOC_REAL", builder.rustdoc(self.compiler))
864865
.env("RUSTC_BOOTSTRAP", "1");
865-
add_rustdoc_lld_flags(&mut cmd, builder, self.compiler.host, true);
866+
add_rustdoc_lld_flags(&mut cmd, builder, self.compiler.host, LldThreads::No);
866867

867868
builder.run_delaying_failure(&mut cmd);
868869
}
@@ -1037,6 +1038,8 @@ impl Step for RustdocGUI {
10371038
cmd.env("RUSTDOC", builder.rustdoc(self.compiler))
10381039
.env("RUSTC", builder.rustc(self.compiler));
10391040

1041+
add_rustdoc_cargo_lld_flags(&mut cmd, builder, self.compiler.host, LldThreads::No);
1042+
10401043
for path in &builder.paths {
10411044
if let Some(p) = helpers::is_valid_test_suite_arg(path, "tests/rustdoc-gui", builder) {
10421045
if !p.ends_with(".goml") {

src/bootstrap/src/core/builder.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,8 @@ use crate::core::build_steps::{check, clean, compile, dist, doc, install, run, s
1818
use crate::core::config::flags::{Color, Subcommand};
1919
use crate::core::config::{DryRun, SplitDebuginfo, TargetSelection};
2020
use crate::utils::cache::{Cache, Interned, INTERNER};
21-
use crate::utils::helpers::{
22-
self, add_dylib_path, add_link_lib_path, add_rustdoc_lld_flags, exe, libdir, output, t,
23-
};
21+
use crate::utils::helpers::{self, add_dylib_path, add_link_lib_path, add_rustdoc_lld_flags, exe};
22+
use crate::utils::helpers::{libdir, output, t, LldThreads};
2423
use crate::Crate;
2524
use crate::EXTRA_CHECK_CFGS;
2625
use crate::{Build, CLang, DocTests, GitRepo, Mode};
@@ -1175,7 +1174,7 @@ impl<'a> Builder<'a> {
11751174
cmd.env_remove("MAKEFLAGS");
11761175
cmd.env_remove("MFLAGS");
11771176

1178-
add_rustdoc_lld_flags(&mut cmd, self, compiler.host, false);
1177+
add_rustdoc_lld_flags(&mut cmd, self, compiler.host, LldThreads::Yes);
11791178
cmd
11801179
}
11811180

src/bootstrap/src/utils/helpers.rs

+48-6
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
66
use build_helper::util::fail;
77
use std::env;
8+
use std::ffi::{OsStr, OsString};
89
use std::fs;
910
use std::io;
1011
use std::path::{Path, PathBuf};
@@ -377,7 +378,6 @@ fn absolute_unix(path: &Path) -> io::Result<PathBuf> {
377378

378379
#[cfg(windows)]
379380
fn absolute_windows(path: &std::path::Path) -> std::io::Result<std::path::PathBuf> {
380-
use std::ffi::OsString;
381381
use std::io::Error;
382382
use std::os::windows::ffi::{OsStrExt, OsStringExt};
383383
use std::ptr::null_mut;
@@ -471,21 +471,63 @@ pub fn extract_beta_rev(version: &str) -> Option<String> {
471471
count
472472
}
473473

474+
pub enum LldThreads {
475+
Yes,
476+
No,
477+
}
478+
474479
pub fn add_rustdoc_lld_flags(
475480
cmd: &mut Command,
476481
builder: &Builder<'_>,
477482
target: TargetSelection,
478-
single_threaded: bool,
483+
lld_threads: LldThreads,
484+
) {
485+
cmd.args(build_rustdoc_lld_flags(builder, target, lld_threads));
486+
}
487+
488+
pub fn add_rustdoc_cargo_lld_flags(
489+
cmd: &mut Command,
490+
builder: &Builder<'_>,
491+
target: TargetSelection,
492+
lld_threads: LldThreads,
479493
) {
494+
let args = build_rustdoc_lld_flags(builder, target, lld_threads);
495+
let mut flags = cmd
496+
.get_envs()
497+
.find_map(|(k, v)| if k == OsStr::new("RUSTDOCFLAGS") { v } else { None })
498+
.unwrap_or_default()
499+
.to_os_string();
500+
for arg in args {
501+
if !flags.is_empty() {
502+
flags.push(" ");
503+
}
504+
flags.push(arg);
505+
}
506+
if !flags.is_empty() {
507+
cmd.env("RUSTDOCFLAGS", flags);
508+
}
509+
}
510+
511+
fn build_rustdoc_lld_flags(
512+
builder: &Builder<'_>,
513+
target: TargetSelection,
514+
lld_threads: LldThreads,
515+
) -> Vec<OsString> {
516+
let mut args = vec![];
517+
480518
if let Some(linker) = builder.linker(target) {
481519
let mut flag = std::ffi::OsString::from("-Clinker=");
482520
flag.push(linker);
483-
cmd.arg(flag);
521+
args.push(flag);
484522
}
485523
if builder.is_fuse_ld_lld(target) {
486-
cmd.arg("-Clink-arg=-fuse-ld=lld");
487-
if single_threaded {
488-
cmd.arg(format!("-Clink-arg=-Wl,{}", lld_flag_no_threads(target.contains("windows"))));
524+
args.push(OsString::from("-Clink-arg=-fuse-ld=lld"));
525+
if matches!(lld_threads, LldThreads::No) {
526+
args.push(OsString::from(format!(
527+
"-Clink-arg=-Wl,{}",
528+
lld_flag_no_threads(target.contains("windows"))
529+
)));
489530
}
490531
}
532+
args
491533
}

0 commit comments

Comments
 (0)