-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
188 lines (142 loc) · 4.89 KB
/
CMakeLists.txt
File metadata and controls
188 lines (142 loc) · 4.89 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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# Top level CMake project
cmake_minimum_required(VERSION 3.15)
project(libsqlite LANGUAGES C CXX VERSION 1.0.0)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED OFF)
# Enforce out-of-source build, fail otherwise
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
# Make the default build type as Debug in single-configuration generators
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type" FORCE)
endif()
# Commonly used inc/lib/src locations by default
set(_opt /opt)
set(_opt_MP ${_opt}/MP)
set(_opt_MP_ext ${_opt_MP}/ext)
set(_opt_local ${_opt}/local)
# Project source directory
set(PrjSrc ${CMAKE_SOURCE_DIR}/src)
# Platform defaults and settings
message(STATUS "CMAKE_HOST_SYSTEM_NAME: ${CMAKE_HOST_SYSTEM_NAME}")
message(STATUS "CMAKE_HOST_SYSTEM_VERSION: ${CMAKE_HOST_SYSTEM_VERSION}")
if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux")
message(STATUS "Linux detected.")
if(${CMAKE_HOST_SYSTEM_VERSION} MATCHES "WSL")
#TODO
else()
set(GTest_DIR ${_opt_local}/lib/cmake/GTest)
set(absl_DIR ${_opt_local}/lib/cmake/absl)
endif()
include_directories(${_opt_local}/include)
link_directories(${_opt_local}/lib)
elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows")
message(STATUS "Windows detected.")
# Override default locations
set(_opt C:/opt)
set(_opt_MP ${_opt}/MP)
set(_opt_MP_ext ${_opt_MP}/ext)
# Provide hints to package locations
set(GTest_DIR ${_opt_local}/gtest/lib/cmake/GTest)
set(absl_DIR ${_opt_local}/abseil/lib/cmake/absl)
#gperftools
#benchmark
elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin")
message(FATAL_ERROR "MacOS is not supported yet")
else()
message(WARNING "Unknown platform")
endif() # Platform settings
# Compiler settings and defaults:
message(STATUS "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}")
message(STATUS "CMAKE_CXX_COMPILER_VERSION: ${CMAKE_CXX_COMPILER_VERSION}")
message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
# Identify compiler:
# https://stackoverflow.com/questions/10046114/in-cmake-how-can-i-test-if-the-compiler-is-clang
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# using Gcc
# lots of warnings and all warnings as errors
#add_compile_options(-Wall -Wextra -pedantic -Werror)
#
# Add following for lttng tracing:
#add_compile_options(-finstrument-functions)
#
# Add following for coverage support
#add_compile_options(-O0 --coverage)
#add_link_options(--coverage)
#
# gperftools support (Only on Linux)
#link_libraries(-lprofiler -ltcmalloc) #Doesn't work why?
#TODO: Inestigate later and install
#link_libraries(-ltcmalloc_and_profiler)
# HEAPCHECK=normal ./base_test
# CPUPROFILE=tst.prof ./base_test
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
# using Visual Studio C++
# warning level 4 and all warnings as errors
#add_compile_options(/W4 /WX)
# Concurrent compile support (maybe /FS also?)
add_compile_options(/MP)
set(pdb_out ${CMAKE_CURRENT_BINARY_DIR}/pdb)
set(CMAKE_PDB_OUTPUT_DIRECTORY ${pdb_out})
set(CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY ${pdb_out})
# end of MSVC
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# using Clang/LLVM
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
# using Intel C++
else()
message(WARNING "Unknown compiler!")
endif()
# Adjust CMake Module Path list
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmk")
#
# Needed packages
#
# Google Libraries
find_package(GTest CONFIG REQUIRED) # Gtest/mock
find_package(absl CONFIG REQUIRED) # Abseil
#-find_package(benchmark CONFIG REQUIRED) # Benchmark
# Third party libraries
#-find_package(TBB CONFIG REQUIRED) # Threading Building Blocks
#-find_package(CLI11 CONFIG REQUIRED) # CLI11
# SpdLog
#-find_package(spdlog CONFIG REQUIRED)
# Doxygen for documentation
find_package(Doxygen REQUIRED dot)
if ( DOXYGEN_FOUND )
set( DOXYGEN_OUTPUT_DIRECTORY doc )
set( DOXYGEN_COLLABORATION_GRAPH YES )
set( DOXYGEN_EXTRACT_ALL YES )
set( DOXYGEN_CLASS_DIAGRAMS YES )
set( DOXYGEN_HIDE_UNDOC_RELATIONS NO )
set( DOXYGEN_HAVE_DOT YES )
set( DOXYGEN_CLASS_GRAPH YES )
set( DOXYGEN_CALL_GRAPH YES )
set( DOXYGEN_CALLER_GRAPH YES )
set( DOXYGEN_COLLABORATION_GRAPH YES )
set( DOXYGEN_BUILTIN_STL_SUPPORT YES )
set( DOXYGEN_EXTRACT_PRIVATE YES )
set( DOXYGEN_EXTRACT_PACKAGE YES )
set( DOXYGEN_EXTRACT_STATIC YES )
set( DOXYGEN_EXTRACT_LOCALMETHODS YES )
set( DOXYGEN_UML_LOOK YES )
set( DOXYGEN_UML_LIMIT_NUM_FIELDS 50 )
set( DOXYGEN_TEMPLATE_RELATIONS YES )
set( DOXYGEN_DOT_GRAPH_MAX_NODES 100 )
set( DOXYGEN_MAX_DOT_GRAPH_DEPTH 0 )
set( DOXYGEN_DOT_TRANSPARENT YES )
#-doxygen_add_docs( doxygen ${RPP_PROJECT_SOURCE_DIR} )
doxygen_add_docs(
doxygen
${PrjSrc}
COMMENT "Generate html pages"
)
else()
message( "Doxygen need to be installed to generate the doxygen documentation" )
endif()
# Define sources and targets
add_subdirectory(src)
# Enable testing for current directory and below.
enable_testing()
# Define test targets
add_subdirectory(tst)