list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/arm.h)
list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/armfeature.c)
if(WITH_ACLE AND NOT MSVC AND NOT "${ARCH}" MATCHES "armv[2-7]")
- check_acle_intrinsics()
- if(HAVE_ACLE_INTRIN)
+ check_acle_compiler_flag()
+ if(HAVE_ACLE_FLAG)
add_definitions(-DARM_ACLE_CRC_HASH)
set(ACLE_SRCS ${ARCHDIR}/crc32_acle.c ${ARCHDIR}/insert_string_acle.c)
set_property(SOURCE ${ACLE_SRCS} PROPERTY COMPILE_FLAGS "${ACLEFLAG} ${NOLTOFLAG}")
set(WITH_ACLE OFF)
endif()
if(WITH_NEON)
- check_neon_intrinsics()
+ check_neon_compiler_flag()
if(MFPU_NEON_AVAILABLE)
add_definitions(-DARM_NEON_ADLER32 -DARM_NEON_CHUNKSET -DARM_NEON_SLIDEHASH)
set(NEON_SRCS ${ARCHDIR}/adler32_neon.c ${ARCHDIR}/chunkset_neon.c ${ARCHDIR}/slide_hash_neon.c)
# detect-intrinsics.cmake -- Detect compiler intrinsics support
# Licensed under the Zlib license, see LICENSE.md for details
-macro(check_acle_intrinsics)
- if(NOT NATIVEFLAG AND NOT HAVE_ACLE_INTRIN)
+macro(check_acle_compiler_flag)
+ if(NOT NATIVEFLAG AND NOT HAVE_ACLE_FLAG)
set(ACLEFLAG "-march=armv8-a+crc" CACHE INTERNAL "Compiler option to enable ACLE support")
endif()
# Check whether compiler supports ACLE flag
set(CMAKE_REQUIRED_FLAGS "${ACLEFLAG} ${NATIVEFLAG}")
check_c_source_compiles(
"int main() { return 0; }"
- HAVE_ACLE_INTRIN FAIL_REGEX "not supported")
- if(NOT NATIVEFLAG AND NOT HAVE_ACLE_INTRIN)
+ HAVE_ACLE_FLAG FAIL_REGEX "not supported")
+ if(NOT NATIVEFLAG AND NOT HAVE_ACLE_FLAG)
set(ACLEFLAG "-march=armv8-a+crc+simd" CACHE INTERNAL "Compiler option to enable ACLE support" FORCE)
# Check whether compiler supports ACLE flag
set(CMAKE_REQUIRED_FLAGS "${ACLEFLAG}")
check_c_source_compiles(
"int main() { return 0; }"
- HAVE_ACLE_INTRIN2 FAIL_REGEX "not supported")
- set(HAVE_ACLE_INTRIN ${HAVE_ACLE_INTRIN2} CACHE INTERNAL "Have ACLE intrinsics" FORCE)
- unset(HAVE_ACLE_INTRIN2 CACHE) # Don't cache this internal variable
+ HAVE_ACLE_FLAG2 FAIL_REGEX "not supported")
+ set(HAVE_ACLE_FLAG ${HAVE_ACLE_FLAG2} CACHE INTERNAL "Have compiler option to enable ACLE intrinsics" FORCE)
+ unset(HAVE_ACLE_FLAG2 CACHE) # Don't cache this internal variable
endif()
set(CMAKE_REQUIRED_FLAGS)
endmacro()
set(CMAKE_REQUIRED_FLAGS)
endmacro()
-macro(check_neon_intrinsics)
+macro(check_neon_compiler_flag)
if(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
if(NOT NATIVEFLAG)
if("${ARCH}" MATCHES "aarch64")
fi
}
-check_acle_intrinsics() {
+check_acle_compiler_flag() {
# Check whether -march=armv8-a+crc works correctly
cat > $test.c << EOF
int main() { return 0; }
fi
}
-check_neon_intrinsics() {
+check_neon_compiler_flag() {
# Check whether -mfpu=neon is available on ARM processors.
cat > $test.c << EOF
int main() { return 0; }
fi
if test $without_optimizations -eq 0; then
- check_acle_intrinsics
- check_neon_intrinsics
+ check_acle_compiler_flag
+ check_neon_compiler_flag
fi
case "${ARCH}" in