-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
156 lines (129 loc) · 5.13 KB
/
CMakeLists.txt
File metadata and controls
156 lines (129 loc) · 5.13 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
cmake_minimum_required(VERSION 3.12)
set(SHORT_PROJECT_NAME "msgpack_rpc")
set(FULL_PROJECT_NAME "cpp-msgpack-rpc")
string(TOUPPER ${SHORT_PROJECT_NAME} UPPER_PROJECT_NAME)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(ParseVersion)
parse_version(
${CMAKE_CURRENT_SOURCE_DIR}/include/${SHORT_PROJECT_NAME}/version.h
${UPPER_PROJECT_NAME})
project(
${SHORT_PROJECT_NAME}
VERSION ${${UPPER_PROJECT_NAME}_VERSION}
DESCRIPTION "An RPC library implementing MessagePack RPC."
LANGUAGES CXX)
message(STATUS "${FULL_PROJECT_NAME} version ${PROJECT_VERSION}")
message(STATUS "build type: ${CMAKE_BUILD_TYPE}")
string(TOUPPER ${PROJECT_NAME} UPPER_PROJECT_NAME)
set(BUILDNAME
"${CMAKE_HOST_SYSTEM_NAME}-${CMAKE_CXX_COMPILER_ID}-${CMAKE_CXX_COMPILER_VERSION}-${CMAKE_BUILD_TYPE}"
)
include(CTest)
option(${UPPER_PROJECT_NAME}_BUILD_DOC
"build documentation of ${FULL_PROJECT_NAME}" OFF)
option(${UPPER_PROJECT_NAME}_BUILD_EXAMPLES
"build examples of ${FULL_PROJECT_NAME}" OFF)
option(${UPPER_PROJECT_NAME}_TESTING "enable tests of ${FULL_PROJECT_NAME}" OFF)
option(${UPPER_PROJECT_NAME}_ENABLE_INSTALL
"enable CMake target to install ${FULL_PROJECT_NAME}" ON)
option(${UPPER_PROJECT_NAME}_ENABLE_PROFILING
"enable build of executables for profiling of ${FULL_PROJECT_NAME}" OFF)
set(BUILD_SHARED_LIBS
ON
CACHE BOOL "Build shared libraries.")
set(CMAKE_CXX_STANDARD
"17"
CACHE STRING "C++ standard")
include(GNUInstallDirs)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY $<1:${CMAKE_BINARY_DIR}/lib>)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY $<1:${CMAKE_BINARY_DIR}/lib>)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $<1:${CMAKE_BINARY_DIR}/bin>)
find_package(asio REQUIRED)
find_package(msgpack-cxx REQUIRED)
find_package(spdlog REQUIRED)
find_package(fmt REQUIRED)
find_package(re2 REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_check_modules(tomlplusplus REQUIRED IMPORTED_TARGET tomlplusplus)
add_library(tomlplusplus::tomlplusplus ALIAS PkgConfig::tomlplusplus)
find_package(Threads REQUIRED)
if(${UPPER_PROJECT_NAME}_TESTING)
find_package(Catch2 REQUIRED)
find_package(trompeloeil REQUIRED)
find_package(lyra REQUIRED)
find_package(cpp-stat-bench REQUIRED)
# ApprovalTests.
find_path(APPROVAL_TESTS_CPP_INCLUDE_DIRS "ApprovalTests.hpp")
add_library(ApprovalTests_ApprovalTests INTERFACE)
target_include_directories(ApprovalTests_ApprovalTests
INTERFACE ${APPROVAL_TESTS_CPP_INCLUDE_DIRS})
add_library(ApprovalTests::ApprovalTests ALIAS ApprovalTests_ApprovalTests)
endif()
if(${UPPER_PROJECT_NAME}_ENABLE_PROFILING)
# Find libprofiler
find_library(
LIBPROFILER_LIBRARY
NAMES libprofiler.so
HINTS /usr/lib /usr/local/lib REQUIRED)
message(STATUS "libprofiler found at ${LIBPROFILER_LIBRARY}")
add_library(gperftools::libprofiler SHARED IMPORTED)
set_target_properties(gperftools::libprofiler
PROPERTIES IMPORTED_LOCATION ${LIBPROFILER_LIBRARY})
# -fno-omit-frame-pointer is required for better profiling results.
target_compile_options(gperftools::libprofiler
INTERFACE -fno-omit-frame-pointer)
endif()
set(CMAKE_EXPORT_COMPILE_COMMANDS
ON
CACHE BOOL "export compile commands" FORCE)
include(CppWarningFlags)
include(ConfigureSanitizer)
include(ConfigureCcache)
include(poetry)
set(${UPPER_PROJECT_NAME}_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(${UPPER_PROJECT_NAME}_GENERATED_HEADER_DIR ${CMAKE_BINARY_DIR}/include)
add_subdirectory(src)
if(${UPPER_PROJECT_NAME}_BUILD_DOC)
add_subdirectory(doc)
endif()
if(${UPPER_PROJECT_NAME}_BUILD_EXAMPLES)
add_subdirectory(examples)
endif()
if(${UPPER_PROJECT_NAME}_TESTING)
add_subdirectory(tests)
endif()
if(${UPPER_PROJECT_NAME}_ENABLE_PROFILING)
add_subdirectory(profiling)
endif()
if(${UPPER_PROJECT_NAME}_ENABLE_INSTALL)
install(
TARGETS ${SHORT_PROJECT_NAME}
EXPORT ${FULL_PROJECT_NAME}-targets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
FRAMEWORK DESTINATION ${CMAKE_INSTALL_PREFIX})
install(
DIRECTORY ${${UPPER_PROJECT_NAME}_SOURCE_DIR}/include/msgpack_rpc
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING
PATTERN "*.h*")
install(
DIRECTORY ${${UPPER_PROJECT_NAME}_GENERATED_HEADER_DIR}/${PROJECT_NAME}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING
PATTERN "*.h*")
install(
EXPORT ${FULL_PROJECT_NAME}-targets
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${FULL_PROJECT_NAME}
NAMESPACE cpp_msgpack_rpc::)
include(CMakePackageConfigHelpers)
configure_package_config_file(
cmake/${FULL_PROJECT_NAME}-config.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/${FULL_PROJECT_NAME}-config.cmake"
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${FULL_PROJECT_NAME}"
)
install(
FILES "${CMAKE_CURRENT_BINARY_DIR}/${FULL_PROJECT_NAME}-config.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${FULL_PROJECT_NAME}")
endif()