use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum EdgeTarget {
Aarch64Linux,
Armv7Linux,
Riscv64Linux,
#[default]
X86_64Linux,
}
impl std::fmt::Display for EdgeTarget {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.rustc_target_triple())
}
}
impl EdgeTarget {
pub fn rustc_target_triple(self) -> &'static str {
match self {
EdgeTarget::Aarch64Linux => "aarch64-unknown-linux-gnu",
EdgeTarget::Armv7Linux => "armv7-unknown-linux-gnueabihf",
EdgeTarget::Riscv64Linux => "riscv64gc-unknown-linux-gnu",
EdgeTarget::X86_64Linux => "x86_64-unknown-linux-gnu",
}
}
pub fn cargo_build_args(self) -> Vec<&'static str> {
match self {
EdgeTarget::X86_64Linux => vec![], _ => vec!["--target", self.rustc_target_triple()],
}
}
pub fn linker_prefix(self) -> Option<&'static str> {
match self {
EdgeTarget::Aarch64Linux => Some("aarch64-linux-gnu-gcc"),
EdgeTarget::Armv7Linux => Some("arm-linux-gnueabihf-gcc"),
EdgeTarget::Riscv64Linux => Some("riscv64-linux-gnu-gcc"),
EdgeTarget::X86_64Linux => None,
}
}
pub fn is_cross(self) -> bool {
!matches!(self, EdgeTarget::X86_64Linux)
}
pub fn all() -> &'static [EdgeTarget] {
&[
EdgeTarget::X86_64Linux,
EdgeTarget::Aarch64Linux,
EdgeTarget::Armv7Linux,
EdgeTarget::Riscv64Linux,
]
}
}