Enable compilation on OpenBSD
Summary: I modified the Makefile so that we can compile rocksdb on OpenBSD. The instructions for building have been added to INSTALL.md. The whole compilation process works fine like this on OpenBSD-current Closes https://github.com/facebook/rocksdb/pull/3617 Differential Revision: D7323754 Pulled By: siying fbshipit-source-id: 990037d1cc69138d22f85bd77ef4dc8c1ba9edea
This commit is contained in:
parent
1139422dfb
commit
ccb761364d
21
INSTALL.md
21
INSTALL.md
@ -141,6 +141,27 @@ to build a portable binary, add `PORTABLE=1` before your make commands, like thi
|
|||||||
export JAVA_HOME=/usr/local/openjdk7
|
export JAVA_HOME=/usr/local/openjdk7
|
||||||
gmake rocksdbjava
|
gmake rocksdbjava
|
||||||
|
|
||||||
|
* **OpenBSD** (6.3/-current):
|
||||||
|
|
||||||
|
* As RocksDB is not available in the ports yet you have to build it on your own:
|
||||||
|
|
||||||
|
* Install the dependencies for RocksDB:
|
||||||
|
|
||||||
|
pkg_add gmake gflags snappy bzip2 lz4 zstd git jdk bash findutils gnuwatch
|
||||||
|
|
||||||
|
* 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/jdk-1.8.0
|
||||||
|
export PATH=$PATH:/usr/local/jdk-1.8.0/bin
|
||||||
|
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`.
|
||||||
|
29
Makefile
29
Makefile
@ -278,6 +278,10 @@ default: all
|
|||||||
WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare -Wshadow \
|
WARNING_FLAGS = -W -Wextra -Wall -Wsign-compare -Wshadow \
|
||||||
-Wno-unused-parameter
|
-Wno-unused-parameter
|
||||||
|
|
||||||
|
ifeq ($(PLATFORM), OS_OPENBSD)
|
||||||
|
WARNING_FLAGS += -Wno-unused-lambda-capture
|
||||||
|
endif
|
||||||
|
|
||||||
ifndef DISABLE_WARNING_AS_ERROR
|
ifndef DISABLE_WARNING_AS_ERROR
|
||||||
WARNING_FLAGS += -Werror
|
WARNING_FLAGS += -Werror
|
||||||
endif
|
endif
|
||||||
@ -674,7 +678,7 @@ coverage:
|
|||||||
COVERAGEFLAGS="-fprofile-arcs -ftest-coverage" LDFLAGS+="-lgcov" $(MAKE) J=1 all check
|
COVERAGEFLAGS="-fprofile-arcs -ftest-coverage" LDFLAGS+="-lgcov" $(MAKE) J=1 all check
|
||||||
cd coverage && ./coverage_test.sh
|
cd coverage && ./coverage_test.sh
|
||||||
# Delete intermediate files
|
# Delete intermediate files
|
||||||
find . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
|
$(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
|
||||||
|
|
||||||
ifneq (,$(filter check parallel_check,$(MAKECMDGOALS)),)
|
ifneq (,$(filter check parallel_check,$(MAKECMDGOALS)),)
|
||||||
# Use /dev/shm if it has the sticky bit set (otherwise, /tmp),
|
# Use /dev/shm if it has the sticky bit set (otherwise, /tmp),
|
||||||
@ -821,7 +825,7 @@ CLEAN_FILES += t LOG $(TMPD)
|
|||||||
# regardless of their duration. As with any use of "watch", hit ^C to
|
# regardless of their duration. As with any use of "watch", hit ^C to
|
||||||
# interrupt.
|
# interrupt.
|
||||||
watch-log:
|
watch-log:
|
||||||
watch --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
|
$(WATCH) --interval=0 'sort -k7,7nr -k4,4gr LOG|$(quoted_perl_command)'
|
||||||
|
|
||||||
# If J != 1 and GNU parallel is installed, run the tests in parallel,
|
# If J != 1 and GNU parallel is installed, run the tests in parallel,
|
||||||
# via the check_0 rule above. Otherwise, run them sequentially.
|
# via the check_0 rule above. Otherwise, run them sequentially.
|
||||||
@ -986,14 +990,14 @@ rocksdb.h rocksdb.cc: build_tools/amalgamate.py Makefile $(LIB_SOURCES) unity.cc
|
|||||||
clean:
|
clean:
|
||||||
rm -f $(BENCHMARKS) $(TOOLS) $(TESTS) $(LIBRARY) $(SHARED)
|
rm -f $(BENCHMARKS) $(TOOLS) $(TESTS) $(LIBRARY) $(SHARED)
|
||||||
rm -rf $(CLEAN_FILES) ios-x86 ios-arm scan_build_report
|
rm -rf $(CLEAN_FILES) ios-x86 ios-arm scan_build_report
|
||||||
find . -name "*.[oda]" -exec rm -f {} \;
|
$(FIND) . -name "*.[oda]" -exec rm -f {} \;
|
||||||
find . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
|
$(FIND) . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" -exec rm {} \;
|
||||||
rm -rf bzip2* snappy* zlib* lz4* zstd*
|
rm -rf bzip2* snappy* zlib* lz4* zstd*
|
||||||
cd java; $(MAKE) clean
|
cd java; $(MAKE) clean
|
||||||
|
|
||||||
tags:
|
tags:
|
||||||
ctags -R .
|
ctags -R .
|
||||||
cscope -b `find . -name '*.cc'` `find . -name '*.h'` `find . -name '*.c'`
|
cscope -b `$(FIND) . -name '*.cc'` `$(FIND) . -name '*.h'` `$(FIND) . -name '*.c'`
|
||||||
ctags -e -R -o etags *
|
ctags -e -R -o etags *
|
||||||
|
|
||||||
format:
|
format:
|
||||||
@ -1510,10 +1514,10 @@ uninstall:
|
|||||||
|
|
||||||
install-headers:
|
install-headers:
|
||||||
install -d $(INSTALL_PATH)/lib
|
install -d $(INSTALL_PATH)/lib
|
||||||
for header_dir in `find "include/rocksdb" -type d`; do \
|
for header_dir in `$(FIND) "include/rocksdb" -type d`; do \
|
||||||
install -d $(INSTALL_PATH)/$$header_dir; \
|
install -d $(INSTALL_PATH)/$$header_dir; \
|
||||||
done
|
done
|
||||||
for header in `find "include/rocksdb" -type f -name *.h`; do \
|
for header in `$(FIND) "include/rocksdb" -type f -name *.h`; do \
|
||||||
install -C -m 644 $$header $(INSTALL_PATH)/$$header; \
|
install -C -m 644 $$header $(INSTALL_PATH)/$$header; \
|
||||||
done
|
done
|
||||||
|
|
||||||
@ -1540,6 +1544,12 @@ install: install-static
|
|||||||
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
|
JAVA_INCLUDE = -I$(JAVA_HOME)/include/ -I$(JAVA_HOME)/include/linux
|
||||||
ifeq ($(PLATFORM), OS_SOLARIS)
|
ifeq ($(PLATFORM), OS_SOLARIS)
|
||||||
ARCH := $(shell isainfo -b)
|
ARCH := $(shell isainfo -b)
|
||||||
|
else ifeq ($(PLATFORM), OS_OPENBSD)
|
||||||
|
ifneq (,$(filter $(MACHINE), amd64 arm64 sparc64))
|
||||||
|
ARCH := 64
|
||||||
|
else
|
||||||
|
ARCH := 32
|
||||||
|
endif
|
||||||
else
|
else
|
||||||
ARCH := $(shell getconf LONG_BIT)
|
ARCH := $(shell getconf LONG_BIT)
|
||||||
endif
|
endif
|
||||||
@ -1599,6 +1609,11 @@ ifeq ($(PLATFORM), OS_AIX)
|
|||||||
EXTRACT_SOURCES = gunzip < TAR_GZ | tar xvf -
|
EXTRACT_SOURCES = gunzip < TAR_GZ | tar xvf -
|
||||||
SNAPPY_MAKE_TARGET = libsnappy.la
|
SNAPPY_MAKE_TARGET = libsnappy.la
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(PLATFORM), OS_OPENBSD)
|
||||||
|
JAVA_INCLUDE = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/openbsd
|
||||||
|
ROCKSDBJNILIB = librocksdbjni-openbsd$(ARCH).so
|
||||||
|
ROCKSDB_JAR = rocksdbjni-$(ROCKSDB_MAJOR).$(ROCKSDB_MINOR).$(ROCKSDB_PATCH)-openbsd$(ARCH).jar
|
||||||
|
endif
|
||||||
|
|
||||||
libz.a:
|
libz.a:
|
||||||
-rm -rf zlib-$(ZLIB_VER)
|
-rm -rf zlib-$(ZLIB_VER)
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
# PLATFORM_CXXFLAGS C++ compiler flags. Will contain:
|
# PLATFORM_CXXFLAGS C++ compiler flags. Will contain:
|
||||||
# PLATFORM_SHARED_VERSIONED Set to 'true' if platform supports versioned
|
# PLATFORM_SHARED_VERSIONED Set to 'true' if platform supports versioned
|
||||||
# shared libraries, empty otherwise.
|
# shared libraries, empty otherwise.
|
||||||
|
# FIND Command for the find utility
|
||||||
|
# WATCH Command for the watch utility
|
||||||
#
|
#
|
||||||
# The PLATFORM_CCFLAGS and PLATFORM_CXXFLAGS might include the following:
|
# The PLATFORM_CCFLAGS and PLATFORM_CXXFLAGS might include the following:
|
||||||
#
|
#
|
||||||
@ -88,6 +90,14 @@ if test -z "$CLANG_ANALYZER"; then
|
|||||||
CLANG_ANALYZER=$(which clang++ 2> /dev/null)
|
CLANG_ANALYZER=$(which clang++ 2> /dev/null)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test -z "$FIND"; then
|
||||||
|
FIND=find
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$WATCH"; then
|
||||||
|
WATCH=watch
|
||||||
|
fi
|
||||||
|
|
||||||
COMMON_FLAGS="$COMMON_FLAGS ${CFLAGS}"
|
COMMON_FLAGS="$COMMON_FLAGS ${CFLAGS}"
|
||||||
CROSS_COMPILE=
|
CROSS_COMPILE=
|
||||||
PLATFORM_CCFLAGS=
|
PLATFORM_CCFLAGS=
|
||||||
@ -154,9 +164,12 @@ case "$TARGET_OS" in
|
|||||||
;;
|
;;
|
||||||
OpenBSD)
|
OpenBSD)
|
||||||
PLATFORM=OS_OPENBSD
|
PLATFORM=OS_OPENBSD
|
||||||
|
CXX=clang++
|
||||||
COMMON_FLAGS="$COMMON_FLAGS -fno-builtin-memcmp -D_REENTRANT -DOS_OPENBSD"
|
COMMON_FLAGS="$COMMON_FLAGS -fno-builtin-memcmp -D_REENTRANT -DOS_OPENBSD"
|
||||||
PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -pthread"
|
PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -pthread"
|
||||||
# PORT_FILES=port/openbsd/openbsd_specific.cc
|
# PORT_FILES=port/openbsd/openbsd_specific.cc
|
||||||
|
FIND=gfind
|
||||||
|
WATCH=gnuwatch
|
||||||
;;
|
;;
|
||||||
DragonFly)
|
DragonFly)
|
||||||
PLATFORM=OS_DRAGONFLYBSD
|
PLATFORM=OS_DRAGONFLYBSD
|
||||||
@ -575,6 +588,8 @@ echo "ROCKSDB_PATCH=$ROCKSDB_PATCH" >> "$OUTPUT"
|
|||||||
echo "CLANG_SCAN_BUILD=$CLANG_SCAN_BUILD" >> "$OUTPUT"
|
echo "CLANG_SCAN_BUILD=$CLANG_SCAN_BUILD" >> "$OUTPUT"
|
||||||
echo "CLANG_ANALYZER=$CLANG_ANALYZER" >> "$OUTPUT"
|
echo "CLANG_ANALYZER=$CLANG_ANALYZER" >> "$OUTPUT"
|
||||||
echo "PROFILING_FLAGS=$PROFILING_FLAGS" >> "$OUTPUT"
|
echo "PROFILING_FLAGS=$PROFILING_FLAGS" >> "$OUTPUT"
|
||||||
|
echo "FIND=$FIND" >> "$OUTPUT"
|
||||||
|
echo "WATCH=$WATCH" >> "$OUTPUT"
|
||||||
# This will enable some related identifiers for the preprocessor
|
# This will enable some related identifiers for the preprocessor
|
||||||
if test -n "$JEMALLOC"; then
|
if test -n "$JEMALLOC"; then
|
||||||
echo "JEMALLOC=1" >> "$OUTPUT"
|
echo "JEMALLOC=1" >> "$OUTPUT"
|
||||||
|
@ -33,6 +33,10 @@ public class Environment {
|
|||||||
return OS.contains("sunos");
|
return OS.contains("sunos");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isOpenBSD() {
|
||||||
|
return (OS.contains("openbsd"));
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean is64Bit() {
|
public static boolean is64Bit() {
|
||||||
if (ARCH.indexOf("sparcv9") >= 0) {
|
if (ARCH.indexOf("sparcv9") >= 0) {
|
||||||
return true;
|
return true;
|
||||||
@ -67,6 +71,8 @@ public class Environment {
|
|||||||
return String.format("%sjni-solaris%s", name, arch);
|
return String.format("%sjni-solaris%s", name, arch);
|
||||||
} else if (isWindows() && is64Bit()) {
|
} else if (isWindows() && is64Bit()) {
|
||||||
return String.format("%sjni-win64", name);
|
return String.format("%sjni-win64", name);
|
||||||
|
} else if (isOpenBSD()) {
|
||||||
|
return String.format("%sjni-openbsd%s", name, is64Bit() ? "64" : "32");
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new UnsupportedOperationException(String.format("Cannot determine JNI library name for ARCH='%s' OS='%s' name='%s'", ARCH, OS, name));
|
throw new UnsupportedOperationException(String.format("Cannot determine JNI library name for ARCH='%s' OS='%s' name='%s'", ARCH, OS, name));
|
||||||
@ -77,7 +83,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() || isFreeBSD()) {
|
if (isUnix() || isAix() || isSolaris() || isFreeBSD() || isOpenBSD()) {
|
||||||
return libraryFileName + ".so";
|
return libraryFileName + ".so";
|
||||||
} else if (isMac()) {
|
} else if (isMac()) {
|
||||||
return libraryFileName + (shared ? ".dylib" : ".jnilib");
|
return libraryFileName + (shared ? ".dylib" : ".jnilib");
|
||||||
|
Loading…
Reference in New Issue
Block a user