if(BASEARCH_ARM_FOUND)
add_definitions(-DARM_FEATURES)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
- if(ARCH_64BIT)
- check_c_source_compiles(
- "#include <sys/auxv.h>
- int main() {
- return (getauxval(AT_HWCAP) & HWCAP_CRC32);
- }"
- ARM_AUXV_HAS_CRC32
- )
- if(ARM_AUXV_HAS_CRC32)
- add_definitions(-DARM_AUXV_HAS_CRC32)
- else()
- message(STATUS "HWCAP_CRC32 not present in sys/auxv.h; cannot detect support at runtime.")
- endif()
- else()
- check_c_source_compiles(
- "#include <sys/auxv.h>
- int main() {
- return (getauxval(AT_HWCAP2) & HWCAP2_CRC32);
- }"
- ARM_AUXV_HAS_CRC32
- )
- if(ARM_AUXV_HAS_CRC32)
- add_definitions(-DARM_AUXV_HAS_CRC32)
- else()
- check_c_source_compiles(
- "#include <sys/auxv.h>
- #include <asm/hwcap.h>
- int main() {
- return (getauxval(AT_HWCAP2) & HWCAP2_CRC32);
- }"
- ARM_HWCAP_HAS_CRC32
- )
- if (ARM_HWCAP_HAS_CRC32)
- add_definitions(-DARM_AUXV_HAS_CRC32 -DARM_ASM_HWCAP)
- else()
- message(STATUS "HWCAP2_CRC32 not present in sys/auxv.h; cannot detect support at runtime.")
- endif()
- endif()
+ if(ARCH_32BIT)
check_c_source_compiles(
"#include <sys/auxv.h>
int main() {
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" OR
${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
- if(ARCH_64BIT)
- check_c_source_compiles(
- "#include <sys/auxv.h>
- int main() {
- unsigned long hwcap;
- elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap));
- return (hwcap & HWCAP_CRC32);
- }"
- ARM_AUXV_HAS_CRC32
- )
- if(ARM_AUXV_HAS_CRC32)
- add_definitions(-DARM_AUXV_HAS_CRC32)
- else()
- message(STATUS "HWCAP_CRC32 not present in sys/auxv.h; cannot detect support at runtime.")
- endif()
- else()
- check_c_source_compiles(
- "#include <sys/auxv.h>
- int main() {
- unsigned long hwcap2;
- elf_aux_info(AT_HWCAP2, &hwcap2, sizeof(hwcap2));
- return (hwcap2 & HWCAP2_CRC32);
- }"
- ARM_AUXV_HAS_CRC32
- )
- if(ARM_AUXV_HAS_CRC32)
- add_definitions(-DARM_AUXV_HAS_CRC32)
- else()
- message(STATUS "HWCAP2_CRC32 not present in sys/auxv.h; cannot detect support at runtime.")
- endif()
+ if(ARCH_32BIT)
check_c_source_compiles(
"#include <sys/auxv.h>
int main() {
static int arm_has_crc32(void) {
int has_crc32 = 0;
-#if defined(ARM_AUXV_HAS_CRC32)
-# if defined(__FreeBSD__) || defined(__OpenBSD__)
-# ifdef HWCAP_CRC32
- unsigned long hwcap = 0;
- elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap));
- has_crc32 = (hwcap & HWCAP_CRC32) != 0;
-# else
- unsigned long hwcap2 = 0;
- elf_aux_info(AT_HWCAP2, &hwcap2, sizeof(hwcap2));
- has_crc32 = (hwcap2 & HWCAP2_CRC32) != 0;
-# endif
-# else
-# ifdef HWCAP_CRC32
- has_crc32 = (getauxval(AT_HWCAP) & HWCAP_CRC32) != 0;
-# else
- has_crc32 = (getauxval(AT_HWCAP2) & HWCAP2_CRC32) != 0;
-# endif
+#if defined(__linux__) && defined(HAVE_SYS_AUXV_H)
+# ifdef HWCAP_CRC32
+ has_crc32 = (getauxval(AT_HWCAP) & HWCAP_CRC32) != 0;
+# elif defined(HWCAP2_CRC32)
+ has_crc32 = (getauxval(AT_HWCAP2) & HWCAP2_CRC32) != 0;
# endif
#elif defined(__FreeBSD__) && defined(ARCH_64BIT)
has_crc32 = getenv("QEMU_EMULATING") == NULL
if (sysctl(isar0_mib, 2, &isar0, &len, NULL, 0) != -1) {
has_crc32 = ID_AA64ISAR0_CRC32(isar0) >= ID_AA64ISAR0_CRC32_BASE;
}
+#elif defined(__FreeBSD__) || defined(__OpenBSD__)
+# ifdef HWCAP_CRC32
+ unsigned long hwcap = 0;
+ elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap));
+ has_crc32 = (hwcap & HWCAP_CRC32) != 0;
+# elif defined(HWCAP2_CRC32)
+ unsigned long hwcap2 = 0;
+ elf_aux_info(AT_HWCAP2, &hwcap2, sizeof(hwcap2));
+ has_crc32 = (hwcap2 & HWCAP2_CRC32) != 0;
+# endif
#elif defined(__APPLE__)
int has_feat = 0;
size_t size = sizeof(has_feat);
if test $LINUX -eq 1; then
- if test "$ARCH" = "aarch64"; then
- cat > $test.c <<EOF
-#include <sys/auxv.h>
-int main() {
- return (getauxval(AT_HWCAP) & HWCAP_CRC32);
-}
-EOF
- if try $CC -c $CFLAGS $test.c; then
- CFLAGS="${CFLAGS} -DARM_AUXV_HAS_CRC32"
- SFLAGS="${SFLAGS} -DARM_AUXV_HAS_CRC32"
- else
- echo "HWCAP_CRC32 not present in sys/auxv.h; cannot detect support at runtime." | tee -a configure.log
- fi
- else
- cat > $test.c <<EOF
-#include <sys/auxv.h>
-int main() {
- return (getauxval(AT_HWCAP2) & HWCAP2_CRC32);
-}
-EOF
- if try $CC -c $CFLAGS $test.c; then
- CFLAGS="${CFLAGS} -DARM_AUXV_HAS_CRC32"
- SFLAGS="${SFLAGS} -DARM_AUXV_HAS_CRC32"
- else
- cat > $test.c <<EOF
-#include <sys/auxv.h>
-#include <asm/hwcap.h>
-int main() {
- return (getauxval(AT_HWCAP2) & HWCAP2_CRC32);
-}
-EOF
- if try $CC -c $CFLAGS $test.c; then
- CFLAGS="${CFLAGS} -DARM_AUXV_HAS_CRC32 -DARM_ASM_HWCAP"
- SFLAGS="${SFLAGS} -DARM_AUXV_HAS_CRC32 -DARM_ASM_HWCAP"
- else
- echo "HWCAP2_CRC32 not present in sys/auxv.h; cannot detect support at runtime." | tee -a configure.log
- fi
- fi
-
+ if test "$ARCH" != "aarch64"; then
cat > $test.c <<EOF
#include <sys/auxv.h>
int main() {
fi
if test $FREEBSD -eq 1 -o $OPENBSD -eq 1; then
- if test "$ARCH" = "aarch64"; then
- cat > $test.c <<EOF
-#include <sys/auxv.h>
-int main() {
- unsigned long hwcap;
- elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap));
- return (hwcap & HWCAP_CRC32);
-}
-EOF
- if try $CC -c $CFLAGS $test.c; then
- CFLAGS="${CFLAGS} -DARM_AUXV_HAS_CRC32"
- SFLAGS="${SFLAGS} -DARM_AUXV_HAS_CRC32"
- else
- echo "HWCAP_CRC32 not present in sys/auxv.h; cannot detect support at runtime." | tee -a configure.log
- fi
- else
- cat > $test.c <<EOF
-#include <sys/auxv.h>
-int main() {
- unsigned long hwcap2;
- elf_aux_info(AT_HWCAP2, &hwcap2, sizeof(hwcap2));
- return (hwcap2 & HWCAP2_CRC32);
-}
-EOF
- if try $CC -c $CFLAGS $test.c; then
- CFLAGS="${CFLAGS} -DARM_AUXV_HAS_CRC32"
- SFLAGS="${SFLAGS} -DARM_AUXV_HAS_CRC32"
- else
- echo "HWCAP2_CRC32 not present in sys/auxv.h; cannot detect support at runtime." | tee -a configure.log
- fi
-
+ if test "$ARCH" != "aarch64"; then
cat > $test.c <<EOF
#include <sys/auxv.h>
int main() {