This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch hadoop-3.4.0
in repository https://gitbox.apache.org/repos/asf/doris-thirdparty.git

commit f98c08e2dcf4a3beb766e4e337865382bbb7ac16
Author: zclllhhjj <[email protected]>
AuthorDate: Fri Jul 26 10:11:42 2024 +0800

     fix: do really detection of crc32 instructions (#233)
    
    
    
    before, in arm which before arm-v8 or x86 which before sse4.2, we will get 
wrong result of crc32 support. it will lead to compiliation error.
---
 .../hadoop-common/src/CMakeLists.txt               | 46 ++++++++++++++++++++--
 1 file changed, 43 insertions(+), 3 deletions(-)

diff --git a/hadoop-common-project/hadoop-common/src/CMakeLists.txt 
b/hadoop-common-project/hadoop-common/src/CMakeLists.txt
index d2ef03645a4..d8792dcb592 100644
--- a/hadoop-common-project/hadoop-common/src/CMakeLists.txt
+++ b/hadoop-common-project/hadoop-common/src/CMakeLists.txt
@@ -22,6 +22,8 @@
 
 cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
 
+include(CheckCSourceRuns)
+
 list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/..)
 include(HadoopCommon)
 
@@ -152,14 +154,52 @@ else(REQUIRE_PMDK)
     MESSAGE(STATUS "Build without PMDK support.")
 endif(REQUIRE_PMDK)
 
-# Build hardware CRC32 acceleration, if supported on the platform.
+# Build hardware CRC32 acceleration, if supported on the platform. We must 
detect the instructions. not all platform support relative instruction.
+
+# CMAKE_REQUIRED_FLAGS effects check_c_source_runs. temporarily detect with 
native architecture
+SET(TMP_CMAKE_FLAGS "${CMAKE_REQUIRED_FLAGS}")
+SET(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -march=native")
+
 if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$" OR CMAKE_SYSTEM_PROCESSOR STREQUAL 
"x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64")
-  set(BULK_CRC_ARCH_SOURCE_FIlE "${SRC}/util/bulk_crc32_x86.c")
+# x86, supported by sse4.2
+  check_c_source_runs("
+    #include <nmmintrin.h>
+    int main() {
+        unsigned int crc = 0;
+        unsigned char data[4] = {0x12, 0x34, 0x56, 0x78};
+        crc = _mm_crc32_u32(crc, *((unsigned int*)data));
+        return 0;
+  }" CRC_TEST_RESULT)
+  message(STATUS "SUPPORT OF CRC: ${CRC_TEST_RESULT}")
+  if (CRC_TEST_RESULT)
+    set(BULK_CRC_ARCH_SOURCE_FIlE "${SRC}/util/bulk_crc32_x86.c")
+  else()
+    message("No HW CRC acceleration for ${CMAKE_SYSTEM_PROCESSOR}, falling 
back to SW")
+  endif()
+
 elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
-  set(BULK_CRC_ARCH_SOURCE_FIlE "${SRC}/util/bulk_crc32_aarch64.c")
+# arm64, supported by arm-v8
+  check_c_source_runs("
+    #include <arm_acle.h>
+    int main() {
+        uint32_t crc = 0;
+        uint32_t data = 12345;
+        crc = __crc32cw(crc, data);
+        return 0;
+  }" CRC_TEST_RESULT)
+  message(STATUS "SUPPORT OF CRC: ${CRC_TEST_RESULT}")
+  if (CRC_TEST_RESULT)
+    set(BULK_CRC_ARCH_SOURCE_FIlE "${SRC}/util/bulk_crc32_aarch64.c")
+  else()
+    message("No HW CRC acceleration for ${CMAKE_SYSTEM_PROCESSOR}, falling 
back to SW")
+  endif()
+
 else()
   message("No HW CRC acceleration for ${CMAKE_SYSTEM_PROCESSOR}, falling back 
to SW")
 endif()
+# revert the flags
+SET(CMAKE_REQUIRED_FLAGS "${TMP_CMAKE_FLAGS}")
+UNSET(TMP_CMAKE_FLAGS)
 
 # Find the no-suffix version of libcrypto/openssl. See HADOOP-11216 for 
details.
 set(STORED_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to