diff options
author | V3n3RiX <venerix@koprulu.sector> | 2022-03-20 00:40:44 +0000 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2022-03-20 00:40:44 +0000 |
commit | 4cbcc855382a06088e2f016f62cafdbcb7e40665 (patch) | |
tree | 356496503d52354aa6d9f2d36126302fed5f3a73 /dev-libs/rocksdb/files | |
parent | fcc5224904648a8e6eb528d7603154160a20022f (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.patch | 40 | ||||
-rw-r--r-- | dev-libs/rocksdb/files/rocksdb-6.17.3-libatomic.patch | 71 |
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() ++ |