]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
Build: Fix ARM64 CRC32 instruction feature test.
authorJia Tan <jiat0218@gmail.com>
Fri, 23 Feb 2024 08:12:32 +0000 (16:12 +0800)
committerJia Tan <jiat0218@gmail.com>
Fri, 23 Feb 2024 08:12:32 +0000 (16:12 +0800)
Old versions of Clang reported the unsupported function attribute and
__crc32d() function as warnings instead of errors, so the feature test
passed when it shouldn't have, causing a compile error at build time.
-Werror was added to this feature test to fix this. The change is not
needed for CMake because check_c_source_compiles() also performs
linking and the error is caught then.

Thanks to Sebastian Andrzej Siewior for reporting this.

configure.ac

index 36ceeef302dcaa6599631732589eca1a8e8cd2e4..4476c8b4da3474d3b337da297ad00e2de4fcdaa2 100644 (file)
@@ -1104,6 +1104,14 @@ AC_MSG_CHECKING([if ARM64 CRC32 instruction is usable])
 AS_IF([test "x$enable_arm64_crc32" = xno], [
        AC_MSG_RESULT([no, --disable-arm64-crc32 was used])
 ], [
+       # Set -Werror here because some versions of Clang (14 and older)
+       # do not report the unsupported __attribute__((__target__("+crc")))
+       # or __crc32d() as an error, only as a warning. This does not need
+       # to be done with CMake because tests will attempt to link and the
+       # error will be reported then.
+       OLD_CFLAGS="$CFLAGS"
+       CFLAGS="$CFLAGS -Werror"
+
        AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
 #include <arm_acle.h>
 #include <stdint.h>
@@ -1124,6 +1132,8 @@ uint32_t my_crc(uint32_t a, uint64_t b)
                enable_arm64_crc32=no
        ])
        AC_MSG_RESULT([$enable_arm64_crc32])
+
+       CFLAGS="$OLD_CFLAGS"
 ])
 
 # Check for ARM64 CRC32 instruction runtime detection.