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
main
Adam Retter 7 years ago committed by Facebook Github Bot
parent b010116d82
commit a53c571d2d
  1. 35
      INSTALL.md
  2. 12
      Makefile
  3. 1
      build_tools/build_detect_platform
  4. 8
      java/src/main/java/org/rocksdb/util/Environment.java
  5. 2
      port/stack_trace.cc

@ -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 tap homebrew/versions; brew install gcc48 --use-llvm` to install gcc 4.8 (or higher).
* run `brew install rocksdb` * 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**: * **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`. * 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`.

@ -1574,7 +1574,7 @@ else
endif endif
endif endif
ifeq ($(PLATFORM), OS_FREEBSD) 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 ROCKSDBJNILIB = librocksdbjni-freebsd$(ARCH).so
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-freebsd$(ARCH).jar ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-freebsd$(ARCH).jar
endif endif
@ -1600,7 +1600,7 @@ libz.a:
exit 1; \ exit 1; \
fi fi
tar xvzf zlib-$(ZLIB_VER).tar.gz 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 . cp zlib-$(ZLIB_VER)/libz.a .
libbz2.a: libbz2.a:
@ -1612,7 +1612,7 @@ libbz2.a:
exit 1; \ exit 1; \
fi fi
tar xvzf bzip2-$(BZIP2_VER).tar.gz 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 . cp bzip2-$(BZIP2_VER)/libbz2.a .
libsnappy.a: libsnappy.a:
@ -1625,7 +1625,7 @@ libsnappy.a:
fi fi
tar xvzf snappy-$(SNAPPY_VER).tar.gz 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) && 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 . cp snappy-$(SNAPPY_VER)/.libs/libsnappy.a .
liblz4.a: liblz4.a:
@ -1638,7 +1638,7 @@ liblz4.a:
exit 1; \ exit 1; \
fi fi
tar xvzf lz4-$(LZ4_VER).tar.gz 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 . cp lz4-$(LZ4_VER)/lib/liblz4.a .
libzstd.a: libzstd.a:
@ -1651,7 +1651,7 @@ libzstd.a:
exit 1; \ exit 1; \
fi fi
tar xvzf zstd-$(ZSTD_VER).tar.gz 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 . cp zstd-$(ZSTD_VER)/lib/libzstd.a .
# A version of each $(LIBOBJECTS) compiled with -fPIC and a fixed set of static compression libraries # A version of each $(LIBOBJECTS) compiled with -fPIC and a fixed set of static compression libraries

@ -141,6 +141,7 @@ case "$TARGET_OS" in
;; ;;
FreeBSD) FreeBSD)
PLATFORM=OS_FREEBSD PLATFORM=OS_FREEBSD
CXX=clang++
COMMON_FLAGS="$COMMON_FLAGS -fno-builtin-memcmp -D_REENTRANT -DOS_FREEBSD" COMMON_FLAGS="$COMMON_FLAGS -fno-builtin-memcmp -D_REENTRANT -DOS_FREEBSD"
PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lpthread" PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lpthread"
# PORT_FILES=port/freebsd/freebsd_specific.cc # PORT_FILES=port/freebsd/freebsd_specific.cc

@ -12,6 +12,10 @@ public class Environment {
return (OS.contains("win")); return (OS.contains("win"));
} }
public static boolean isFreeBSD() {
return (OS.contains("freebsd"));
}
public static boolean isMac() { public static boolean isMac() {
return (OS.contains("mac")); return (OS.contains("mac"));
} }
@ -54,6 +58,8 @@ public class Environment {
} }
} else if (isMac()) { } else if (isMac()) {
return String.format("%sjni-osx", name); return String.format("%sjni-osx", name);
} else if (isFreeBSD()) {
return String.format("%sjni-freebsd%s", name, is64Bit() ? "64" : "32");
} else if (isAix() && is64Bit()) { } else if (isAix() && is64Bit()) {
return String.format("%sjni-aix64", name); return String.format("%sjni-aix64", name);
} else if (isSolaris()) { } else if (isSolaris()) {
@ -71,7 +77,7 @@ public class Environment {
} }
private static String appendLibOsSuffix(final String libraryFileName, final boolean shared) { private static String appendLibOsSuffix(final String libraryFileName, final boolean shared) {
if (isUnix() || isAix() || isSolaris()) { if (isUnix() || isAix() || isSolaris() || isFreeBSD()) {
return libraryFileName + ".so"; return libraryFileName + ".so";
} else if (isMac()) { } else if (isMac()) {
return libraryFileName + (shared ? ".dylib" : ".jnilib"); return libraryFileName + (shared ? ".dylib" : ".jnilib");

@ -32,7 +32,7 @@ namespace port {
namespace { namespace {
#ifdef OS_LINUX #if defined(OS_LINUX) || defined(OS_FREEBSD)
const char* GetExecutableName() { const char* GetExecutableName() {
static char name[1024]; static char name[1024];

Loading…
Cancel
Save