@@ -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