diff options
Diffstat (limited to 'third_party/crc32c/CMakeLists.txt')
-rw-r--r-- | third_party/crc32c/CMakeLists.txt | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/third_party/crc32c/CMakeLists.txt b/third_party/crc32c/CMakeLists.txt new file mode 100644 index 0000000000..bc720892d7 --- /dev/null +++ b/third_party/crc32c/CMakeLists.txt @@ -0,0 +1,66 @@ +android_add_library( + TARGET + crc32c + LICENSE + "BSD-3-Clause" + SRC + src/src/crc32c.cc + src/src/crc32c_portable.cc) +target_include_directories(crc32c PUBLIC config src/include) +target_compile_definitions(crc32c PRIVATE BYTE_ORDER_BIG_ENDIAN=0 + CRC32C_TESTS_BUILT_WITH_GLOG=0) +if(LINUX_AARCH64 OR DARWIN_AARCH64) + target_compile_definitions(crc32c PRIVATE HAVE_MM_PREFETCH=0 HAVE_SSE42=0) + target_sources(crc32c PRIVATE src/src/crc32c_arm64.cc) + if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + target_compile_definitions(crc32c PRIVATE HAVE_ARM64_CRC32C=0) + target_compile_options( + crc32c + PRIVATE "-march=armv8-a" + # Some builds set -march to a different value from the above. The + # specific feature flags below enable the instructions we need in + # these cases. See https://crbug.com/934016 for example. + "-Xclang -target-feature" + "-Xclang +crc" + "-Xclang -target-feature" + "-Xclang +crypto") + else() + target_compile_options(crc32c PRIVATE "-march=armv8-a+crc+crypto") + target_compile_definitions(crc32c PRIVATE HAVE_ARM64_CRC32C=1) + endif() +else() + target_compile_definitions(crc32c PRIVATE HAVE_MM_PREFETCH=1 HAVE_SSE42=1) + target_compile_definitions(crc32c PRIVATE HAVE_ARM64_CRC32C=0) + target_sources(crc32c PRIVATE src/src/crc32c_sse42.cc) + if(WINDOWS_MSVC_X86_64) + target_compile_options(crc32c PRIVATE -mavx) + else() + target_compile_options(crc32c PRIVATE -msse4.2) + endif() +endif() + +target_compile_definitions(crc32c PRIVATE HAVE_BUILTIN_PREFETCH=1) + +if(LINUX_AARCH64 OR LINUX_X86_64) + target_compile_definitions(crc32c PRIVATE HAVE_STRONG_GETAUXVAL=1 + HAVE_WEAK_GETAUXVAL=1) + +else() + target_compile_definitions(crc32c PRIVATE HAVE_STRONG_GETAUXVAL=0 + HAVE_WEAK_GETAUXVAL=0) +endif() + +android_add_test( + TARGET + crc32c_tests + SRC + "src/src/crc32c_arm64_unittest.cc" + "src/src/crc32c_extend_unittests.h" + "src/src/crc32c_portable_unittest.cc" + "src/src/crc32c_prefetch_unittest.cc" + "src/src/crc32c_read_le_unittest.cc" + "src/src/crc32c_round_up_unittest.cc" + "src/src/crc32c_sse42_unittest.cc" + "src/src/crc32c_unittest.cc") + +target_link_libraries(crc32c_tests PRIVATE crc32c gmock_main) |