-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCMakeLists.txt
45 lines (40 loc) · 1.4 KB
/
CMakeLists.txt
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
CMAKE_MINIMUM_REQUIRED (VERSION 3.1...3.5)
PROJECT (atomic_sync
LANGUAGES CXX
DESCRIPTION "memory transaction friendly std::atomic based locks")
IF (CMAKE_VERSION VERSION_GREATER_EQUAL 3.12)
SET (CMAKE_CXX_STANDARD 20)
ELSE()
SET (CMAKE_CXX_STANDARD 11)
ENDIF()
IF (CMAKE_CXX_STANDARD GREATER_EQUAL 20 AND
CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# On Debian GNU/Linux, Clang only supports std::atomic::wait()
# if it is defined in the GCC libstdc++ headers, that is,
# if libstdc++-11-dev or g++-11 or a later version is installed.
INCLUDE (CMakePushCheckState)
INCLUDE (CheckCXXSourceCompiles)
CMAKE_PUSH_CHECK_STATE(RESET)
IF (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0)
SET(CMAKE_REQUIRED_FLAGS "-std=c++2a")
ELSE()
SET(CMAKE_REQUIRED_FLAGS "-std=c++20")
ENDIF()
CHECK_CXX_SOURCE_COMPILES("
#include <atomic>
std::atomic<int> a; int main() { a.wait(0); return 0; }"
HAVE_ATOMIC_WAIT)
CMAKE_POP_CHECK_STATE()
IF (NOT HAVE_ATOMIC_WAIT)
SET (CMAKE_CXX_STANDARD 11)
ENDIF()
ELSE()
ENDIF()
ADD_SUBDIRECTORY (atomic_sync)
ADD_SUBDIRECTORY (examples)
ADD_SUBDIRECTORY (test)
ENABLE_TESTING()
ADD_TEST (atomic_sync ${CMAKE_BINARY_DIR}/test/test_atomic_sync)
ADD_TEST (atomic_condition ${CMAKE_BINARY_DIR}/test/test_atomic_condition)
ADD_TEST (mutex ${CMAKE_BINARY_DIR}/test/test_mutex 4 10000)
ADD_TEST (native_mutex ${CMAKE_BINARY_DIR}/test/test_native_mutex 4 10000)