-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCMakeLists.txt
138 lines (120 loc) · 3.49 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
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
132
133
134
135
136
137
138
cmake_minimum_required (VERSION 3.11)
project(Roo VERSION 0.2.0.0 LANGUAGES CXX)
################################################################################
## Dependencies ################################################################
find_package(Homa 0.1.3.0 REQUIRED)
find_package(PerfUtils REQUIRED)
################################################################################
## Target Definition ###########################################################
add_library(Roo
src/Debug.cc
src/Perf.cc
src/Roo.cc
src/RooPCImpl.cc
src/ServerTaskImpl.cc
src/SocketImpl.cc
src/StringUtil.cc
src/ThreadId.cc
)
add_library(Roo::Roo ALIAS Roo)
target_include_directories(Roo
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(Roo
PRIVATE
Homa::Homa
PerfUtils
)
target_compile_features(Roo
PUBLIC
cxx_std_11
)
target_compile_options(Roo
PRIVATE
-Wall
-Wextra
)
set_target_properties(Roo PROPERTIES
VERSION ${Roo_VERSION}
)
################################################################################
## Install & Export ############################################################
install(TARGETS Roo EXPORT RooTargets
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES DESTINATION include
)
install(
DIRECTORY
include/Roo
DESTINATION
include
)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/Roo/RooConfigVersion.cmake"
VERSION ${Roo_VERSION}
COMPATIBILITY SameMinorVersion
)
export(EXPORT RooTargets
NAMESPACE Roo::
FILE "${CMAKE_CURRENT_BINARY_DIR}/Roo/RooTargets.cmake"
)
install(EXPORT RooTargets
DESTINATION lib/cmake/Roo
NAMESPACE Roo::
FILE RooTargets.cmake
)
configure_file(cmake/RooConfig.cmake
"${CMAKE_CURRENT_BINARY_DIR}/Roo/RooConfig.cmake"
COPYONLY
)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/Roo/RooConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/Roo/RooConfigVersion.cmake"
DESTINATION lib/cmake/Roo
)
################################################################################
## Unit Tests ################################################################
include(FetchContent)
## Google Test #################################################################
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-1.10.0
)
FetchContent_GetProperties(googletest)
if(NOT googletest_POPULATED)
FetchContent_Populate(googletest)
add_subdirectory(
${googletest_SOURCE_DIR}
${googletest_BINARY_DIR}
EXCLUDE_FROM_ALL
)
endif()
include(GoogleTest)
enable_testing()
add_executable(unit_test
src/DebugTest.cc
src/IntrusiveTest.cc
src/ObjectPoolTest.cc
src/RooTest.cc
src/RooPCImplTest.cc
src/ServerTaskImplTest.cc
src/SocketImplTest.cc
src/SpinLockTest.cc
src/StringUtilTest.cc
src/ThreadIdTest.cc
src/TimeoutTest.cc
)
target_link_libraries(unit_test Roo PerfUtils gmock_main)
# -fno-access-control allows access to private members for testing
target_compile_options(unit_test PRIVATE -fno-access-control)
gtest_discover_tests(unit_test)
################################################################################
## Additional Tests ##########################################################
add_subdirectory(test)