diff --git a/crates/uv-platform-tags/src/platform.rs b/crates/uv-platform-tags/src/platform.rs index 02a2e52ce..826ceb41f 100644 --- a/crates/uv-platform-tags/src/platform.rs +++ b/crates/uv-platform-tags/src/platform.rs @@ -151,21 +151,7 @@ pub enum Arch { impl fmt::Display for Arch { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match *self { - Self::Aarch64 => write!(f, "aarch64"), - Self::Armv5TEL => write!(f, "armv5tel"), - Self::Armv6L => write!(f, "armv6l"), - Self::Armv7L => write!(f, "armv7l"), - Self::Powerpc64Le => write!(f, "ppc64le"), - Self::Powerpc64 => write!(f, "ppc64"), - Self::Powerpc => write!(f, "ppc"), - Self::X86 => write!(f, "i686"), - Self::X86_64 => write!(f, "x86_64"), - Self::S390X => write!(f, "s390x"), - Self::LoongArch64 => write!(f, "loongarch64"), - Self::Riscv64 => write!(f, "riscv64"), - Self::Wasm32 => write!(f, "wasm32"), - } + write!(f, "{}", self.name()) } } @@ -211,7 +197,7 @@ impl Arch { } } - /// Returns the canonical name of the architecture. + /// Returns the standard name of the architecture. pub fn name(&self) -> &'static str { match self { Self::Aarch64 => "aarch64", @@ -230,23 +216,22 @@ impl Arch { } } - /// Returns an iterator over all supported architectures. - pub fn iter() -> impl Iterator { - [ - Self::Aarch64, - Self::Armv5TEL, - Self::Armv6L, - Self::Armv7L, - Self::Powerpc64Le, - Self::Powerpc64, - Self::Powerpc, - Self::X86, - Self::X86_64, - Self::S390X, - Self::LoongArch64, - Self::Riscv64, - ] - .iter() - .copied() + /// Represents the hardware platform. + /// + /// This is the same as the native platform's `uname -m` output. + /// + /// Based on: + pub fn machine(&self) -> &'static str { + match self { + Self::Aarch64 => "arm64", + Self::Armv5TEL | Self::Armv6L | Self::Armv7L => "arm", + Self::Powerpc | Self::Powerpc64Le | Self::Powerpc64 => "powerpc", + Self::X86 => "i386", + Self::X86_64 => "amd64", + Self::Riscv64 => "riscv", + Self::Wasm32 => "wasm32", + Self::S390X => "s390x", + Self::LoongArch64 => "loongarch64", + } } } diff --git a/crates/uv-platform-tags/src/tags.rs b/crates/uv-platform-tags/src/tags.rs index 1c29d1b4d..243c1e5bf 100644 --- a/crates/uv-platform-tags/src/tags.rs +++ b/crates/uv-platform-tags/src/tags.rs @@ -553,22 +553,25 @@ fn compatible_tags(platform: &Platform) -> Result, PlatformErro } (Os::Windows, Arch::Aarch64) => vec![PlatformTag::WinArm64], (Os::FreeBsd { release }, arch) => { - let release = release.replace(['.', '-'], "_"); - let release_arch = format!("{release}_{arch}"); + let release_tag = release.replace(['.', '-'], "_").to_lowercase(); + let arch_tag = arch.machine(); + let release_arch = format!("{release_tag}_{arch_tag}"); vec![PlatformTag::FreeBsd { release_arch: SmallString::from(release_arch), }] } (Os::NetBsd { release }, arch) => { - let release = release.replace(['.', '-'], "_"); - let release_arch = format!("{release}_{arch}"); + let release_tag = release.replace(['.', '-'], "_"); + let arch_tag = arch.machine(); + let release_arch = format!("{release_tag}_{arch_tag}"); vec![PlatformTag::NetBsd { release_arch: SmallString::from(release_arch), }] } (Os::OpenBsd { release }, arch) => { - let release = release.replace(['.', '-'], "_"); - let release_arch = format!("{release}_{arch}"); + let release_tag = release.replace(['.', '-'], "_"); + let arch_tag = arch.machine(); + let release_arch = format!("{release_tag}_{arch_tag}"); vec![PlatformTag::OpenBsd { release_arch: SmallString::from(release_arch), }]