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:
commit
f6d2a3feb7
1 changed files with 11 additions and 8 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue