From 312f23c92d5b9432e1d1acbf64225db271de7212 Mon Sep 17 00:00:00 2001 From: Andrew Kryczka Date: Thu, 18 Jun 2020 09:50:05 -0700 Subject: [PATCH] build fixes for GNU/kFreeBSD (#6992) Summary: Upstream https://salsa.debian.org/mariadb-team/mariadb-10.4/-/blob/master/debian/patches/rocksdb-kfreebsd.patch by jrtc27. Fixes https://github.com/facebook/rocksdb/issues/5223. Pull Request resolved: https://github.com/facebook/rocksdb/pull/6992 Reviewed By: zhichao-cao Differential Revision: D22084150 Pulled By: ajkr fbshipit-source-id: 1822311ba16f112a15065b2180ce89d36af9cafc --- CMakeLists.txt | 4 +++- build_tools/build_detect_platform | 11 +++++++++++ env/env_posix.cc | 9 +++++---- port/stack_trace.cc | 2 +- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a5434cb90c..631c6d03cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,7 +95,7 @@ if(MSVC) option(WITH_XPRESS "build with windows built in compression" OFF) include(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty.inc) else() - if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD" AND NOT CMAKE_SYSTEM_NAME MATCHES "kFreeBSD") # FreeBSD has jemalloc as default malloc # but it does not have all the jemalloc files in include/... set(WITH_JEMALLOC ON) @@ -448,6 +448,8 @@ elseif(CMAKE_SYSTEM_NAME MATCHES "Linux") add_definitions(-DOS_LINUX) elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS") add_definitions(-DOS_SOLARIS) +elseif(CMAKE_SYSTEM_NAME MATCHES "kFreeBSD") + add_definitions(-DOS_GNU_KFREEBSD) elseif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") add_definitions(-DOS_FREEBSD) elseif(CMAKE_SYSTEM_NAME MATCHES "NetBSD") diff --git a/build_tools/build_detect_platform b/build_tools/build_detect_platform index d574e43cd3..3610405a89 100755 --- a/build_tools/build_detect_platform +++ b/build_tools/build_detect_platform @@ -192,6 +192,17 @@ EOF PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lpthread" # PORT_FILES=port/freebsd/freebsd_specific.cc ;; + GNU/kFreeBSD) + PLATFORM=OS_GNU_KFREEBSD + COMMON_FLAGS="$COMMON_FLAGS -DOS_GNU_KFREEBSD" + if [ -z "$USE_CLANG" ]; then + COMMON_FLAGS="$COMMON_FLAGS -fno-builtin-memcmp" + else + PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -latomic" + fi + PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lpthread -lrt" + # PORT_FILES=port/gnu_kfreebsd/gnu_kfreebsd_specific.cc + ;; NetBSD) PLATFORM=OS_NETBSD COMMON_FLAGS="$COMMON_FLAGS -fno-builtin-memcmp -D_REENTRANT -DOS_NETBSD" diff --git a/env/env_posix.cc b/env/env_posix.cc index 624dcefbee..c6677f6ea9 100644 --- a/env/env_posix.cc +++ b/env/env_posix.cc @@ -41,7 +41,7 @@ #include #include // Get nano time includes -#if defined(OS_LINUX) || defined(OS_FREEBSD) +#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_GNU_KFREEBSD) #elif defined(__MACH__) #include #include @@ -249,7 +249,8 @@ class PosixEnv : public CompositeEnvWrapper { } uint64_t NowNanos() override { -#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_AIX) +#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_GNU_KFREEBSD) || \ + defined(OS_AIX) struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); return static_cast(ts.tv_sec) * 1000000000 + ts.tv_nsec; @@ -269,8 +270,8 @@ class PosixEnv : public CompositeEnvWrapper { } uint64_t NowCPUNanos() override { -#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_AIX) || \ - (defined(__MACH__) && defined(__MAC_10_12)) +#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_GNU_KFREEBSD) || \ + defined(OS_AIX) || (defined(__MACH__) && defined(__MAC_10_12)) struct timespec ts; clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts); return static_cast(ts.tv_sec) * 1000000000 + ts.tv_nsec; diff --git a/port/stack_trace.cc b/port/stack_trace.cc index d3975c686d..310ba77d2e 100644 --- a/port/stack_trace.cc +++ b/port/stack_trace.cc @@ -36,7 +36,7 @@ namespace port { namespace { -#if defined(OS_LINUX) || defined(OS_FREEBSD) +#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_GNU_KFREEBSD) const char* GetExecutableName() { static char name[1024];