Skip to content

Commit

Permalink
build doctests with lld if use-lld = true
Browse files Browse the repository at this point in the history
  • Loading branch information
the8472 committed Jun 7, 2021
1 parent 2312ff1 commit 0ddc3af
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 16 deletions.
7 changes: 6 additions & 1 deletion src/bootstrap/bin/rustdoc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,12 @@ fn main() {
cmd.arg(arg);
}
if env::var_os("RUSTDOC_FUSE_LD_LLD").is_some() {
cmd.arg("-Clink-args=-fuse-ld=lld");
cmd.arg("-Clink-arg=-fuse-ld=lld");
if cfg!(windows) {
cmd.arg("-Clink-arg=-Wl,/threads:1");
} else {
cmd.arg("-Clink-arg=-Wl,--threads=1");
}
}

// Needed to be able to run all rustdoc tests.
Expand Down
4 changes: 4 additions & 0 deletions src/bootstrap/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1142,6 +1142,7 @@ impl<'a> Builder<'a> {
}
if self.is_fuse_ld_lld(compiler.host) {
cargo.env("RUSTC_HOST_FUSE_LD_LLD", "1");
cargo.env("RUSTDOC_FUSE_LD_LLD", "1");
}

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

if !(["build", "check", "clippy", "fix", "rustc"].contains(&cmd)) && want_rustdoc {
cargo.env("RUSTDOC_LIBDIR", self.rustc_libdir(compiler));
Expand Down
15 changes: 15 additions & 0 deletions src/bootstrap/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -923,6 +923,21 @@ impl Build {
self.config.use_lld && !target.contains("msvc")
}

fn lld_flags(&self, target: TargetSelection) -> impl Iterator<Item = String> {
let mut options = [None, None];

if self.config.use_lld {
if self.is_fuse_ld_lld(target) {
options[0] = Some("-Clink-arg=-fuse-ld=lld".to_string());
}

let threads = if target.contains("windows") { "/threads:1" } else { "--threads=1" };
options[1] = Some(format!("-Clink-arg=-Wl,{}", threads));
}

std::array::IntoIter::new(options).flatten()
}

/// Returns if this target should statically link the C runtime, if specified
fn crt_static(&self, target: TargetSelection) -> Option<bool> {
if target.contains("pc-windows-msvc") {
Expand Down
17 changes: 2 additions & 15 deletions src/bootstrap/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1131,19 +1131,6 @@ struct Compiletest {
compare_mode: Option<&'static str>,
}

impl Compiletest {
fn add_lld_flags(builder: &Builder<'_>, target: TargetSelection, flags: &mut Vec<String>) {
if builder.config.use_lld {
if builder.is_fuse_ld_lld(target) {
flags.push("-Clink-arg=-fuse-ld=lld".to_string());
}

let threads = if target.contains("windows") { "/threads:1" } else { "--threads=1" };
flags.push(format!("-Clink-arg=-Wl,{}", threads));
}
}
}

impl Step for Compiletest {
type Output = ();

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

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

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

cmd.arg("--docck-python").arg(builder.python());
Expand Down

0 comments on commit 0ddc3af

Please sign in to comment.