Repository navigation
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
131 lines (111 loc) · 3.8 KB
/
Copy pathCMakeLists.txt
File metadata and controls
131 lines (111 loc) · 3.8 KB
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
cmake_minimum_required(VERSION 3.21...3.30)
project(SPSCQueue
VERSION 1.1
HOMEPAGE_URL "https://github.com/rigtorp/SPSCQueue"
LANGUAGES CXX
)
# -----------------------------------------------------------------------------
# Library Target
# -----------------------------------------------------------------------------
add_library(${PROJECT_NAME} INTERFACE)
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_11)
target_include_directories(${PROJECT_NAME} INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
# -----------------------------------------------------------------------------
# Tests, Examples & Benchmarks (Top-Level Only)
# -----------------------------------------------------------------------------
include(CTest)
if(PROJECT_IS_TOP_LEVEL AND BUILD_TESTING)
option(${PROJECT_NAME}_WARNINGS_AS_ERRORS "Treat compiler warnings as errors" OFF)
add_library(${PROJECT_NAME}_warnings INTERFACE)
if(MSVC)
target_compile_options(${PROJECT_NAME}_warnings INTERFACE
/permissive-
/W4
/wd4324 # structure was padded due to alignment specifier
)
if(${PROJECT_NAME}_WARNINGS_AS_ERRORS)
target_compile_options(${PROJECT_NAME}_warnings INTERFACE /WX)
endif()
else()
target_compile_options(${PROJECT_NAME}_warnings INTERFACE
-Wall
-Wextra
-Wpedantic
-Wno-c++17-extensions
)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 12.0)
target_compile_options(${PROJECT_NAME}_warnings INTERFACE -Wno-interference-size)
endif()
if(${PROJECT_NAME}_WARNINGS_AS_ERRORS)
target_compile_options(${PROJECT_NAME}_warnings INTERFACE -Werror)
endif()
endif()
find_package(Threads REQUIRED)
if(UNIX AND NOT APPLE)
add_executable(SPSCQueueBenchmark src/SPSCQueueBenchmark.cpp)
target_link_libraries(SPSCQueueBenchmark PRIVATE
${PROJECT_NAME}
${PROJECT_NAME}_warnings
Threads::Threads
)
add_executable(SPSCQueueExampleHugepages src/SPSCQueueExampleHugepages.cpp)
target_link_libraries(SPSCQueueExampleHugepages PRIVATE
${PROJECT_NAME}
${PROJECT_NAME}_warnings
Threads::Threads
)
target_compile_features(SPSCQueueExampleHugepages PRIVATE cxx_std_17)
endif()
add_executable(SPSCQueueExample src/SPSCQueueExample.cpp)
target_link_libraries(SPSCQueueExample PRIVATE
${PROJECT_NAME}
${PROJECT_NAME}_warnings
Threads::Threads
)
add_executable(SPSCQueueTest src/SPSCQueueTest.cpp)
target_link_libraries(SPSCQueueTest PRIVATE
${PROJECT_NAME}
${PROJECT_NAME}_warnings
Threads::Threads
)
add_test(NAME SPSCQueueTest COMMAND SPSCQueueTest)
endif()
# -----------------------------------------------------------------------------
# Installation & Package Export
# -----------------------------------------------------------------------------
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
export(
TARGETS ${PROJECT_NAME}
NAMESPACE ${PROJECT_NAME}::
FILE "${PROJECT_NAME}Config.cmake"
)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
COMPATIBILITY SameMajorVersion
ARCH_INDEPENDENT
)
if(PROJECT_IS_TOP_LEVEL)
install(
DIRECTORY include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(
TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}Config
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(
EXPORT ${PROJECT_NAME}Config
NAMESPACE ${PROJECT_NAME}::
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
)
endif()