diff --git a/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-Disable-Wshadow-and-do-not-mark-default-copy-constru.patch b/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-Disable-Wshadow-and-do-not-mark-default-copy-constru.patch
new file mode 100644
index 0000000..eccaa3a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-Disable-Wshadow-and-do-not-mark-default-copy-constru.patch
@@ -0,0 +1,57 @@
+From ee728434124b9b7d17abbd060a62aac79a9b79c0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 12 Feb 2019 14:31:24 -0800
+Subject: [PATCH] Disable -Wshadow and do not mark default copy constructors
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ CMakeLists.txt                                     | 2 +-
+ utilities/persistent_cache/block_cache_tier.h      | 4 ++--
+ utilities/persistent_cache/block_cache_tier_file.h | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 98e2e1973..3a24a075b 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -254,7 +254,7 @@ if(FAIL_ON_WARNINGS)
+   if(MSVC)
+     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
+   else() # assume GCC
+-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
++    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wno-error=shadow")
+   endif()
+ endif()
+ 
+diff --git a/utilities/persistent_cache/block_cache_tier.h b/utilities/persistent_cache/block_cache_tier.h
+index 2b2c0ef4f..96d0540a4 100644
+--- a/utilities/persistent_cache/block_cache_tier.h
++++ b/utilities/persistent_cache/block_cache_tier.h
+@@ -91,9 +91,9 @@ class BlockCacheTier : public PersistentCacheTier {
+         : key_(std::move(key)), data_(data) {}
+     ~InsertOp() {}
+ 
+-    InsertOp() = delete;
++    InsertOp() = default;
+     InsertOp(InsertOp&& /*rhs*/) = default;
+-    InsertOp& operator=(InsertOp&& rhs) = default;
++    InsertOp& operator=(InsertOp&& rhs) = delete;
+ 
+     // used for estimating size by bounded queue
+     size_t Size() { return data_.size() + key_.size(); }
+diff --git a/utilities/persistent_cache/block_cache_tier_file.h b/utilities/persistent_cache/block_cache_tier_file.h
+index e38b6c9a1..d9b89a4f7 100644
+--- a/utilities/persistent_cache/block_cache_tier_file.h
++++ b/utilities/persistent_cache/block_cache_tier_file.h
+@@ -262,7 +262,7 @@ class ThreadedWriter : public Writer {
+         : file_(file), buf_(buf), file_off_(file_off), callback_(callback) {}
+ 
+     IO(const IO&) = default;
+-    IO& operator=(const IO&) = default;
++    IO& operator=(const IO&) = delete;
+     size_t Size() const { return sizeof(IO); }
+ 
+     WritableFile* file_ = nullptr;           // File to write to
+-- 
+2.20.1
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-utilities-Fix-build-failure-with-Werror-maybe-uninit.patch b/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-utilities-Fix-build-failure-with-Werror-maybe-uninit.patch
new file mode 100644
index 0000000..ef0429a
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/rocksdb/files/0001-utilities-Fix-build-failure-with-Werror-maybe-uninit.patch
@@ -0,0 +1,35 @@
+From 8996f075e64da0e6ffeda57632ef31f8710defcc Mon Sep 17 00:00:00 2001
+From: He Zhe <zhe.he@windriver.com>
+Date: Fri, 15 Mar 2019 16:47:03 +0800
+Subject: [PATCH] utilities: Fix build failure with -Werror=maybe-uninitialized
+
+Summary:
+Initialize magic_number to zero to avoid such failure.
+utilities/blob_db/blob_log_format.cc:91:3: error: 'magic_number' may be used
+uninitialized in this function [-Werror=maybe-uninitialized]
+   if (magic_number != kMagicNumber) {
+   ^~
+
+Upstream-Status: Accepted [expected version 5.19]
+
+Signed-off-by: He Zhe <zhe.he@windriver.com>
+---
+ utilities/blob_db/blob_log_format.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/utilities/blob_db/blob_log_format.cc b/utilities/blob_db/blob_log_format.cc
+index 2bf7028..8726cb8 100644
+--- a/utilities/blob_db/blob_log_format.cc
++++ b/utilities/blob_db/blob_log_format.cc
+@@ -82,7 +82,7 @@ Status BlobLogFooter::DecodeFrom(Slice src) {
+   uint32_t src_crc = 0;
+   src_crc = crc32c::Value(src.data(), BlobLogFooter::kSize - sizeof(uint32_t));
+   src_crc = crc32c::Mask(src_crc);
+-  uint32_t magic_number;
++  uint32_t magic_number = 0;
+   if (!GetFixed32(&src, &magic_number) || !GetFixed64(&src, &blob_count) ||
+       !GetFixed64(&src, &expiration_range.first) ||
+       !GetFixed64(&src, &expiration_range.second) || !GetFixed32(&src, &crc)) {
+-- 
+2.7.4
+
diff --git a/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb/0001-Fix-GitHub-issue-3716-gcc-8-warnings.patch b/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb/0001-Fix-GitHub-issue-3716-gcc-8-warnings.patch
deleted file mode 100644
index be49897..0000000
--- a/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/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb b/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb
index 594d1a9..27c7b20 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb
+++ b/meta-openembedded/meta-oe/recipes-dbs/rocksdb/rocksdb_git.bb
@@ -6,12 +6,13 @@
                     file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     file://LICENSE.leveldb;md5=fb04ff57a14f308f2eed4a9b87d45837"
 
-SRCREV = "c60df9d9e7629fe208a9b848293a5599f83d5e77"
-SRCBRANCH = "5.13.fb"
-PV = "5.13.1"
+SRCREV = "a1774dde9a5bd51bc6ece5988781c6f28cc69d48"
+SRCBRANCH = "5.18.fb"
+PV = "5.18.2"
 
 SRC_URI = "git://github.com/facebook/${BPN}.git;branch=${SRCBRANCH} \
-           file://0001-Fix-GitHub-issue-3716-gcc-8-warnings.patch \
+           file://0001-Disable-Wshadow-and-do-not-mark-default-copy-constru.patch \
+           file://0001-utilities-Fix-build-failure-with-Werror-maybe-uninit.patch \
           "
 
 S = "${WORKDIR}/git"
@@ -19,9 +20,9 @@
 inherit cmake
 
 PACKAGECONFIG ??= "bzip2 zlib lz4"
-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[bzip2] = "-DWITH_BZ2=ON -DBZIP2_LIBRARIES:STRING=bz2,-DWITH_BZ2=OFF,bzip2"
+PACKAGECONFIG[lz4] = "-DWITH_LZ4=ON -DLZ4_LIBRARIES:STRING=lz4,-DWITH_LZ4=OFF,lz4"
+PACKAGECONFIG[zlib] = "-DWITH_ZLIB=ON -DZLIB_LIBRARIES:STRING=z,-DWITH_ZLIB=OFF,zlib"
 PACKAGECONFIG[lite] = "-DROCKSDB_LITE=ON,-DROCKSDB_LITE=OFF"
 
 # Tools and tests currently don't compile on armv5 so we disable them
@@ -30,3 +31,8 @@
     -DWITH_TESTS=OFF \
     -DWITH_TOOLS=OFF \
 "
+
+do_install_append() {
+    # fix for qa check buildpaths
+    sed -i "s#${RECIPE_SYSROOT}##g" ${D}${libdir}/cmake/rocksdb/RocksDBTargets.cmake
+}
