target_lexicon_macros/
lib.rs

1use proc_macro::TokenStream;
2use quote::quote;
3use std::str::FromStr;
4use syn::LitStr;
5use target_lexicon::Triple;
6
7/// Creates a static [Triple](target_lexicon::Triple) at build time.
8///
9/// # Example
10/// ```rust
11/// const TARGET: Triple = triple!("x86_64-unknown-linux-gnu");
12/// ```
13#[proc_macro]
14pub fn triple(tokens: TokenStream) -> TokenStream {
15    let triple: LitStr = syn::parse_macro_input!(tokens);
16
17    let parsed_triple = Triple::from_str(&triple.value()).expect("Invalid triple value");
18
19    triple_to_tokens(parsed_triple)
20}
21
22/*
23I am gonna be honest, I am not really proud of this function.
24This could be implemented with a macro instead of this questionable brute force approach but it does get the job done.
25In the future it's probably a good idea to make this more mantainable, but it was actually faster to do it this way than to figure out
26the proper macro_rules syntax.
27
28This is what I tell my self to justify writing all this by hand. If you are reading this please fix it.
29
30P.S.
31
32You may have noticed that there are no test cases... It's 4 am, I haven't slept in 48 hours and I'm fueled by Monster Energy and unrelated hate against nvidia.
33Just shut up.
34*/
35fn triple_to_tokens(triple: Triple) -> TokenStream {
36    let architecture = match triple.architecture {
37        target_lexicon::Architecture::Unknown => quote! {::target_lexicon::Architecture::Unknown},
38        target_lexicon::Architecture::Arm(arm) => match arm {
39            target_lexicon::ArmArchitecture::Arm => {
40                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Arm)}
41            }
42            target_lexicon::ArmArchitecture::Armeb => {
43                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armeb)}
44            }
45            target_lexicon::ArmArchitecture::Armv4 => {
46                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv4)}
47            }
48            target_lexicon::ArmArchitecture::Armv4t => {
49                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv4t)}
50            }
51            target_lexicon::ArmArchitecture::Armv5t => {
52                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv5t)}
53            }
54            target_lexicon::ArmArchitecture::Armv5te => {
55                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv5te)}
56            }
57            target_lexicon::ArmArchitecture::Armv5tej => {
58                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv5tej)}
59            }
60            target_lexicon::ArmArchitecture::Armv6 => {
61                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv6)}
62            }
63            target_lexicon::ArmArchitecture::Armv6j => {
64                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv6j)}
65            }
66            target_lexicon::ArmArchitecture::Armv6k => {
67                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv6k)}
68            }
69            target_lexicon::ArmArchitecture::Armv6z => {
70                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv6z)}
71            }
72            target_lexicon::ArmArchitecture::Armv6kz => {
73                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv6kz)}
74            }
75            target_lexicon::ArmArchitecture::Armv6t2 => {
76                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv6t2)}
77            }
78            target_lexicon::ArmArchitecture::Armv6m => {
79                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv6m)}
80            }
81            target_lexicon::ArmArchitecture::Armv7 => {
82                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv7)}
83            }
84            target_lexicon::ArmArchitecture::Armv7a => {
85                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv7a)}
86            }
87            target_lexicon::ArmArchitecture::Armv7ve => {
88                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv7ve)}
89            }
90            target_lexicon::ArmArchitecture::Armv7m => {
91                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv7m)}
92            }
93            target_lexicon::ArmArchitecture::Armv7r => {
94                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv7r)}
95            }
96            target_lexicon::ArmArchitecture::Armv7s => {
97                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv7s)}
98            }
99            target_lexicon::ArmArchitecture::Armv8 => {
100                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv8)}
101            }
102            target_lexicon::ArmArchitecture::Armv8a => {
103                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv8a)}
104            }
105            target_lexicon::ArmArchitecture::Armv8_1a => {
106                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv8_1a)}
107            }
108            target_lexicon::ArmArchitecture::Armv8_2a => {
109                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv8_2a)}
110            }
111            target_lexicon::ArmArchitecture::Armv8_3a => {
112                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv8_3a)}
113            }
114            target_lexicon::ArmArchitecture::Armv8_4a => {
115                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv8_4a)}
116            }
117            target_lexicon::ArmArchitecture::Armv8_5a => {
118                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv8_5a)}
119            }
120            target_lexicon::ArmArchitecture::Armv8mBase => {
121                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv8mBase)}
122            }
123            target_lexicon::ArmArchitecture::Armv8mMain => {
124                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv8mMain)}
125            }
126            target_lexicon::ArmArchitecture::Armv8r => {
127                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armv8r)}
128            }
129            target_lexicon::ArmArchitecture::Armebv7r => {
130                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Armebv7r)}
131            }
132            target_lexicon::ArmArchitecture::Thumbeb => {
133                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Thumbeb)}
134            }
135            target_lexicon::ArmArchitecture::Thumbv4t => {
136                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Thumbv4t)}
137            }
138            target_lexicon::ArmArchitecture::Thumbv6m => {
139                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Thumbv6m)}
140            }
141            target_lexicon::ArmArchitecture::Thumbv7a => {
142                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Thumbv7a)}
143            }
144            target_lexicon::ArmArchitecture::Thumbv7em => {
145                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Thumbv7em)}
146            }
147            target_lexicon::ArmArchitecture::Thumbv7m => {
148                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Thumbv7m)}
149            }
150            target_lexicon::ArmArchitecture::Thumbv7neon => {
151                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Thumbv7neon)}
152            }
153            target_lexicon::ArmArchitecture::Thumbv8mBase => {
154                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Thumbv8mBase)}
155            }
156            target_lexicon::ArmArchitecture::Thumbv8mMain => {
157                quote! {::target_lexicon::Architecture::Arm(:: target_lexicon::ArmArchitecture::Thumbv8mMain)}
158            }
159            _ => panic!("Unsupported architecture"),
160        },
161        target_lexicon::Architecture::AmdGcn => quote! {::target_lexicon::Architecture::AmdGcn},
162        target_lexicon::Architecture::Aarch64(aarch64) => match aarch64 {
163            target_lexicon::Aarch64Architecture::Aarch64 => {
164                quote! {::target_lexicon::Architecture::Aarch64(::target_lexicon::Aarch64Architecture::Aarch64)}
165            }
166            target_lexicon::Aarch64Architecture::Aarch64be => {
167                quote! {::target_lexicon::Architecture::Aarch64(::target_lexicon::Aarch64Architecture::Aarch64be)}
168            }
169            _ => panic!("Unsupported architecture"),
170        },
171        target_lexicon::Architecture::Asmjs => quote! {::target_lexicon::Architecture::Asmjs},
172        target_lexicon::Architecture::Avr => quote! {::target_lexicon::Architecture::Avr},
173        target_lexicon::Architecture::Bpfeb => quote! {::target_lexicon::Architecture::Bpfeb},
174        target_lexicon::Architecture::Bpfel => quote! {::target_lexicon::Architecture::Bpfel},
175        target_lexicon::Architecture::Hexagon => quote! {::target_lexicon::Architecture::Hexagon},
176        target_lexicon::Architecture::X86_32(x86_32) => match x86_32 {
177            target_lexicon::X86_32Architecture::I386 => {
178                quote! {::target_lexicon::Architecture::X86_32(::target_lexicon::X86_32Architecture::I386)}
179            }
180            target_lexicon::X86_32Architecture::I586 => {
181                quote! {::target_lexicon::Architecture::X86_32(::target_lexicon::X86_32Architecture::I586)}
182            }
183            target_lexicon::X86_32Architecture::I686 => {
184                quote! {::target_lexicon::Architecture::X86_32(::target_lexicon::X86_32Architecture::I686)}
185            }
186            _ => panic!("Unsupported architecture"),
187        },
188        target_lexicon::Architecture::M68k => quote! {::target_lexicon::Architecture::M68k},
189        target_lexicon::Architecture::Mips32(mips32) => match mips32 {
190            target_lexicon::Mips32Architecture::Mips => {
191                quote! {::target_lexicon::Architecture::Mips32(:: target_lexicon::Mips32Architecture::Mips)}
192            }
193            target_lexicon::Mips32Architecture::Mipsel => {
194                quote! {::target_lexicon::Architecture::Mips32(:: target_lexicon::Mips32Architecture::Mipsel)}
195            }
196            target_lexicon::Mips32Architecture::Mipsisa32r6 => {
197                quote! {::target_lexicon::Architecture::Mips32(:: target_lexicon::Mips32Architecture::Mipsisa32r6)}
198            }
199            target_lexicon::Mips32Architecture::Mipsisa32r6el => {
200                quote! {::target_lexicon::Architecture::Mips32(:: target_lexicon::Mips32Architecture::Mipsisa32r6el)}
201            }
202            _ => panic!("Unsupported architecture"),
203        },
204        target_lexicon::Architecture::Mips64(mips64) => match mips64 {
205            target_lexicon::Mips64Architecture::Mips64 => {
206                quote! {::target_lexicon::Architecture::Mips64(::target_lexicon::Mips64Architecture::Mips64)}
207            }
208            target_lexicon::Mips64Architecture::Mips64el => {
209                quote! {::target_lexicon::Architecture::Mips64(::target_lexicon::Mips64Architecture::Mips64el)}
210            }
211            target_lexicon::Mips64Architecture::Mipsisa64r6 => {
212                quote! {::target_lexicon::Architecture::Mips64(::target_lexicon::Mips64Architecture::Mipsisa64r6)}
213            }
214            target_lexicon::Mips64Architecture::Mipsisa64r6el => {
215                quote! {::target_lexicon::Architecture::Mips64(::target_lexicon::Mips64Architecture::Mipsisa64r6el)}
216            }
217            _ => panic!("Unsupported architecture"),
218        },
219        target_lexicon::Architecture::Msp430 => quote! {::target_lexicon::Architecture::Msp430},
220        target_lexicon::Architecture::Nvptx64 => quote! {::target_lexicon::Architecture::Nvptx64},
221        target_lexicon::Architecture::Powerpc => quote! {::target_lexicon::Architecture::Powerpc},
222        target_lexicon::Architecture::Powerpc64 => {
223            quote! {::target_lexicon::Architecture::Powerpc64}
224        }
225        target_lexicon::Architecture::Powerpc64le => {
226            quote! {::target_lexicon::Architecture::Powerpc64le}
227        }
228        target_lexicon::Architecture::Riscv32(riscv32) => match riscv32 {
229            target_lexicon::Riscv32Architecture::Riscv32 => {
230                quote! {::target_lexicon::Architecture::Riscv32(::target_lexicon::Riscv32Architecture::Riscv32)}
231            }
232            target_lexicon::Riscv32Architecture::Riscv32gc => {
233                quote! {::target_lexicon::Architecture::Riscv32(::target_lexicon::Riscv32Architecture::Riscv32gc)}
234            }
235            target_lexicon::Riscv32Architecture::Riscv32i => {
236                quote! {::target_lexicon::Architecture::Riscv32(::target_lexicon::Riscv32Architecture::Riscv32i)}
237            }
238            target_lexicon::Riscv32Architecture::Riscv32im => {
239                quote! {::target_lexicon::Architecture::Riscv32(::target_lexicon::Riscv32Architecture::Riscv32im)}
240            }
241            target_lexicon::Riscv32Architecture::Riscv32imac => {
242                quote! {::target_lexicon::Architecture::Riscv32(::target_lexicon::Riscv32Architecture::Riscv32imac)}
243            }
244            target_lexicon::Riscv32Architecture::Riscv32imc => {
245                quote! {::target_lexicon::Architecture::Riscv32(::target_lexicon::Riscv32Architecture::Riscv32imc)}
246            }
247            _ => panic!("Unsupported architecture"),
248        },
249        target_lexicon::Architecture::Riscv64(riscv64) => match riscv64 {
250            target_lexicon::Riscv64Architecture::Riscv64 => {
251                quote! {::target_lexicon::Architecture::Riscv64(target_lexicon::Riscv64Architecture::Riscv64)}
252            }
253            target_lexicon::Riscv64Architecture::Riscv64gc => {
254                quote! {::target_lexicon::Architecture::Riscv64(target_lexicon::Riscv64Architecture::Riscv64gc)}
255            }
256            target_lexicon::Riscv64Architecture::Riscv64imac => {
257                quote! {::target_lexicon::Architecture::Riscv64(target_lexicon::Riscv64Architecture::Riscv64imac)}
258            }
259            _ => panic!("Unsupported architecture"),
260        },
261        target_lexicon::Architecture::S390x => quote! {::target_lexicon::Architecture::S390x},
262        target_lexicon::Architecture::Sparc => quote! {::target_lexicon::Architecture::Sparc},
263        target_lexicon::Architecture::Sparc64 => quote! {::target_lexicon::Architecture::Sparc64},
264        target_lexicon::Architecture::Sparcv9 => quote! {::target_lexicon::Architecture::Sparcv9},
265        target_lexicon::Architecture::Wasm32 => quote! {::target_lexicon::Architecture::Wasm32},
266        target_lexicon::Architecture::Wasm64 => quote! {::target_lexicon::Architecture::Wasm64},
267        target_lexicon::Architecture::X86_64 => {
268            quote! {::target_lexicon::Architecture::X86_64}
269        }
270        target_lexicon::Architecture::XTensa => quote! {::target_lexicon::Architecture::XTensa},
271        _ => panic!("Unsupported architecture"),
272    };
273
274    let vendor = match triple.vendor {
275        target_lexicon::Vendor::Unknown => {
276            quote! {::target_lexicon::Vendor::Unknown}
277        }
278        target_lexicon::Vendor::Amd => quote! {::target_lexicon::Vendor::Amd},
279        target_lexicon::Vendor::Apple => quote! {::target_lexicon::Vendor::Apple},
280        target_lexicon::Vendor::Espressif => quote! {::target_lexicon::Vendor::EspressifEspressif},
281        target_lexicon::Vendor::Experimental => quote! {::target_lexicon::Vendor::Experimental},
282        target_lexicon::Vendor::Fortanix => quote! {::target_lexicon::Vendor::Fortanix},
283        target_lexicon::Vendor::Kmc => quote! {::target_lexicon::Vendor::Kmc},
284        target_lexicon::Vendor::Nintendo => quote! {::target_lexicon::Vendor::Nintendo},
285        target_lexicon::Vendor::Nvidia => quote! {::target_lexicon::Vendor::Nvidia},
286        target_lexicon::Vendor::Pc => quote! {::target_lexicon::Vendor::Pc},
287        target_lexicon::Vendor::Rumprun => quote! {::target_lexicon::Vendor::Rumprun},
288        target_lexicon::Vendor::Sun => quote! {::target_lexicon::Vendor::Sun},
289        target_lexicon::Vendor::Uwp => quote! {::target_lexicon::Vendor::Uwp},
290        target_lexicon::Vendor::Wrs => quote! {::target_lexicon::Vendor::Wrs},
291        target_lexicon::Vendor::Custom(custom_vendor) => {
292            // TODO: test this cause it doesn't currently work
293            let vendor = custom_vendor.as_str();
294            quote! {::target_lexicon::Vendor::Unknown(::target_lexicon::CustomVendor::Static(#vendor))}
295        }
296        _ => panic!("Unsupported vendor"),
297    };
298
299    let operating_system = match triple.operating_system {
300        target_lexicon::OperatingSystem::Unknown => {
301            quote! {::target_lexicon::OperatingSystem::Unknown}
302        }
303        target_lexicon::OperatingSystem::AmdHsa => {
304            quote! {::target_lexicon::OperatingSystem::AmdHsa}
305        }
306        target_lexicon::OperatingSystem::Bitrig => {
307            quote! {::target_lexicon::OperatingSystem::Bitrig}
308        }
309        target_lexicon::OperatingSystem::Cloudabi => {
310            quote! {::target_lexicon::OperatingSystem::Cloudabi}
311        }
312        target_lexicon::OperatingSystem::Cuda => {
313            quote! {::target_lexicon::OperatingSystem::Cuda}
314        }
315        target_lexicon::OperatingSystem::Darwin => {
316            quote! {::target_lexicon::OperatingSystem::Darwin}
317        }
318        target_lexicon::OperatingSystem::Dragonfly => {
319            quote! {::target_lexicon::OperatingSystem::Dragonfly}
320        }
321        target_lexicon::OperatingSystem::Emscripten => {
322            quote! {::target_lexicon::OperatingSystem::Emscripten}
323        }
324        target_lexicon::OperatingSystem::Espidf => {
325            quote! {::target_lexicon::OperatingSystem::Espidf}
326        }
327        target_lexicon::OperatingSystem::Freebsd => {
328            quote! {::target_lexicon::OperatingSystem::Freebsd}
329        }
330        target_lexicon::OperatingSystem::Fuchsia => {
331            quote! {::target_lexicon::OperatingSystem::Fuchsia}
332        }
333        target_lexicon::OperatingSystem::Haiku => {
334            quote! {::target_lexicon::OperatingSystem::Haiku}
335        }
336        target_lexicon::OperatingSystem::Hermit => {
337            quote! {::target_lexicon::OperatingSystem::Hermit}
338        }
339        target_lexicon::OperatingSystem::Horizon => {
340            quote! {::target_lexicon::OperatingSystem::Horizon}
341        }
342        target_lexicon::OperatingSystem::Illumos => {
343            quote! {::target_lexicon::OperatingSystem::Illumos}
344        }
345        target_lexicon::OperatingSystem::Ios => quote! {::target_lexicon::OperatingSystem::Ios},
346        target_lexicon::OperatingSystem::L4re => {
347            quote! {::target_lexicon::OperatingSystem::L4re}
348        }
349        target_lexicon::OperatingSystem::Linux => {
350            quote! {::target_lexicon::OperatingSystem::Linux}
351        }
352        target_lexicon::OperatingSystem::MacOSX {
353            major,
354            minor,
355            patch,
356        } => {
357            quote! {::target_lexicon::OperatingSystem::MacOSX { major: #major, minor: #minor, patch: #patch }}
358        }
359        target_lexicon::OperatingSystem::Nebulet => {
360            quote! {::target_lexicon::OperatingSystem::Nebulet}
361        }
362        target_lexicon::OperatingSystem::Netbsd => {
363            quote! {::target_lexicon::OperatingSystem::Netbsd}
364        }
365        target_lexicon::OperatingSystem::None_ => {
366            quote! {::target_lexicon::OperatingSystem::None_}
367        }
368        target_lexicon::OperatingSystem::Openbsd => {
369            quote! {::target_lexicon::OperatingSystem::Openbsd}
370        }
371        target_lexicon::OperatingSystem::Psp => quote! {::target_lexicon::OperatingSystem::Psp},
372        target_lexicon::OperatingSystem::Redox => {
373            quote! {::target_lexicon::OperatingSystem::Redox}
374        }
375        target_lexicon::OperatingSystem::Solaris => {
376            quote! {::target_lexicon::OperatingSystem::Solaris}
377        }
378        target_lexicon::OperatingSystem::SolidAsp3 => {
379            quote! {::target_lexicon::OperatingSystem::SolidAsp3}
380        }
381        target_lexicon::OperatingSystem::Tvos => {
382            quote! {::target_lexicon::OperatingSystem::Tvos}
383        }
384        target_lexicon::OperatingSystem::Uefi => {
385            quote! {::target_lexicon::OperatingSystem::Uefi}
386        }
387        target_lexicon::OperatingSystem::VxWorks => {
388            quote! {::target_lexicon::OperatingSystem::VxWorks}
389        }
390        target_lexicon::OperatingSystem::Wasi => {
391            quote! {::target_lexicon::OperatingSystem::Wasi}
392        }
393        target_lexicon::OperatingSystem::Windows => {
394            quote! {::target_lexicon::OperatingSystem::Windows}
395        }
396        _ => panic!("Unsupported operating system"),
397    };
398
399    let environment = match triple.environment {
400        target_lexicon::Environment::Unknown => quote! {::target_lexicon::Environment::Unknown},
401        target_lexicon::Environment::AmdGiz => quote! {::target_lexicon::Environment::AmdGiz},
402        target_lexicon::Environment::Android => quote! {::target_lexicon::Environment::Android},
403        target_lexicon::Environment::Androideabi => {
404            quote! {::target_lexicon::Environment::Androideabi}
405        }
406        target_lexicon::Environment::Eabi => quote! {::target_lexicon::Environment::Eabi},
407        target_lexicon::Environment::Eabihf => quote! {::target_lexicon::Environment::Eabihf},
408        target_lexicon::Environment::Gnu => {
409            quote! {::target_lexicon::Environment::Gnu}
410        }
411        target_lexicon::Environment::Gnuabi64 => quote! {::target_lexicon::Environment::Gnuabi64},
412        target_lexicon::Environment::Gnueabi => quote! {::target_lexicon::Environment::Gnueabi},
413        target_lexicon::Environment::Gnueabihf => quote! {::target_lexicon::Environment::Gnueabihf},
414        target_lexicon::Environment::Gnuspe => quote! {::target_lexicon::Environment::Gnuspe},
415        target_lexicon::Environment::Gnux32 => quote! {::target_lexicon::Environment::Gnux32},
416        target_lexicon::Environment::GnuIlp32 => quote! {::target_lexicon::Environment::GnuIlp32},
417        target_lexicon::Environment::HermitKernel => {
418            quote! {::target_lexicon::Environment::HermitKernel}
419        }
420        target_lexicon::Environment::LinuxKernel => {
421            quote! {::target_lexicon::Environment::LinuxKernel}
422        }
423        target_lexicon::Environment::Macabi => quote! {::target_lexicon::Environment::Macabi},
424        target_lexicon::Environment::Musl => quote! {::target_lexicon::Environment::Musl},
425        target_lexicon::Environment::Musleabi => quote! {::target_lexicon::Environment::Musleabi},
426        target_lexicon::Environment::Musleabihf => {
427            quote! {::target_lexicon::Environment::Musleabihf}
428        }
429        target_lexicon::Environment::Muslabi64 => quote! {::target_lexicon::Environment::Muslabi64},
430        target_lexicon::Environment::Msvc => quote! {::target_lexicon::Environment::Msvc},
431        target_lexicon::Environment::Newlib => quote! {::target_lexicon::Environment::Newlib},
432        target_lexicon::Environment::Kernel => quote! {::target_lexicon::Environment::Kernel},
433        target_lexicon::Environment::Uclibc => quote! {::target_lexicon::Environment::Uclibc},
434        target_lexicon::Environment::Uclibceabi => {
435            quote! {::target_lexicon::Environment::Uclibceabi}
436        }
437        target_lexicon::Environment::Uclibceabihf => {
438            quote! {::target_lexicon::Environment::Uclibceabihf}
439        }
440        target_lexicon::Environment::Sgx => quote! {::target_lexicon::Environment::Sgx},
441        target_lexicon::Environment::Sim => quote! {::target_lexicon::Environment::Sim},
442        target_lexicon::Environment::Softfloat => quote! {::target_lexicon::Environment::Softfloat},
443        target_lexicon::Environment::Spe => quote! {::target_lexicon::Environment::Spe},
444        _ => panic!("Unsupported environment"),
445    };
446
447    let binary_format = match triple.binary_format {
448        target_lexicon::BinaryFormat::Unknown => quote! {::target_lexicon::BinaryFormat::Unknown},
449        target_lexicon::BinaryFormat::Elf => quote! {::target_lexicon::BinaryFormat::Elf},
450        target_lexicon::BinaryFormat::Coff => quote! {::target_lexicon::BinaryFormat::Coff},
451        target_lexicon::BinaryFormat::Macho => quote! {::target_lexicon::BinaryFormat::Macho},
452        target_lexicon::BinaryFormat::Wasm => quote! {::target_lexicon::BinaryFormat::Wasm},
453        _ => panic!("Unsupported binary format"),
454    };
455
456    quote! {
457        ::target_lexicon::Triple {
458            architecture: #architecture,
459            vendor: #vendor,
460            operating_system: #operating_system,
461            environment: #environment,
462            binary_format: #binary_format,
463        }
464    }
465    .into()
466}