1use proc_macro::TokenStream;
2use quote::quote;
3use std::str::FromStr;
4use syn::LitStr;
5use target_lexicon::Triple;
6
7#[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
22fn 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 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}