git: 752601257a53 - main - databases/clickhouse: Port to aarch64.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 08 Nov 2021 18:40:02 UTC
The branch main has been updated by mikael: URL: https://cgit.FreeBSD.org/ports/commit/?id=752601257a53022940feb142be2943d839d016d9 commit 752601257a53022940feb142be2943d839d016d9 Author: Mikael Urankar <mikael@FreeBSD.org> AuthorDate: 2021-11-08 18:38:59 +0000 Commit: Mikael Urankar <mikael@FreeBSD.org> CommitDate: 2021-11-08 18:38:59 +0000 databases/clickhouse: Port to aarch64. PR: 259047 Approved by: Oleg Ginzburg (maintainer) --- databases/clickhouse/Makefile | 5 +- .../clickhouse/files/patch-cmake_find_ldap.cmake | 10 +++ ...ch-contrib_boringssl_crypto_cpu-aarch64-linux.c | 75 ++++++++++++++++++++++ ...jemalloc_internal_jemalloc__internal__defs.h.in | 11 ++++ .../patch-contrib_rocksdb-cmake_CMakeLists.txt | 14 ++++ .../files/patch-contrib_rocksdb_CMakeLists.txt | 13 ++++ .../files/patch-contrib_rocksdb_util_crc32c.cc | 38 +++++++++++ .../patch-contrib_rocksdb_util_crc32c__arm64.cc | 45 +++++++++++++ .../files/patch-src_Common_StackTrace.cpp | 11 ++++ 9 files changed, 220 insertions(+), 2 deletions(-) diff --git a/databases/clickhouse/Makefile b/databases/clickhouse/Makefile index e443c0544ed0..24a07784d476 100644 --- a/databases/clickhouse/Makefile +++ b/databases/clickhouse/Makefile @@ -11,8 +11,8 @@ COMMENT= Fast open-source OLAP database management system LICENSE= APACHE20 -ONLY_FOR_ARCHS= amd64 -ONLY_FOR_ARCHS_REASON= only supported on amd64 +ONLY_FOR_ARCHS= aarch64 amd64 +ONLY_FOR_ARCHS_REASON= only supported on aarch64 and amd64 BUILD_DEPENDS= bash:shells/bash RUN_DEPENDS= bash:shells/bash @@ -215,6 +215,7 @@ SOVERSION= ${PORTVERSION} post-patch: @${REINPLACE_CMD} -e 's|/var/lib/clickhouse|/var/db/clickhouse|;s|/var/log/clickhouse-server|/var/log/clickhouse|;s|/etc/clickhouse-server|${PREFIX}/etc/clickhouse-server|' ${WRKSRC}/programs/server/config.xml + cd ${WRKSRC}/contrib/openldap-cmake && ${LN} -s freebsd_x86_64 freebsd_aarch64 post-install: @${RM} ${STAGEDIR}${PREFIX}/bin/config-processor diff --git a/databases/clickhouse/files/patch-cmake_find_ldap.cmake b/databases/clickhouse/files/patch-cmake_find_ldap.cmake new file mode 100644 index 000000000000..4ccad4821cf7 --- /dev/null +++ b/databases/clickhouse/files/patch-cmake_find_ldap.cmake @@ -0,0 +1,10 @@ +--- cmake/find/ldap.cmake.orig 2021-09-13 15:27:47.655692000 +0200 ++++ cmake/find/ldap.cmake 2021-09-13 15:28:02.970539000 +0200 +@@ -64,6 +64,7 @@ if (NOT OPENLDAP_FOUND AND NOT MISSING_INTERNAL_LDAP_L + ( "${_system_name}" STREQUAL "linux" AND "${_system_processor}" STREQUAL "aarch64" ) OR + ( "${_system_name}" STREQUAL "linux" AND "${_system_processor}" STREQUAL "ppc64le" ) OR + ( "${_system_name}" STREQUAL "freebsd" AND "${_system_processor}" STREQUAL "x86_64" ) OR ++ ( "${_system_name}" STREQUAL "freebsd" AND "${_system_processor}" STREQUAL "aarch64" ) OR + ( "${_system_name}" STREQUAL "darwin" AND "${_system_processor}" STREQUAL "x86_64" ) OR + ( "${_system_name}" STREQUAL "darwin" AND "${_system_processor}" STREQUAL "aarch64" ) + ) diff --git a/databases/clickhouse/files/patch-contrib_boringssl_crypto_cpu-aarch64-linux.c b/databases/clickhouse/files/patch-contrib_boringssl_crypto_cpu-aarch64-linux.c new file mode 100644 index 000000000000..50e88deb39e0 --- /dev/null +++ b/databases/clickhouse/files/patch-contrib_boringssl_crypto_cpu-aarch64-linux.c @@ -0,0 +1,75 @@ +--- contrib/boringssl/crypto/cpu-aarch64-linux.c.orig 2019-10-21 10:14:54 UTC ++++ contrib/boringssl/crypto/cpu-aarch64-linux.c +@@ -14,49 +14,47 @@ + + #include <openssl/cpu.h> + +-#if defined(OPENSSL_AARCH64) && defined(OPENSSL_LINUX) && \ +- !defined(OPENSSL_STATIC_ARMCAP) ++#if defined(OPENSSL_AARCH64) + +-#include <sys/auxv.h> +- + #include <openssl/arm_arch.h> + + #include "internal.h" + +- + extern uint32_t OPENSSL_armcap_P; + +-void OPENSSL_cpuid_setup(void) { +- unsigned long hwcap = getauxval(AT_HWCAP); ++#include <machine/armreg.h> + +- // See /usr/include/asm/hwcap.h on an aarch64 installation for the source of +- // these values. +- static const unsigned long kNEON = 1 << 1; +- static const unsigned long kAES = 1 << 3; +- static const unsigned long kPMULL = 1 << 4; +- static const unsigned long kSHA1 = 1 << 5; +- static const unsigned long kSHA256 = 1 << 6; ++#ifndef ID_AA64ISAR0_AES_VAL ++#define ID_AA64ISAR0_AES_VAL ID_AA64ISAR0_AES ++#endif ++#ifndef ID_AA64ISAR0_AES_VAL ++#define ID_AA64ISAR0_AES_VAL ID_AA64ISAR0_AES ++#endif ++#ifndef ID_AA64ISAR0_SHA1_VAL ++#define ID_AA64ISAR0_SHA1_VAL ID_AA64ISAR0_SHA1 ++#endif ++#ifndef ID_AA64ISAR0_SHA2_VAL ++#define ID_AA64ISAR0_SHA2_VAL ID_AA64ISAR0_SHA2 ++#endif + +- if ((hwcap & kNEON) == 0) { +- // Matching OpenSSL, if NEON is missing, don't report other features +- // either. +- return; +- } ++void OPENSSL_cpuid_setup(void) { ++ uint64_t id_aa64isar0; + ++ id_aa64isar0 = READ_SPECIALREG(id_aa64isar0_el1); ++ + OPENSSL_armcap_P |= ARMV7_NEON; + +- if (hwcap & kAES) { ++ if (ID_AA64ISAR0_AES_VAL(id_aa64isar0) >= ID_AA64ISAR0_AES_BASE) { + OPENSSL_armcap_P |= ARMV8_AES; + } +- if (hwcap & kPMULL) { ++ if (ID_AA64ISAR0_AES_VAL(id_aa64isar0) == ID_AA64ISAR0_AES_PMULL) { + OPENSSL_armcap_P |= ARMV8_PMULL; + } +- if (hwcap & kSHA1) { ++ if (ID_AA64ISAR0_SHA1_VAL(id_aa64isar0) == ID_AA64ISAR0_SHA1_BASE) { + OPENSSL_armcap_P |= ARMV8_SHA1; + } +- if (hwcap & kSHA256) { ++ if(ID_AA64ISAR0_SHA2_VAL(id_aa64isar0) >= ID_AA64ISAR0_SHA2_BASE) { + OPENSSL_armcap_P |= ARMV8_SHA256; + } + } +- +-#endif // OPENSSL_AARCH64 && !OPENSSL_STATIC_ARMCAP ++#endif // OPENSSL_AARCH64 diff --git a/databases/clickhouse/files/patch-contrib_jemalloc-cmake_include__freebsd__aarch64_jemalloc_internal_jemalloc__internal__defs.h.in b/databases/clickhouse/files/patch-contrib_jemalloc-cmake_include__freebsd__aarch64_jemalloc_internal_jemalloc__internal__defs.h.in new file mode 100644 index 000000000000..388d9bdec34a --- /dev/null +++ b/databases/clickhouse/files/patch-contrib_jemalloc-cmake_include__freebsd__aarch64_jemalloc_internal_jemalloc__internal__defs.h.in @@ -0,0 +1,11 @@ +--- contrib/jemalloc-cmake/include_freebsd_aarch64/jemalloc/internal/jemalloc_internal_defs.h.in.orig 2021-07-22 13:50:06.073516000 +0200 ++++ contrib/jemalloc-cmake/include_freebsd_aarch64/jemalloc/internal/jemalloc_internal_defs.h.in 2021-07-22 13:50:28.909237000 +0200 +@@ -161,7 +161,7 @@ + * JEMALLOC_DSS enables use of sbrk(2) to allocate extents from the data storage + * segment (DSS). + */ +-#define JEMALLOC_DSS ++/* #undef JEMALLOC_DSS */ + + /* Support memory filling (junk/zero). */ + #define JEMALLOC_FILL diff --git a/databases/clickhouse/files/patch-contrib_rocksdb-cmake_CMakeLists.txt b/databases/clickhouse/files/patch-contrib_rocksdb-cmake_CMakeLists.txt new file mode 100644 index 000000000000..6db0e41ea70d --- /dev/null +++ b/databases/clickhouse/files/patch-contrib_rocksdb-cmake_CMakeLists.txt @@ -0,0 +1,14 @@ +--- contrib/rocksdb-cmake/CMakeLists.txt.orig 2021-09-13 16:50:13.827707000 +0200 ++++ contrib/rocksdb-cmake/CMakeLists.txt 2021-09-13 16:51:37.118209000 +0200 +@@ -233,6 +233,11 @@ if(HAVE_AUXV_GETAUXVAL) + add_definitions(-DROCKSDB_AUXV_GETAUXVAL_PRESENT) + endif() + ++check_cxx_symbol_exists(elf_aux_info sys/auxv.h HAVE_ELF_AUX_INFO) ++if(HAVE_ELF_AUX_INFO) ++ add_definitions(-DROCKSDB_AUXV_GETAUXVAL_PRESENT) ++endif() ++ + include_directories(${ROCKSDB_SOURCE_DIR}) + include_directories("${ROCKSDB_SOURCE_DIR}/include") + if(WITH_FOLLY_DISTRIBUTED_MUTEX) diff --git a/databases/clickhouse/files/patch-contrib_rocksdb_CMakeLists.txt b/databases/clickhouse/files/patch-contrib_rocksdb_CMakeLists.txt new file mode 100644 index 000000000000..67a092844f6f --- /dev/null +++ b/databases/clickhouse/files/patch-contrib_rocksdb_CMakeLists.txt @@ -0,0 +1,13 @@ +--- contrib/rocksdb/CMakeLists.txt.orig 2021-09-13 16:40:55.686967000 +0200 ++++ contrib/rocksdb/CMakeLists.txt 2021-09-13 16:44:42.046383000 +0200 +@@ -553,6 +553,10 @@ check_cxx_symbol_exists(getauxval auvx.h HAVE_AUXV_GET + if(HAVE_AUXV_GETAUXVAL) + add_definitions(-DROCKSDB_AUXV_GETAUXVAL_PRESENT) + endif() ++check_cxx_symbol_exists(elf_aux_info sys/auxv.h HAVE_AUXV_ELF_AUX_INFO) ++if(HAVE_AUXV_ELF_AUX_INFO) ++ add_definitions(-DROCKSDB_AUXV_GETAUXVAL_PRESENT) ++endif() + + include_directories(${PROJECT_SOURCE_DIR}) + include_directories(${PROJECT_SOURCE_DIR}/include) diff --git a/databases/clickhouse/files/patch-contrib_rocksdb_util_crc32c.cc b/databases/clickhouse/files/patch-contrib_rocksdb_util_crc32c.cc new file mode 100644 index 000000000000..1c4a8699b3d2 --- /dev/null +++ b/databases/clickhouse/files/patch-contrib_rocksdb_util_crc32c.cc @@ -0,0 +1,38 @@ +--- contrib/rocksdb/util/crc32c.cc.orig 2021-07-21 16:35:20.404459000 +0200 ++++ contrib/rocksdb/util/crc32c.cc 2021-07-22 09:48:10.980923000 +0200 +@@ -41,7 +41,7 @@ + + #endif + +-#if defined(__linux__) && defined(HAVE_ARM64_CRC) ++#if (defined(__FreeBSD__) || defined(__linux__)) && defined(HAVE_ARM64_CRC) + bool pmull_runtime_flag = false; + #endif + +@@ -474,7 +474,7 @@ static bool isAltiVec() { + } + #endif + +-#if defined(__linux__) && defined(HAVE_ARM64_CRC) ++#if (defined(__FreeBSD__) || defined(__linux__)) && 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); + } +@@ -494,7 +494,7 @@ std::string IsFastCrc32Supported() { + has_fast_crc = false; + arch = "PPC"; + #endif +-#elif defined(__linux__) && defined(HAVE_ARM64_CRC) ++#elif (defined(__FreeBSD__) || defined(__linux__)) && defined(HAVE_ARM64_CRC) + if (crc32c_runtime_check()) { + has_fast_crc = true; + arch = "Arm64"; +@@ -1227,7 +1227,7 @@ uint32_t crc32c_3way(uint32_t crc, const char* buf, si + static inline Function Choose_Extend() { + #ifdef HAVE_POWER8 + return isAltiVec() ? ExtendPPCImpl : ExtendImpl<Slow_CRC32>; +-#elif defined(__linux__) && defined(HAVE_ARM64_CRC) ++#elif (defined(__FreeBSD__) || defined(__linux__)) && defined(HAVE_ARM64_CRC) + if(crc32c_runtime_check()) { + pmull_runtime_flag = crc32c_pmull_runtime_check(); + return ExtendARMImpl; diff --git a/databases/clickhouse/files/patch-contrib_rocksdb_util_crc32c__arm64.cc b/databases/clickhouse/files/patch-contrib_rocksdb_util_crc32c__arm64.cc new file mode 100644 index 000000000000..1b37e82527ef --- /dev/null +++ b/databases/clickhouse/files/patch-contrib_rocksdb_util_crc32c__arm64.cc @@ -0,0 +1,45 @@ +--- contrib/rocksdb/util/crc32c_arm64.cc.orig 2021-05-13 00:21:57.000000000 +0200 ++++ contrib/rocksdb/util/crc32c_arm64.cc 2000-01-01 02:32:56.500264000 +0100 +@@ -5,9 +5,11 @@ + + #include "util/crc32c_arm64.h" + +-#if defined(__linux__) && defined(HAVE_ARM64_CRC) ++#if (defined(__FreeBSD__) || defined(__linux__)) && defined(HAVE_ARM64_CRC) + ++#if defined(__linux__) + #include <asm/hwcap.h> ++#endif // linux + #ifdef ROCKSDB_AUXV_GETAUXVAL_PRESENT + #include <sys/auxv.h> + #endif +@@ -42,7 +44,14 @@ extern bool pmull_runtime_flag; + + uint32_t crc32c_runtime_check(void) { + #ifdef ROCKSDB_AUXV_GETAUXVAL_PRESENT ++#if defined(__FreeBSD__) ++ uint64_t auxv; ++ int result = elf_aux_info(AT_HWCAP, &auxv, sizeof auxv); ++ if (result != 0) ++ return 0; ++#else + uint64_t auxv = getauxval(AT_HWCAP); ++#endif + return (auxv & HWCAP_CRC32) != 0; + #else + return 0; +@@ -51,7 +60,14 @@ uint32_t crc32c_runtime_check(void) { + + bool crc32c_pmull_runtime_check(void) { + #ifdef ROCKSDB_AUXV_GETAUXVAL_PRESENT ++#if defined(__FreeBSD__) ++ uint64_t auxv; ++ int result = elf_aux_info(AT_HWCAP, &auxv, sizeof auxv); ++ if (result != 0) ++ return 0; ++#else + uint64_t auxv = getauxval(AT_HWCAP); ++#endif + return (auxv & HWCAP_PMULL) != 0; + #else + return false; diff --git a/databases/clickhouse/files/patch-src_Common_StackTrace.cpp b/databases/clickhouse/files/patch-src_Common_StackTrace.cpp new file mode 100644 index 000000000000..bac5c5e25a8d --- /dev/null +++ b/databases/clickhouse/files/patch-src_Common_StackTrace.cpp @@ -0,0 +1,11 @@ +--- src/Common/StackTrace.cpp.orig 2021-09-13 15:30:01.608345000 +0200 ++++ src/Common/StackTrace.cpp 2021-09-13 15:30:10.009331000 +0200 +@@ -186,6 +186,8 @@ static void * getCallerAddress(const ucontext_t & context) + #elif defined(__APPLE__) && defined(__aarch64__) + return reinterpret_cast<void *>(context.uc_mcontext->__ss.__pc); + ++#elif defined(__FreeBSD__) && defined(__aarch64__) ++ return reinterpret_cast<void *>(context.uc_mcontext.mc_gpregs.gp_elr); + #elif defined(__aarch64__) + return reinterpret_cast<void *>(context.uc_mcontext.pc); + #elif defined(__powerpc64__)