mirror of https://github.com/facebook/rocksdb.git
RocksDB on FreeBSD support
Summary: This patch will update the Makefile and source code so that we can build RocksDB successfully on FreeBSD 10 and 11 (64-bit and 32-bit) I have also encountered some problems when running tests on FreeBSD, I will try to fix them individually in different diffs Notes: - FreeBSD uses clang as it's default compiler (http://lists.freebsd.org/pipermail/freebsd-current/2012-September/036480.html) - GNU C++ compiler have C++ 11 problems on FreeBSD (https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=193528) - make is not gmake on FreeBSD (http://www.khmere.com/freebsd_book/html/ch01.html) Test Plan: Using VMWare Fusion Create 4 VM machines (FreeBSD 11 64-bit, FreeBSD 11 32-bit, FreeBSD 10 64-bit, FreeBSD 10 32-bit) - pkg install git gmake gflags archivers/snappy - git clone https://github.com/facebook/rocksdb.git - apply this patch - setenv CXX c++ - setenv CPATH /usr/local/include/ - setenv LIBRARY_PATH /usr/local/lib/ - gmake db_bench - make sure compilation is successful and db_bench is running - gmake all - make sure compilation is successful Reviewers: sdong, igor Reviewed By: igor Subscribers: dhruba Differential Revision: https://reviews.facebook.net/D33891
This commit is contained in:
parent
4ba119df5c
commit
ba9d1737a8
2
Makefile
2
Makefile
|
@ -10,7 +10,7 @@ CFLAGS += ${EXTRA_CFLAGS}
|
||||||
CXXFLAGS += ${EXTRA_CXXFLAGS}
|
CXXFLAGS += ${EXTRA_CXXFLAGS}
|
||||||
LDFLAGS += $(EXTRA_LDFLAGS)
|
LDFLAGS += $(EXTRA_LDFLAGS)
|
||||||
MACHINE ?= $(shell uname -m)
|
MACHINE ?= $(shell uname -m)
|
||||||
ARFLAGS = rs
|
ARFLAGS = rsD
|
||||||
|
|
||||||
ifneq ($(MAKECMDGOALS),dbg)
|
ifneq ($(MAKECMDGOALS),dbg)
|
||||||
OPT += -O2 -fno-omit-frame-pointer
|
OPT += -O2 -fno-omit-frame-pointer
|
||||||
|
|
|
@ -13,4 +13,21 @@ Vagrant.configure("2") do |config|
|
||||||
box.vm.box = "chef/centos-6.5"
|
box.vm.box = "chef/centos-6.5"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
config.vm.define "FreeBSD10" do |box|
|
||||||
|
box.vm.guest = :freebsd
|
||||||
|
box.vm.box = "robin/freebsd-10"
|
||||||
|
# FreeBSD does not support 'mount_virtualbox_shared_folder', use NFS
|
||||||
|
box.vm.synced_folder ".", "/vagrant", :nfs => true, id: "vagrant-root"
|
||||||
|
box.vm.network "private_network", ip: "10.0.1.10"
|
||||||
|
|
||||||
|
# build everything after creating VM, skip using --no-provision
|
||||||
|
box.vm.provision "shell", inline: <<-SCRIPT
|
||||||
|
pkg install -y gmake clang35
|
||||||
|
export CXX=/usr/local/bin/clang++35
|
||||||
|
cd /vagrant
|
||||||
|
gmake clean
|
||||||
|
gmake all OPT=-g
|
||||||
|
SCRIPT
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -75,6 +75,10 @@ if test -z "$TARGET_OS"; then
|
||||||
TARGET_OS=`uname -s`
|
TARGET_OS=`uname -s`
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test -z "$TARGET_ARCHITECTURE"; then
|
||||||
|
TARGET_ARCHITECTURE=`uname -m`
|
||||||
|
fi
|
||||||
|
|
||||||
if test -z "$CLANG_SCAN_BUILD"; then
|
if test -z "$CLANG_SCAN_BUILD"; then
|
||||||
CLANG_SCAN_BUILD=scan-build
|
CLANG_SCAN_BUILD=scan-build
|
||||||
fi
|
fi
|
||||||
|
@ -300,12 +304,16 @@ EOF
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Test whether -Wshorten-64-to-32 is available
|
# TODO(tec): Fix -Wshorten-64-to-32 errors on FreeBSD and enable the warning.
|
||||||
$CXX $CFLAGS -x c++ - -o /dev/null -Wshorten-64-to-32 2>/dev/null <<EOF
|
# -Wshorten-64-to-32 breaks compilation on FreeBSD i386
|
||||||
int main() {}
|
if ! [ "$TARGET_OS" = FreeBSD -a "$TARGET_ARCHITECTURE" = i386 ]; then
|
||||||
|
# Test whether -Wshorten-64-to-32 is available
|
||||||
|
$CXX $CFLAGS -x c++ - -o /dev/null -Wshorten-64-to-32 2>/dev/null <<EOF
|
||||||
|
int main() {}
|
||||||
EOF
|
EOF
|
||||||
if [ "$?" = 0 ]; then
|
if [ "$?" = 0 ]; then
|
||||||
COMMON_FLAGS="$COMMON_FLAGS -Wshorten-64-to-32"
|
COMMON_FLAGS="$COMMON_FLAGS -Wshorten-64-to-32"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# shall we use HDFS?
|
# shall we use HDFS?
|
||||||
|
@ -324,6 +332,11 @@ if test "$USE_HDFS"; then
|
||||||
JAVA_LDFLAGS="$JAVA_LDFLAGS $HDFS_LDFLAGS"
|
JAVA_LDFLAGS="$JAVA_LDFLAGS $HDFS_LDFLAGS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$TARGET_OS" = FreeBSD -a "$TARGET_ARCHITECTURE" = i386 ]; then
|
||||||
|
# Intel SSE instructions breaks compilation on FreeBSD i386
|
||||||
|
unset USE_SSE
|
||||||
|
fi
|
||||||
|
|
||||||
if test "$USE_SSE"; then
|
if test "$USE_SSE"; then
|
||||||
# if Intel SSE instruction set is supported, set USE_SSE=1
|
# if Intel SSE instruction set is supported, set USE_SSE=1
|
||||||
COMMON_FLAGS="$COMMON_FLAGS -msse -msse4.2 "
|
COMMON_FLAGS="$COMMON_FLAGS -msse -msse4.2 "
|
||||||
|
|
|
@ -25,7 +25,11 @@
|
||||||
#else
|
#else
|
||||||
#define PLATFORM_IS_LITTLE_ENDIAN false
|
#define PLATFORM_IS_LITTLE_ENDIAN false
|
||||||
#endif
|
#endif
|
||||||
#elif defined(OS_FREEBSD) || defined(OS_OPENBSD) || defined(OS_NETBSD) ||\
|
#elif defined(OS_FREEBSD)
|
||||||
|
#include <sys/endian.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#define PLATFORM_IS_LITTLE_ENDIAN (_BYTE_ORDER == _LITTLE_ENDIAN)
|
||||||
|
#elif defined(OS_OPENBSD) || defined(OS_NETBSD) ||\
|
||||||
defined(OS_DRAGONFLYBSD) || defined(OS_ANDROID)
|
defined(OS_DRAGONFLYBSD) || defined(OS_ANDROID)
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/endian.h>
|
#include <sys/endian.h>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <sys/time.h>
|
||||||
#include "rocksdb/env.h"
|
#include "rocksdb/env.h"
|
||||||
#include "util/arena.h"
|
#include "util/arena.h"
|
||||||
#include "util/autovector.h"
|
#include "util/autovector.h"
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
// of patent rights can be found in the PATENTS file in the same directory.
|
// of patent rights can be found in the PATENTS file in the same directory.
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace rocksdb {
|
namespace rocksdb {
|
||||||
|
|
Loading…
Reference in New Issue