@@ -61,8 +61,8 @@ check_cxx_source_compiles_with_flags("${SSE42_CXXFLAGS}" "
6161)
6262
6363# Check for ARMv8 w/ CRC and CRYPTO extensions support in the compiler.
64- set (ARM_CRC_CXXFLAGS -march=armv8-a+crc+crypto)
65- check_cxx_source_compiles_with_flags("${ARM_CRC_CXXFLAGS } " "
64+ set (ARM64_CRC_CXXFLAGS -march=armv8-a+crc+crypto)
65+ check_cxx_source_compiles_with_flags("${ARM64_CRC_CXXFLAGS } " "
6666 #include <arm_acle.h>
6767 #include <arm_neon.h>
6868
@@ -78,38 +78,41 @@ check_cxx_source_compiles_with_flags("${ARM_CRC_CXXFLAGS}" "
7878 " HAVE_ARM64_CRC32C
7979)
8080
81+ add_library (crc32c_common INTERFACE )
82+ target_compile_definitions (crc32c_common INTERFACE
83+ HAVE_BUILTIN_PREFETCH=$<BOOL :${HAVE_BUILTIN_PREFETCH} >
84+ HAVE_MM_PREFETCH=$<BOOL :${HAVE_MM_PREFETCH} >
85+ HAVE_STRONG_GETAUXVAL=$<BOOL :${HAVE_STRONG_GETAUXVAL} >
86+ BYTE_ORDER_BIG_ENDIAN=$<STREQUAL :${CMAKE_CXX_BYTE_ORDER} ,BIG_ENDIAN>
87+ )
88+ target_link_libraries (crc32c_common INTERFACE core_base_interface)
89+
8190add_library (crc32c STATIC EXCLUDE_FROM_ALL
8291 ${PROJECT_SOURCE_DIR} /src/crc32c/src/crc32c.cc
8392 ${PROJECT_SOURCE_DIR} /src/crc32c/src/crc32c_portable.cc
8493)
85-
86- target_compile_definitions (crc32c
87- PRIVATE
88- HAVE_BUILTIN_PREFETCH=$<BOOL :${HAVE_BUILTIN_PREFETCH} >
89- HAVE_MM_PREFETCH=$<BOOL :${HAVE_MM_PREFETCH} >
90- HAVE_STRONG_GETAUXVAL=$<BOOL :${HAVE_STRONG_GETAUXVAL} >
91- HAVE_SSE42=$<BOOL :${HAVE_SSE42} >
92- HAVE_ARM64_CRC32C=$<BOOL :${HAVE_ARM64_CRC32C} >
93- BYTE_ORDER_BIG_ENDIAN=$<STREQUAL :${CMAKE_CXX_BYTE_ORDER} ,BIG_ENDIAN>
94- )
95-
9694target_include_directories (crc32c
9795 PUBLIC
9896 $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR} /src/crc32c/include >
9997)
98+ target_link_libraries (crc32c PRIVATE crc32c_common)
10099
101100if (HAVE_SSE42)
102- target_sources (crc32c PRIVATE ${PROJECT_SOURCE_DIR} /src/crc32c/src/crc32c_sse42.cc)
103- set_property (SOURCE ${PROJECT_SOURCE_DIR} /src/crc32c/src/crc32c_sse42.cc
104- APPEND PROPERTY COMPILE_OPTIONS ${SSE42_CXXFLAGS}
101+ add_library (crc32c_sse42 STATIC EXCLUDE_FROM_ALL
102+ ${PROJECT_SOURCE_DIR} /src/crc32c/src/crc32c_sse42.cc
105103 )
104+ target_compile_definitions (crc32c_sse42 PUBLIC HAVE_SSE42=1)
105+ target_compile_options (crc32c_sse42 PRIVATE ${SSE42_CXXFLAGS} )
106+ target_link_libraries (crc32c_sse42 PRIVATE crc32c_common)
107+ target_link_libraries (crc32c PRIVATE crc32c_sse42)
106108endif ()
107109
108110if (HAVE_ARM64_CRC32C)
109- target_sources (crc32c PRIVATE ${PROJECT_SOURCE_DIR} /src/crc32c/src/crc32c_arm64.cc)
110- set_property (SOURCE ${PROJECT_SOURCE_DIR} /src/crc32c/src/crc32c_arm64.cc
111- APPEND PROPERTY COMPILE_OPTIONS ${ARM_CRC_CXXFLAGS}
111+ add_library (crc32c_arm64 STATIC EXCLUDE_FROM_ALL
112+ ${PROJECT_SOURCE_DIR} /src/crc32c/src/crc32c_arm64.cc
112113 )
114+ target_compile_definitions (crc32c_arm64 PUBLIC HAVE_ARM64_CRC32C=1)
115+ target_compile_options (crc32c_arm64 PRIVATE ${ARM64_CRC_CXXFLAGS} )
116+ target_link_libraries (crc32c_arm64 PRIVATE crc32c_common)
117+ target_link_libraries (crc32c PRIVATE crc32c_arm64)
113118endif ()
114-
115- target_link_libraries (crc32c PRIVATE core_base_interface)
0 commit comments