Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 98af42c

Browse files
committedNov 21, 2023
Auto merge of rust-lang#116449 - Kobzol:bootstrap-rustdoc-shim, r=petrochenkov
Pass flags to `rustdoc` shim without env. vars Discussed here: rust-lang#116448 (comment). Since it was not really documented why these flags were passed through the shim, I guess that the only way to find out if it's really needed... is to remove it :) r? `@petrochenkov`
2 parents 0ff8610 + 4ba9586 commit 98af42c

File tree

4 files changed

+79
-32
lines changed

4 files changed

+79
-32
lines changed
 

‎src/bootstrap/src/bin/rustdoc.rs

-10
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
//! See comments in `src/bootstrap/rustc.rs` for more information.
44
55
use std::env;
6-
use std::ffi::OsString;
76
use std::path::PathBuf;
87
use std::process::Command;
98

@@ -52,15 +51,6 @@ fn main() {
5251
if env::var_os("RUSTC_FORCE_UNSTABLE").is_some() {
5352
cmd.arg("-Z").arg("force-unstable-if-unmarked");
5453
}
55-
if let Some(linker) = env::var_os("RUSTDOC_LINKER") {
56-
let mut arg = OsString::from("-Clinker=");
57-
arg.push(&linker);
58-
cmd.arg(arg);
59-
}
60-
if let Ok(no_threads) = env::var("RUSTDOC_LLD_NO_THREADS") {
61-
cmd.arg("-Clink-arg=-fuse-ld=lld");
62-
cmd.arg(format!("-Clink-arg=-Wl,{no_threads}"));
63-
}
6454
// Cargo doesn't pass RUSTDOCFLAGS to proc_macros:
6555
// https://github.com/rust-lang/cargo/issues/4423
6656
// Thus, if we are on stage 0, we explicitly set `--cfg=bootstrap`.

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

+14-18
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, 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,15 +863,8 @@ 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-
if let Some(linker) = builder.linker(self.compiler.host) {
866-
cmd.env("RUSTDOC_LINKER", linker);
867-
}
868-
if builder.is_fuse_ld_lld(self.compiler.host) {
869-
cmd.env(
870-
"RUSTDOC_LLD_NO_THREADS",
871-
helpers::lld_flag_no_threads(self.compiler.host.contains("windows")),
872-
);
873-
}
866+
add_rustdoc_lld_flags(&mut cmd, builder, self.compiler.host, LldThreads::No);
867+
874868
builder.run_delaying_failure(&mut cmd);
875869
}
876870
}
@@ -1044,6 +1038,8 @@ impl Step for RustdocGUI {
10441038
cmd.env("RUSTDOC", builder.rustdoc(self.compiler))
10451039
.env("RUSTC", builder.rustc(self.compiler));
10461040

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

‎src/bootstrap/src/core/builder.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -18,7 +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::{self, add_dylib_path, add_link_lib_path, exe, libdir, output, t};
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};
2223
use crate::Crate;
2324
use crate::EXTRA_CHECK_CFGS;
2425
use crate::{Build, CLang, DocTests, GitRepo, Mode};
@@ -1174,9 +1175,7 @@ impl<'a> Builder<'a> {
11741175
cmd.env_remove("MAKEFLAGS");
11751176
cmd.env_remove("MFLAGS");
11761177

1177-
if let Some(linker) = self.linker(compiler.host) {
1178-
cmd.env("RUSTDOC_LINKER", linker);
1179-
}
1178+
add_rustdoc_lld_flags(&mut cmd, self, compiler.host, LldThreads::Yes);
11801179
cmd
11811180
}
11821181

‎src/bootstrap/src/utils/helpers.rs

+62
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};
@@ -470,3 +471,64 @@ pub fn extract_beta_rev(version: &str) -> Option<String> {
470471

471472
count
472473
}
474+
475+
pub enum LldThreads {
476+
Yes,
477+
No,
478+
}
479+
480+
pub fn add_rustdoc_lld_flags(
481+
cmd: &mut Command,
482+
builder: &Builder<'_>,
483+
target: TargetSelection,
484+
lld_threads: LldThreads,
485+
) {
486+
cmd.args(build_rustdoc_lld_flags(builder, target, lld_threads));
487+
}
488+
489+
pub fn add_rustdoc_cargo_lld_flags(
490+
cmd: &mut Command,
491+
builder: &Builder<'_>,
492+
target: TargetSelection,
493+
lld_threads: LldThreads,
494+
) {
495+
let args = build_rustdoc_lld_flags(builder, target, lld_threads);
496+
let mut flags = cmd
497+
.get_envs()
498+
.find_map(|(k, v)| if k == OsStr::new("RUSTDOCFLAGS") { v } else { None })
499+
.unwrap_or_default()
500+
.to_os_string();
501+
for arg in args {
502+
if !flags.is_empty() {
503+
flags.push(" ");
504+
}
505+
flags.push(arg);
506+
}
507+
if !flags.is_empty() {
508+
cmd.env("RUSTDOCFLAGS", flags);
509+
}
510+
}
511+
512+
fn build_rustdoc_lld_flags(
513+
builder: &Builder<'_>,
514+
target: TargetSelection,
515+
lld_threads: LldThreads,
516+
) -> Vec<OsString> {
517+
let mut args = vec![];
518+
519+
if let Some(linker) = builder.linker(target) {
520+
let mut flag = std::ffi::OsString::from("-Clinker=");
521+
flag.push(linker);
522+
args.push(flag);
523+
}
524+
if builder.is_fuse_ld_lld(target) {
525+
args.push(OsString::from("-Clink-arg=-fuse-ld=lld"));
526+
if matches!(lld_threads, LldThreads::No) {
527+
args.push(OsString::from(format!(
528+
"-Clink-arg=-Wl,{}",
529+
lld_flag_no_threads(target.contains("windows"))
530+
)));
531+
}
532+
}
533+
args
534+
}

0 commit comments

Comments
 (0)
Failed to load comments.