1#[derive(Debug, Clone, PartialEq, Eq)]
8pub struct TargetArchitecture {
9 pub Triple:String,
11 pub Name:String,
13 pub IsSupported:bool,
15}
16
17impl TargetArchitecture {
18 pub fn SupportedTargets() -> Vec<Self> {
20 vec![
21 Self {
22 Triple:"aarch64-apple-darwin".to_string(),
23 Name:"macOS (Apple Silicon)".to_string(),
24 IsSupported:true,
25 },
26 Self {
27 Triple:"x86_64-apple-darwin".to_string(),
28 Name:"macOS (Intel)".to_string(),
29 IsSupported:true,
30 },
31 Self {
32 Triple:"x86_64-unknown-linux-gnu".to_string(),
33 Name:"Linux (x86_64)".to_string(),
34 IsSupported:true,
35 },
36 Self {
37 Triple:"x86_64-pc-windows-msvc".to_string(),
38 Name:"Windows (x86_64)".to_string(),
39 IsSupported:true,
40 },
41 ]
42 }
43
44 pub fn Current() -> Self {
46 #[cfg(all(target_arch = "aarch64", target_os = "macos"))]
47 return Self {
48 Triple:"aarch64-apple-darwin".to_string(),
49 Name:"macOS (Apple Silicon)".to_string(),
50 IsSupported:true,
51 };
52
53 #[cfg(all(target_arch = "x86_64", target_os = "macos"))]
54 return Self {
55 Triple:"x86_64-apple-darwin".to_string(),
56 Name:"macOS (Intel)".to_string(),
57 IsSupported:true,
58 };
59
60 #[cfg(all(target_arch = "x86_64", target_os = "linux"))]
61 return Self {
62 Triple:"x86_64-unknown-linux-gnu".to_string(),
63 Name:"Linux (x86_64)".to_string(),
64 IsSupported:true,
65 };
66
67 #[cfg(all(target_arch = "x86_64", target_os = "windows"))]
68 return Self {
69 Triple:"x86_64-pc-windows-msvc".to_string(),
70 Name:"Windows (x86_64)".to_string(),
71 IsSupported:true,
72 };
73
74 #[cfg(not(any(
75 all(target_arch = "aarch64", target_os = "macos"),
76 all(target_arch = "x86_64", target_os = "macos"),
77 all(target_arch = "x86_64", target_os = "linux"),
78 all(target_arch = "x86_64", target_os = "windows"),
79 )))]
80 return Self { Triple:"unknown".to_string(), Name:"Unknown".to_string(), IsSupported:false };
81 }
82}