@@ -128,6 +128,8 @@ pub enum LinkerFlavor {
128128 /// Emscripten Compiler Frontend, a wrapper around `WasmLld(Cc::Yes)` that has a different
129129 /// interface and produces some additional JavaScript output.
130130 EmCc ,
131+ // TODO: This needs some design on how to proceed
132+ Wild ,
131133 // Below: other linker-like tools with unique interfaces for exotic targets.
132134 /// Linker tool for BPF.
133135 Bpf ,
@@ -154,6 +156,7 @@ pub enum LinkerFlavorCli {
154156 Bpf ,
155157 Ptx ,
156158 Llbc ,
159+ Wild ,
157160
158161 // Legacy stable values
159162 Gcc ,
@@ -179,7 +182,8 @@ impl LinkerFlavorCli {
179182 | LinkerFlavorCli :: Ld
180183 | LinkerFlavorCli :: Lld ( ..)
181184 | LinkerFlavorCli :: Msvc ( Lld :: No )
182- | LinkerFlavorCli :: Em => false ,
185+ | LinkerFlavorCli :: Em
186+ | LinkerFlavorCli :: Wild => false ,
183187 }
184188 }
185189}
@@ -211,6 +215,7 @@ impl LinkerFlavor {
211215 LinkerFlavorCli :: Bpf => LinkerFlavor :: Bpf ,
212216 LinkerFlavorCli :: Llbc => LinkerFlavor :: Llbc ,
213217 LinkerFlavorCli :: Ptx => LinkerFlavor :: Ptx ,
218+ LinkerFlavorCli :: Wild => LinkerFlavor :: Wild ,
214219
215220 // Below: legacy stable values
216221 LinkerFlavorCli :: Gcc => match lld_flavor {
@@ -251,6 +256,7 @@ impl LinkerFlavor {
251256 LinkerFlavor :: Bpf => LinkerFlavorCli :: Bpf ,
252257 LinkerFlavor :: Llbc => LinkerFlavorCli :: Llbc ,
253258 LinkerFlavor :: Ptx => LinkerFlavorCli :: Ptx ,
259+ LinkerFlavor :: Wild => LinkerFlavorCli :: Wild ,
254260 }
255261 }
256262
@@ -266,6 +272,7 @@ impl LinkerFlavor {
266272 LinkerFlavor :: Bpf => LinkerFlavorCli :: Bpf ,
267273 LinkerFlavor :: Llbc => LinkerFlavorCli :: Llbc ,
268274 LinkerFlavor :: Ptx => LinkerFlavorCli :: Ptx ,
275+ LinkerFlavor :: Wild => LinkerFlavorCli :: Wild ,
269276 }
270277 }
271278
@@ -280,6 +287,7 @@ impl LinkerFlavor {
280287 LinkerFlavorCli :: EmCc => ( Some ( Cc :: Yes ) , Some ( Lld :: Yes ) ) ,
281288 LinkerFlavorCli :: Bpf | LinkerFlavorCli :: Ptx => ( None , None ) ,
282289 LinkerFlavorCli :: Llbc => ( None , None ) ,
290+ LinkerFlavorCli :: Wild => ( None , None ) ,
283291
284292 // Below: legacy stable values
285293 LinkerFlavorCli :: Gcc => ( Some ( Cc :: Yes ) , None ) ,
@@ -298,6 +306,8 @@ impl LinkerFlavor {
298306
299307 if stem == "llvm-bitcode-linker" {
300308 Ok ( Self :: Llbc )
309+ } else if stem == "wild" {
310+ Ok ( Self :: Wild )
301311 } else if stem == "emcc" // GCC/Clang can have an optional target prefix.
302312 || stem == "gcc"
303313 || stem. ends_with ( "-gcc" )
@@ -335,7 +345,11 @@ impl LinkerFlavor {
335345 LinkerFlavor :: WasmLld ( cc) => LinkerFlavor :: WasmLld ( cc_hint. unwrap_or ( cc) ) ,
336346 LinkerFlavor :: Unix ( cc) => LinkerFlavor :: Unix ( cc_hint. unwrap_or ( cc) ) ,
337347 LinkerFlavor :: Msvc ( lld) => LinkerFlavor :: Msvc ( lld_hint. unwrap_or ( lld) ) ,
338- LinkerFlavor :: EmCc | LinkerFlavor :: Bpf | LinkerFlavor :: Llbc | LinkerFlavor :: Ptx => self ,
348+ LinkerFlavor :: EmCc
349+ | LinkerFlavor :: Bpf
350+ | LinkerFlavor :: Llbc
351+ | LinkerFlavor :: Ptx
352+ | LinkerFlavor :: Wild => self ,
339353 }
340354 }
341355
@@ -363,7 +377,8 @@ impl LinkerFlavor {
363377 | ( LinkerFlavor :: EmCc , LinkerFlavorCli :: EmCc )
364378 | ( LinkerFlavor :: Bpf , LinkerFlavorCli :: Bpf )
365379 | ( LinkerFlavor :: Llbc , LinkerFlavorCli :: Llbc )
366- | ( LinkerFlavor :: Ptx , LinkerFlavorCli :: Ptx ) => return true ,
380+ | ( LinkerFlavor :: Ptx , LinkerFlavorCli :: Ptx )
381+ | ( LinkerFlavor :: Wild , LinkerFlavorCli :: Wild ) => return true ,
367382 // 2. The linker flavor is independent of target and compatible
368383 ( LinkerFlavor :: Ptx , LinkerFlavorCli :: Llbc ) => return true ,
369384 _ => { }
@@ -393,6 +408,7 @@ impl LinkerFlavor {
393408 LinkerFlavor :: Darwin ( ..) => LldFlavor :: Ld64 ,
394409 LinkerFlavor :: WasmLld ( ..) => LldFlavor :: Wasm ,
395410 LinkerFlavor :: Msvc ( ..) => LldFlavor :: Link ,
411+ LinkerFlavor :: Wild => todo ! ( ) ,
396412 }
397413 }
398414
@@ -415,7 +431,8 @@ impl LinkerFlavor {
415431 | LinkerFlavor :: Unix ( _)
416432 | LinkerFlavor :: Bpf
417433 | LinkerFlavor :: Llbc
418- | LinkerFlavor :: Ptx => false ,
434+ | LinkerFlavor :: Ptx
435+ | LinkerFlavor :: Wild => false ,
419436 }
420437 }
421438
@@ -427,7 +444,8 @@ impl LinkerFlavor {
427444 | LinkerFlavor :: Darwin ( Cc :: Yes , _)
428445 | LinkerFlavor :: WasmLld ( Cc :: Yes )
429446 | LinkerFlavor :: Unix ( Cc :: Yes )
430- | LinkerFlavor :: EmCc => true ,
447+ | LinkerFlavor :: EmCc
448+ | LinkerFlavor :: Wild => true ,
431449 LinkerFlavor :: Gnu ( ..)
432450 | LinkerFlavor :: Darwin ( ..)
433451 | LinkerFlavor :: WasmLld ( _)
@@ -512,6 +530,7 @@ linker_flavor_cli_impls! {
512530 ( LinkerFlavorCli :: Bpf ) "bpf"
513531 ( LinkerFlavorCli :: Llbc ) "llbc"
514532 ( LinkerFlavorCli :: Ptx ) "ptx"
533+ ( LinkerFlavorCli :: Wild ) "wild"
515534
516535 // Legacy stable flavors
517536 ( LinkerFlavorCli :: Gcc ) "gcc"
@@ -2380,6 +2399,7 @@ fn add_link_args_iter(
23802399 assert_eq ! ( lld, Lld :: No ) ;
23812400 insert ( LinkerFlavor :: Msvc ( Lld :: Yes ) ) ;
23822401 }
2402+ LinkerFlavor :: Wild => insert ( LinkerFlavor :: Wild ) ,
23832403 LinkerFlavor :: WasmLld ( ..)
23842404 | LinkerFlavor :: Unix ( ..)
23852405 | LinkerFlavor :: EmCc
@@ -2770,6 +2790,7 @@ impl Target {
27702790 | LinkerFlavor :: Llbc => {
27712791 check_eq ! ( flavor, self . linker_flavor, "mixing different linker flavors" )
27722792 }
2793+ LinkerFlavor :: Wild => todo ! ( ) ,
27732794 }
27742795
27752796 // Check that link args for cc and non-cc versions of flavors are consistent.
0 commit comments