From ee4bd4780b321ddb5f92a0f4eb956f2a2ebd60dc Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Fri, 4 Dec 2020 15:21:18 -0800 Subject: [PATCH] Fix compilation on Apple Silicon (#7714) Summary: Closes - https://github.com/facebook/rocksdb/issues/7710 I tested this on an Apple DTK (Developer Transition Kit) with an Apple A12Z Bionic CPU and macOS Big Sur (11.0.1). Previously the arm64 specific CRC optimisations were limited to Linux only OS... Well now Apple Silicon is also arm64 but runs macOS ;-) Pull Request resolved: https://github.com/facebook/rocksdb/pull/7714 Reviewed By: ltamasi Differential Revision: D25287349 Pulled By: pdillinger fbshipit-source-id: 639b168bf0ac2652907531e9604936ac4974b577 --- util/crc32c.cc | 8 ++++---- util/crc32c_arm64.cc | 8 +++++--- util/crc32c_arm64.h | 4 +++- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/util/crc32c.cc b/util/crc32c.cc index 10b67e418..80094239c 100644 --- a/util/crc32c.cc +++ b/util/crc32c.cc @@ -41,7 +41,7 @@ #endif -#if defined(__linux__) && defined(HAVE_ARM64_CRC) +#if defined(HAVE_ARM64_CRC) bool pmull_runtime_flag = false; #endif @@ -478,7 +478,7 @@ static bool isAltiVec() { } #endif -#if defined(__linux__) && defined(HAVE_ARM64_CRC) +#if defined(HAVE_ARM64_CRC) uint32_t ExtendARMImpl(uint32_t crc, const char *buf, size_t size) { return crc32c_arm64(crc, (const unsigned char *)buf, size); } @@ -498,7 +498,7 @@ std::string IsFastCrc32Supported() { has_fast_crc = false; arch = "PPC"; #endif -#elif defined(__linux__) && defined(HAVE_ARM64_CRC) +#elif defined(HAVE_ARM64_CRC) if (crc32c_runtime_check()) { has_fast_crc = true; arch = "Arm64"; @@ -1231,7 +1231,7 @@ uint32_t crc32c_3way(uint32_t crc, const char* buf, size_t len) { static inline Function Choose_Extend() { #ifdef HAVE_POWER8 return isAltiVec() ? ExtendPPCImpl : ExtendImpl; -#elif defined(__linux__) && defined(HAVE_ARM64_CRC) +#elif defined(HAVE_ARM64_CRC) if(crc32c_runtime_check()) { pmull_runtime_flag = crc32c_pmull_runtime_check(); return ExtendARMImpl; diff --git a/util/crc32c_arm64.cc b/util/crc32c_arm64.cc index 566810f4b..80dbf0528 100644 --- a/util/crc32c_arm64.cc +++ b/util/crc32c_arm64.cc @@ -5,9 +5,11 @@ #include "util/crc32c_arm64.h" -#if defined(__linux__) && defined(HAVE_ARM64_CRC) +#if defined(HAVE_ARM64_CRC) +#if defined(__linux__) #include +#endif #ifdef ROCKSDB_AUXV_GETAUXVAL_PRESENT #include #endif @@ -65,8 +67,8 @@ __attribute__((__no_sanitize__("alignment"))) __attribute__((__no_sanitize_undefined__)) #endif #endif -uint32_t crc32c_arm64(uint32_t crc, unsigned char const *data, - unsigned len) { +uint32_t +crc32c_arm64(uint32_t crc, unsigned char const *data, size_t len) { const uint8_t *buf8; const uint64_t *buf64 = (uint64_t *)data; int length = (int)len; diff --git a/util/crc32c_arm64.h b/util/crc32c_arm64.h index a12354683..b16b1f3e0 100644 --- a/util/crc32c_arm64.h +++ b/util/crc32c_arm64.h @@ -7,6 +7,7 @@ #define UTIL_CRC32C_ARM64_H #include +#include #if defined(__aarch64__) || defined(__AARCH64__) @@ -33,7 +34,8 @@ PREF4X64L1(buffer, (PREF_OFFSET), 8) \ PREF4X64L1(buffer, (PREF_OFFSET), 12) -extern uint32_t crc32c_arm64(uint32_t crc, unsigned char const *data, unsigned len); +extern uint32_t crc32c_arm64(uint32_t crc, unsigned char const *data, + size_t len); extern uint32_t crc32c_runtime_check(void); extern bool crc32c_pmull_runtime_check(void);