Skip to content

Commit 0ddc3af

Browse files
committed
build doctests with lld if use-lld = true
1 parent 2312ff1 commit 0ddc3af

File tree

4 files changed

+27
-16
lines changed

4 files changed

+27
-16
lines changed

src/bootstrap/bin/rustdoc.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,12 @@ fn main() {
4141
cmd.arg(arg);
4242
}
4343
if env::var_os("RUSTDOC_FUSE_LD_LLD").is_some() {
44-
cmd.arg("-Clink-args=-fuse-ld=lld");
44+
cmd.arg("-Clink-arg=-fuse-ld=lld");
45+
if cfg!(windows) {
46+
cmd.arg("-Clink-arg=-Wl,/threads:1");
47+
} else {
48+
cmd.arg("-Clink-arg=-Wl,--threads=1");
49+
}
4550
}
4651

4752
// Needed to be able to run all rustdoc tests.

src/bootstrap/builder.rs

+4
Original file line numberDiff line numberDiff line change
@@ -1142,6 +1142,7 @@ impl<'a> Builder<'a> {
11421142
}
11431143
if self.is_fuse_ld_lld(compiler.host) {
11441144
cargo.env("RUSTC_HOST_FUSE_LD_LLD", "1");
1145+
cargo.env("RUSTDOC_FUSE_LD_LLD", "1");
11451146
}
11461147

11471148
if let Some(target_linker) = self.linker(target) {
@@ -1151,6 +1152,9 @@ impl<'a> Builder<'a> {
11511152
if self.is_fuse_ld_lld(target) {
11521153
rustflags.arg("-Clink-args=-fuse-ld=lld");
11531154
}
1155+
self.lld_flags(target).for_each(|flag| {
1156+
rustdocflags.arg(&flag);
1157+
});
11541158

11551159
if !(["build", "check", "clippy", "fix", "rustc"].contains(&cmd)) && want_rustdoc {
11561160
cargo.env("RUSTDOC_LIBDIR", self.rustc_libdir(compiler));

src/bootstrap/lib.rs

+15
Original file line numberDiff line numberDiff line change
@@ -923,6 +923,21 @@ impl Build {
923923
self.config.use_lld && !target.contains("msvc")
924924
}
925925

926+
fn lld_flags(&self, target: TargetSelection) -> impl Iterator<Item = String> {
927+
let mut options = [None, None];
928+
929+
if self.config.use_lld {
930+
if self.is_fuse_ld_lld(target) {
931+
options[0] = Some("-Clink-arg=-fuse-ld=lld".to_string());
932+
}
933+
934+
let threads = if target.contains("windows") { "/threads:1" } else { "--threads=1" };
935+
options[1] = Some(format!("-Clink-arg=-Wl,{}", threads));
936+
}
937+
938+
std::array::IntoIter::new(options).flatten()
939+
}
940+
926941
/// Returns if this target should statically link the C runtime, if specified
927942
fn crt_static(&self, target: TargetSelection) -> Option<bool> {
928943
if target.contains("pc-windows-msvc") {

src/bootstrap/test.rs

+2-15
Original file line numberDiff line numberDiff line change
@@ -1131,19 +1131,6 @@ struct Compiletest {
11311131
compare_mode: Option<&'static str>,
11321132
}
11331133

1134-
impl Compiletest {
1135-
fn add_lld_flags(builder: &Builder<'_>, target: TargetSelection, flags: &mut Vec<String>) {
1136-
if builder.config.use_lld {
1137-
if builder.is_fuse_ld_lld(target) {
1138-
flags.push("-Clink-arg=-fuse-ld=lld".to_string());
1139-
}
1140-
1141-
let threads = if target.contains("windows") { "/threads:1" } else { "--threads=1" };
1142-
flags.push(format!("-Clink-arg=-Wl,{}", threads));
1143-
}
1144-
}
1145-
}
1146-
11471134
impl Step for Compiletest {
11481135
type Output = ();
11491136

@@ -1289,12 +1276,12 @@ note: if you're sure you want to do this, please open an issue as to why. In the
12891276

12901277
let mut hostflags = flags.clone();
12911278
hostflags.push(format!("-Lnative={}", builder.test_helpers_out(compiler.host).display()));
1292-
Self::add_lld_flags(builder, compiler.host, &mut hostflags);
1279+
hostflags.extend(builder.lld_flags(compiler.host));
12931280
cmd.arg("--host-rustcflags").arg(hostflags.join(" "));
12941281

12951282
let mut targetflags = flags;
12961283
targetflags.push(format!("-Lnative={}", builder.test_helpers_out(target).display()));
1297-
Self::add_lld_flags(builder, target, &mut targetflags);
1284+
targetflags.extend(builder.lld_flags(target));
12981285
cmd.arg("--target-rustcflags").arg(targetflags.join(" "));
12991286

13001287
cmd.arg("--docck-python").arg(builder.python());

0 commit comments

Comments
 (0)