diff options
Diffstat (limited to 'external/meta-openembedded/meta-oe/recipes-dbs/rocksdb')
4 files changed, 162 insertions, 199 deletions
diff --git a/external/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-cmake-Add-check-for-atomic-support.patch b/external/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-cmake-Add-check-for-atomic-support.patch new file mode 100644 index 00000000..9bfb1f31 --- /dev/null +++ b/external/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-cmake-Add-check-for-atomic-support.patch @@ -0,0 +1,115 @@ +From ba0a0e54d9544babbd3963891f4e3200dd5583f5 Mon Sep 17 00:00:00 2001 +From: Khem Raj <raj.khem@gmail.com> +Date: Wed, 18 Mar 2020 15:10:37 -0700 +Subject: [PATCH] cmake: Add check for atomic support + +Detect if libatomic should be linked in or compiler and platform can +provide the needed atomic instrinsics, this helps build on certain +platforms like mips or clang/i386 + +Fixes + +| /mnt/b/yoe/build/tmp/work/mips32r2-yoe-linux/rocksdb/6.6.4-r0/recipe-sysroot-native/usr/bin/mips-yoe-linux/mips-yoe-linux-ld: librocksdb.so.6.6.4: undefined reference to `__atomic_exchange_8' +| /mnt/b/yoe/build/tmp/work/mips32r2-yoe-linux/rocksdb/6.6.4-r0/recipe-sysroot-native/usr/bin/mips-yoe-linux/mips-yoe-linux-ld: librocksdb.so.6.6.4: undefined reference to `__atomic_fetch_or_8' +| /mnt/b/yoe/build/tmp/work/mips32r2-yoe-linux/rocksdb/6.6.4-r0/recipe-sysroot-native/usr/bin/mips-yoe-linux/mips-yoe-linux-ld: librocksdb.so.6.6.4: undefined reference to `__atomic_compare_exchange_8' +| /mnt/b/yoe/build/tmp/work/mips32r2-yoe-linux/rocksdb/6.6.4-r0/recipe-sysroot-native/usr/bin/mips-yoe-linux/mips-yoe-linux-ld: librocksdb.so.6.6.4: undefined reference to `__atomic_fetch_sub_8' +| /mnt/b/yoe/build/tmp/work/mips32r2-yoe-linux/rocksdb/6.6.4-r0/recipe-sysroot-native/usr/bin/mips-yoe-linux/mips-yoe-linux-ld: librocksdb.so.6.6.4: undefined reference to `__atomic_load_8' +| /mnt/b/yoe/build/tmp/work/mips32r2-yoe-linux/rocksdb/6.6.4-r0/recipe-sysroot-native/usr/bin/mips-yoe-linux/mips-yoe-linux-ld: librocksdb.so.6.6.4: undefined reference to `__atomic_store_8' +| /mnt/b/yoe/build/tmp/work/mips32r2-yoe-linux/rocksdb/6.6.4-r0/recipe-sysroot-native/usr/bin/mips-yoe-linux/mips-yoe-linux-ld: librocksdb.so.6.6.4: undefined reference to `__atomic_fetch_add_8' + +Upstream-Status: Submitted [https://github.com/facebook/rocksdb/pull/6555] +Signed-off-by: Khem Raj <raj.khem@gmail.com> +--- + CMakeLists.txt | 6 +++ + cmake/modules/CheckAtomic.cmake | 69 +++++++++++++++++++++++++++++++++ + 2 files changed, 75 insertions(+) + create mode 100644 cmake/modules/CheckAtomic.cmake + +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -780,7 +780,13 @@ if(WIN32) + set(SYSTEM_LIBS ${SYSTEM_LIBS} shlwapi.lib rpcrt4.lib) + set(LIBS ${ROCKSDB_STATIC_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS}) + else() ++ # check if linking against libatomic is necessary ++ include(CheckAtomic) ++ + set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT}) ++ if(HAVE_CXX_ATOMIC_WITH_LIB OR HAVE_CXX_ATOMICS64_WITH_LIB) ++ set(SYSTEM_LIBS ${SYSTEM_LIBS} atomic) ++ endif() + set(LIBS ${ROCKSDB_SHARED_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS}) + + add_library(${ROCKSDB_SHARED_LIB} SHARED ${SOURCES}) +--- /dev/null ++++ b/cmake/modules/CheckAtomic.cmake +@@ -0,0 +1,69 @@ ++# Checks if atomic operations are supported natively or if linking against ++# libatomic is needed. ++ ++# Check inspired by LLVMs cmake/modules/CheckAtomic.cmake ++ ++INCLUDE(CheckCXXSourceCompiles) ++INCLUDE(CheckLibraryExists) ++ ++function(check_working_cxx_atomics varname) ++ set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) ++ set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11") ++ CHECK_CXX_SOURCE_COMPILES(" ++#include <atomic> ++std::atomic<int> x; ++int main() { ++ return x; ++} ++" ${varname}) ++ set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) ++endfunction(check_working_cxx_atomics) ++ ++function(check_working_cxx_atomics64 varname) ++ set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) ++ set(CMAKE_REQUIRED_FLAGS "-std=c++11 ${CMAKE_REQUIRED_FLAGS}") ++ CHECK_CXX_SOURCE_COMPILES(" ++#include <atomic> ++#include <cstdint> ++std::atomic<uint64_t> x (0); ++std::atomic<double> y (0); ++int main() { ++ uint64_t i = x.load(std::memory_order_relaxed); ++ return int(y); ++} ++" ${varname}) ++ set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) ++endfunction(check_working_cxx_atomics64) ++ ++# Check if atomics work without libatomic ++check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITHOUT_LIB) ++ ++if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB) ++ check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_LIBATOMIC) ++ if( HAVE_LIBATOMIC ) ++ list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") ++ check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITH_LIB) ++ if (NOT HAVE_CXX_ATOMICS_WITH_LIB) ++ message(FATAL_ERROR "Host compiler must support std::atomic!") ++ endif() ++ else() ++ message(FATAL_ERROR "Host compiler appears to require libatomic, but cannot find it.") ++ endif() ++endif() ++ ++# Check if 64bit atomics work without libatomic ++check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITHOUT_LIB) ++ ++if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB) ++ check_library_exists(atomic __atomic_load_8 "" HAVE_CXX_LIBATOMICS64) ++ if(HAVE_CXX_LIBATOMICS64) ++ list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") ++ check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB) ++ if (NOT HAVE_CXX_ATOMICS64_WITH_LIB) ++ message(FATAL_ERROR "Host compiler must support std::atomic!") ++ endif() ++ else() ++ message(FATAL_ERROR "Host compiler appears to require libatomic, but cannot find it.") ++ endif() ++endif() ++ diff --git a/external/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-db-write_thread.cc-Initialize-state.patch b/external/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-db-write_thread.cc-Initialize-state.patch new file mode 100644 index 00000000..97ddbce5 --- /dev/null +++ b/external/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-db-write_thread.cc-Initialize-state.patch @@ -0,0 +1,31 @@ +From 49dcd22dcf1aae5995c42eac0fda68516fc1cd43 Mon Sep 17 00:00:00 2001 +From: Robert Yang <liezhi.yang@windriver.com> +Date: Wed, 19 Jun 2019 17:57:24 +0800 +Subject: [PATCH] db/write_thread.cc: Initialize state + +Fixed an error when compiled without -O2: +db/write_thread.cc:183:14: error: 'state' may be used uninitialized in this function [-Werror=maybe-uninitialized] + +Upstream-Status: Pending + +Signed-off-by: Robert Yang <liezhi.yang@windriver.com> +--- + db/write_thread.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/db/write_thread.cc b/db/write_thread.cc +index 835992c..6f99a11 100644 +--- a/db/write_thread.cc ++++ b/db/write_thread.cc +@@ -59,7 +59,7 @@ uint8_t WriteThread::BlockingAwaitState(Writer* w, uint8_t goal_mask) { + + uint8_t WriteThread::AwaitState(Writer* w, uint8_t goal_mask, + AdaptationContext* ctx) { +- uint8_t state; ++ uint8_t state = 0; + + // 1. Busy loop using "pause" for 1 micro sec + // 2. Else SOMETIMES busy loop using "yield" for 100 micro sec (default) +-- +2.7.4 + diff --git a/external/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb/0001-Fix-GitHub-issue-3716-gcc-8-warnings.patch b/external/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb/0001-Fix-GitHub-issue-3716-gcc-8-warnings.patch deleted file mode 100644 index be498974..00000000 --- a/external/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb/0001-Fix-GitHub-issue-3716-gcc-8-warnings.patch +++ /dev/null @@ -1,194 +0,0 @@ -From 8d65d70b54d1d306a0a0b00e036bc8ddd39d8ec1 Mon Sep 17 00:00:00 2001 -From: "przemyslaw.skibinski@percona.com" <przemyslaw.skibinski@percona.com> -Date: Fri, 20 Apr 2018 13:28:05 -0700 -Subject: [PATCH] Fix GitHub issue #3716: gcc-8 warnings - -Summary: -Fix the following gcc-8 warnings: -- conflicting C language linkage declaration [-Werror] -- writing to an object with no trivial copy-assignment [-Werror=class-memaccess] -- array subscript -1 is below array bounds [-Werror=array-bounds] - -Solves https://github.com/facebook/rocksdb/issues/3716 -Closes https://github.com/facebook/rocksdb/pull/3736 - -Differential Revision: D7684161 - -Pulled By: yiwu-arbug - -fbshipit-source-id: 47c0423d26b74add251f1d3595211eee1e41e54a ---- -Signed-off-by: Khem Raj <raj.khem@gmail.com> -Upstream-Status: Backport [https://github.com/facebook/rocksdb/commit/dee95a1afc6c63515e7d94dec33acdb79638b6d7.patch] - - db/c.cc | 77 ++++++++++++++------------------------- - memtable/inlineskiplist.h | 12 +++--- - 2 files changed, 33 insertions(+), 56 deletions(-) - -diff --git a/db/c.cc b/db/c.cc -index 064103ed4..0d485d096 100644 ---- a/db/c.cc -+++ b/db/c.cc -@@ -1388,23 +1388,24 @@ void rocksdb_writebatch_put_log_data( - b->rep.PutLogData(Slice(blob, len)); - } - -+class H : public WriteBatch::Handler { -+ public: -+ void* state_; -+ void (*put_)(void*, const char* k, size_t klen, const char* v, size_t vlen); -+ void (*deleted_)(void*, const char* k, size_t klen); -+ virtual void Put(const Slice& key, const Slice& value) override { -+ (*put_)(state_, key.data(), key.size(), value.data(), value.size()); -+ } -+ virtual void Delete(const Slice& key) override { -+ (*deleted_)(state_, key.data(), key.size()); -+ } -+}; -+ - void rocksdb_writebatch_iterate( - rocksdb_writebatch_t* b, - void* state, - void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen), - void (*deleted)(void*, const char* k, size_t klen)) { -- class H : public WriteBatch::Handler { -- public: -- void* state_; -- void (*put_)(void*, const char* k, size_t klen, const char* v, size_t vlen); -- void (*deleted_)(void*, const char* k, size_t klen); -- virtual void Put(const Slice& key, const Slice& value) override { -- (*put_)(state_, key.data(), key.size(), value.data(), value.size()); -- } -- virtual void Delete(const Slice& key) override { -- (*deleted_)(state_, key.data(), key.size()); -- } -- }; - H handler; - handler.state_ = state; - handler.put_ = put; -@@ -1649,18 +1650,6 @@ void rocksdb_writebatch_wi_iterate( - void* state, - void (*put)(void*, const char* k, size_t klen, const char* v, size_t vlen), - void (*deleted)(void*, const char* k, size_t klen)) { -- class H : public WriteBatch::Handler { -- public: -- void* state_; -- void (*put_)(void*, const char* k, size_t klen, const char* v, size_t vlen); -- void (*deleted_)(void*, const char* k, size_t klen); -- virtual void Put(const Slice& key, const Slice& value) override { -- (*put_)(state_, key.data(), key.size(), value.data(), value.size()); -- } -- virtual void Delete(const Slice& key) override { -- (*deleted_)(state_, key.data(), key.size()); -- } -- }; - H handler; - handler.state_ = state; - handler.put_ = put; -@@ -3109,20 +3098,21 @@ void rocksdb_slicetransform_destroy(rocksdb_slicetransform_t* st) { - delete st; - } - -+struct Wrapper : public rocksdb_slicetransform_t { -+ const SliceTransform* rep_; -+ ~Wrapper() { delete rep_; } -+ const char* Name() const override { return rep_->Name(); } -+ Slice Transform(const Slice& src) const override { -+ return rep_->Transform(src); -+ } -+ bool InDomain(const Slice& src) const override { -+ return rep_->InDomain(src); -+ } -+ bool InRange(const Slice& src) const override { return rep_->InRange(src); } -+ static void DoNothing(void*) { } -+}; -+ - rocksdb_slicetransform_t* rocksdb_slicetransform_create_fixed_prefix(size_t prefixLen) { -- struct Wrapper : public rocksdb_slicetransform_t { -- const SliceTransform* rep_; -- ~Wrapper() { delete rep_; } -- const char* Name() const override { return rep_->Name(); } -- Slice Transform(const Slice& src) const override { -- return rep_->Transform(src); -- } -- bool InDomain(const Slice& src) const override { -- return rep_->InDomain(src); -- } -- bool InRange(const Slice& src) const override { return rep_->InRange(src); } -- static void DoNothing(void*) { } -- }; - Wrapper* wrapper = new Wrapper; - wrapper->rep_ = rocksdb::NewFixedPrefixTransform(prefixLen); - wrapper->state_ = nullptr; -@@ -3131,19 +3121,6 @@ rocksdb_slicetransform_t* rocksdb_slicetransform_create_fixed_prefix(size_t pref - } - - rocksdb_slicetransform_t* rocksdb_slicetransform_create_noop() { -- struct Wrapper : public rocksdb_slicetransform_t { -- const SliceTransform* rep_; -- ~Wrapper() { delete rep_; } -- const char* Name() const override { return rep_->Name(); } -- Slice Transform(const Slice& src) const override { -- return rep_->Transform(src); -- } -- bool InDomain(const Slice& src) const override { -- return rep_->InDomain(src); -- } -- bool InRange(const Slice& src) const override { return rep_->InRange(src); } -- static void DoNothing(void*) { } -- }; - Wrapper* wrapper = new Wrapper; - wrapper->rep_ = rocksdb::NewNoopTransform(); - wrapper->state_ = nullptr; -diff --git a/memtable/inlineskiplist.h b/memtable/inlineskiplist.h -index 702a7336d..eadda1dc1 100644 ---- a/memtable/inlineskiplist.h -+++ b/memtable/inlineskiplist.h -@@ -280,7 +280,7 @@ struct InlineSkipList<Comparator>::Node { - // next_[0]. This is used for passing data from AllocateKey to Insert. - void StashHeight(const int height) { - assert(sizeof(int) <= sizeof(next_[0])); -- memcpy(&next_[0], &height, sizeof(int)); -+ memcpy(static_cast<void*>(&next_[0]), &height, sizeof(int)); - } - - // Retrieves the value passed to StashHeight. Undefined after a call -@@ -300,30 +300,30 @@ struct InlineSkipList<Comparator>::Node { - assert(n >= 0); - // Use an 'acquire load' so that we observe a fully initialized - // version of the returned Node. -- return (next_[-n].load(std::memory_order_acquire)); -+ return ((&next_[0] - n)->load(std::memory_order_acquire)); - } - - void SetNext(int n, Node* x) { - assert(n >= 0); - // Use a 'release store' so that anybody who reads through this - // pointer observes a fully initialized version of the inserted node. -- next_[-n].store(x, std::memory_order_release); -+ (&next_[0] - n)->store(x, std::memory_order_release); - } - - bool CASNext(int n, Node* expected, Node* x) { - assert(n >= 0); -- return next_[-n].compare_exchange_strong(expected, x); -+ return (&next_[0] - n)->compare_exchange_strong(expected, x); - } - - // No-barrier variants that can be safely used in a few locations. - Node* NoBarrier_Next(int n) { - assert(n >= 0); -- return next_[-n].load(std::memory_order_relaxed); -+ return (&next_[0] - n)->load(std::memory_order_relaxed); - } - - void NoBarrier_SetNext(int n, Node* x) { - assert(n >= 0); -- next_[-n].store(x, std::memory_order_relaxed); -+ (&next_[0] - n)->store(x, std::memory_order_relaxed); - } - - // Insert node after prev on specific level. --- -2.17.0 - diff --git a/external/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb b/external/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb index 594d1a9c..b9038df8 100644 --- a/external/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb +++ b/external/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb @@ -6,27 +6,38 @@ LIC_FILES_CHKSUM = "file://LICENSE.Apache;md5=3b83ef96387f14655fc854ddc3c6bd57 \ file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ file://LICENSE.leveldb;md5=fb04ff57a14f308f2eed4a9b87d45837" -SRCREV = "c60df9d9e7629fe208a9b848293a5599f83d5e77" -SRCBRANCH = "5.13.fb" -PV = "5.13.1" +SRCREV = "551a110918493a19d11243f53408b97485de1411" +SRCBRANCH = "6.6.fb" +PV = "6.6.4" SRC_URI = "git://github.com/facebook/${BPN}.git;branch=${SRCBRANCH} \ - file://0001-Fix-GitHub-issue-3716-gcc-8-warnings.patch \ + file://0001-db-write_thread.cc-Initialize-state.patch \ + file://0001-cmake-Add-check-for-atomic-support.patch \ " S = "${WORKDIR}/git" inherit cmake -PACKAGECONFIG ??= "bzip2 zlib lz4" +PACKAGECONFIG ??= "bzip2 zlib lz4 gflags" PACKAGECONFIG[bzip2] = "-DWITH_BZ2=ON,-DWITH_BZ2=OFF,bzip2" PACKAGECONFIG[lz4] = "-DWITH_LZ4=ON,-DWITH_LZ4=OFF,lz4" PACKAGECONFIG[zlib] = "-DWITH_ZLIB=ON,-DWITH_ZLIB=OFF,zlib" +PACKAGECONFIG[zstd] = "-DWITH_ZSTD=ON,-DWITH_ZSTD=OFF,zstd" PACKAGECONFIG[lite] = "-DROCKSDB_LITE=ON,-DROCKSDB_LITE=OFF" +PACKAGECONFIG[gflags] = "-DWITH_GFLAGS=ON,-DWITH_GFLAGS=OFF,gflags" # Tools and tests currently don't compile on armv5 so we disable them EXTRA_OECMAKE = "\ -DPORTABLE=ON \ -DWITH_TESTS=OFF \ -DWITH_TOOLS=OFF \ + -DFAIL_ON_WARNINGS=OFF \ " + +do_install_append() { + # fix for qa check buildpaths + sed -i "s#${RECIPE_SYSROOT}##g" ${D}${libdir}/cmake/rocksdb/RocksDBTargets.cmake +} + +LDFLAGS_append_riscv64 = " -pthread" |