diff --git a/CMakeLists.txt b/CMakeLists.txt index 192f699..11448e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,7 +134,7 @@ if (WITH_AVFFT) endif () endif () -if (WITH_AVFFT OR (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" AND SIMD32_FOUND AND WITH_CR32)) +if (WITH_AVFFT AND (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm" AND SIMD32_FOUND AND WITH_CR32)) find_package (LibAVUtil) if (AVUTIL_FOUND) include_directories (${AVUTIL_INCLUDE_DIRS}) @@ -146,6 +146,7 @@ check_function_exists (lrint HAVE_LRINT) check_include_files (fenv.h HAVE_FENV_H) check_include_files (stdbool.h HAVE_STDBOOL_H) check_include_files (stdint.h HAVE_STDINT_H) +check_include_files (sys/auxv.h HAVE_GETAUXVAL) test_big_endian (HAVE_BIGENDIAN) diff --git a/msvc/soxr-config.h b/msvc/soxr-config.h index 89f7a91..1a07267 100644 --- a/msvc/soxr-config.h +++ b/msvc/soxr-config.h @@ -14,6 +14,7 @@ #define HAVE_FENV_H 1 #define HAVE_STDBOOL_H 1 #define HAVE_STDINT_H 1 +#define HAVE_GETAUXVAL 0 #define HAVE_LRINT 1 #define HAVE_BIGENDIAN 0 diff --git a/soxr-config.h.in b/soxr-config.h.in index 00b3b45..8bf4312 100644 --- a/soxr-config.h.in +++ b/soxr-config.h.in @@ -11,6 +11,7 @@ #cmakedefine01 HAVE_FENV_H #cmakedefine01 HAVE_STDBOOL_H #cmakedefine01 HAVE_STDINT_H +#cmakedefine01 HAVE_GETAUXVAL #cmakedefine01 HAVE_LRINT #cmakedefine01 HAVE_BIGENDIAN diff --git a/src/soxr.c b/src/soxr.c index e95ad89..494a196 100644 --- a/src/soxr.c +++ b/src/soxr.c @@ -12,6 +12,9 @@ #if AVUTIL_FOUND #include +#elif HAVE_GETAUXVAL && defined(__arm__) + #include + #include #endif @@ -256,6 +259,8 @@ soxr_io_spec_t soxr_io_spec( return true; #elif defined AV_CPU_FLAG_NEON return !!(av_get_cpu_flags() & AV_CPU_FLAG_NEON); + #elif defined HWCAP_NEON + return !!(getauxval(AT_HWCAP) & HWCAP_NEON); #else return false; #endif