blob: 56cc674d09a418dd41edf436eb660b41bd388d66 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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()
+
|