Rollup merge of #86113 - the8472:doctest-lld, r=Mark-Simulacrum

build doctests with lld if use-lld = true

results when running `./x.py test library/core --doc --stage 0`:

```
# OLD
test result: FAILED. 2844 passed; 6 failed; 28 ignored; 0 measured; 0 filtered out; finished in 21.13s

# NEW
test result: FAILED. 2844 passed; 6 failed; 28 ignored; 0 measured; 0 filtered out; finished in 11.92s
```
This commit is contained in:
Yuki Okushi 2021-06-10 11:02:15 +09:00 committed by GitHub
commit f7aea23bd2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 16 deletions

View File

@ -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.

View File

@ -1142,6 +1142,7 @@ pub fn cargo(
}
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) {
@ -1151,6 +1152,9 @@ pub fn cargo(
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));

View File

@ -923,6 +923,21 @@ fn is_fuse_ld_lld(&self, target: TargetSelection) -> bool {
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") {

View File

@ -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 = ();
@ -1289,12 +1276,12 @@ fn run(self, builder: &Builder<'_>) {
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());