]> git-server-git.apps.pok.os.sepia.ceph.com Git - rocksdb.git/commitdiff
FreeBSD build support for RocksDB and RocksJava
authorAdam Retter <adam.retter@googlemail.com>
Thu, 11 Jan 2018 21:21:35 +0000 (13:21 -0800)
committersdong <siying.d@fb.com>
Thu, 11 Jan 2018 21:42:22 +0000 (13:42 -0800)
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
Makefile
build_tools/build_detect_platform
java/src/main/java/org/rocksdb/util/Environment.java
port/stack_trace.cc

index a570aaec724394c59ae423d3e905d1e6e4977dfa..e4aba5e925d805c8b86f5ca0a415ba8a192a06e5 100644 (file)
@@ -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`.
 
index 114e5cd7632710a729a00d6cb376abbcc70484eb..473da64f8853cc1111fd193c5e5242451b12d4fb 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1573,7 +1573,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
@@ -1599,7 +1599,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:
@@ -1611,7 +1611,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:
@@ -1624,7 +1624,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:
@@ -1637,7 +1637,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:
@@ -1650,7 +1650,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
index 02dc496327064c2b49fde33e28df67a8a9a975ea..65550ff30308a2fa98d460251f6c416f1d6d0f5f 100755 (executable)
@@ -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
index f84e14bc19796df3d8ab1926dd899c23ba017c8b..36a4b4a207995782b358ed6efe757cdadea6328a 100644 (file)
@@ -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");
index baaf140142df659dc9395067e4e0c913e2efe2ba..2ed0016dbe267199c9336e6cf659fbcefec29859 100644 (file)
@@ -32,7 +32,7 @@ namespace port {
 
 namespace {
 
-#ifdef OS_LINUX
+#if defined(OS_LINUX) || defined(OS_FREEBSD)
 const char* GetExecutableName() {
   static char name[1024];