]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
CMake: Add ALLOW_CLMUL_CRC option to enable/disable CLMUL.
authorJia Tan <jiat0218@gmail.com>
Thu, 19 Oct 2023 08:09:01 +0000 (16:09 +0800)
committerJia Tan <jiat0218@gmail.com>
Thu, 19 Oct 2023 08:09:01 +0000 (16:09 +0800)
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.

CMakeLists.txt

index 6e3cd6f88ed3d1bfcfa2327172fdf097eea34278..128e4a4794fefbcb2eea0cdce0e96ae8a278ba64 100644 (file)
@@ -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()