summaryrefslogtreecommitdiff
path: root/dev-libs/rocksdb/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2022-03-20 00:40:44 +0000
committerV3n3RiX <venerix@koprulu.sector>2022-03-20 00:40:44 +0000
commit4cbcc855382a06088e2f016f62cafdbcb7e40665 (patch)
tree356496503d52354aa6d9f2d36126302fed5f3a73 /dev-libs/rocksdb/files
parentfcc5224904648a8e6eb528d7603154160a20022f (diff)
gentoo resync : 20.03.2022
Diffstat (limited to 'dev-libs/rocksdb/files')
-rw-r--r--dev-libs/rocksdb/files/rocksdb-6.17.3-add_timer_for_riscv.patch40
-rw-r--r--dev-libs/rocksdb/files/rocksdb-6.17.3-libatomic.patch71
2 files changed, 111 insertions, 0 deletions
diff --git a/dev-libs/rocksdb/files/rocksdb-6.17.3-add_timer_for_riscv.patch b/dev-libs/rocksdb/files/rocksdb-6.17.3-add_timer_for_riscv.patch
new file mode 100644
index 000000000000..b98cc9dc5fd6
--- /dev/null
+++ b/dev-libs/rocksdb/files/rocksdb-6.17.3-add_timer_for_riscv.patch
@@ -0,0 +1,40 @@
+Add timer for riscv.
+Upstream PR status: https://github.com/facebook/rocksdb/pull/9215
+This PR hasn't been merged into the main branch.
+https://bugs.gentoo.org/834855
+
+--- a/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h
++++ b/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h
+@@ -101,7 +101,7 @@ int toku_clock_gettime(clockid_t clk_id, struct timespec *ts) __attribute__((__v
+ typedef uint64_t tokutime_t; // Time type used in by tokutek timers.
+
+ #if 0
+-// The value of tokutime_t is not specified here.
++// The value of tokutime_t is not specified here.
+ // It might be microseconds since 1/1/1970 (if gettimeofday() is
+ // used), or clock cycles since boot (if rdtsc is used). Or something
+ // else.
+@@ -133,6 +133,23 @@ static inline tokutime_t toku_time_now(void) {
+ return result;
+ #elif defined(__powerpc__)
+ return __ppc_get_timebase();
++#elif defined(__riscv) && __riscv_xlen == 32
++ uint32_t cycles_lo, cycles_hi0, cycles_hi1;
++ // Implemented in assembly because Clang insisted on branching.
++ asm volatile(
++ "rdcycleh %0\n"
++ "rdcycle %1\n"
++ "rdcycleh %2\n"
++ "sub %0, %0, %2\n"
++ "seqz %0, %0\n"
++ "sub %0, zero, %0\n"
++ "and %1, %1, %0\n"
++ : "=r"(cycles_hi0), "=r"(cycles_lo), "=r"(cycles_hi1));
++ return (static_cast<uint64_t>(cycles_hi1) << 32) | cycles_lo;
++#elif defined(__riscv) && __riscv_xlen == 64
++ uint64_t cycles;
++ asm volatile("rdcycle %0" : "=r"(cycles));
++ return cycles;
+ #else
+ #error No timer implementation for this platform
+ #endif
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()
++