summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYun Pan <dinoallo@netc.it>2022-03-15 22:48:49 +0800
committerYixun Lan <dlan@gentoo.org>2022-03-19 12:09:24 +0800
commit678c1515b3327a7876ef8e3e118db4ab9e5d8e63 (patch)
tree118ae82233212dbc75ab0963b0a439bffba2152b /dev-libs/rocksdb
parentdev-libs/rocksdb: add timer for riscv platform (diff)
downloadgentoo-678c1515b3327a7876ef8e3e118db4ab9e5d8e63.tar.gz
gentoo-678c1515b3327a7876ef8e3e118db4ab9e5d8e63.tar.bz2
gentoo-678c1515b3327a7876ef8e3e118db4ab9e5d8e63.zip
dev-libs/rocksdb: fix check for libatomic
The original patch that comes with rocksdb 6.14.6 is inadequate to check if libatomic is required on some architectures. The new patch superseded the old one in version 6.17.3. Along with patch e8fc99f, rocksdb 6.17.3 can now be compiled on riscv. Bug: https://bugs.gentoo.org/834855 Signed-off-by: Yun Pan <dinoallo@netc.it> Signed-off-by: Yixun Lan <dlan@gentoo.org>
Diffstat (limited to 'dev-libs/rocksdb')
-rw-r--r--dev-libs/rocksdb/files/rocksdb-6.17.3-libatomic.patch71
-rw-r--r--dev-libs/rocksdb/rocksdb-6.17.3.ebuild2
2 files changed, 72 insertions, 1 deletions
diff --git a/dev-libs/rocksdb/files/rocksdb-6.17.3-libatomic.patch b/dev-libs/rocksdb/files/rocksdb-6.17.3-libatomic.patch
new file mode 100644
index 000000000000..56cc674d09a4
--- /dev/null
+++ b/dev-libs/rocksdb/files/rocksdb-6.17.3-libatomic.patch
@@ -0,0 +1,71 @@
+Fixes check for atomics.
+
+The upstream currently does not have checks for atomics in v6.17.3.
+However, since v6.22.1, rocksdb includes checks similar/identical to
+files/rocksdb-6.14.6-libatomic.patch, which is superseded by this new patch.
+See: https://github.com/facebook/rocksdb/commit/47b424f4bd51078591e674ff936de5a270530ce2
+Once the upstream adopts new methods for checking, this patch may be removed after testing.
+
+https://bugs.gentoo.org/834855
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -289,6 +289,7 @@ else()
+ endif()
+
+ include(CheckCXXSourceCompiles)
++set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
+ if(NOT MSVC)
+ set(CMAKE_REQUIRED_FLAGS "-msse4.2 -mpclmul")
+ endif()
+@@ -305,7 +306,6 @@ int main() {
+ auto d = _mm_cvtsi128_si64(c);
+ }
+ " HAVE_SSE42)
+-unset(CMAKE_REQUIRED_FLAGS)
+ if(HAVE_SSE42)
+ add_definitions(-DHAVE_SSE42)
+ add_definitions(-DHAVE_PCLMUL)
+@@ -313,6 +313,37 @@ elseif(FORCE_SSE42)
+ message(FATAL_ERROR "FORCE_SSE42=ON but unable to compile with SSE4.2 enabled")
+ endif()
+
++# Check if -latomic is required or not
++if (NOT MSVC)
++ set(CMAKE_REQUIRED_FLAGS "--std=c++11")
++ set(ATOMIC_TEST_SOURCE "
++ #include <atomic>
++ std::atomic<int> x;
++ std::atomic<short> y;
++ std::atomic<char> z;
++ std::atomic<long long> w;
++ int main() {
++ ++z;
++ ++y;
++ ++w;
++ return ++x;
++ }")
++ CHECK_CXX_SOURCE_COMPILES("${ATOMIC_TEST_SOURCE}" BUILTIN_ATOMIC)
++ if (NOT BUILTIN_ATOMIC)
++ set(CMAKE_REQUIRED_LIBRARIES atomic)
++ CHECK_CXX_SOURCE_COMPILES("${ATOMIC_TEST_SOURCE}" ATOMICS_REQUIRE_LIBATOMIC)
++ unset(CMAKE_REQUIRED_LIBRARIES)
++ if (ATOMICS_REQUIRE_LIBATOMIC)
++ list(APPEND THIRDPARTY_LIBS atomic)
++ else()
++ message(FATAL_ERROR "Host compiler must support std::atomic!")
++ endif()
++ endif()
++endif()
++
++# Reset the required flags
++set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
++
+ CHECK_CXX_SOURCE_COMPILES("
+ #if defined(_MSC_VER) && !defined(__thread)
+ #define __thread __declspec(thread)
+@@ -1354,3 +1385,4 @@ option(WITH_EXAMPLES "build with examples" OFF)
+ if(WITH_EXAMPLES)
+ add_subdirectory(examples)
+ endif()
++
diff --git a/dev-libs/rocksdb/rocksdb-6.17.3.ebuild b/dev-libs/rocksdb/rocksdb-6.17.3.ebuild
index b01c64b2d2f8..7fc2dc3f43db 100644
--- a/dev-libs/rocksdb/rocksdb-6.17.3.ebuild
+++ b/dev-libs/rocksdb/rocksdb-6.17.3.ebuild
@@ -26,8 +26,8 @@ DEPEND="
RDEPEND="${DEPEND}"
PATCHES=(
- "${FILESDIR}"/${PN}-6.14.6-libatomic.patch
"${FILESDIR}"/${PN}-6.17.3-add_timer_for_riscv.patch
+ "${FILESDIR}"/${PN}-6.17.3-libatomic.patch
)
src_configure() {