1
Fork 0

Rollup merge of #59318 - alexcrichton:check-for-clang, r=michaelwoerister

rustc: Update linker flavor inference from filename

This commit fixes what is believed to be a preexisting bug in the linker
flavor inference and additionally adds a new features. Previously if the
linker didn't end in `exe` the entire file name was compared to infer
the linker's flavor. This commit fixes the code to instead
unconditionally inspect `file_stem()` which is the relevant part we're
looking at to figure out what the linker flavor is.

Additionally this commit now also adds recognition of `clang` and clang
wrappers that end in `-clang` (which look like gcc wrappers). This
should allow clang-specific wrappers to get correctly inferred to the
`Gcc` linker flavor rather than the default linker flavor configured for
a target.
This commit is contained in:
Mazdak Farrokhzad 2019-03-28 13:35:35 +01:00 committed by GitHub
commit f6d2a3feb7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -152,17 +152,20 @@ pub fn linker_and_flavor(sess: &Session) -> (PathBuf, LinkerFlavor) {
LinkerFlavor::PtxLinker => "rust-ptx-linker", LinkerFlavor::PtxLinker => "rust-ptx-linker",
}), flavor)), }), flavor)),
(Some(linker), None) => { (Some(linker), None) => {
let stem = if linker.extension().and_then(|ext| ext.to_str()) == Some("exe") { let stem = linker
linker.file_stem().and_then(|stem| stem.to_str()) .file_stem()
} else { .and_then(|stem| stem.to_str())
linker.to_str() .unwrap_or_else(|| {
}.unwrap_or_else(|| { sess.fatal("couldn't extract file stem from specified linker")
sess.fatal("couldn't extract file stem from specified linker"); });
}).to_owned();
let flavor = if stem == "emcc" { let flavor = if stem == "emcc" {
LinkerFlavor::Em LinkerFlavor::Em
} else if stem == "gcc" || stem.ends_with("-gcc") { } else if stem == "gcc"
|| stem.ends_with("-gcc")
|| stem == "clang"
|| stem.ends_with("-clang")
{
LinkerFlavor::Gcc LinkerFlavor::Gcc
} else if stem == "ld" || stem == "ld.lld" || stem.ends_with("-ld") { } else if stem == "ld" || stem == "ld.lld" || stem.ends_with("-ld") {
LinkerFlavor::Ld LinkerFlavor::Ld