#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub enum TargetKind {
Desktop,
IosSim,
Android,
HarmonyOs,
}
#[derive(Clone, Copy, Debug)]
pub struct Target {
pub name: &'static str,
pub toolkit: &'static str,
pub kind: TargetKind,
pub host: &'static str,
pub label: &'static str,
pub experimental: bool,
}
pub const TARGETS: &[Target] = &[
Target {
name: "ios-uikit",
toolkit: "uikit",
kind: TargetKind::IosSim,
host: "macos",
label: "iOS",
experimental: false,
},
Target {
name: "android-widget",
toolkit: "widget",
kind: TargetKind::Android,
host: "any",
label: "Android",
experimental: false,
},
Target {
name: "macos-appkit",
toolkit: "appkit",
kind: TargetKind::Desktop,
host: "macos",
label: "macOS (AppKit)",
experimental: false,
},
Target {
name: "macos-gtk",
toolkit: "gtk",
kind: TargetKind::Desktop,
host: "macos",
label: "macOS (GTK)",
experimental: false,
},
Target {
name: "macos-qt",
toolkit: "qt",
kind: TargetKind::Desktop,
host: "macos",
label: "macOS (Qt)",
experimental: false,
},
Target {
name: "linux-gtk",
toolkit: "gtk",
kind: TargetKind::Desktop,
host: "linux",
label: "Linux (GTK)",
experimental: false,
},
Target {
name: "linux-qt",
toolkit: "qt",
kind: TargetKind::Desktop,
host: "linux",
label: "Linux (Qt)",
experimental: false,
},
Target {
name: "windows-winui",
toolkit: "winui",
kind: TargetKind::Desktop,
host: "windows",
label: "Windows (WinUI)",
experimental: false,
},
Target {
name: "windows-qt",
toolkit: "qt",
kind: TargetKind::Desktop,
host: "windows",
label: "Windows (Qt)",
experimental: false,
},
Target {
name: "windows-gtk",
toolkit: "gtk",
kind: TargetKind::Desktop,
host: "windows",
label: "Windows (GTK)",
experimental: false,
},
Target {
name: "ohos-arkui",
toolkit: "arkui",
kind: TargetKind::HarmonyOs,
host: "any",
label: "OpenHarmony ArkUI",
experimental: false,
},
];
pub fn find(name: &str) -> Option<&'static Target> {
TARGETS.iter().find(|t| t.name == name)
}
pub fn host_os() -> &'static str {
if cfg!(target_os = "macos") {
"macos"
} else if cfg!(target_os = "linux") {
"linux"
} else if cfg!(target_os = "windows") {
"windows"
} else {
"other"
}
}
pub fn host_default() -> &'static str {
match host_os() {
"linux" => "linux-gtk",
"windows" => "windows-winui",
_ => "macos-appkit",
}
}