-
Notifications
You must be signed in to change notification settings - Fork 13.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
port
rust-lld-custom-target
test to rmake
also make sure that rust-lld can be disabled via linker features, even when enabled by default by the target spec
- Loading branch information
Showing
3 changed files
with
51 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
// Test linking using `cc` with `rust-lld`, using a custom target with features described in MCP 510 | ||
// see https://github.com/rust-lang/compiler-team/issues/510 for more info: | ||
// | ||
// Starting from the `x86_64-unknown-linux-gnu` target spec, we add the following options: | ||
// - a linker-flavor using lld via a C compiler | ||
// - the self-contained linker component is enabled | ||
|
||
//@ needs-rust-lld | ||
//@ only-x86_64-unknown-linux-gnu | ||
|
||
extern crate run_make_support; | ||
|
||
use run_make_support::regex::Regex; | ||
use run_make_support::rustc; | ||
use std::process::Output; | ||
|
||
fn main() { | ||
// Compile to a custom target spec with rust-lld enabled by default. We'll check that by asking | ||
// the linker to display its version number with a link-arg. | ||
let output = rustc() | ||
.env("RUSTC_LOG", "rustc_codegen_ssa::back::link=info") | ||
.crate_type("cdylib") | ||
.target("custom-target.json") | ||
.arg("-Clink-args=-Wl,-v") | ||
.input("lib.rs") | ||
.run(); | ||
assert!( | ||
find_lld_version_in_logs(output), | ||
"the LLD version string should be present in the output logs" | ||
); | ||
|
||
// But it can also be disabled via linker features. | ||
let output = rustc() | ||
.env("RUSTC_LOG", "rustc_codegen_ssa::back::link=info") | ||
.crate_type("cdylib") | ||
.target("custom-target.json") | ||
.arg("-Zlinker-features=-lld") | ||
.arg("-Clink-args=-Wl,-v") | ||
.input("lib.rs") | ||
.run(); | ||
assert!( | ||
!find_lld_version_in_logs(output), | ||
"the LLD version string should not be present in the output logs" | ||
); | ||
} | ||
|
||
fn find_lld_version_in_logs(output: Output) -> bool { | ||
let lld_version_re = Regex::new(r"^LLD [0-9]+\.[0-9]+\.[0-9]+").unwrap(); | ||
let stderr = std::str::from_utf8(&output.stderr).unwrap(); | ||
stderr.lines().any(|line| lld_version_re.is_match(line)) | ||
} |