From a53c571d2d69e212922c92f275258ede328652ab Mon Sep 17 00:00:00 2001 From: Adam Retter Date: Thu, 11 Jan 2018 13:21:35 -0800 Subject: [PATCH] FreeBSD build support for RocksDB and RocksJava Summary: Tested on a clean FreeBSD 11.01 x64. Closes https://github.com/facebook/rocksdb/pull/1423 Closes https://github.com/facebook/rocksdb/pull/3357 Differential Revision: D6705868 Pulled By: sagar0 fbshipit-source-id: cbccbbdafd4f42922512ca03619a5d5583a425fd --- INSTALL.md | 35 +++++++++++++++++++ Makefile | 12 +++---- build_tools/build_detect_platform | 1 + .../java/org/rocksdb/util/Environment.java | 8 ++++- port/stack_trace.cc | 2 +- 5 files changed, 50 insertions(+), 8 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index a570aaec7..e4aba5e92 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -107,6 +107,41 @@ to build a portable binary, add `PORTABLE=1` before your make commands, like thi * run `brew tap homebrew/versions; brew install gcc48 --use-llvm` to install gcc 4.8 (or higher). * run `brew install rocksdb` +* **FreeBSD** (11.01): + + * You can either install RocksDB from the Ports system using `cd /usr/ports/databases/rocksdb && make install`, or you can follow the details below to install dependencies and compile from source code: + + * Install the dependencies for RocksDB: + + export BATCH=YES + cd /usr/ports/devel/gmake && make install + cd /usr/ports/devel/gflags && make install + + cd /usr/ports/archivers/snappy && make install + cd /usr/ports/archivers/bzip2 && make install + cd /usr/ports/archivers/liblz4 && make install + cd /usr/ports/archivesrs/zstd && make install + + cd /usr/ports/devel/git && make install + + + * Install the dependencies for RocksJava (optional): + + export BATCH=yes + cd /usr/ports/java/openjdk7 && make install + + * Build RocksDB from source: + cd ~ + git clone https://github.com/facebook/rocksdb.git + cd rocksdb + gmake static_lib + + * Build RocksJava from source (optional): + cd rocksdb + export JAVA_HOME=/usr/local/openjdk7 + gmake rocksdbjava + + * **iOS**: * Run: `TARGET_OS=IOS make static_lib`. When building the project which uses rocksdb iOS library, make sure to define two important pre-processing macros: `ROCKSDB_LITE` and `IOS_CROSS_COMPILE`. diff --git a/Makefile b/Makefile index 1acb4dcf9..f2ad682b4 100644 --- a/Makefile +++ b/Makefile @@ -1574,7 +1574,7 @@ else endif endif ifeq ($(PLATFORM), OS_FREEBSD) - JAVA_INCLUDE += -I$(JAVA_HOME)/include/freebsd + JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/freebsd ROCKSDBJNILIB = librocksdbjni-freebsd$(ARCH).so ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-freebsd$(ARCH).jar endif @@ -1600,7 +1600,7 @@ libz.a: exit 1; \ fi tar xvzf zlib-$(ZLIB_VER).tar.gz - cd zlib-$(ZLIB_VER) && CFLAGS='-fPIC ${EXTRA_CFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --static && make + cd zlib-$(ZLIB_VER) && CFLAGS='-fPIC ${EXTRA_CFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --static && $(MAKE) cp zlib-$(ZLIB_VER)/libz.a . libbz2.a: @@ -1612,7 +1612,7 @@ libbz2.a: exit 1; \ fi tar xvzf bzip2-$(BZIP2_VER).tar.gz - cd bzip2-$(BZIP2_VER) && make CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64 ${EXTRA_CFLAGS}' AR='ar ${EXTRA_ARFLAGS}' + cd bzip2-$(BZIP2_VER) && $(MAKE) CFLAGS='-fPIC -O2 -g -D_FILE_OFFSET_BITS=64 ${EXTRA_CFLAGS}' AR='ar ${EXTRA_ARFLAGS}' cp bzip2-$(BZIP2_VER)/libbz2.a . libsnappy.a: @@ -1625,7 +1625,7 @@ libsnappy.a: fi tar xvzf snappy-$(SNAPPY_VER).tar.gz cd snappy-$(SNAPPY_VER) && CFLAGS='${EXTRA_CFLAGS}' CXXFLAGS='${EXTRA_CXXFLAGS}' LDFLAGS='${EXTRA_LDFLAGS}' ./configure --with-pic --enable-static --disable-shared - cd snappy-$(SNAPPY_VER) && make ${SNAPPY_MAKE_TARGET} + cd snappy-$(SNAPPY_VER) && $(MAKE) ${SNAPPY_MAKE_TARGET} cp snappy-$(SNAPPY_VER)/.libs/libsnappy.a . liblz4.a: @@ -1638,7 +1638,7 @@ liblz4.a: exit 1; \ fi tar xvzf lz4-$(LZ4_VER).tar.gz - cd lz4-$(LZ4_VER)/lib && make CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' all + cd lz4-$(LZ4_VER)/lib && $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' all cp lz4-$(LZ4_VER)/lib/liblz4.a . libzstd.a: @@ -1651,7 +1651,7 @@ libzstd.a: exit 1; \ fi tar xvzf zstd-$(ZSTD_VER).tar.gz - cd zstd-$(ZSTD_VER)/lib && DESTDIR=. PREFIX= make CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' install + cd zstd-$(ZSTD_VER)/lib && DESTDIR=. PREFIX= $(MAKE) CFLAGS='-fPIC -O2 ${EXTRA_CFLAGS}' install cp zstd-$(ZSTD_VER)/lib/libzstd.a . # A version of each $(LIBOBJECTS) compiled with -fPIC and a fixed set of static compression libraries diff --git a/build_tools/build_detect_platform b/build_tools/build_detect_platform index 02dc49632..65550ff30 100755 --- a/build_tools/build_detect_platform +++ b/build_tools/build_detect_platform @@ -141,6 +141,7 @@ case "$TARGET_OS" in ;; FreeBSD) PLATFORM=OS_FREEBSD + CXX=clang++ COMMON_FLAGS="$COMMON_FLAGS -fno-builtin-memcmp -D_REENTRANT -DOS_FREEBSD" PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lpthread" # PORT_FILES=port/freebsd/freebsd_specific.cc diff --git a/java/src/main/java/org/rocksdb/util/Environment.java b/java/src/main/java/org/rocksdb/util/Environment.java index f84e14bc1..36a4b4a20 100644 --- a/java/src/main/java/org/rocksdb/util/Environment.java +++ b/java/src/main/java/org/rocksdb/util/Environment.java @@ -12,6 +12,10 @@ public class Environment { return (OS.contains("win")); } + public static boolean isFreeBSD() { + return (OS.contains("freebsd")); + } + public static boolean isMac() { return (OS.contains("mac")); } @@ -54,6 +58,8 @@ public class Environment { } } else if (isMac()) { return String.format("%sjni-osx", name); + } else if (isFreeBSD()) { + return String.format("%sjni-freebsd%s", name, is64Bit() ? "64" : "32"); } else if (isAix() && is64Bit()) { return String.format("%sjni-aix64", name); } else if (isSolaris()) { @@ -71,7 +77,7 @@ public class Environment { } private static String appendLibOsSuffix(final String libraryFileName, final boolean shared) { - if (isUnix() || isAix() || isSolaris()) { + if (isUnix() || isAix() || isSolaris() || isFreeBSD()) { return libraryFileName + ".so"; } else if (isMac()) { return libraryFileName + (shared ? ".dylib" : ".jnilib"); diff --git a/port/stack_trace.cc b/port/stack_trace.cc index baaf14014..2ed0016db 100644 --- a/port/stack_trace.cc +++ b/port/stack_trace.cc @@ -32,7 +32,7 @@ namespace port { namespace { -#ifdef OS_LINUX +#if defined(OS_LINUX) || defined(OS_FREEBSD) const char* GetExecutableName() { static char name[1024];