From 20fd56ac0fe8c5f824cb7ce0375c6a63102a1ff1 Mon Sep 17 00:00:00 2001 From: rsdy Date: Fri, 8 Oct 2021 11:34:35 +0100 Subject: [PATCH] Add `no_neon` feature to disable NEON on aarch64 --- Cargo.toml | 1 + build.rs | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index a43f000..b2d8d0c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -73,6 +73,7 @@ no_sse2 = [] no_sse41 = [] no_avx2 = [] no_avx512 = [] +no_neon = [] [package.metadata.docs.rs] # Document Hasher::update_rayon on docs.rs. diff --git a/build.rs b/build.rs index c5677f6..ac1d6a6 100644 --- a/build.rs +++ b/build.rs @@ -17,6 +17,10 @@ fn is_neon() -> bool { defined("CARGO_FEATURE_NEON") } +fn is_no_neon() -> bool { + defined("CARGO_FEATURE_NO_NEON") +} + fn is_ci() -> bool { defined("BLAKE3_CI") } @@ -226,6 +230,10 @@ fn main() -> Result<(), Box> { panic!("It doesn't make sense to enable both \"pure\" and \"neon\"."); } + if is_no_neon() && is_neon() { + panic!("It doesn't make sense to enable both \"no_neon\" and \"neon\"."); + } + if is_x86_64() || is_x86_32() { let support = c_compiler_support(); if is_x86_32() || should_prefer_intrinsics() || is_pure() || support == NoCompiler { @@ -245,7 +253,7 @@ fn main() -> Result<(), Box> { } } - if (is_arm() && is_neon()) || (is_aarch64() && !is_pure()) { + if (is_arm() && is_neon()) || (!is_no_neon() && !is_pure() && is_aarch64()) { println!("cargo:rustc-cfg=blake3_neon"); build_neon_c_intrinsics(); }