diff --git a/build_detect_platform b/build_detect_platform index 91ba87aa2b8c49bd1a3756075380a2c717b86abc..7318f947f70428cee6d61c77032efa584735c3b6 100755 --- a/build_detect_platform +++ b/build_detect_platform @@ -30,7 +30,11 @@ fi # Default to fbcode gcc on internal fb machines if [ -d /mnt/gvfs/third-party -a -z "$CXX" ]; then - source fbcode.gcc471.sh + if [ -z "$USE_CLANG" ]; then + source fbcode.gcc471.sh + else + source fbcode.clang31.sh + fi fi # Delete existing output, if it exists @@ -53,8 +57,8 @@ fi COMMON_FLAGS="${CFLAGS}" CROSS_COMPILE= PLATFORM_CCFLAGS= -PLATFORM_CXXFLAGS= -PLATFORM_LDFLAGS= +PLATFORM_CXXFLAGS="${CXXFLAGS}" +PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS" PLATFORM_SHARED_EXT="so" PLATFORM_SHARED_LDFLAGS="${EXEC_LDFLAGS_SHARED} -shared -Wl,-soname -Wl," PLATFORM_SHARED_CFLAGS="-fPIC" @@ -71,8 +75,11 @@ case "$TARGET_OS" in ;; Linux) PLATFORM=OS_LINUX - COMMON_FLAGS="$COMMON_FLAGS -I/usr/include -fno-builtin-memcmp -pthread -DOS_LINUX -fPIC" - PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -pthread" + COMMON_FLAGS="$COMMON_FLAGS -DOS_LINUX -fPIC" + if [ -z "$USE_CLANG" ]; then + COMMON_FLAGS="$COMMON_FLAGS -fno-builtin-memcmp" + fi + PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lpthread" PORT_FILE=port/port_posix.cc ;; SunOS) diff --git a/db/skiplist_test.cc b/db/skiplist_test.cc index ecd992389e5c294538fca14684b3404f7da9fee0..4b3d6d42328025edcaf20477ab6fe3a8e56258e5 100644 --- a/db/skiplist_test.cc +++ b/db/skiplist_test.cc @@ -14,7 +14,7 @@ namespace leveldb { typedef uint64_t Key; -struct Comparator { +struct TestComparator { int operator()(const Key& a, const Key& b) const { if (a < b) { return -1; @@ -30,11 +30,11 @@ class SkipTest { }; TEST(SkipTest, Empty) { Arena arena; - Comparator cmp; - SkipList list(cmp, &arena); + TestComparator cmp; + SkipList list(cmp, &arena); ASSERT_TRUE(!list.Contains(10)); - SkipList::Iterator iter(&list); + SkipList::Iterator iter(&list); ASSERT_TRUE(!iter.Valid()); iter.SeekToFirst(); ASSERT_TRUE(!iter.Valid()); @@ -50,8 +50,8 @@ TEST(SkipTest, InsertAndLookup) { Random rnd(1000); std::set keys; Arena arena; - Comparator cmp; - SkipList list(cmp, &arena); + TestComparator cmp; + SkipList list(cmp, &arena); for (int i = 0; i < N; i++) { Key key = rnd.Next() % R; if (keys.insert(key).second) { @@ -69,7 +69,7 @@ TEST(SkipTest, InsertAndLookup) { // Simple iterator tests { - SkipList::Iterator iter(&list); + SkipList::Iterator iter(&list); ASSERT_TRUE(!iter.Valid()); iter.Seek(0); @@ -87,7 +87,7 @@ TEST(SkipTest, InsertAndLookup) { // Forward iteration test for (int i = 0; i < R; i++) { - SkipList::Iterator iter(&list); + SkipList::Iterator iter(&list); iter.Seek(i); // Compare against model iterator @@ -107,7 +107,7 @@ TEST(SkipTest, InsertAndLookup) { // Backward iteration test { - SkipList::Iterator iter(&list); + SkipList::Iterator iter(&list); iter.SeekToLast(); // Compare against model iterator @@ -208,10 +208,10 @@ class ConcurrentTest { // SkipList is not protected by mu_. We just use a single writer // thread to modify it. - SkipList list_; + SkipList list_; public: - ConcurrentTest() : list_(Comparator(), &arena_) { } + ConcurrentTest() : list_(TestComparator(), &arena_) { } // REQUIRES: External synchronization void WriteStep(Random* rnd) { @@ -230,7 +230,7 @@ class ConcurrentTest { } Key pos = RandomTarget(rnd); - SkipList::Iterator iter(&list_); + SkipList::Iterator iter(&list_); iter.Seek(pos); while (true) { Key current; diff --git a/db/version_set.cc b/db/version_set.cc index 511fc730594e0978b7c4f3385cd455c4ee41739c..01dc9632bc71f3e46e23607da1d953182022729f 100644 --- a/db/version_set.cc +++ b/db/version_set.cc @@ -28,20 +28,6 @@ static int64_t TotalFileSize(const std::vector& files) { return sum; } -namespace { -std::string IntSetToString(const std::set& s) { - std::string result = "{"; - for (std::set::const_iterator it = s.begin(); - it != s.end(); - ++it) { - result += (result.size() > 1) ? "," : ""; - result += NumberToString(*it); - } - result += "}"; - return result; -} -} // namespace - Version::~Version() { assert(refs_ == 0); diff --git a/fbcode.clang31.sh b/fbcode.clang31.sh new file mode 100644 index 0000000000000000000000000000000000000000..276bf12ca053ef708b8fb7ab4fc7e283b293a146 --- /dev/null +++ b/fbcode.clang31.sh @@ -0,0 +1,51 @@ +#!/bin/sh +# +# Set environment variables so that we can compile leveldb using +# fbcode settings. It uses the latest g++ compiler and also +# uses jemalloc +# This is compiled with gcc version 4.7.1 for zeus proxy + +TOOLCHAIN_REV=f365dbeae46a30414a2874a6f45e73e10f1caf7d +TOOLCHAIN_EXECUTABLES="/mnt/gvfs/third-party/$TOOLCHAIN_REV/centos5.2-native" +TOOLCHAIN_LIB_BASE="/mnt/gvfs/third-party/$TOOLCHAIN_REV/gcc-4.7.1-glibc-2.14.1" +TOOL_JEMALLOC=jemalloc-3.0.0/2f45f3a +GLIBC_RUNTIME_PATH=/usr/local/fbcode/gcc-4.7.1-glibc-2.14.1 + +# location of snappy headers and libraries +SNAPPY_INCLUDE=" -I $TOOLCHAIN_LIB_BASE/snappy/snappy-1.0.3/7518bbe/include" +SNAPPY_LIBS=" $TOOLCHAIN_LIB_BASE/snappy/snappy-1.0.3/7518bbe/lib/libsnappy.a" + +# location of boost headers and libraries +THRIFT_INCLUDE=" -I $TOOLCHAIN_LIB_BASE/boost/boost-1.48.0/bef9365/include -std=gnu++0x" +THRIFT_INCLUDE+=" -I./thrift -I./thrift/gen-cpp -I./thrift/lib/cpp" +THRIFT_LIBS=" -L $TOOLCHAIN_LIB_BASE/boost/boost-1.48.0/bef9365/lib" + +# location of libevent +LIBEVENT_INCLUDE=" -I $TOOLCHAIN_LIB_BASE/libevent/libevent-1.4.14b/91ddd43/include" +LIBEVENT_LIBS=" -L $TOOLCHAIN_LIB_BASE/libevent/libevent-1.4.14b/91ddd43/lib" + +# use Intel SSE support for checksum calculations +export USE_SSE=" -msse -msse4.2 " + +CC="$TOOLCHAIN_EXECUTABLES/clang/clang-3.1/6ca8a59/bin/clang $CLANG_INCLUDES" +CXX="$TOOLCHAIN_EXECUTABLES/clang/clang-3.1/6ca8a59/bin/clang++ $CLANG_INCLUDES $JINCLUDE $SNAPPY_INCLUDE $THRIFT_INCLUDE $LIBEVENT_INCLUDE" +AR=$TOOLCHAIN_EXECUTABLES/binutils/binutils-2.21.1/da39a3e/bin/ar +RANLIB=$TOOLCHAIN_EXECUTABLES/binutils/binutils-2.21.1/da39a3e/bin/ranlib + +CFLAGS="-B$TOOLCHAIN_EXECUTABLES/binutils/binutils-2.21.1/da39a3e/bin -nostdlib -nostdinc -isystem $TOOLCHAIN_LIB_BASE/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1 -isystem $TOOLCHAIN_LIB_BASE/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/x86_64-facebook-linux -isystem $TOOLCHAIN_LIB_BASE/libgcc/libgcc-4.7.1/afc21dc/include/c++/4.7.1/backward -isystem $TOOLCHAIN_LIB_BASE/glibc/glibc-2.14.1/99df8fc/include -isystem $TOOLCHAIN_LIB_BASE/clang/clang-3.1/c8f7279/lib/clang/3.1/include -isystem $TOOLCHAIN_LIB_BASE/kernel-headers/kernel-headers-3.2.18_70_fbk11_00129_gc8882d0/da39a3e/include/linux -isystem $TOOLCHAIN_LIB_BASE/kernel-headers/kernel-headers-3.2.18_70_fbk11_00129_gc8882d0/da39a3e/include -Wall -Wno-sign-compare -Wno-unused-variable -Winvalid-pch -Wno-deprecated -Woverloaded-virtual" +CXXFLAGS="$CFLAGS -nostdinc++ -std=gnu++0x" + +CFLAGS+=" -I $TOOLCHAIN_LIB_BASE/jemalloc/$TOOL_JEMALLOC/include -DHAVE_JEMALLOC" + +EXEC_LDFLAGS=" -Wl,--whole-archive $TOOLCHAIN_LIB_BASE/jemalloc/$TOOL_JEMALLOC/lib/libjemalloc.a" +EXEC_LDFLAGS+=" -Wl,--no-whole-archive $TOOLCHAIN_LIB_BASE/libunwind/libunwind-1.0.1/91ddd43/lib/libunwind.a" +EXEC_LDFLAGS+=" $HDFSLIB $SNAPPY_LIBS $THRIFT_LIBS $LIBEVENT_LIBS" +EXEC_LDFLAGS+=" -Wl,--dynamic-linker,$GLIBC_RUNTIME_PATH/lib/ld-linux-x86-64.so.2" +EXEC_LDFLAGS+=" -B$TOOLCHAIN_EXECUTABLES/binutils/binutils-2.21.1/da39a3e/bin" + +PLATFORM_LDFLAGS="-L$TOOLCHAIN_LIB_BASE/libgcc/libgcc-4.7.1/afc21dc/lib -L$TOOLCHAIN_LIB_BASE/glibc/glibc-2.14.1/99df8fc/lib" + +EXEC_LDFLAGS_SHARED="$SNAPPY_LIBS" +SNAPPY_LDFLAGS="$SNAPPY_LIBS" + +export CC CXX AR RANLIB CFLAGS EXEC_LDFLAGS EXEC_LDFLAGS_SHARED SNAPPY_LDFLAGS diff --git a/fbcode.gcc471.sh b/fbcode.gcc471.sh index 83f8bf24588a433ceb749910e681f7a8a53cc486..1736a18f51a2e7ed3abd0d3f8f8592132c75c36b 100644 --- a/fbcode.gcc471.sh +++ b/fbcode.gcc471.sh @@ -48,6 +48,8 @@ EXEC_LDFLAGS=" -Wl,--whole-archive $TOOLCHAIN_LIB_BASE/jemalloc/$TOOL_JEMALLOC/l EXEC_LDFLAGS+=" -Wl,--no-whole-archive $TOOLCHAIN_LIB_BASE/libunwind/libunwind-20100812_experimental/91ddd43/lib/libunwind.a" EXEC_LDFLAGS+=" $HDFSLIB $SNAPPY_LIBS $THRIFT_LIBS $LIBEVENT_LIBS" +PLATFORM_LDFLAGS="-L$TOOLCHAIN_LIB_BASE/libgcc/libgcc-4.7.1/afc21dc/lib -L$TOOLCHAIN_LIB_BASE/glibc/glibc-2.14.1/99df8fc/lib" + EXEC_LDFLAGS_SHARED="$SNAPPY_LIBS" SNAPPY_LDFLAGS="$SNAPPY_LIBS" diff --git a/table/table_test.cc b/table/table_test.cc index 04b8bdeb74dbb5fd16b7677d7f95f5e0bc0473c9..416679d7aa4892993db8350d7c79b4ee1ae4087e 100644 --- a/table/table_test.cc +++ b/table/table_test.cc @@ -411,12 +411,14 @@ static bool ZlibCompressionSupported() { &out); } +#ifdef BZIP2 static bool BZip2CompressionSupported() { std::string out; Slice in = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; return port::BZip2_Compress(Options().compression_opts, in.data(), in.size(), &out); } +#endif enum TestType { TABLE_TEST, diff --git a/util/env_posix.cc b/util/env_posix.cc index 0c7922a13c101c62b3ec8f26e2dd77f8eb15370f..7a6a0f80c01d6c18496d39b749a23288b2357d30 100644 --- a/util/env_posix.cc +++ b/util/env_posix.cc @@ -393,7 +393,7 @@ class PosixWritableFile : public WritableFile { cursize_ += left; } else { while (left != 0) { - size_t done = write(fd_, src, left); + ssize_t done = write(fd_, src, left); if (done < 0) { return IOError(filename_, errno); } @@ -424,7 +424,7 @@ class PosixWritableFile : public WritableFile { size_t left = cursize_; char* src = buf_; while (left != 0) { - size_t done = write(fd_, src, left); + ssize_t done = write(fd_, src, left); if (done < 0) { return IOError(filename_, errno); }