aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJia Tan <jiat0218@gmail.com>2023-10-19 16:09:01 +0800
committerJia Tan <jiat0218@gmail.com>2023-10-19 16:09:01 +0800
commit139757170468f0f1fafdf0a8ffa74363d1ea1d0c (patch)
tree3cc891b0566a3c6d75b84a41b50fce67f3f3f5dd
parentliblzma: Fix -fsanitize=address failure with crc_clmul functions. (diff)
downloadxz-139757170468f0f1fafdf0a8ffa74363d1ea1d0c.tar.xz
CMake: Add ALLOW_CLMUL_CRC option to enable/disable CLMUL.
The option is enabled by default, but will only be visible to a user listing cache variables or using a CMake GUI application if the immintrin.h header file is found. This mirrors our Autotools build --disable-clmul-crc functionality.
-rw-r--r--CMakeLists.txt44
1 files changed, 25 insertions, 19 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 6e3cd6f8..128e4a47 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -829,26 +829,32 @@ if(HAVE_IMMINTRIN_H)
tuklib_add_definition_if(liblzma HAVE__MM_MOVEMASK_EPI8)
# CLMUL intrinsic:
- check_c_source_compiles("
- #include <immintrin.h>
- #if defined(__e2k__) && __iset__ < 6
- # error
- #endif
- #if (defined(__GNUC__) || defined(__clang__)) && !defined(__EDG__)
- __attribute__((__target__(\"ssse3,sse4.1,pclmul\")))
- #endif
- __m128i my_clmul(__m128i a)
- {
- const __m128i b = _mm_set_epi64x(1, 2);
- return _mm_clmulepi64_si128(a, b, 0);
- }
- int main(void) { return 0; }
- "
- HAVE_USABLE_CLMUL)
+ option(ALLOW_CLMUL_CRC "Allow carryless multiplication for CRC \
+calculation if supported by the system" ON)
+
+ if(ALLOW_CLMUL_CRC)
+ check_c_source_compiles("
+ #include <immintrin.h>
+ #if defined(__e2k__) && __iset__ < 6
+ # error
+ #endif
+ #if (defined(__GNUC__) || defined(__clang__)) \
+ && !defined(__EDG__)
+ __attribute__((__target__(\"ssse3,sse4.1,pclmul\")))
+ #endif
+ __m128i my_clmul(__m128i a)
+ {
+ const __m128i b = _mm_set_epi64x(1, 2);
+ return _mm_clmulepi64_si128(a, b, 0);
+ }
+ int main(void) { return 0; }
+ "
+ HAVE_USABLE_CLMUL)
- if(HAVE_USABLE_CLMUL)
- target_sources(liblzma PRIVATE src/liblzma/check/crc_clmul.c)
- target_compile_definitions(liblzma PRIVATE HAVE_USABLE_CLMUL)
+ if(HAVE_USABLE_CLMUL)
+ target_sources(liblzma PRIVATE src/liblzma/check/crc_clmul.c)
+ target_compile_definitions(liblzma PRIVATE HAVE_USABLE_CLMUL)
+ endif()
endif()
endif()