@@ -127,6 +127,8 @@ pub enum LinkerFlavor {
127127    /// Emscripten Compiler Frontend, a wrapper around `WasmLld(Cc::Yes)` that has a different 
128128     /// interface and produces some additional JavaScript output. 
129129     EmCc , 
130+     // TODO: This needs some design on how to proceed 
131+     Wild , 
130132    // Below: other linker-like tools with unique interfaces for exotic targets. 
131133    /// Linker tool for BPF. 
132134     Bpf , 
@@ -153,6 +155,7 @@ pub enum LinkerFlavorCli {
153155    Bpf , 
154156    Ptx , 
155157    Llbc , 
158+     Wild , 
156159
157160    // Legacy stable values 
158161    Gcc , 
@@ -178,7 +181,8 @@ impl LinkerFlavorCli {
178181            | LinkerFlavorCli :: Ld 
179182            | LinkerFlavorCli :: Lld ( ..) 
180183            | LinkerFlavorCli :: Msvc ( Lld :: No ) 
181-             | LinkerFlavorCli :: Em  => false , 
184+             | LinkerFlavorCli :: Em 
185+             | LinkerFlavorCli :: Wild  => false , 
182186        } 
183187    } 
184188} 
@@ -245,6 +249,7 @@ impl LinkerFlavor {
245249            LinkerFlavorCli :: Bpf  => LinkerFlavor :: Bpf , 
246250            LinkerFlavorCli :: Llbc  => LinkerFlavor :: Llbc , 
247251            LinkerFlavorCli :: Ptx  => LinkerFlavor :: Ptx , 
252+             LinkerFlavorCli :: Wild  => LinkerFlavor :: Wild , 
248253
249254            // Below: legacy stable values 
250255            LinkerFlavorCli :: Gcc  => match  lld_flavor { 
@@ -285,6 +290,7 @@ impl LinkerFlavor {
285290            LinkerFlavor :: Bpf  => LinkerFlavorCli :: Bpf , 
286291            LinkerFlavor :: Llbc  => LinkerFlavorCli :: Llbc , 
287292            LinkerFlavor :: Ptx  => LinkerFlavorCli :: Ptx , 
293+             LinkerFlavor :: Wild  => LinkerFlavorCli :: Wild , 
288294        } 
289295    } 
290296
@@ -300,6 +306,7 @@ impl LinkerFlavor {
300306            LinkerFlavor :: Bpf  => LinkerFlavorCli :: Bpf , 
301307            LinkerFlavor :: Llbc  => LinkerFlavorCli :: Llbc , 
302308            LinkerFlavor :: Ptx  => LinkerFlavorCli :: Ptx , 
309+             LinkerFlavor :: Wild  => LinkerFlavorCli :: Wild , 
303310        } 
304311    } 
305312
@@ -314,6 +321,7 @@ impl LinkerFlavor {
314321            LinkerFlavorCli :: EmCc  => ( Some ( Cc :: Yes ) ,  Some ( Lld :: Yes ) ) , 
315322            LinkerFlavorCli :: Bpf  | LinkerFlavorCli :: Ptx  => ( None ,  None ) , 
316323            LinkerFlavorCli :: Llbc  => ( None ,  None ) , 
324+             LinkerFlavorCli :: Wild  => ( None ,  None ) , 
317325
318326            // Below: legacy stable values 
319327            LinkerFlavorCli :: Gcc  => ( Some ( Cc :: Yes ) ,  None ) , 
@@ -332,6 +340,8 @@ impl LinkerFlavor {
332340
333341        if  stem == "llvm-bitcode-linker"  { 
334342            Ok ( Self :: Llbc ) 
343+         }  else  if  stem == "wild"  { 
344+             Ok ( Self :: Wild ) 
335345        }  else  if  stem == "emcc"  // GCC/Clang can have an optional target prefix. 
336346            || stem == "gcc" 
337347            || stem. ends_with ( "-gcc" ) 
@@ -369,7 +379,11 @@ impl LinkerFlavor {
369379            LinkerFlavor :: WasmLld ( cc)  => LinkerFlavor :: WasmLld ( cc_hint. unwrap_or ( cc) ) , 
370380            LinkerFlavor :: Unix ( cc)  => LinkerFlavor :: Unix ( cc_hint. unwrap_or ( cc) ) , 
371381            LinkerFlavor :: Msvc ( lld)  => LinkerFlavor :: Msvc ( lld_hint. unwrap_or ( lld) ) , 
372-             LinkerFlavor :: EmCc  | LinkerFlavor :: Bpf  | LinkerFlavor :: Llbc  | LinkerFlavor :: Ptx  => self , 
382+             LinkerFlavor :: EmCc 
383+             | LinkerFlavor :: Bpf 
384+             | LinkerFlavor :: Llbc 
385+             | LinkerFlavor :: Ptx 
386+             | LinkerFlavor :: Wild  => self , 
373387        } 
374388    } 
375389
@@ -397,7 +411,8 @@ impl LinkerFlavor {
397411                | ( LinkerFlavor :: EmCc ,  LinkerFlavorCli :: EmCc ) 
398412                | ( LinkerFlavor :: Bpf ,  LinkerFlavorCli :: Bpf ) 
399413                | ( LinkerFlavor :: Llbc ,  LinkerFlavorCli :: Llbc ) 
400-                 | ( LinkerFlavor :: Ptx ,  LinkerFlavorCli :: Ptx )  => return  true , 
414+                 | ( LinkerFlavor :: Ptx ,  LinkerFlavorCli :: Ptx ) 
415+                 | ( LinkerFlavor :: Wild ,  LinkerFlavorCli :: Wild )  => return  true , 
401416                // 2. The linker flavor is independent of target and compatible 
402417                ( LinkerFlavor :: Ptx ,  LinkerFlavorCli :: Llbc )  => return  true , 
403418                _ => { } 
@@ -427,6 +442,7 @@ impl LinkerFlavor {
427442            LinkerFlavor :: Darwin ( ..)  => LldFlavor :: Ld64 , 
428443            LinkerFlavor :: WasmLld ( ..)  => LldFlavor :: Wasm , 
429444            LinkerFlavor :: Msvc ( ..)  => LldFlavor :: Link , 
445+             LinkerFlavor :: Wild  => todo ! ( ) , 
430446        } 
431447    } 
432448
@@ -449,7 +465,8 @@ impl LinkerFlavor {
449465            | LinkerFlavor :: Unix ( _) 
450466            | LinkerFlavor :: Bpf 
451467            | LinkerFlavor :: Llbc 
452-             | LinkerFlavor :: Ptx  => false , 
468+             | LinkerFlavor :: Ptx 
469+             | LinkerFlavor :: Wild  => false , 
453470        } 
454471    } 
455472
@@ -461,7 +478,8 @@ impl LinkerFlavor {
461478            | LinkerFlavor :: Darwin ( Cc :: Yes ,  _) 
462479            | LinkerFlavor :: WasmLld ( Cc :: Yes ) 
463480            | LinkerFlavor :: Unix ( Cc :: Yes ) 
464-             | LinkerFlavor :: EmCc  => true , 
481+             | LinkerFlavor :: EmCc 
482+             | LinkerFlavor :: Wild  => true , 
465483            LinkerFlavor :: Gnu ( ..) 
466484            | LinkerFlavor :: Darwin ( ..) 
467485            | LinkerFlavor :: WasmLld ( _) 
@@ -546,6 +564,7 @@ linker_flavor_cli_impls! {
546564    ( LinkerFlavorCli :: Bpf )  "bpf" 
547565    ( LinkerFlavorCli :: Llbc )  "llbc" 
548566    ( LinkerFlavorCli :: Ptx )  "ptx" 
567+     ( LinkerFlavorCli :: Wild )  "wild" 
549568
550569    // Legacy stable flavors 
551570    ( LinkerFlavorCli :: Gcc )  "gcc" 
@@ -2847,6 +2866,7 @@ fn add_link_args_iter(
28472866            assert_eq ! ( lld,  Lld :: No ) ; 
28482867            insert ( LinkerFlavor :: Msvc ( Lld :: Yes ) ) ; 
28492868        } 
2869+         LinkerFlavor :: Wild  => insert ( LinkerFlavor :: Wild ) , 
28502870        LinkerFlavor :: WasmLld ( ..) 
28512871        | LinkerFlavor :: Unix ( ..) 
28522872        | LinkerFlavor :: EmCc 
@@ -3237,6 +3257,7 @@ impl Target {
32373257                    | LinkerFlavor :: Llbc  => { 
32383258                        check_eq ! ( flavor,  self . linker_flavor,  "mixing different linker flavors" ) 
32393259                    } 
3260+                     LinkerFlavor :: Wild  => todo ! ( ) , 
32403261                } 
32413262
32423263                // Check that link args for cc and non-cc versions of flavors are consistent. 
0 commit comments