@@ -129,6 +129,8 @@ pub enum LinkerFlavor {
129129 /// Emscripten Compiler Frontend, a wrapper around `WasmLld(Cc::Yes)` that has a different
130130 /// interface and produces some additional JavaScript output.
131131 EmCc ,
132+ // TODO: This needs some design on how to proceed
133+ Wild ,
132134 // Below: other linker-like tools with unique interfaces for exotic targets.
133135 /// Linker tool for BPF.
134136 Bpf ,
@@ -155,6 +157,7 @@ pub enum LinkerFlavorCli {
155157 Bpf ,
156158 Ptx ,
157159 Llbc ,
160+ Wild ,
158161
159162 // Legacy stable values
160163 Gcc ,
@@ -180,7 +183,8 @@ impl LinkerFlavorCli {
180183 | LinkerFlavorCli :: Ld
181184 | LinkerFlavorCli :: Lld ( ..)
182185 | LinkerFlavorCli :: Msvc ( Lld :: No )
183- | LinkerFlavorCli :: Em => false ,
186+ | LinkerFlavorCli :: Em
187+ | LinkerFlavorCli :: Wild => false ,
184188 }
185189 }
186190}
@@ -212,6 +216,7 @@ impl LinkerFlavor {
212216 LinkerFlavorCli :: Bpf => LinkerFlavor :: Bpf ,
213217 LinkerFlavorCli :: Llbc => LinkerFlavor :: Llbc ,
214218 LinkerFlavorCli :: Ptx => LinkerFlavor :: Ptx ,
219+ LinkerFlavorCli :: Wild => LinkerFlavor :: Wild ,
215220
216221 // Below: legacy stable values
217222 LinkerFlavorCli :: Gcc => match lld_flavor {
@@ -252,6 +257,7 @@ impl LinkerFlavor {
252257 LinkerFlavor :: Bpf => LinkerFlavorCli :: Bpf ,
253258 LinkerFlavor :: Llbc => LinkerFlavorCli :: Llbc ,
254259 LinkerFlavor :: Ptx => LinkerFlavorCli :: Ptx ,
260+ LinkerFlavor :: Wild => LinkerFlavorCli :: Wild ,
255261 }
256262 }
257263
@@ -267,6 +273,7 @@ impl LinkerFlavor {
267273 LinkerFlavor :: Bpf => LinkerFlavorCli :: Bpf ,
268274 LinkerFlavor :: Llbc => LinkerFlavorCli :: Llbc ,
269275 LinkerFlavor :: Ptx => LinkerFlavorCli :: Ptx ,
276+ LinkerFlavor :: Wild => LinkerFlavorCli :: Wild ,
270277 }
271278 }
272279
@@ -281,6 +288,7 @@ impl LinkerFlavor {
281288 LinkerFlavorCli :: EmCc => ( Some ( Cc :: Yes ) , Some ( Lld :: Yes ) ) ,
282289 LinkerFlavorCli :: Bpf | LinkerFlavorCli :: Ptx => ( None , None ) ,
283290 LinkerFlavorCli :: Llbc => ( None , None ) ,
291+ LinkerFlavorCli :: Wild => ( None , None ) ,
284292
285293 // Below: legacy stable values
286294 LinkerFlavorCli :: Gcc => ( Some ( Cc :: Yes ) , None ) ,
@@ -299,6 +307,8 @@ impl LinkerFlavor {
299307
300308 if stem == "llvm-bitcode-linker" {
301309 Ok ( Self :: Llbc )
310+ } else if stem == "wild" {
311+ Ok ( Self :: Wild )
302312 } else if stem == "emcc" // GCC/Clang can have an optional target prefix.
303313 || stem == "gcc"
304314 || stem. ends_with ( "-gcc" )
@@ -336,7 +346,11 @@ impl LinkerFlavor {
336346 LinkerFlavor :: WasmLld ( cc) => LinkerFlavor :: WasmLld ( cc_hint. unwrap_or ( cc) ) ,
337347 LinkerFlavor :: Unix ( cc) => LinkerFlavor :: Unix ( cc_hint. unwrap_or ( cc) ) ,
338348 LinkerFlavor :: Msvc ( lld) => LinkerFlavor :: Msvc ( lld_hint. unwrap_or ( lld) ) ,
339- LinkerFlavor :: EmCc | LinkerFlavor :: Bpf | LinkerFlavor :: Llbc | LinkerFlavor :: Ptx => self ,
349+ LinkerFlavor :: EmCc
350+ | LinkerFlavor :: Bpf
351+ | LinkerFlavor :: Llbc
352+ | LinkerFlavor :: Ptx
353+ | LinkerFlavor :: Wild => self ,
340354 }
341355 }
342356
@@ -364,7 +378,8 @@ impl LinkerFlavor {
364378 | ( LinkerFlavor :: EmCc , LinkerFlavorCli :: EmCc )
365379 | ( LinkerFlavor :: Bpf , LinkerFlavorCli :: Bpf )
366380 | ( LinkerFlavor :: Llbc , LinkerFlavorCli :: Llbc )
367- | ( LinkerFlavor :: Ptx , LinkerFlavorCli :: Ptx ) => return true ,
381+ | ( LinkerFlavor :: Ptx , LinkerFlavorCli :: Ptx )
382+ | ( LinkerFlavor :: Wild , LinkerFlavorCli :: Wild ) => return true ,
368383 // 2. The linker flavor is independent of target and compatible
369384 ( LinkerFlavor :: Ptx , LinkerFlavorCli :: Llbc ) => return true ,
370385 _ => { }
@@ -390,7 +405,8 @@ impl LinkerFlavor {
390405 | LinkerFlavor :: EmCc
391406 | LinkerFlavor :: Bpf
392407 | LinkerFlavor :: Llbc
393- | LinkerFlavor :: Ptx => LldFlavor :: Ld ,
408+ | LinkerFlavor :: Ptx
409+ | LinkerFlavor :: Wild => LldFlavor :: Ld ,
394410 LinkerFlavor :: Darwin ( ..) => LldFlavor :: Ld64 ,
395411 LinkerFlavor :: WasmLld ( ..) => LldFlavor :: Wasm ,
396412 LinkerFlavor :: Msvc ( ..) => LldFlavor :: Link ,
@@ -416,7 +432,8 @@ impl LinkerFlavor {
416432 | LinkerFlavor :: Unix ( _)
417433 | LinkerFlavor :: Bpf
418434 | LinkerFlavor :: Llbc
419- | LinkerFlavor :: Ptx => false ,
435+ | LinkerFlavor :: Ptx
436+ | LinkerFlavor :: Wild => false ,
420437 }
421438 }
422439
@@ -428,7 +445,8 @@ impl LinkerFlavor {
428445 | LinkerFlavor :: Darwin ( Cc :: Yes , _)
429446 | LinkerFlavor :: WasmLld ( Cc :: Yes )
430447 | LinkerFlavor :: Unix ( Cc :: Yes )
431- | LinkerFlavor :: EmCc => true ,
448+ | LinkerFlavor :: EmCc
449+ | LinkerFlavor :: Wild => true ,
432450 LinkerFlavor :: Gnu ( ..)
433451 | LinkerFlavor :: Darwin ( ..)
434452 | LinkerFlavor :: WasmLld ( _)
@@ -513,6 +531,7 @@ linker_flavor_cli_impls! {
513531 ( LinkerFlavorCli :: Bpf ) "bpf"
514532 ( LinkerFlavorCli :: Llbc ) "llbc"
515533 ( LinkerFlavorCli :: Ptx ) "ptx"
534+ ( LinkerFlavorCli :: Wild ) "wild"
516535
517536 // Legacy stable flavors
518537 ( LinkerFlavorCli :: Gcc ) "gcc"
@@ -2736,6 +2755,7 @@ fn add_link_args_iter(
27362755 assert_eq ! ( lld, Lld :: No ) ;
27372756 insert ( LinkerFlavor :: Msvc ( Lld :: Yes ) ) ;
27382757 }
2758+ LinkerFlavor :: Wild => insert ( LinkerFlavor :: Wild ) ,
27392759 LinkerFlavor :: WasmLld ( ..)
27402760 | LinkerFlavor :: Unix ( ..)
27412761 | LinkerFlavor :: EmCc
@@ -3133,6 +3153,7 @@ impl Target {
31333153 | LinkerFlavor :: Llbc => {
31343154 check_eq ! ( flavor, self . linker_flavor, "mixing different linker flavors" )
31353155 }
3156+ LinkerFlavor :: Wild => todo ! ( ) ,
31363157 }
31373158
31383159 // Check that link args for cc and non-cc versions of flavors are consistent.
0 commit comments