|
|
@ -1,4 +1,6 @@ |
|
|
|
#[derive(Clone, Debug)] |
|
|
|
use crate::version::Version; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[derive(Clone, PartialEq, Eq, Debug)] |
|
|
|
pub enum Arch { |
|
|
|
pub enum Arch { |
|
|
|
X86, |
|
|
|
X86, |
|
|
|
X64, |
|
|
|
X64, |
|
|
@ -10,26 +12,25 @@ pub enum Arch { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#[cfg(unix)] |
|
|
|
#[cfg(unix)] |
|
|
|
/// Get a sane default architecture for the platform.
|
|
|
|
/// handle common case: Apple Silicon / Node < 16
|
|
|
|
pub fn default_str() -> &'static str { |
|
|
|
pub fn get_safe_arch<'a>(arch: &'a Arch, version: &Version) -> &'a Arch { |
|
|
|
use crate::system_info::{platform_arch, platform_name}; |
|
|
|
use crate::system_info::{platform_arch, platform_name}; |
|
|
|
|
|
|
|
|
|
|
|
// TODO: Handle (arch, name, version) when Node v15+ supports darwin-arm64
|
|
|
|
return match (platform_name(), platform_arch(), version) { |
|
|
|
match (platform_name(), platform_arch()) { |
|
|
|
("darwin", "arm64", Version::Semver(v)) if v.major < 16 => &Arch::X64, |
|
|
|
("darwin", "arm64") => "x64", |
|
|
|
_ => &arch, |
|
|
|
(_, arch) => arch, |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#[cfg(windows)] |
|
|
|
#[cfg(windows)] |
|
|
|
/// Get a sane default architecture for the platform.
|
|
|
|
/// handle common case: Apple Silicon / Node < 16
|
|
|
|
pub fn default_str() -> &'static str { |
|
|
|
pub fn get_safe_arch<'a>(arch: &'a Arch, _version: &Version) -> &'a Arch { |
|
|
|
return crate::system_info::platform_arch(); |
|
|
|
return &arch; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
impl Default for Arch { |
|
|
|
impl Default for Arch { |
|
|
|
fn default() -> Arch { |
|
|
|
fn default() -> Arch { |
|
|
|
match default_str().parse() { |
|
|
|
match crate::system_info::platform_arch().parse() { |
|
|
|
Ok(arch) => arch, |
|
|
|
Ok(arch) => arch, |
|
|
|
Err(e) => panic!("{}", e.details), |
|
|
|
Err(e) => panic!("{}", e.details), |
|
|
|
} |
|
|
|
} |
|
|
|