@@ -65,6 +65,7 @@ pub use base::avr_gnu::ef_avr_arch;
65
65
/// Linker is called through a C/C++ compiler.
66
66
#[ derive( Clone , Copy , Debug , Eq , Ord , PartialEq , PartialOrd ) ]
67
67
pub enum Cc {
68
+ Clang ,
68
69
Yes ,
69
70
No ,
70
71
}
@@ -244,10 +245,10 @@ impl LinkerFlavor {
244
245
/// Returns the corresponding backwards-compatible CLI flavor.
245
246
fn to_cli ( self ) -> LinkerFlavorCli {
246
247
match self {
247
- LinkerFlavor :: Gnu ( Cc :: Yes , _)
248
- | LinkerFlavor :: Darwin ( Cc :: Yes , _)
249
- | LinkerFlavor :: WasmLld ( Cc :: Yes )
250
- | LinkerFlavor :: Unix ( Cc :: Yes ) => LinkerFlavorCli :: Gcc ,
248
+ LinkerFlavor :: Gnu ( Cc :: Yes | Cc :: Clang , _)
249
+ | LinkerFlavor :: Darwin ( Cc :: Yes | Cc :: Clang , _)
250
+ | LinkerFlavor :: WasmLld ( Cc :: Yes | Cc :: Clang )
251
+ | LinkerFlavor :: Unix ( Cc :: Yes | Cc :: Clang ) => LinkerFlavorCli :: Gcc ,
251
252
LinkerFlavor :: Gnu ( _, Lld :: Yes ) => LinkerFlavorCli :: Lld ( LldFlavor :: Ld ) ,
252
253
LinkerFlavor :: Darwin ( _, Lld :: Yes ) => LinkerFlavorCli :: Lld ( LldFlavor :: Ld64 ) ,
253
254
LinkerFlavor :: WasmLld ( ..) => LinkerFlavorCli :: Lld ( LldFlavor :: Wasm ) ,
@@ -308,12 +309,14 @@ impl LinkerFlavor {
308
309
|| stem. ends_with ( "-gcc" )
309
310
|| stem == "g++"
310
311
|| stem. ends_with ( "-g++" )
311
- || stem == "clang"
312
+ {
313
+ ( Some ( Cc :: Yes ) , Some ( Lld :: No ) )
314
+ } else if stem == "clang"
312
315
|| stem. ends_with ( "-clang" )
313
316
|| stem == "clang++"
314
317
|| stem. ends_with ( "-clang++" )
315
318
{
316
- ( Some ( Cc :: Yes ) , Some ( Lld :: No ) )
319
+ ( Some ( Cc :: Clang ) , Some ( Lld :: No ) )
317
320
} else if stem == "wasm-ld"
318
321
|| stem. ends_with ( "-wasm-ld" )
319
322
|| stem == "ld.lld"
@@ -420,10 +423,10 @@ impl LinkerFlavor {
420
423
pub fn uses_cc ( self ) -> bool {
421
424
// Exhaustive match in case new flavors are added in the future.
422
425
match self {
423
- LinkerFlavor :: Gnu ( Cc :: Yes , _)
424
- | LinkerFlavor :: Darwin ( Cc :: Yes , _)
425
- | LinkerFlavor :: WasmLld ( Cc :: Yes )
426
- | LinkerFlavor :: Unix ( Cc :: Yes )
426
+ LinkerFlavor :: Gnu ( Cc :: Yes | Cc :: Clang , _)
427
+ | LinkerFlavor :: Darwin ( Cc :: Yes | Cc :: Clang , _)
428
+ | LinkerFlavor :: WasmLld ( Cc :: Yes | Cc :: Clang )
429
+ | LinkerFlavor :: Unix ( Cc :: Yes | Cc :: Clang )
427
430
| LinkerFlavor :: EmCc => true ,
428
431
LinkerFlavor :: Gnu ( ..)
429
432
| LinkerFlavor :: Darwin ( ..)
@@ -468,14 +471,20 @@ linker_flavor_cli_impls! {
468
471
( LinkerFlavorCli :: Gnu ( Cc :: No , Lld :: Yes ) ) "gnu-lld"
469
472
( LinkerFlavorCli :: Gnu ( Cc :: Yes , Lld :: No ) ) "gnu-cc"
470
473
( LinkerFlavorCli :: Gnu ( Cc :: Yes , Lld :: Yes ) ) "gnu-lld-cc"
474
+ ( LinkerFlavorCli :: Gnu ( Cc :: Clang , Lld :: No ) ) "gnu-clang"
475
+ ( LinkerFlavorCli :: Gnu ( Cc :: Clang , Lld :: Yes ) ) "gnu-lld-clang"
471
476
( LinkerFlavorCli :: Darwin ( Cc :: No , Lld :: No ) ) "darwin"
472
477
( LinkerFlavorCli :: Darwin ( Cc :: No , Lld :: Yes ) ) "darwin-lld"
473
478
( LinkerFlavorCli :: Darwin ( Cc :: Yes , Lld :: No ) ) "darwin-cc"
474
479
( LinkerFlavorCli :: Darwin ( Cc :: Yes , Lld :: Yes ) ) "darwin-lld-cc"
480
+ ( LinkerFlavorCli :: Darwin ( Cc :: Clang , Lld :: No ) ) "darwin-clang"
481
+ ( LinkerFlavorCli :: Darwin ( Cc :: Clang , Lld :: Yes ) ) "darwin-lld-clang"
475
482
( LinkerFlavorCli :: WasmLld ( Cc :: No ) ) "wasm-lld"
476
483
( LinkerFlavorCli :: WasmLld ( Cc :: Yes ) ) "wasm-lld-cc"
484
+ ( LinkerFlavorCli :: WasmLld ( Cc :: Clang ) ) "wasm-lld-clang"
477
485
( LinkerFlavorCli :: Unix ( Cc :: No ) ) "unix"
478
486
( LinkerFlavorCli :: Unix ( Cc :: Yes ) ) "unix-cc"
487
+ ( LinkerFlavorCli :: Unix ( Cc :: Clang ) ) "unix-clang"
479
488
( LinkerFlavorCli :: Msvc ( Lld :: Yes ) ) "msvc-lld"
480
489
( LinkerFlavorCli :: Msvc ( Lld :: No ) ) "msvc"
481
490
( LinkerFlavorCli :: EmCc ) "em-cc"
0 commit comments