guess_target/
target.rs

1pub use strum::IntoEnumIterator;
2use strum_macros::EnumIter;
3
4#[cfg_attr(feature = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
5#[derive(EnumIter, Debug, PartialEq, Clone, Copy)]
6pub enum Os {
7    Darwin,
8    Linux,
9    Windows,
10    Freebsd,
11    Illumos,
12    Netbsd,
13    Ios,
14    Android,
15    Fuchsia,
16    None,
17    Uefi,
18    Androideabi,
19    Eabi,
20    Eabihf,
21    Cuda,
22    Solaris,
23    Emscripten,
24    Unknown,
25    Wasip1,
26    Threads,
27    Wasip2,
28    Redox,
29}
30impl Os {
31    pub fn to_str(&self) -> &'static str {
32        match self {
33            Os::Darwin => "darwin",
34            Os::Linux => "linux",
35            Os::Windows => "windows",
36            Os::Freebsd => "freebsd",
37            Os::Illumos => "illumos",
38            Os::Netbsd => "netbsd",
39            Os::Ios => "ios",
40            Os::Android => "android",
41            Os::Fuchsia => "fuchsia",
42            Os::None => "none",
43            Os::Uefi => "uefi",
44            Os::Androideabi => "androideabi",
45            Os::Eabi => "eabi",
46            Os::Eabihf => "eabihf",
47            Os::Cuda => "cuda",
48            Os::Solaris => "solaris",
49            Os::Emscripten => "emscripten",
50            Os::Unknown => "unknown",
51            Os::Wasip1 => "wasip1",
52            Os::Threads => "threads",
53            Os::Wasip2 => "wasip2",
54            Os::Redox => "redox",
55        }
56    }
57}
58impl std::fmt::Display for Os {
59    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
60        f.write_str(self.to_str())
61    }
62}
63impl std::str::FromStr for Os {
64    type Err = &'static str;
65    fn from_str(s: &str) -> Result<Self, Self::Err> {
66        match s {
67            "darwin" => Ok(Os::Darwin),
68            "linux" => Ok(Os::Linux),
69            "windows" => Ok(Os::Windows),
70            "freebsd" => Ok(Os::Freebsd),
71            "illumos" => Ok(Os::Illumos),
72            "netbsd" => Ok(Os::Netbsd),
73            "ios" => Ok(Os::Ios),
74            "android" => Ok(Os::Android),
75            "fuchsia" => Ok(Os::Fuchsia),
76            "none" => Ok(Os::None),
77            "uefi" => Ok(Os::Uefi),
78            "androideabi" => Ok(Os::Androideabi),
79            "eabi" => Ok(Os::Eabi),
80            "eabihf" => Ok(Os::Eabihf),
81            "cuda" => Ok(Os::Cuda),
82            "solaris" => Ok(Os::Solaris),
83            "emscripten" => Ok(Os::Emscripten),
84            "unknown" => Ok(Os::Unknown),
85            "wasip1" => Ok(Os::Wasip1),
86            "threads" => Ok(Os::Threads),
87            "wasip2" => Ok(Os::Wasip2),
88            "redox" => Ok(Os::Redox),
89            _ => Err("Unknown Os"),
90        }
91    }
92}
93#[cfg_attr(feature = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
94#[derive(EnumIter, Debug, PartialEq, Clone, Copy)]
95pub enum Arch {
96    Aarch64,
97    I686,
98    X86_64,
99    Arm,
100    Armv7,
101    Loongarch64,
102    Powerpc,
103    Powerpc64,
104    Powerpc64le,
105    Riscv64gc,
106    S390x,
107    Arm64ec,
108    Armebv7r,
109    Armv5te,
110    Armv7a,
111    Armv7r,
112    I586,
113    Nvptx64,
114    Riscv32i,
115    Riscv32im,
116    Riscv32imac,
117    Riscv32imafc,
118    Riscv32imc,
119    Riscv64imac,
120    Sparc64,
121    Sparcv9,
122    Thumbv6m,
123    Thumbv7em,
124    Thumbv7m,
125    Thumbv7neon,
126    Thumbv8mBase,
127    Thumbv8mMain,
128    Wasm32,
129    Wasm32v1,
130}
131impl Arch {
132    pub fn to_str(&self) -> &'static str {
133        match self {
134            Arch::Aarch64 => "aarch64",
135            Arch::I686 => "i686",
136            Arch::X86_64 => "x86_64",
137            Arch::Arm => "arm",
138            Arch::Armv7 => "armv7",
139            Arch::Loongarch64 => "loongarch64",
140            Arch::Powerpc => "powerpc",
141            Arch::Powerpc64 => "powerpc64",
142            Arch::Powerpc64le => "powerpc64le",
143            Arch::Riscv64gc => "riscv64gc",
144            Arch::S390x => "s390x",
145            Arch::Arm64ec => "arm64ec",
146            Arch::Armebv7r => "armebv7r",
147            Arch::Armv5te => "armv5te",
148            Arch::Armv7a => "armv7a",
149            Arch::Armv7r => "armv7r",
150            Arch::I586 => "i586",
151            Arch::Nvptx64 => "nvptx64",
152            Arch::Riscv32i => "riscv32i",
153            Arch::Riscv32im => "riscv32im",
154            Arch::Riscv32imac => "riscv32imac",
155            Arch::Riscv32imafc => "riscv32imafc",
156            Arch::Riscv32imc => "riscv32imc",
157            Arch::Riscv64imac => "riscv64imac",
158            Arch::Sparc64 => "sparc64",
159            Arch::Sparcv9 => "sparcv9",
160            Arch::Thumbv6m => "thumbv6m",
161            Arch::Thumbv7em => "thumbv7em",
162            Arch::Thumbv7m => "thumbv7m",
163            Arch::Thumbv7neon => "thumbv7neon",
164            Arch::Thumbv8mBase => "thumbv8m.base",
165            Arch::Thumbv8mMain => "thumbv8m.main",
166            Arch::Wasm32 => "wasm32",
167            Arch::Wasm32v1 => "wasm32v1",
168        }
169    }
170}
171impl std::fmt::Display for Arch {
172    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
173        f.write_str(self.to_str())
174    }
175}
176impl std::str::FromStr for Arch {
177    type Err = &'static str;
178    fn from_str(s: &str) -> Result<Self, Self::Err> {
179        match s {
180            "aarch64" => Ok(Arch::Aarch64),
181            "i686" => Ok(Arch::I686),
182            "x86_64" => Ok(Arch::X86_64),
183            "arm" => Ok(Arch::Arm),
184            "armv7" => Ok(Arch::Armv7),
185            "loongarch64" => Ok(Arch::Loongarch64),
186            "powerpc" => Ok(Arch::Powerpc),
187            "powerpc64" => Ok(Arch::Powerpc64),
188            "powerpc64le" => Ok(Arch::Powerpc64le),
189            "riscv64gc" => Ok(Arch::Riscv64gc),
190            "s390x" => Ok(Arch::S390x),
191            "arm64ec" => Ok(Arch::Arm64ec),
192            "armebv7r" => Ok(Arch::Armebv7r),
193            "armv5te" => Ok(Arch::Armv5te),
194            "armv7a" => Ok(Arch::Armv7a),
195            "armv7r" => Ok(Arch::Armv7r),
196            "i586" => Ok(Arch::I586),
197            "nvptx64" => Ok(Arch::Nvptx64),
198            "riscv32i" => Ok(Arch::Riscv32i),
199            "riscv32im" => Ok(Arch::Riscv32im),
200            "riscv32imac" => Ok(Arch::Riscv32imac),
201            "riscv32imafc" => Ok(Arch::Riscv32imafc),
202            "riscv32imc" => Ok(Arch::Riscv32imc),
203            "riscv64imac" => Ok(Arch::Riscv64imac),
204            "sparc64" => Ok(Arch::Sparc64),
205            "sparcv9" => Ok(Arch::Sparcv9),
206            "thumbv6m" => Ok(Arch::Thumbv6m),
207            "thumbv7em" => Ok(Arch::Thumbv7em),
208            "thumbv7m" => Ok(Arch::Thumbv7m),
209            "thumbv7neon" => Ok(Arch::Thumbv7neon),
210            "thumbv8m.base" => Ok(Arch::Thumbv8mBase),
211            "thumbv8m.main" => Ok(Arch::Thumbv8mMain),
212            "wasm32" => Ok(Arch::Wasm32),
213            "wasm32v1" => Ok(Arch::Wasm32v1),
214            _ => Err("Unknown Arch"),
215        }
216    }
217}
218#[cfg_attr(feature = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
219#[derive(EnumIter, Debug, PartialEq, Clone, Copy)]
220pub enum Vendor {
221    Apple,
222    Unknown,
223    Pc,
224    Linux,
225    None,
226    Nvidia,
227    Sun,
228    Wasip1,
229    Wasip2,
230    Fortanix,
231}
232impl Vendor {
233    pub fn to_str(&self) -> &'static str {
234        match self {
235            Vendor::Apple => "apple",
236            Vendor::Unknown => "unknown",
237            Vendor::Pc => "pc",
238            Vendor::Linux => "linux",
239            Vendor::None => "none",
240            Vendor::Nvidia => "nvidia",
241            Vendor::Sun => "sun",
242            Vendor::Wasip1 => "wasip1",
243            Vendor::Wasip2 => "wasip2",
244            Vendor::Fortanix => "fortanix",
245        }
246    }
247}
248impl std::fmt::Display for Vendor {
249    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
250        f.write_str(self.to_str())
251    }
252}
253impl std::str::FromStr for Vendor {
254    type Err = &'static str;
255    fn from_str(s: &str) -> Result<Self, Self::Err> {
256        match s {
257            "apple" => Ok(Vendor::Apple),
258            "unknown" => Ok(Vendor::Unknown),
259            "pc" => Ok(Vendor::Pc),
260            "linux" => Ok(Vendor::Linux),
261            "none" => Ok(Vendor::None),
262            "nvidia" => Ok(Vendor::Nvidia),
263            "sun" => Ok(Vendor::Sun),
264            "wasip1" => Ok(Vendor::Wasip1),
265            "wasip2" => Ok(Vendor::Wasip2),
266            "fortanix" => Ok(Vendor::Fortanix),
267            _ => Err("Unknown Vendor"),
268        }
269    }
270}
271#[cfg_attr(feature = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
272#[derive(EnumIter, Debug, PartialEq, Clone, Copy)]
273pub enum Abi {
274    Gnu,
275    Msvc,
276    Musl,
277    Gnueabi,
278    Gnueabihf,
279    Macabi,
280    Sim,
281    Gnullvm,
282    Ohos,
283    Softfloat,
284    Musleabi,
285    Musleabihf,
286    Elf,
287    Sgx,
288    Gnux32,
289}
290impl Abi {
291    pub fn to_str(&self) -> &'static str {
292        match self {
293            Abi::Gnu => "gnu",
294            Abi::Msvc => "msvc",
295            Abi::Musl => "musl",
296            Abi::Gnueabi => "gnueabi",
297            Abi::Gnueabihf => "gnueabihf",
298            Abi::Macabi => "macabi",
299            Abi::Sim => "sim",
300            Abi::Gnullvm => "gnullvm",
301            Abi::Ohos => "ohos",
302            Abi::Softfloat => "softfloat",
303            Abi::Musleabi => "musleabi",
304            Abi::Musleabihf => "musleabihf",
305            Abi::Elf => "elf",
306            Abi::Sgx => "sgx",
307            Abi::Gnux32 => "gnux32",
308        }
309    }
310}
311impl std::fmt::Display for Abi {
312    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
313        f.write_str(self.to_str())
314    }
315}
316impl std::str::FromStr for Abi {
317    type Err = &'static str;
318    fn from_str(s: &str) -> Result<Self, Self::Err> {
319        match s {
320            "gnu" => Ok(Abi::Gnu),
321            "msvc" => Ok(Abi::Msvc),
322            "musl" => Ok(Abi::Musl),
323            "gnueabi" => Ok(Abi::Gnueabi),
324            "gnueabihf" => Ok(Abi::Gnueabihf),
325            "macabi" => Ok(Abi::Macabi),
326            "sim" => Ok(Abi::Sim),
327            "gnullvm" => Ok(Abi::Gnullvm),
328            "ohos" => Ok(Abi::Ohos),
329            "softfloat" => Ok(Abi::Softfloat),
330            "musleabi" => Ok(Abi::Musleabi),
331            "musleabihf" => Ok(Abi::Musleabihf),
332            "elf" => Ok(Abi::Elf),
333            "sgx" => Ok(Abi::Sgx),
334            "gnux32" => Ok(Abi::Gnux32),
335            _ => Err("Unknown Abi"),
336        }
337    }
338}
339#[cfg_attr(feature = "wasm", wasm_bindgen::prelude::wasm_bindgen)]
340#[derive(EnumIter, Debug, PartialEq, Clone, Copy)]
341pub enum Target {
342    Aarch64AppleDarwin,
343    Aarch64UnknownLinuxGnu,
344    I686PcWindowsGnu,
345    I686PcWindowsMsvc,
346    I686UnknownLinuxGnu,
347    X86_64AppleDarwin,
348    X86_64PcWindowsGnu,
349    X86_64PcWindowsMsvc,
350    X86_64UnknownLinuxGnu,
351    Aarch64PcWindowsMsvc,
352    Aarch64UnknownLinuxMusl,
353    ArmUnknownLinuxGnueabi,
354    ArmUnknownLinuxGnueabihf,
355    Armv7UnknownLinuxGnueabihf,
356    Loongarch64UnknownLinuxGnu,
357    Loongarch64UnknownLinuxMusl,
358    PowerpcUnknownLinuxGnu,
359    Powerpc64UnknownLinuxGnu,
360    Powerpc64leUnknownLinuxGnu,
361    Powerpc64leUnknownLinuxMusl,
362    Riscv64gcUnknownLinuxGnu,
363    Riscv64gcUnknownLinuxMusl,
364    S390xUnknownLinuxGnu,
365    X86_64UnknownFreebsd,
366    X86_64UnknownIllumos,
367    X86_64UnknownLinuxMusl,
368    X86_64UnknownNetbsd,
369    Aarch64AppleIos,
370    Aarch64AppleIosMacabi,
371    Aarch64AppleIosSim,
372    Aarch64LinuxAndroid,
373    Aarch64PcWindowsGnullvm,
374    Aarch64UnknownFuchsia,
375    Aarch64UnknownLinuxOhos,
376    Aarch64UnknownNone,
377    Aarch64UnknownNoneSoftfloat,
378    Aarch64UnknownUefi,
379    ArmLinuxAndroideabi,
380    ArmUnknownLinuxMusleabi,
381    ArmUnknownLinuxMusleabihf,
382    Arm64ecPcWindowsMsvc,
383    Armebv7rNoneEabi,
384    Armebv7rNoneEabihf,
385    Armv5teUnknownLinuxGnueabi,
386    Armv5teUnknownLinuxMusleabi,
387    Armv7LinuxAndroideabi,
388    Armv7UnknownLinuxGnueabi,
389    Armv7UnknownLinuxMusleabi,
390    Armv7UnknownLinuxMusleabihf,
391    Armv7UnknownLinuxOhos,
392    Armv7aNoneEabi,
393    Armv7rNoneEabi,
394    Armv7rNoneEabihf,
395    I586PcWindowsMsvc,
396    I586UnknownLinuxGnu,
397    I586UnknownLinuxMusl,
398    I686LinuxAndroid,
399    I686PcWindowsGnullvm,
400    I686UnknownFreebsd,
401    I686UnknownLinuxMusl,
402    I686UnknownUefi,
403    Loongarch64UnknownNone,
404    Loongarch64UnknownNoneSoftfloat,
405    Nvptx64NvidiaCuda,
406    Riscv32iUnknownNoneElf,
407    Riscv32imUnknownNoneElf,
408    Riscv32imacUnknownNoneElf,
409    Riscv32imafcUnknownNoneElf,
410    Riscv32imcUnknownNoneElf,
411    Riscv64gcUnknownNoneElf,
412    Riscv64imacUnknownNoneElf,
413    Sparc64UnknownLinuxGnu,
414    Sparcv9SunSolaris,
415    Thumbv6mNoneEabi,
416    Thumbv7emNoneEabi,
417    Thumbv7emNoneEabihf,
418    Thumbv7mNoneEabi,
419    Thumbv7neonLinuxAndroideabi,
420    Thumbv7neonUnknownLinuxGnueabihf,
421    Thumbv8mBaseNoneEabi,
422    Thumbv8mMainNoneEabi,
423    Thumbv8mMainNoneEabihf,
424    Wasm32UnknownEmscripten,
425    Wasm32UnknownUnknown,
426    Wasm32Wasip1,
427    Wasm32Wasip1Threads,
428    Wasm32Wasip2,
429    Wasm32v1None,
430    X86_64AppleIos,
431    X86_64AppleIosMacabi,
432    X86_64FortanixUnknownSgx,
433    X86_64LinuxAndroid,
434    X86_64PcSolaris,
435    X86_64PcWindowsGnullvm,
436    X86_64UnknownFuchsia,
437    X86_64UnknownLinuxGnux32,
438    X86_64UnknownLinuxOhos,
439    X86_64UnknownNone,
440    X86_64UnknownRedox,
441    X86_64UnknownUefi,
442}
443impl Target {
444    pub fn to_str(&self) -> &'static str {
445        match self {
446            Target::Aarch64AppleDarwin => "aarch64-apple-darwin",
447            Target::Aarch64UnknownLinuxGnu => "aarch64-unknown-linux-gnu",
448            Target::I686PcWindowsGnu => "i686-pc-windows-gnu",
449            Target::I686PcWindowsMsvc => "i686-pc-windows-msvc",
450            Target::I686UnknownLinuxGnu => "i686-unknown-linux-gnu",
451            Target::X86_64AppleDarwin => "x86_64-apple-darwin",
452            Target::X86_64PcWindowsGnu => "x86_64-pc-windows-gnu",
453            Target::X86_64PcWindowsMsvc => "x86_64-pc-windows-msvc",
454            Target::X86_64UnknownLinuxGnu => "x86_64-unknown-linux-gnu",
455            Target::Aarch64PcWindowsMsvc => "aarch64-pc-windows-msvc",
456            Target::Aarch64UnknownLinuxMusl => "aarch64-unknown-linux-musl",
457            Target::ArmUnknownLinuxGnueabi => "arm-unknown-linux-gnueabi",
458            Target::ArmUnknownLinuxGnueabihf => "arm-unknown-linux-gnueabihf",
459            Target::Armv7UnknownLinuxGnueabihf => "armv7-unknown-linux-gnueabihf",
460            Target::Loongarch64UnknownLinuxGnu => "loongarch64-unknown-linux-gnu",
461            Target::Loongarch64UnknownLinuxMusl => "loongarch64-unknown-linux-musl",
462            Target::PowerpcUnknownLinuxGnu => "powerpc-unknown-linux-gnu",
463            Target::Powerpc64UnknownLinuxGnu => "powerpc64-unknown-linux-gnu",
464            Target::Powerpc64leUnknownLinuxGnu => "powerpc64le-unknown-linux-gnu",
465            Target::Powerpc64leUnknownLinuxMusl => "powerpc64le-unknown-linux-musl",
466            Target::Riscv64gcUnknownLinuxGnu => "riscv64gc-unknown-linux-gnu",
467            Target::Riscv64gcUnknownLinuxMusl => "riscv64gc-unknown-linux-musl",
468            Target::S390xUnknownLinuxGnu => "s390x-unknown-linux-gnu",
469            Target::X86_64UnknownFreebsd => "x86_64-unknown-freebsd",
470            Target::X86_64UnknownIllumos => "x86_64-unknown-illumos",
471            Target::X86_64UnknownLinuxMusl => "x86_64-unknown-linux-musl",
472            Target::X86_64UnknownNetbsd => "x86_64-unknown-netbsd",
473            Target::Aarch64AppleIos => "aarch64-apple-ios",
474            Target::Aarch64AppleIosMacabi => "aarch64-apple-ios-macabi",
475            Target::Aarch64AppleIosSim => "aarch64-apple-ios-sim",
476            Target::Aarch64LinuxAndroid => "aarch64-linux-android",
477            Target::Aarch64PcWindowsGnullvm => "aarch64-pc-windows-gnullvm",
478            Target::Aarch64UnknownFuchsia => "aarch64-unknown-fuchsia",
479            Target::Aarch64UnknownLinuxOhos => "aarch64-unknown-linux-ohos",
480            Target::Aarch64UnknownNone => "aarch64-unknown-none",
481            Target::Aarch64UnknownNoneSoftfloat => "aarch64-unknown-none-softfloat",
482            Target::Aarch64UnknownUefi => "aarch64-unknown-uefi",
483            Target::ArmLinuxAndroideabi => "arm-linux-androideabi",
484            Target::ArmUnknownLinuxMusleabi => "arm-unknown-linux-musleabi",
485            Target::ArmUnknownLinuxMusleabihf => "arm-unknown-linux-musleabihf",
486            Target::Arm64ecPcWindowsMsvc => "arm64ec-pc-windows-msvc",
487            Target::Armebv7rNoneEabi => "armebv7r-none-eabi",
488            Target::Armebv7rNoneEabihf => "armebv7r-none-eabihf",
489            Target::Armv5teUnknownLinuxGnueabi => "armv5te-unknown-linux-gnueabi",
490            Target::Armv5teUnknownLinuxMusleabi => "armv5te-unknown-linux-musleabi",
491            Target::Armv7LinuxAndroideabi => "armv7-linux-androideabi",
492            Target::Armv7UnknownLinuxGnueabi => "armv7-unknown-linux-gnueabi",
493            Target::Armv7UnknownLinuxMusleabi => "armv7-unknown-linux-musleabi",
494            Target::Armv7UnknownLinuxMusleabihf => "armv7-unknown-linux-musleabihf",
495            Target::Armv7UnknownLinuxOhos => "armv7-unknown-linux-ohos",
496            Target::Armv7aNoneEabi => "armv7a-none-eabi",
497            Target::Armv7rNoneEabi => "armv7r-none-eabi",
498            Target::Armv7rNoneEabihf => "armv7r-none-eabihf",
499            Target::I586PcWindowsMsvc => "i586-pc-windows-msvc",
500            Target::I586UnknownLinuxGnu => "i586-unknown-linux-gnu",
501            Target::I586UnknownLinuxMusl => "i586-unknown-linux-musl",
502            Target::I686LinuxAndroid => "i686-linux-android",
503            Target::I686PcWindowsGnullvm => "i686-pc-windows-gnullvm",
504            Target::I686UnknownFreebsd => "i686-unknown-freebsd",
505            Target::I686UnknownLinuxMusl => "i686-unknown-linux-musl",
506            Target::I686UnknownUefi => "i686-unknown-uefi",
507            Target::Loongarch64UnknownNone => "loongarch64-unknown-none",
508            Target::Loongarch64UnknownNoneSoftfloat => "loongarch64-unknown-none-softfloat",
509            Target::Nvptx64NvidiaCuda => "nvptx64-nvidia-cuda",
510            Target::Riscv32iUnknownNoneElf => "riscv32i-unknown-none-elf",
511            Target::Riscv32imUnknownNoneElf => "riscv32im-unknown-none-elf",
512            Target::Riscv32imacUnknownNoneElf => "riscv32imac-unknown-none-elf",
513            Target::Riscv32imafcUnknownNoneElf => "riscv32imafc-unknown-none-elf",
514            Target::Riscv32imcUnknownNoneElf => "riscv32imc-unknown-none-elf",
515            Target::Riscv64gcUnknownNoneElf => "riscv64gc-unknown-none-elf",
516            Target::Riscv64imacUnknownNoneElf => "riscv64imac-unknown-none-elf",
517            Target::Sparc64UnknownLinuxGnu => "sparc64-unknown-linux-gnu",
518            Target::Sparcv9SunSolaris => "sparcv9-sun-solaris",
519            Target::Thumbv6mNoneEabi => "thumbv6m-none-eabi",
520            Target::Thumbv7emNoneEabi => "thumbv7em-none-eabi",
521            Target::Thumbv7emNoneEabihf => "thumbv7em-none-eabihf",
522            Target::Thumbv7mNoneEabi => "thumbv7m-none-eabi",
523            Target::Thumbv7neonLinuxAndroideabi => "thumbv7neon-linux-androideabi",
524            Target::Thumbv7neonUnknownLinuxGnueabihf => "thumbv7neon-unknown-linux-gnueabihf",
525            Target::Thumbv8mBaseNoneEabi => "thumbv8m.base-none-eabi",
526            Target::Thumbv8mMainNoneEabi => "thumbv8m.main-none-eabi",
527            Target::Thumbv8mMainNoneEabihf => "thumbv8m.main-none-eabihf",
528            Target::Wasm32UnknownEmscripten => "wasm32-unknown-emscripten",
529            Target::Wasm32UnknownUnknown => "wasm32-unknown-unknown",
530            Target::Wasm32Wasip1 => "wasm32-wasip1",
531            Target::Wasm32Wasip1Threads => "wasm32-wasip1-threads",
532            Target::Wasm32Wasip2 => "wasm32-wasip2",
533            Target::Wasm32v1None => "wasm32v1-none",
534            Target::X86_64AppleIos => "x86_64-apple-ios",
535            Target::X86_64AppleIosMacabi => "x86_64-apple-ios-macabi",
536            Target::X86_64FortanixUnknownSgx => "x86_64-fortanix-unknown-sgx",
537            Target::X86_64LinuxAndroid => "x86_64-linux-android",
538            Target::X86_64PcSolaris => "x86_64-pc-solaris",
539            Target::X86_64PcWindowsGnullvm => "x86_64-pc-windows-gnullvm",
540            Target::X86_64UnknownFuchsia => "x86_64-unknown-fuchsia",
541            Target::X86_64UnknownLinuxGnux32 => "x86_64-unknown-linux-gnux32",
542            Target::X86_64UnknownLinuxOhos => "x86_64-unknown-linux-ohos",
543            Target::X86_64UnknownNone => "x86_64-unknown-none",
544            Target::X86_64UnknownRedox => "x86_64-unknown-redox",
545            Target::X86_64UnknownUefi => "x86_64-unknown-uefi",
546        }
547    }
548}
549impl std::fmt::Display for Target {
550    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
551        f.write_str(self.to_str())
552    }
553}
554impl std::str::FromStr for Target {
555    type Err = &'static str;
556    fn from_str(s: &str) -> Result<Self, Self::Err> {
557        match s {
558            "aarch64-apple-darwin" => Ok(Target::Aarch64AppleDarwin),
559            "aarch64-unknown-linux-gnu" => Ok(Target::Aarch64UnknownLinuxGnu),
560            "i686-pc-windows-gnu" => Ok(Target::I686PcWindowsGnu),
561            "i686-pc-windows-msvc" => Ok(Target::I686PcWindowsMsvc),
562            "i686-unknown-linux-gnu" => Ok(Target::I686UnknownLinuxGnu),
563            "x86_64-apple-darwin" => Ok(Target::X86_64AppleDarwin),
564            "x86_64-pc-windows-gnu" => Ok(Target::X86_64PcWindowsGnu),
565            "x86_64-pc-windows-msvc" => Ok(Target::X86_64PcWindowsMsvc),
566            "x86_64-unknown-linux-gnu" => Ok(Target::X86_64UnknownLinuxGnu),
567            "aarch64-pc-windows-msvc" => Ok(Target::Aarch64PcWindowsMsvc),
568            "aarch64-unknown-linux-musl" => Ok(Target::Aarch64UnknownLinuxMusl),
569            "arm-unknown-linux-gnueabi" => Ok(Target::ArmUnknownLinuxGnueabi),
570            "arm-unknown-linux-gnueabihf" => Ok(Target::ArmUnknownLinuxGnueabihf),
571            "armv7-unknown-linux-gnueabihf" => Ok(Target::Armv7UnknownLinuxGnueabihf),
572            "loongarch64-unknown-linux-gnu" => Ok(Target::Loongarch64UnknownLinuxGnu),
573            "loongarch64-unknown-linux-musl" => Ok(Target::Loongarch64UnknownLinuxMusl),
574            "powerpc-unknown-linux-gnu" => Ok(Target::PowerpcUnknownLinuxGnu),
575            "powerpc64-unknown-linux-gnu" => Ok(Target::Powerpc64UnknownLinuxGnu),
576            "powerpc64le-unknown-linux-gnu" => Ok(Target::Powerpc64leUnknownLinuxGnu),
577            "powerpc64le-unknown-linux-musl" => Ok(Target::Powerpc64leUnknownLinuxMusl),
578            "riscv64gc-unknown-linux-gnu" => Ok(Target::Riscv64gcUnknownLinuxGnu),
579            "riscv64gc-unknown-linux-musl" => Ok(Target::Riscv64gcUnknownLinuxMusl),
580            "s390x-unknown-linux-gnu" => Ok(Target::S390xUnknownLinuxGnu),
581            "x86_64-unknown-freebsd" => Ok(Target::X86_64UnknownFreebsd),
582            "x86_64-unknown-illumos" => Ok(Target::X86_64UnknownIllumos),
583            "x86_64-unknown-linux-musl" => Ok(Target::X86_64UnknownLinuxMusl),
584            "x86_64-unknown-netbsd" => Ok(Target::X86_64UnknownNetbsd),
585            "aarch64-apple-ios" => Ok(Target::Aarch64AppleIos),
586            "aarch64-apple-ios-macabi" => Ok(Target::Aarch64AppleIosMacabi),
587            "aarch64-apple-ios-sim" => Ok(Target::Aarch64AppleIosSim),
588            "aarch64-linux-android" => Ok(Target::Aarch64LinuxAndroid),
589            "aarch64-pc-windows-gnullvm" => Ok(Target::Aarch64PcWindowsGnullvm),
590            "aarch64-unknown-fuchsia" => Ok(Target::Aarch64UnknownFuchsia),
591            "aarch64-unknown-linux-ohos" => Ok(Target::Aarch64UnknownLinuxOhos),
592            "aarch64-unknown-none" => Ok(Target::Aarch64UnknownNone),
593            "aarch64-unknown-none-softfloat" => Ok(Target::Aarch64UnknownNoneSoftfloat),
594            "aarch64-unknown-uefi" => Ok(Target::Aarch64UnknownUefi),
595            "arm-linux-androideabi" => Ok(Target::ArmLinuxAndroideabi),
596            "arm-unknown-linux-musleabi" => Ok(Target::ArmUnknownLinuxMusleabi),
597            "arm-unknown-linux-musleabihf" => Ok(Target::ArmUnknownLinuxMusleabihf),
598            "arm64ec-pc-windows-msvc" => Ok(Target::Arm64ecPcWindowsMsvc),
599            "armebv7r-none-eabi" => Ok(Target::Armebv7rNoneEabi),
600            "armebv7r-none-eabihf" => Ok(Target::Armebv7rNoneEabihf),
601            "armv5te-unknown-linux-gnueabi" => Ok(Target::Armv5teUnknownLinuxGnueabi),
602            "armv5te-unknown-linux-musleabi" => Ok(Target::Armv5teUnknownLinuxMusleabi),
603            "armv7-linux-androideabi" => Ok(Target::Armv7LinuxAndroideabi),
604            "armv7-unknown-linux-gnueabi" => Ok(Target::Armv7UnknownLinuxGnueabi),
605            "armv7-unknown-linux-musleabi" => Ok(Target::Armv7UnknownLinuxMusleabi),
606            "armv7-unknown-linux-musleabihf" => Ok(Target::Armv7UnknownLinuxMusleabihf),
607            "armv7-unknown-linux-ohos" => Ok(Target::Armv7UnknownLinuxOhos),
608            "armv7a-none-eabi" => Ok(Target::Armv7aNoneEabi),
609            "armv7r-none-eabi" => Ok(Target::Armv7rNoneEabi),
610            "armv7r-none-eabihf" => Ok(Target::Armv7rNoneEabihf),
611            "i586-pc-windows-msvc" => Ok(Target::I586PcWindowsMsvc),
612            "i586-unknown-linux-gnu" => Ok(Target::I586UnknownLinuxGnu),
613            "i586-unknown-linux-musl" => Ok(Target::I586UnknownLinuxMusl),
614            "i686-linux-android" => Ok(Target::I686LinuxAndroid),
615            "i686-pc-windows-gnullvm" => Ok(Target::I686PcWindowsGnullvm),
616            "i686-unknown-freebsd" => Ok(Target::I686UnknownFreebsd),
617            "i686-unknown-linux-musl" => Ok(Target::I686UnknownLinuxMusl),
618            "i686-unknown-uefi" => Ok(Target::I686UnknownUefi),
619            "loongarch64-unknown-none" => Ok(Target::Loongarch64UnknownNone),
620            "loongarch64-unknown-none-softfloat" => Ok(Target::Loongarch64UnknownNoneSoftfloat),
621            "nvptx64-nvidia-cuda" => Ok(Target::Nvptx64NvidiaCuda),
622            "riscv32i-unknown-none-elf" => Ok(Target::Riscv32iUnknownNoneElf),
623            "riscv32im-unknown-none-elf" => Ok(Target::Riscv32imUnknownNoneElf),
624            "riscv32imac-unknown-none-elf" => Ok(Target::Riscv32imacUnknownNoneElf),
625            "riscv32imafc-unknown-none-elf" => Ok(Target::Riscv32imafcUnknownNoneElf),
626            "riscv32imc-unknown-none-elf" => Ok(Target::Riscv32imcUnknownNoneElf),
627            "riscv64gc-unknown-none-elf" => Ok(Target::Riscv64gcUnknownNoneElf),
628            "riscv64imac-unknown-none-elf" => Ok(Target::Riscv64imacUnknownNoneElf),
629            "sparc64-unknown-linux-gnu" => Ok(Target::Sparc64UnknownLinuxGnu),
630            "sparcv9-sun-solaris" => Ok(Target::Sparcv9SunSolaris),
631            "thumbv6m-none-eabi" => Ok(Target::Thumbv6mNoneEabi),
632            "thumbv7em-none-eabi" => Ok(Target::Thumbv7emNoneEabi),
633            "thumbv7em-none-eabihf" => Ok(Target::Thumbv7emNoneEabihf),
634            "thumbv7m-none-eabi" => Ok(Target::Thumbv7mNoneEabi),
635            "thumbv7neon-linux-androideabi" => Ok(Target::Thumbv7neonLinuxAndroideabi),
636            "thumbv7neon-unknown-linux-gnueabihf" => Ok(Target::Thumbv7neonUnknownLinuxGnueabihf),
637            "thumbv8m.base-none-eabi" => Ok(Target::Thumbv8mBaseNoneEabi),
638            "thumbv8m.main-none-eabi" => Ok(Target::Thumbv8mMainNoneEabi),
639            "thumbv8m.main-none-eabihf" => Ok(Target::Thumbv8mMainNoneEabihf),
640            "wasm32-unknown-emscripten" => Ok(Target::Wasm32UnknownEmscripten),
641            "wasm32-unknown-unknown" => Ok(Target::Wasm32UnknownUnknown),
642            "wasm32-wasip1" => Ok(Target::Wasm32Wasip1),
643            "wasm32-wasip1-threads" => Ok(Target::Wasm32Wasip1Threads),
644            "wasm32-wasip2" => Ok(Target::Wasm32Wasip2),
645            "wasm32v1-none" => Ok(Target::Wasm32v1None),
646            "x86_64-apple-ios" => Ok(Target::X86_64AppleIos),
647            "x86_64-apple-ios-macabi" => Ok(Target::X86_64AppleIosMacabi),
648            "x86_64-fortanix-unknown-sgx" => Ok(Target::X86_64FortanixUnknownSgx),
649            "x86_64-linux-android" => Ok(Target::X86_64LinuxAndroid),
650            "x86_64-pc-solaris" => Ok(Target::X86_64PcSolaris),
651            "x86_64-pc-windows-gnullvm" => Ok(Target::X86_64PcWindowsGnullvm),
652            "x86_64-unknown-fuchsia" => Ok(Target::X86_64UnknownFuchsia),
653            "x86_64-unknown-linux-gnux32" => Ok(Target::X86_64UnknownLinuxGnux32),
654            "x86_64-unknown-linux-ohos" => Ok(Target::X86_64UnknownLinuxOhos),
655            "x86_64-unknown-none" => Ok(Target::X86_64UnknownNone),
656            "x86_64-unknown-redox" => Ok(Target::X86_64UnknownRedox),
657            "x86_64-unknown-uefi" => Ok(Target::X86_64UnknownUefi),
658            _ => Err("Unknown Target"),
659        }
660    }
661}
662impl Target {
663    pub fn arch(&self) -> Arch {
664        match self {
665            Target::Aarch64AppleDarwin => Arch::Aarch64,
666            Target::Aarch64UnknownLinuxGnu => Arch::Aarch64,
667            Target::I686PcWindowsGnu => Arch::I686,
668            Target::I686PcWindowsMsvc => Arch::I686,
669            Target::I686UnknownLinuxGnu => Arch::I686,
670            Target::X86_64AppleDarwin => Arch::X86_64,
671            Target::X86_64PcWindowsGnu => Arch::X86_64,
672            Target::X86_64PcWindowsMsvc => Arch::X86_64,
673            Target::X86_64UnknownLinuxGnu => Arch::X86_64,
674            Target::Aarch64PcWindowsMsvc => Arch::Aarch64,
675            Target::Aarch64UnknownLinuxMusl => Arch::Aarch64,
676            Target::ArmUnknownLinuxGnueabi => Arch::Arm,
677            Target::ArmUnknownLinuxGnueabihf => Arch::Arm,
678            Target::Armv7UnknownLinuxGnueabihf => Arch::Armv7,
679            Target::Loongarch64UnknownLinuxGnu => Arch::Loongarch64,
680            Target::Loongarch64UnknownLinuxMusl => Arch::Loongarch64,
681            Target::PowerpcUnknownLinuxGnu => Arch::Powerpc,
682            Target::Powerpc64UnknownLinuxGnu => Arch::Powerpc64,
683            Target::Powerpc64leUnknownLinuxGnu => Arch::Powerpc64le,
684            Target::Powerpc64leUnknownLinuxMusl => Arch::Powerpc64le,
685            Target::Riscv64gcUnknownLinuxGnu => Arch::Riscv64gc,
686            Target::Riscv64gcUnknownLinuxMusl => Arch::Riscv64gc,
687            Target::S390xUnknownLinuxGnu => Arch::S390x,
688            Target::X86_64UnknownFreebsd => Arch::X86_64,
689            Target::X86_64UnknownIllumos => Arch::X86_64,
690            Target::X86_64UnknownLinuxMusl => Arch::X86_64,
691            Target::X86_64UnknownNetbsd => Arch::X86_64,
692            Target::Aarch64AppleIos => Arch::Aarch64,
693            Target::Aarch64AppleIosMacabi => Arch::Aarch64,
694            Target::Aarch64AppleIosSim => Arch::Aarch64,
695            Target::Aarch64LinuxAndroid => Arch::Aarch64,
696            Target::Aarch64PcWindowsGnullvm => Arch::Aarch64,
697            Target::Aarch64UnknownFuchsia => Arch::Aarch64,
698            Target::Aarch64UnknownLinuxOhos => Arch::Aarch64,
699            Target::Aarch64UnknownNone => Arch::Aarch64,
700            Target::Aarch64UnknownNoneSoftfloat => Arch::Aarch64,
701            Target::Aarch64UnknownUefi => Arch::Aarch64,
702            Target::ArmLinuxAndroideabi => Arch::Arm,
703            Target::ArmUnknownLinuxMusleabi => Arch::Arm,
704            Target::ArmUnknownLinuxMusleabihf => Arch::Arm,
705            Target::Arm64ecPcWindowsMsvc => Arch::Arm64ec,
706            Target::Armebv7rNoneEabi => Arch::Armebv7r,
707            Target::Armebv7rNoneEabihf => Arch::Armebv7r,
708            Target::Armv5teUnknownLinuxGnueabi => Arch::Armv5te,
709            Target::Armv5teUnknownLinuxMusleabi => Arch::Armv5te,
710            Target::Armv7LinuxAndroideabi => Arch::Armv7,
711            Target::Armv7UnknownLinuxGnueabi => Arch::Armv7,
712            Target::Armv7UnknownLinuxMusleabi => Arch::Armv7,
713            Target::Armv7UnknownLinuxMusleabihf => Arch::Armv7,
714            Target::Armv7UnknownLinuxOhos => Arch::Armv7,
715            Target::Armv7aNoneEabi => Arch::Armv7a,
716            Target::Armv7rNoneEabi => Arch::Armv7r,
717            Target::Armv7rNoneEabihf => Arch::Armv7r,
718            Target::I586PcWindowsMsvc => Arch::I586,
719            Target::I586UnknownLinuxGnu => Arch::I586,
720            Target::I586UnknownLinuxMusl => Arch::I586,
721            Target::I686LinuxAndroid => Arch::I686,
722            Target::I686PcWindowsGnullvm => Arch::I686,
723            Target::I686UnknownFreebsd => Arch::I686,
724            Target::I686UnknownLinuxMusl => Arch::I686,
725            Target::I686UnknownUefi => Arch::I686,
726            Target::Loongarch64UnknownNone => Arch::Loongarch64,
727            Target::Loongarch64UnknownNoneSoftfloat => Arch::Loongarch64,
728            Target::Nvptx64NvidiaCuda => Arch::Nvptx64,
729            Target::Riscv32iUnknownNoneElf => Arch::Riscv32i,
730            Target::Riscv32imUnknownNoneElf => Arch::Riscv32im,
731            Target::Riscv32imacUnknownNoneElf => Arch::Riscv32imac,
732            Target::Riscv32imafcUnknownNoneElf => Arch::Riscv32imafc,
733            Target::Riscv32imcUnknownNoneElf => Arch::Riscv32imc,
734            Target::Riscv64gcUnknownNoneElf => Arch::Riscv64gc,
735            Target::Riscv64imacUnknownNoneElf => Arch::Riscv64imac,
736            Target::Sparc64UnknownLinuxGnu => Arch::Sparc64,
737            Target::Sparcv9SunSolaris => Arch::Sparcv9,
738            Target::Thumbv6mNoneEabi => Arch::Thumbv6m,
739            Target::Thumbv7emNoneEabi => Arch::Thumbv7em,
740            Target::Thumbv7emNoneEabihf => Arch::Thumbv7em,
741            Target::Thumbv7mNoneEabi => Arch::Thumbv7m,
742            Target::Thumbv7neonLinuxAndroideabi => Arch::Thumbv7neon,
743            Target::Thumbv7neonUnknownLinuxGnueabihf => Arch::Thumbv7neon,
744            Target::Thumbv8mBaseNoneEabi => Arch::Thumbv8mBase,
745            Target::Thumbv8mMainNoneEabi => Arch::Thumbv8mMain,
746            Target::Thumbv8mMainNoneEabihf => Arch::Thumbv8mMain,
747            Target::Wasm32UnknownEmscripten => Arch::Wasm32,
748            Target::Wasm32UnknownUnknown => Arch::Wasm32,
749            Target::Wasm32Wasip1 => Arch::Wasm32,
750            Target::Wasm32Wasip1Threads => Arch::Wasm32,
751            Target::Wasm32Wasip2 => Arch::Wasm32,
752            Target::Wasm32v1None => Arch::Wasm32v1,
753            Target::X86_64AppleIos => Arch::X86_64,
754            Target::X86_64AppleIosMacabi => Arch::X86_64,
755            Target::X86_64FortanixUnknownSgx => Arch::X86_64,
756            Target::X86_64LinuxAndroid => Arch::X86_64,
757            Target::X86_64PcSolaris => Arch::X86_64,
758            Target::X86_64PcWindowsGnullvm => Arch::X86_64,
759            Target::X86_64UnknownFuchsia => Arch::X86_64,
760            Target::X86_64UnknownLinuxGnux32 => Arch::X86_64,
761            Target::X86_64UnknownLinuxOhos => Arch::X86_64,
762            Target::X86_64UnknownNone => Arch::X86_64,
763            Target::X86_64UnknownRedox => Arch::X86_64,
764            Target::X86_64UnknownUefi => Arch::X86_64,
765        }
766    }
767    pub fn vender(&self) -> Vendor {
768        match self {
769            Target::Aarch64AppleDarwin => Vendor::Apple,
770            Target::Aarch64UnknownLinuxGnu => Vendor::Unknown,
771            Target::I686PcWindowsGnu => Vendor::Pc,
772            Target::I686PcWindowsMsvc => Vendor::Pc,
773            Target::I686UnknownLinuxGnu => Vendor::Unknown,
774            Target::X86_64AppleDarwin => Vendor::Apple,
775            Target::X86_64PcWindowsGnu => Vendor::Pc,
776            Target::X86_64PcWindowsMsvc => Vendor::Pc,
777            Target::X86_64UnknownLinuxGnu => Vendor::Unknown,
778            Target::Aarch64PcWindowsMsvc => Vendor::Pc,
779            Target::Aarch64UnknownLinuxMusl => Vendor::Unknown,
780            Target::ArmUnknownLinuxGnueabi => Vendor::Unknown,
781            Target::ArmUnknownLinuxGnueabihf => Vendor::Unknown,
782            Target::Armv7UnknownLinuxGnueabihf => Vendor::Unknown,
783            Target::Loongarch64UnknownLinuxGnu => Vendor::Unknown,
784            Target::Loongarch64UnknownLinuxMusl => Vendor::Unknown,
785            Target::PowerpcUnknownLinuxGnu => Vendor::Unknown,
786            Target::Powerpc64UnknownLinuxGnu => Vendor::Unknown,
787            Target::Powerpc64leUnknownLinuxGnu => Vendor::Unknown,
788            Target::Powerpc64leUnknownLinuxMusl => Vendor::Unknown,
789            Target::Riscv64gcUnknownLinuxGnu => Vendor::Unknown,
790            Target::Riscv64gcUnknownLinuxMusl => Vendor::Unknown,
791            Target::S390xUnknownLinuxGnu => Vendor::Unknown,
792            Target::X86_64UnknownFreebsd => Vendor::Unknown,
793            Target::X86_64UnknownIllumos => Vendor::Unknown,
794            Target::X86_64UnknownLinuxMusl => Vendor::Unknown,
795            Target::X86_64UnknownNetbsd => Vendor::Unknown,
796            Target::Aarch64AppleIos => Vendor::Apple,
797            Target::Aarch64AppleIosMacabi => Vendor::Apple,
798            Target::Aarch64AppleIosSim => Vendor::Apple,
799            Target::Aarch64LinuxAndroid => Vendor::Linux,
800            Target::Aarch64PcWindowsGnullvm => Vendor::Pc,
801            Target::Aarch64UnknownFuchsia => Vendor::Unknown,
802            Target::Aarch64UnknownLinuxOhos => Vendor::Unknown,
803            Target::Aarch64UnknownNone => Vendor::Unknown,
804            Target::Aarch64UnknownNoneSoftfloat => Vendor::Unknown,
805            Target::Aarch64UnknownUefi => Vendor::Unknown,
806            Target::ArmLinuxAndroideabi => Vendor::Linux,
807            Target::ArmUnknownLinuxMusleabi => Vendor::Unknown,
808            Target::ArmUnknownLinuxMusleabihf => Vendor::Unknown,
809            Target::Arm64ecPcWindowsMsvc => Vendor::Pc,
810            Target::Armebv7rNoneEabi => Vendor::None,
811            Target::Armebv7rNoneEabihf => Vendor::None,
812            Target::Armv5teUnknownLinuxGnueabi => Vendor::Unknown,
813            Target::Armv5teUnknownLinuxMusleabi => Vendor::Unknown,
814            Target::Armv7LinuxAndroideabi => Vendor::Linux,
815            Target::Armv7UnknownLinuxGnueabi => Vendor::Unknown,
816            Target::Armv7UnknownLinuxMusleabi => Vendor::Unknown,
817            Target::Armv7UnknownLinuxMusleabihf => Vendor::Unknown,
818            Target::Armv7UnknownLinuxOhos => Vendor::Unknown,
819            Target::Armv7aNoneEabi => Vendor::None,
820            Target::Armv7rNoneEabi => Vendor::None,
821            Target::Armv7rNoneEabihf => Vendor::None,
822            Target::I586PcWindowsMsvc => Vendor::Pc,
823            Target::I586UnknownLinuxGnu => Vendor::Unknown,
824            Target::I586UnknownLinuxMusl => Vendor::Unknown,
825            Target::I686LinuxAndroid => Vendor::Linux,
826            Target::I686PcWindowsGnullvm => Vendor::Pc,
827            Target::I686UnknownFreebsd => Vendor::Unknown,
828            Target::I686UnknownLinuxMusl => Vendor::Unknown,
829            Target::I686UnknownUefi => Vendor::Unknown,
830            Target::Loongarch64UnknownNone => Vendor::Unknown,
831            Target::Loongarch64UnknownNoneSoftfloat => Vendor::Unknown,
832            Target::Nvptx64NvidiaCuda => Vendor::Nvidia,
833            Target::Riscv32iUnknownNoneElf => Vendor::Unknown,
834            Target::Riscv32imUnknownNoneElf => Vendor::Unknown,
835            Target::Riscv32imacUnknownNoneElf => Vendor::Unknown,
836            Target::Riscv32imafcUnknownNoneElf => Vendor::Unknown,
837            Target::Riscv32imcUnknownNoneElf => Vendor::Unknown,
838            Target::Riscv64gcUnknownNoneElf => Vendor::Unknown,
839            Target::Riscv64imacUnknownNoneElf => Vendor::Unknown,
840            Target::Sparc64UnknownLinuxGnu => Vendor::Unknown,
841            Target::Sparcv9SunSolaris => Vendor::Sun,
842            Target::Thumbv6mNoneEabi => Vendor::None,
843            Target::Thumbv7emNoneEabi => Vendor::None,
844            Target::Thumbv7emNoneEabihf => Vendor::None,
845            Target::Thumbv7mNoneEabi => Vendor::None,
846            Target::Thumbv7neonLinuxAndroideabi => Vendor::Linux,
847            Target::Thumbv7neonUnknownLinuxGnueabihf => Vendor::Unknown,
848            Target::Thumbv8mBaseNoneEabi => Vendor::None,
849            Target::Thumbv8mMainNoneEabi => Vendor::None,
850            Target::Thumbv8mMainNoneEabihf => Vendor::None,
851            Target::Wasm32UnknownEmscripten => Vendor::Unknown,
852            Target::Wasm32UnknownUnknown => Vendor::Unknown,
853            Target::Wasm32Wasip1 => Vendor::Wasip1,
854            Target::Wasm32Wasip1Threads => Vendor::Wasip1,
855            Target::Wasm32Wasip2 => Vendor::Wasip2,
856            Target::Wasm32v1None => Vendor::None,
857            Target::X86_64AppleIos => Vendor::Apple,
858            Target::X86_64AppleIosMacabi => Vendor::Apple,
859            Target::X86_64FortanixUnknownSgx => Vendor::Fortanix,
860            Target::X86_64LinuxAndroid => Vendor::Linux,
861            Target::X86_64PcSolaris => Vendor::Pc,
862            Target::X86_64PcWindowsGnullvm => Vendor::Pc,
863            Target::X86_64UnknownFuchsia => Vendor::Unknown,
864            Target::X86_64UnknownLinuxGnux32 => Vendor::Unknown,
865            Target::X86_64UnknownLinuxOhos => Vendor::Unknown,
866            Target::X86_64UnknownNone => Vendor::Unknown,
867            Target::X86_64UnknownRedox => Vendor::Unknown,
868            Target::X86_64UnknownUefi => Vendor::Unknown,
869        }
870    }
871    pub fn os(&self) -> Os {
872        match self {
873            Target::Aarch64AppleDarwin => Os::Darwin,
874            Target::Aarch64UnknownLinuxGnu => Os::Linux,
875            Target::I686PcWindowsGnu => Os::Windows,
876            Target::I686PcWindowsMsvc => Os::Windows,
877            Target::I686UnknownLinuxGnu => Os::Linux,
878            Target::X86_64AppleDarwin => Os::Darwin,
879            Target::X86_64PcWindowsGnu => Os::Windows,
880            Target::X86_64PcWindowsMsvc => Os::Windows,
881            Target::X86_64UnknownLinuxGnu => Os::Linux,
882            Target::Aarch64PcWindowsMsvc => Os::Windows,
883            Target::Aarch64UnknownLinuxMusl => Os::Linux,
884            Target::ArmUnknownLinuxGnueabi => Os::Linux,
885            Target::ArmUnknownLinuxGnueabihf => Os::Linux,
886            Target::Armv7UnknownLinuxGnueabihf => Os::Linux,
887            Target::Loongarch64UnknownLinuxGnu => Os::Linux,
888            Target::Loongarch64UnknownLinuxMusl => Os::Linux,
889            Target::PowerpcUnknownLinuxGnu => Os::Linux,
890            Target::Powerpc64UnknownLinuxGnu => Os::Linux,
891            Target::Powerpc64leUnknownLinuxGnu => Os::Linux,
892            Target::Powerpc64leUnknownLinuxMusl => Os::Linux,
893            Target::Riscv64gcUnknownLinuxGnu => Os::Linux,
894            Target::Riscv64gcUnknownLinuxMusl => Os::Linux,
895            Target::S390xUnknownLinuxGnu => Os::Linux,
896            Target::X86_64UnknownFreebsd => Os::Freebsd,
897            Target::X86_64UnknownIllumos => Os::Illumos,
898            Target::X86_64UnknownLinuxMusl => Os::Linux,
899            Target::X86_64UnknownNetbsd => Os::Netbsd,
900            Target::Aarch64AppleIos => Os::Ios,
901            Target::Aarch64AppleIosMacabi => Os::Ios,
902            Target::Aarch64AppleIosSim => Os::Ios,
903            Target::Aarch64LinuxAndroid => Os::Android,
904            Target::Aarch64PcWindowsGnullvm => Os::Windows,
905            Target::Aarch64UnknownFuchsia => Os::Fuchsia,
906            Target::Aarch64UnknownLinuxOhos => Os::Linux,
907            Target::Aarch64UnknownNone => Os::None,
908            Target::Aarch64UnknownNoneSoftfloat => Os::None,
909            Target::Aarch64UnknownUefi => Os::Uefi,
910            Target::ArmLinuxAndroideabi => Os::Androideabi,
911            Target::ArmUnknownLinuxMusleabi => Os::Linux,
912            Target::ArmUnknownLinuxMusleabihf => Os::Linux,
913            Target::Arm64ecPcWindowsMsvc => Os::Windows,
914            Target::Armebv7rNoneEabi => Os::Eabi,
915            Target::Armebv7rNoneEabihf => Os::Eabihf,
916            Target::Armv5teUnknownLinuxGnueabi => Os::Linux,
917            Target::Armv5teUnknownLinuxMusleabi => Os::Linux,
918            Target::Armv7LinuxAndroideabi => Os::Androideabi,
919            Target::Armv7UnknownLinuxGnueabi => Os::Linux,
920            Target::Armv7UnknownLinuxMusleabi => Os::Linux,
921            Target::Armv7UnknownLinuxMusleabihf => Os::Linux,
922            Target::Armv7UnknownLinuxOhos => Os::Linux,
923            Target::Armv7aNoneEabi => Os::Eabi,
924            Target::Armv7rNoneEabi => Os::Eabi,
925            Target::Armv7rNoneEabihf => Os::Eabihf,
926            Target::I586PcWindowsMsvc => Os::Windows,
927            Target::I586UnknownLinuxGnu => Os::Linux,
928            Target::I586UnknownLinuxMusl => Os::Linux,
929            Target::I686LinuxAndroid => Os::Android,
930            Target::I686PcWindowsGnullvm => Os::Windows,
931            Target::I686UnknownFreebsd => Os::Freebsd,
932            Target::I686UnknownLinuxMusl => Os::Linux,
933            Target::I686UnknownUefi => Os::Uefi,
934            Target::Loongarch64UnknownNone => Os::None,
935            Target::Loongarch64UnknownNoneSoftfloat => Os::None,
936            Target::Nvptx64NvidiaCuda => Os::Cuda,
937            Target::Riscv32iUnknownNoneElf => Os::None,
938            Target::Riscv32imUnknownNoneElf => Os::None,
939            Target::Riscv32imacUnknownNoneElf => Os::None,
940            Target::Riscv32imafcUnknownNoneElf => Os::None,
941            Target::Riscv32imcUnknownNoneElf => Os::None,
942            Target::Riscv64gcUnknownNoneElf => Os::None,
943            Target::Riscv64imacUnknownNoneElf => Os::None,
944            Target::Sparc64UnknownLinuxGnu => Os::Linux,
945            Target::Sparcv9SunSolaris => Os::Solaris,
946            Target::Thumbv6mNoneEabi => Os::Eabi,
947            Target::Thumbv7emNoneEabi => Os::Eabi,
948            Target::Thumbv7emNoneEabihf => Os::Eabihf,
949            Target::Thumbv7mNoneEabi => Os::Eabi,
950            Target::Thumbv7neonLinuxAndroideabi => Os::Androideabi,
951            Target::Thumbv7neonUnknownLinuxGnueabihf => Os::Linux,
952            Target::Thumbv8mBaseNoneEabi => Os::Eabi,
953            Target::Thumbv8mMainNoneEabi => Os::Eabi,
954            Target::Thumbv8mMainNoneEabihf => Os::Eabihf,
955            Target::Wasm32UnknownEmscripten => Os::Emscripten,
956            Target::Wasm32UnknownUnknown => Os::Unknown,
957            Target::Wasm32Wasip1 => Os::Wasip1,
958            Target::Wasm32Wasip1Threads => Os::Threads,
959            Target::Wasm32Wasip2 => Os::Wasip2,
960            Target::Wasm32v1None => Os::None,
961            Target::X86_64AppleIos => Os::Ios,
962            Target::X86_64AppleIosMacabi => Os::Ios,
963            Target::X86_64FortanixUnknownSgx => Os::Unknown,
964            Target::X86_64LinuxAndroid => Os::Android,
965            Target::X86_64PcSolaris => Os::Solaris,
966            Target::X86_64PcWindowsGnullvm => Os::Windows,
967            Target::X86_64UnknownFuchsia => Os::Fuchsia,
968            Target::X86_64UnknownLinuxGnux32 => Os::Linux,
969            Target::X86_64UnknownLinuxOhos => Os::Linux,
970            Target::X86_64UnknownNone => Os::None,
971            Target::X86_64UnknownRedox => Os::Redox,
972            Target::X86_64UnknownUefi => Os::Uefi,
973        }
974    }
975    pub fn abi(&self) -> Option<Abi> {
976        match self {
977            Target::Aarch64AppleDarwin => None,
978            Target::Aarch64UnknownLinuxGnu => Some(Abi::Gnu),
979            Target::I686PcWindowsGnu => Some(Abi::Gnu),
980            Target::I686PcWindowsMsvc => Some(Abi::Msvc),
981            Target::I686UnknownLinuxGnu => Some(Abi::Gnu),
982            Target::X86_64AppleDarwin => None,
983            Target::X86_64PcWindowsGnu => Some(Abi::Gnu),
984            Target::X86_64PcWindowsMsvc => Some(Abi::Msvc),
985            Target::X86_64UnknownLinuxGnu => Some(Abi::Gnu),
986            Target::Aarch64PcWindowsMsvc => Some(Abi::Msvc),
987            Target::Aarch64UnknownLinuxMusl => Some(Abi::Musl),
988            Target::ArmUnknownLinuxGnueabi => Some(Abi::Gnueabi),
989            Target::ArmUnknownLinuxGnueabihf => Some(Abi::Gnueabihf),
990            Target::Armv7UnknownLinuxGnueabihf => Some(Abi::Gnueabihf),
991            Target::Loongarch64UnknownLinuxGnu => Some(Abi::Gnu),
992            Target::Loongarch64UnknownLinuxMusl => Some(Abi::Musl),
993            Target::PowerpcUnknownLinuxGnu => Some(Abi::Gnu),
994            Target::Powerpc64UnknownLinuxGnu => Some(Abi::Gnu),
995            Target::Powerpc64leUnknownLinuxGnu => Some(Abi::Gnu),
996            Target::Powerpc64leUnknownLinuxMusl => Some(Abi::Musl),
997            Target::Riscv64gcUnknownLinuxGnu => Some(Abi::Gnu),
998            Target::Riscv64gcUnknownLinuxMusl => Some(Abi::Musl),
999            Target::S390xUnknownLinuxGnu => Some(Abi::Gnu),
1000            Target::X86_64UnknownFreebsd => None,
1001            Target::X86_64UnknownIllumos => None,
1002            Target::X86_64UnknownLinuxMusl => Some(Abi::Musl),
1003            Target::X86_64UnknownNetbsd => None,
1004            Target::Aarch64AppleIos => None,
1005            Target::Aarch64AppleIosMacabi => Some(Abi::Macabi),
1006            Target::Aarch64AppleIosSim => Some(Abi::Sim),
1007            Target::Aarch64LinuxAndroid => None,
1008            Target::Aarch64PcWindowsGnullvm => Some(Abi::Gnullvm),
1009            Target::Aarch64UnknownFuchsia => None,
1010            Target::Aarch64UnknownLinuxOhos => Some(Abi::Ohos),
1011            Target::Aarch64UnknownNone => None,
1012            Target::Aarch64UnknownNoneSoftfloat => Some(Abi::Softfloat),
1013            Target::Aarch64UnknownUefi => None,
1014            Target::ArmLinuxAndroideabi => None,
1015            Target::ArmUnknownLinuxMusleabi => Some(Abi::Musleabi),
1016            Target::ArmUnknownLinuxMusleabihf => Some(Abi::Musleabihf),
1017            Target::Arm64ecPcWindowsMsvc => Some(Abi::Msvc),
1018            Target::Armebv7rNoneEabi => None,
1019            Target::Armebv7rNoneEabihf => None,
1020            Target::Armv5teUnknownLinuxGnueabi => Some(Abi::Gnueabi),
1021            Target::Armv5teUnknownLinuxMusleabi => Some(Abi::Musleabi),
1022            Target::Armv7LinuxAndroideabi => None,
1023            Target::Armv7UnknownLinuxGnueabi => Some(Abi::Gnueabi),
1024            Target::Armv7UnknownLinuxMusleabi => Some(Abi::Musleabi),
1025            Target::Armv7UnknownLinuxMusleabihf => Some(Abi::Musleabihf),
1026            Target::Armv7UnknownLinuxOhos => Some(Abi::Ohos),
1027            Target::Armv7aNoneEabi => None,
1028            Target::Armv7rNoneEabi => None,
1029            Target::Armv7rNoneEabihf => None,
1030            Target::I586PcWindowsMsvc => Some(Abi::Msvc),
1031            Target::I586UnknownLinuxGnu => Some(Abi::Gnu),
1032            Target::I586UnknownLinuxMusl => Some(Abi::Musl),
1033            Target::I686LinuxAndroid => None,
1034            Target::I686PcWindowsGnullvm => Some(Abi::Gnullvm),
1035            Target::I686UnknownFreebsd => None,
1036            Target::I686UnknownLinuxMusl => Some(Abi::Musl),
1037            Target::I686UnknownUefi => None,
1038            Target::Loongarch64UnknownNone => None,
1039            Target::Loongarch64UnknownNoneSoftfloat => Some(Abi::Softfloat),
1040            Target::Nvptx64NvidiaCuda => None,
1041            Target::Riscv32iUnknownNoneElf => Some(Abi::Elf),
1042            Target::Riscv32imUnknownNoneElf => Some(Abi::Elf),
1043            Target::Riscv32imacUnknownNoneElf => Some(Abi::Elf),
1044            Target::Riscv32imafcUnknownNoneElf => Some(Abi::Elf),
1045            Target::Riscv32imcUnknownNoneElf => Some(Abi::Elf),
1046            Target::Riscv64gcUnknownNoneElf => Some(Abi::Elf),
1047            Target::Riscv64imacUnknownNoneElf => Some(Abi::Elf),
1048            Target::Sparc64UnknownLinuxGnu => Some(Abi::Gnu),
1049            Target::Sparcv9SunSolaris => None,
1050            Target::Thumbv6mNoneEabi => None,
1051            Target::Thumbv7emNoneEabi => None,
1052            Target::Thumbv7emNoneEabihf => None,
1053            Target::Thumbv7mNoneEabi => None,
1054            Target::Thumbv7neonLinuxAndroideabi => None,
1055            Target::Thumbv7neonUnknownLinuxGnueabihf => Some(Abi::Gnueabihf),
1056            Target::Thumbv8mBaseNoneEabi => None,
1057            Target::Thumbv8mMainNoneEabi => None,
1058            Target::Thumbv8mMainNoneEabihf => None,
1059            Target::Wasm32UnknownEmscripten => None,
1060            Target::Wasm32UnknownUnknown => None,
1061            Target::Wasm32Wasip1 => None,
1062            Target::Wasm32Wasip1Threads => None,
1063            Target::Wasm32Wasip2 => None,
1064            Target::Wasm32v1None => None,
1065            Target::X86_64AppleIos => None,
1066            Target::X86_64AppleIosMacabi => Some(Abi::Macabi),
1067            Target::X86_64FortanixUnknownSgx => Some(Abi::Sgx),
1068            Target::X86_64LinuxAndroid => None,
1069            Target::X86_64PcSolaris => None,
1070            Target::X86_64PcWindowsGnullvm => Some(Abi::Gnullvm),
1071            Target::X86_64UnknownFuchsia => None,
1072            Target::X86_64UnknownLinuxGnux32 => Some(Abi::Gnux32),
1073            Target::X86_64UnknownLinuxOhos => Some(Abi::Ohos),
1074            Target::X86_64UnknownNone => None,
1075            Target::X86_64UnknownRedox => None,
1076            Target::X86_64UnknownUefi => None,
1077        }
1078    }
1079}