@@ -130,6 +130,8 @@ pub enum LinkerFlavor {
130130 /// Emscripten Compiler Frontend, a wrapper around `WasmLld(Cc::Yes)` that has a different
131131 /// interface and produces some additional JavaScript output.
132132 EmCc ,
133+ // TODO: This needs some design on how to proceed
134+ Wild ,
133135 // Below: other linker-like tools with unique interfaces for exotic targets.
134136 /// Linker tool for BPF.
135137 Bpf ,
@@ -153,6 +155,7 @@ pub enum LinkerFlavorCli {
153155 EmCc ,
154156 Bpf ,
155157 Llbc ,
158+ Wild ,
156159
157160 // Legacy stable values
158161 Gcc ,
@@ -177,7 +180,8 @@ impl LinkerFlavorCli {
177180 | LinkerFlavorCli :: Ld
178181 | LinkerFlavorCli :: Lld ( ..)
179182 | LinkerFlavorCli :: Msvc ( Lld :: No )
180- | LinkerFlavorCli :: Em => false ,
183+ | LinkerFlavorCli :: Em
184+ | LinkerFlavorCli :: Wild => false ,
181185 }
182186 }
183187}
@@ -208,6 +212,7 @@ impl LinkerFlavor {
208212 LinkerFlavorCli :: EmCc => LinkerFlavor :: EmCc ,
209213 LinkerFlavorCli :: Bpf => LinkerFlavor :: Bpf ,
210214 LinkerFlavorCli :: Llbc => LinkerFlavor :: Llbc ,
215+ LinkerFlavorCli :: Wild => LinkerFlavor :: Wild ,
211216
212217 // Below: legacy stable values
213218 LinkerFlavorCli :: Gcc => match lld_flavor {
@@ -247,6 +252,7 @@ impl LinkerFlavor {
247252 LinkerFlavor :: EmCc => LinkerFlavorCli :: Em ,
248253 LinkerFlavor :: Bpf => LinkerFlavorCli :: Bpf ,
249254 LinkerFlavor :: Llbc => LinkerFlavorCli :: Llbc ,
255+ LinkerFlavor :: Wild => LinkerFlavorCli :: Wild ,
250256 }
251257 }
252258
@@ -261,6 +267,7 @@ impl LinkerFlavor {
261267 LinkerFlavor :: EmCc => LinkerFlavorCli :: EmCc ,
262268 LinkerFlavor :: Bpf => LinkerFlavorCli :: Bpf ,
263269 LinkerFlavor :: Llbc => LinkerFlavorCli :: Llbc ,
270+ LinkerFlavor :: Wild => LinkerFlavorCli :: Wild ,
264271 }
265272 }
266273
@@ -275,6 +282,7 @@ impl LinkerFlavor {
275282 LinkerFlavorCli :: EmCc => ( Some ( Cc :: Yes ) , Some ( Lld :: Yes ) ) ,
276283 LinkerFlavorCli :: Bpf => ( None , None ) ,
277284 LinkerFlavorCli :: Llbc => ( None , None ) ,
285+ LinkerFlavorCli :: Wild => ( None , None ) ,
278286
279287 // Below: legacy stable values
280288 LinkerFlavorCli :: Gcc => ( Some ( Cc :: Yes ) , None ) ,
@@ -293,6 +301,8 @@ impl LinkerFlavor {
293301
294302 if stem == "llvm-bitcode-linker" {
295303 Ok ( Self :: Llbc )
304+ } else if stem == "wild" {
305+ Ok ( Self :: Wild )
296306 } else if stem == "emcc" // GCC/Clang can have an optional target prefix.
297307 || stem == "gcc"
298308 || stem. ends_with ( "-gcc" )
@@ -330,7 +340,9 @@ impl LinkerFlavor {
330340 LinkerFlavor :: WasmLld ( cc) => LinkerFlavor :: WasmLld ( cc_hint. unwrap_or ( cc) ) ,
331341 LinkerFlavor :: Unix ( cc) => LinkerFlavor :: Unix ( cc_hint. unwrap_or ( cc) ) ,
332342 LinkerFlavor :: Msvc ( lld) => LinkerFlavor :: Msvc ( lld_hint. unwrap_or ( lld) ) ,
333- LinkerFlavor :: EmCc | LinkerFlavor :: Bpf | LinkerFlavor :: Llbc => self ,
343+ LinkerFlavor :: EmCc | LinkerFlavor :: Bpf | LinkerFlavor :: Llbc | LinkerFlavor :: Wild => {
344+ self
345+ }
334346 }
335347 }
336348
@@ -357,7 +369,8 @@ impl LinkerFlavor {
357369 | ( LinkerFlavor :: Msvc ( ..) , LinkerFlavorCli :: Msvc ( ..) )
358370 | ( LinkerFlavor :: EmCc , LinkerFlavorCli :: EmCc )
359371 | ( LinkerFlavor :: Bpf , LinkerFlavorCli :: Bpf )
360- | ( LinkerFlavor :: Llbc , LinkerFlavorCli :: Llbc ) => return true ,
372+ | ( LinkerFlavor :: Llbc , LinkerFlavorCli :: Llbc )
373+ | ( LinkerFlavor :: Wild , LinkerFlavorCli :: Wild ) => return true ,
361374 _ => { }
362375 }
363376
@@ -380,7 +393,8 @@ impl LinkerFlavor {
380393 | LinkerFlavor :: Unix ( ..)
381394 | LinkerFlavor :: EmCc
382395 | LinkerFlavor :: Bpf
383- | LinkerFlavor :: Llbc => LldFlavor :: Ld ,
396+ | LinkerFlavor :: Llbc
397+ | LinkerFlavor :: Wild => LldFlavor :: Ld ,
384398 LinkerFlavor :: Darwin ( ..) => LldFlavor :: Ld64 ,
385399 LinkerFlavor :: WasmLld ( ..) => LldFlavor :: Wasm ,
386400 LinkerFlavor :: Msvc ( ..) => LldFlavor :: Link ,
@@ -405,7 +419,8 @@ impl LinkerFlavor {
405419 | LinkerFlavor :: Msvc ( _)
406420 | LinkerFlavor :: Unix ( _)
407421 | LinkerFlavor :: Bpf
408- | LinkerFlavor :: Llbc => false ,
422+ | LinkerFlavor :: Llbc
423+ | LinkerFlavor :: Wild => false ,
409424 }
410425 }
411426
@@ -417,7 +432,8 @@ impl LinkerFlavor {
417432 | LinkerFlavor :: Darwin ( Cc :: Yes , _)
418433 | LinkerFlavor :: WasmLld ( Cc :: Yes )
419434 | LinkerFlavor :: Unix ( Cc :: Yes )
420- | LinkerFlavor :: EmCc => true ,
435+ | LinkerFlavor :: EmCc
436+ | LinkerFlavor :: Wild => true ,
421437 LinkerFlavor :: Gnu ( ..)
422438 | LinkerFlavor :: Darwin ( ..)
423439 | LinkerFlavor :: WasmLld ( _)
@@ -500,6 +516,7 @@ linker_flavor_cli_impls! {
500516 ( LinkerFlavorCli :: EmCc ) "em-cc"
501517 ( LinkerFlavorCli :: Bpf ) "bpf"
502518 ( LinkerFlavorCli :: Llbc ) "llbc"
519+ ( LinkerFlavorCli :: Wild ) "wild"
503520
504521 // Legacy stable flavors
505522 ( LinkerFlavorCli :: Gcc ) "gcc"
@@ -2762,6 +2779,7 @@ fn add_link_args_iter(
27622779 assert_eq ! ( lld, Lld :: No ) ;
27632780 insert ( LinkerFlavor :: Msvc ( Lld :: Yes ) ) ;
27642781 }
2782+ LinkerFlavor :: Wild => insert ( LinkerFlavor :: Wild ) ,
27652783 LinkerFlavor :: WasmLld ( ..)
27662784 | LinkerFlavor :: Unix ( ..)
27672785 | LinkerFlavor :: EmCc
@@ -3157,6 +3175,7 @@ impl Target {
31573175 LinkerFlavor :: EmCc | LinkerFlavor :: Bpf | LinkerFlavor :: Llbc => {
31583176 check_eq ! ( flavor, self . linker_flavor, "mixing different linker flavors" )
31593177 }
3178+ LinkerFlavor :: Wild => todo ! ( ) ,
31603179 }
31613180
31623181 // Check that link args for cc and non-cc versions of flavors are consistent.
0 commit comments