-
Notifications
You must be signed in to change notification settings - Fork 901
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix hard and soft float libc detection for managed Python distributio…
…ns on ARM (#8498)
- Loading branch information
Showing
6 changed files
with
75 additions
and
1 deletion.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
//! Fetches CPU information. | ||
use anyhow::Error; | ||
|
||
#[cfg(target_os = "linux")] | ||
use procfs::{CpuInfo, Current}; | ||
|
||
/// Detects whether the hardware supports floating-point operations using ARM's Vector Floating Point (VFP) hardware. | ||
/// | ||
/// This function is relevant specifically for ARM architectures, where the presence of the "vfp" flag in `/proc/cpuinfo` | ||
/// indicates that the CPU supports hardware floating-point operations. | ||
/// This helps determine whether the system is using the `gnueabihf` (hard-float) ABI or `gnueabi` (soft-float) ABI. | ||
/// | ||
/// More information on this can be found in the [Debian ARM Hard Float Port documentation](https://wiki.debian.org/ArmHardFloatPort#VFP). | ||
#[cfg(target_os = "linux")] | ||
pub(crate) fn detect_hardware_floating_point_support() -> Result<bool, Error> { | ||
let cpu_info = CpuInfo::current()?; | ||
if let Some(features) = cpu_info.fields.get("Features") { | ||
if features.contains("vfp") { | ||
return Ok(true); // "vfp" found: hard-float (gnueabihf) detected | ||
} | ||
} | ||
|
||
Ok(false) // Default to soft-float (gnueabi) if no "vfp" flag is found | ||
} | ||
|
||
/// For non-Linux systems or architectures, the function will return `false` as hardware floating-point detection | ||
/// is not applicable outside of Linux ARM architectures. | ||
#[cfg(not(target_os = "linux"))] | ||
#[allow(clippy::unnecessary_wraps)] | ||
pub(crate) fn detect_hardware_floating_point_support() -> Result<bool, Error> { | ||
Ok(false) // Non-Linux or non-ARM systems: hardware floating-point detection is not applicable | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters