# cpudetect
`cpudetect` is a Rust crate that provides ergonomic helpers for CPU feature detection.
It exposes:
- per-feature checks such as `has_avx2()` and `has_neon()`
- per-family compatibility checks such as `is_x86_64_v3_compatible()`
- a `#[target_family(...)]` procedural macro for expanding a CPU family into Rust `#[target_feature]` requirements
The crate currently targets `x86_64` and `aarch64`.
## Installation
Add the crate to your `Cargo.toml`:
```toml
[dependencies]
cpudetect = "0.1.0"
```
## Cargo features
- `enabled` (default): enables CPU detection
- `static`: disables runtime detection and relies on compile-time `target_feature` / `target-cpu` settings
If you disable the default `enabled` feature, all detection helpers return `false`.
## Usage
### Check an x86_64 CPU feature
```rust
#[cfg(target_arch = "x86_64")]
fn main() {
if cpudetect::has_avx2() {
println!("AVX2 is available");
}
}
#[cfg(not(target_arch = "x86_64"))]
fn main() {}
```
### Check a baseline CPU family
```rust
#[cfg(target_arch = "x86_64")]
fn main() {
if cpudetect::is_x86_64_v3_compatible() {
println!("This machine satisfies the x86-64-v3 baseline");
}
}
#[cfg(not(target_arch = "x86_64"))]
fn main() {}
```
### Check an AArch64 feature set
```rust
#[cfg(target_arch = "aarch64")]
fn main() {
if cpudetect::is_arm_v8_6a_compatible() {
println!("This machine satisfies the Arm v8.6-A feature set");
}
}
#[cfg(not(target_arch = "aarch64"))]
fn main() {}
```
### Use `target_family` to enable code for a CPU family
```rust
#[cfg(target_arch = "x86_64")]
use cpudetect::target_family;
#[cfg(target_arch = "x86_64")]
#[target_family("x86_64_v3")]
unsafe fn x86_64_v3_only() -> u8 {
3
}
```
## Supported API shape
- On `x86_64`, the crate exports feature helpers from `src/x86_64/features.rs` and family helpers from `src/x86_64/families.rs`.
- On `aarch64`, the crate exports feature helpers from `src/aarch64/features.rs` and family helpers from `src/aarch64/families.rs`.
- Family helpers cache runtime detection results on non-`static` builds.
## Development
The repository includes a `just precommit` task that runs the configured Clippy checks.
```sh
just precommit
```
## License
MIT