Skip to content

Commit 43fbeac

Browse files
committed
fixup! cmake: Build crc32c static library
Avoid using source-specific compile options. They hard to reason about and error-prone when combining with target-specific compile options. The resulted build logic effectively mirrors the master branch's one.
1 parent 6640654 commit 43fbeac

File tree

1 file changed

+24
-21
lines changed

1 file changed

+24
-21
lines changed

cmake/crc32c.cmake

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
8190
add_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-
9694
target_include_directories(crc32c
9795
PUBLIC
9896
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/crc32c/include>
9997
)
98+
target_link_libraries(crc32c PRIVATE crc32c_common)
10099

101100
if(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)
106108
endif()
107109

108110
if(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)
113118
endif()
114-
115-
target_link_libraries(crc32c PRIVATE core_base_interface)

0 commit comments

Comments
 (0)