-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
121 lines (105 loc) · 4.81 KB
/
CMakeLists.txt
File metadata and controls
121 lines (105 loc) · 4.81 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
cmake_minimum_required(VERSION 3.27)
set(PRIVATE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include(${PRIVATE_MODULE_PATH}/utils.cmake)
respond_extract_version()
#-------------------------------------------------------------------------------
# Compiler config
#-------------------------------------------------------------------------------
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#-------------------------------------------------------------------------------
# Project Setup
#-------------------------------------------------------------------------------
project(respond VERSION ${RESPOND_VERSION} LANGUAGES CXX)
message(STATUS "Build respond: ${RESPOND_VERSION}")
#-------------------------------------------------------------------------------
# Make all targets build to top level folders in build directory
#-------------------------------------------------------------------------------
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
#-------------------------------------------------------------------------------
# Set default build to release
#-------------------------------------------------------------------------------
# This is a standard recipe for setting a default build type
set(_default_build_type "Release")
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to '${_default_build_type}' as none was specified.")
set(CMAKE_BUILD_TYPE
"${_default_build_type}"
CACHE STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release")
endif()
#-------------------------------------------------------------------------------
# Windows CXX Extensions
#-------------------------------------------------------------------------------
set(CMAKE_CXX_EXTENSIONS OFF)
if(CMAKE_SYSTEM_NAME MATCHES "CYGWIN" OR CMAKE_SYSTEM_NAME MATCHES "MSYS" OR CMAKE_SYSTEM_NAME MATCHES "MINGW")
set(CMAKE_CXX_EXTENSIONS ON)
endif()
#-------------------------------------------------------------------------------
# Set RESPOND_MASTER_PROJECT to ON if we are building respond directly
#-------------------------------------------------------------------------------
if(NOT DEFINED RESPOND_MASTER_PROJECT)
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
set(RESPOND_MASTER_PROJECT ON)
else()
set(RESPOND_MASTER_PROJECT OFF)
endif()
endif()
#-------------------------------------------------------------------------------
# Set all default options
#-------------------------------------------------------------------------------
include(${PRIVATE_MODULE_PATH}/options.cmake)
#-------------------------------------------------------------------------------
# Set position independent code
#-------------------------------------------------------------------------------
if(RESPOND_BUILD_PIC)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif()
#-------------------------------------------------------------------------------
# Building the Library
#-------------------------------------------------------------------------------
add_library(respond_model)
add_library(respond::respond_model ALIAS respond_model)
file(GLOB_RECURSE RESPOND_HEADERS include/respond/*.hpp)
file(GLOB RESPOND_INTERNAL_HEADERS CONFIGURE_DEPENDS src/internals/*.hpp)
file(GLOB RESPOND_SOURCE_FILES CONFIGURE_DEPENDS src/*.cpp)
target_sources(respond_model
PRIVATE
${RESPOND_INTERNAL_HEADERS}
${RESPOND_SOURCE_FILES}
PUBLIC
FILE_SET HEADERS
BASE_DIRS
include
FILES
${RESPOND_HEADERS}
)
#-------------------------------------------------------------------------------
# Linking Libraries
#-------------------------------------------------------------------------------
include(${PRIVATE_MODULE_PATH}/MakeDependenciesAvailable.cmake)
set(private_deps spdlog::spdlog)
if (RESPOND_CALCULATE_COVERAGE)
list(APPEND private_deps gcov)
endif()
target_link_libraries(respond_model
PUBLIC
Eigen3::Eigen
PRIVATE
${private_deps}
)
#-------------------------------------------------------------------------------
# Setting library details
#-------------------------------------------------------------------------------
set_target_properties(respond_model PROPERTIES VERSION ${RESPOND_VERSION} SOVERSION ${RESPOND_VERSION_MAJOR}.${RESPOND_VERSION_MINOR})
include(${PRIVATE_MODULE_PATH}/BuildBinaries.cmake)
#-------------------------------------------------------------------------------
# Install
#-------------------------------------------------------------------------------
include(GNUInstallDirs)
if(RESPOND_INSTALL)
include(${PRIVATE_MODULE_PATH}/InstallRespond.cmake)
endif()