@@ -65,6 +65,7 @@ pub use base::avr_gnu::ef_avr_arch;
6565/// Linker is called through a C/C++ compiler.
6666#[ derive( Clone , Copy , Debug , Eq , Ord , PartialEq , PartialOrd ) ]
6767pub enum Cc {
68+ Clang ,
6869 Yes ,
6970 No ,
7071}
@@ -244,10 +245,10 @@ impl LinkerFlavor {
244245 /// Returns the corresponding backwards-compatible CLI flavor.
245246 fn to_cli ( self ) -> LinkerFlavorCli {
246247 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 ,
251252 LinkerFlavor :: Gnu ( _, Lld :: Yes ) => LinkerFlavorCli :: Lld ( LldFlavor :: Ld ) ,
252253 LinkerFlavor :: Darwin ( _, Lld :: Yes ) => LinkerFlavorCli :: Lld ( LldFlavor :: Ld64 ) ,
253254 LinkerFlavor :: WasmLld ( ..) => LinkerFlavorCli :: Lld ( LldFlavor :: Wasm ) ,
@@ -308,12 +309,14 @@ impl LinkerFlavor {
308309 || stem. ends_with ( "-gcc" )
309310 || stem == "g++"
310311 || stem. ends_with ( "-g++" )
311- || stem == "clang"
312+ {
313+ ( Some ( Cc :: Yes ) , Some ( Lld :: No ) )
314+ } else if stem == "clang"
312315 || stem. ends_with ( "-clang" )
313316 || stem == "clang++"
314317 || stem. ends_with ( "-clang++" )
315318 {
316- ( Some ( Cc :: Yes ) , Some ( Lld :: No ) )
319+ ( Some ( Cc :: Clang ) , Some ( Lld :: No ) )
317320 } else if stem == "wasm-ld"
318321 || stem. ends_with ( "-wasm-ld" )
319322 || stem == "ld.lld"
@@ -420,10 +423,10 @@ impl LinkerFlavor {
420423 pub fn uses_cc ( self ) -> bool {
421424 // Exhaustive match in case new flavors are added in the future.
422425 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 )
427430 | LinkerFlavor :: EmCc => true ,
428431 LinkerFlavor :: Gnu ( ..)
429432 | LinkerFlavor :: Darwin ( ..)
@@ -468,14 +471,20 @@ linker_flavor_cli_impls! {
468471 ( LinkerFlavorCli :: Gnu ( Cc :: No , Lld :: Yes ) ) "gnu-lld"
469472 ( LinkerFlavorCli :: Gnu ( Cc :: Yes , Lld :: No ) ) "gnu-cc"
470473 ( 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"
471476 ( LinkerFlavorCli :: Darwin ( Cc :: No , Lld :: No ) ) "darwin"
472477 ( LinkerFlavorCli :: Darwin ( Cc :: No , Lld :: Yes ) ) "darwin-lld"
473478 ( LinkerFlavorCli :: Darwin ( Cc :: Yes , Lld :: No ) ) "darwin-cc"
474479 ( 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"
475482 ( LinkerFlavorCli :: WasmLld ( Cc :: No ) ) "wasm-lld"
476483 ( LinkerFlavorCli :: WasmLld ( Cc :: Yes ) ) "wasm-lld-cc"
484+ ( LinkerFlavorCli :: WasmLld ( Cc :: Clang ) ) "wasm-lld-clang"
477485 ( LinkerFlavorCli :: Unix ( Cc :: No ) ) "unix"
478486 ( LinkerFlavorCli :: Unix ( Cc :: Yes ) ) "unix-cc"
487+ ( LinkerFlavorCli :: Unix ( Cc :: Clang ) ) "unix-clang"
479488 ( LinkerFlavorCli :: Msvc ( Lld :: Yes ) ) "msvc-lld"
480489 ( LinkerFlavorCli :: Msvc ( Lld :: No ) ) "msvc"
481490 ( LinkerFlavorCli :: EmCc ) "em-cc"
0 commit comments