@@ -311,16 +311,32 @@ impl LinkerFlavor {
311
311
}
312
312
}
313
313
314
- fn infer_linker_hints ( linker_stem : & str ) -> ( Option < Cc > , Option < Lld > ) {
314
+ fn infer_linker_hints ( linker_stem : & str ) -> Result < Self , ( Option < Cc > , Option < Lld > ) > {
315
315
// Remove any version postfix.
316
316
let stem = linker_stem
317
317
. rsplit_once ( '-' )
318
318
. and_then ( |( lhs, rhs) | rhs. chars ( ) . all ( char:: is_numeric) . then_some ( lhs) )
319
319
. unwrap_or ( linker_stem) ;
320
320
321
- // GCC/Clang can have an optional target prefix.
322
- if stem == "emcc"
323
- || stem == "gcc"
321
+ if stem == "ld.lld" {
322
+ Ok ( Self :: Gnu ( Cc :: No , Lld :: Yes ) )
323
+ } else if stem == "ld64.lld" {
324
+ Ok ( Self :: Darwin ( Cc :: No , Lld :: Yes ) )
325
+ } else if stem == "lld-link" {
326
+ Ok ( Self :: Msvc ( Lld :: Yes ) )
327
+ } else if stem == "wasm-ld" || stem == "wasm-component-ld" {
328
+ Ok ( Self :: WasmLld ( Cc :: No ) )
329
+ } else if stem == "lld" || stem == "rust-lld" {
330
+ Err ( ( Some ( Cc :: No ) , Some ( Lld :: Yes ) ) )
331
+ } else if stem == "emcc" {
332
+ Ok ( Self :: EmCc )
333
+ } else if stem == "bpf-linker" {
334
+ Ok ( Self :: Bpf )
335
+ } else if stem == "llvm-bitcode-linker" {
336
+ Ok ( Self :: Llbc )
337
+ } else if stem == "rust-ptx-linker" {
338
+ Ok ( Self :: Ptx )
339
+ } else if stem == "gcc" // GCC/Clang can have an optional target prefix.
324
340
|| stem. ends_with ( "-gcc" )
325
341
|| stem == "g++"
326
342
|| stem. ends_with ( "-g++" )
@@ -329,19 +345,11 @@ impl LinkerFlavor {
329
345
|| stem == "clang++"
330
346
|| stem. ends_with ( "-clang++" )
331
347
{
332
- ( Some ( Cc :: Yes ) , Some ( Lld :: No ) )
333
- } else if stem == "wasm-ld"
334
- || stem. ends_with ( "-wasm-ld" )
335
- || stem == "ld.lld"
336
- || stem == "lld"
337
- || stem == "rust-lld"
338
- || stem == "lld-link"
339
- {
340
- ( Some ( Cc :: No ) , Some ( Lld :: Yes ) )
348
+ Err ( ( Some ( Cc :: Yes ) , Some ( Lld :: No ) ) )
341
349
} else if stem == "ld" || stem. ends_with ( "-ld" ) || stem == "link" {
342
- ( Some ( Cc :: No ) , Some ( Lld :: No ) )
350
+ Err ( ( Some ( Cc :: No ) , Some ( Lld :: No ) ) )
343
351
} else {
344
- ( None , None )
352
+ Err ( ( None , None ) )
345
353
}
346
354
}
347
355
@@ -365,7 +373,10 @@ impl LinkerFlavor {
365
373
}
366
374
367
375
pub fn with_linker_hints ( self , linker_stem : & str ) -> LinkerFlavor {
368
- self . with_hints ( LinkerFlavor :: infer_linker_hints ( linker_stem) )
376
+ match LinkerFlavor :: infer_linker_hints ( linker_stem) {
377
+ Ok ( linker_flavor) => linker_flavor,
378
+ Err ( hints) => self . with_hints ( hints) ,
379
+ }
369
380
}
370
381
371
382
pub fn check_compatibility ( self , cli : LinkerFlavorCli ) -> Option < String > {
0 commit comments