-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
122 lines (96 loc) · 2.97 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
cmake_minimum_required(VERSION 3.21)
include(cmake/Version.cmake)
project(room-sketcher
VERSION ${VERSION_SHORT}
DESCRIPTION "Floor Plan Editor"
HOMEPAGE_URL "https://giraffe360.com"
LANGUAGES CXX C)
include(cmake/Options.cmake)
include(cmake/CompilationFlags.cmake)
include(cmake/SystemLink.cmake)
if(ENABLE_IPO)
include(cmake/InterproceduralOptimization.cmake)
enable_ipo()
endif()
include(cmake/Dependencies.cmake)
setup_dependencies()
add_library(project_warnings INTERFACE)
add_library(project_options INTERFACE)
include(cmake/CompilerWarnings.cmake)
set_project_warnings(project_warnings ${WARNINGS_AS_ERRORS} "" "" "")
if(ENABLE_USER_LINKER)
include(cmake/Linker.cmake)
configure_linker(project_options)
endif()
include(cmake/Sanitizers.cmake)
enable_sanitizers(project_options
${ENABLE_SANITIZER_ADDRESS}
${ENABLE_SANITIZER_LEAK}
${ENABLE_SANITIZER_UNDEFINED}
${ENABLE_SANITIZER_THREAD}
${ENABLE_SANITIZER_MEMORY})
if(ENABLE_HARDENING)
include(cmake/Hardening.cmake)
if(NOT SUPPORTS_UBSAN
OR ENABLE_SANITIZER_UNDEFINED
OR ENABLE_SANITIZER_ADDRESS
OR ENABLE_SANITIZER_THREAD
OR ENABLE_SANITIZER_LEAK)
set(ENABLE_UBSAN_MINIMAL_RUNTIME FALSE)
else()
set(ENABLE_UBSAN_MINIMAL_RUNTIME TRUE)
endif()
message("${ENABLE_HARDENING} ${ENABLE_UBSAN_MINIMAL_RUNTIME} ${ENABLE_SANITIZER_UNDEFINED}")
enable_hardening(project_options ON ${ENABLE_UBSAN_MINIMAL_RUNTIME})
endif()
if(ENABLE_PCH)
target_precompile_headers(
project_options
INTERFACE
<vector>
<string>
<utility>)
endif()
if(ENABLE_CACHE)
include(cmake/Cache.cmake)
enable_cache()
endif()
include(cmake/StaticAnalyzers.cmake)
if(ENABLE_CPPCHECK)
enable_cppcheck(${WARNINGS_AS_ERRORS} "")
endif()
if(ENABLE_CLANG_TIDY)
enable_clang_tidy(project_options ${WARNINGS_AS_ERRORS} "")
endif()
if(ENABLE_INCLUDE_WHAT_YOU_USE)
enable_include_what_you_use()
endif()
if(ENABLE_COVERAGE)
include(cmake/CodeCoverage.cmake)
enable_coverage(project_options)
endif()
target_compile_features(project_options INTERFACE cxx_std_${CMAKE_CXX_STANDARD})
add_library(rs::project_options ALIAS project_options)
add_library(rs::project_warnings ALIAS project_warnings)
add_subdirectory(src)
include(cmake/CPack.cmake)
if(COMPILE_TESTS)
enable_testing()
add_subdirectory(tests)
endif()
if(ENABLE_DOCS)
include(cmake/Doxygen.cmake)
enable_doxygen("")
endif()
message(STATUS "Version: ${PROJECT_VERSION}")
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
message(STATUS "Release cxx: ${CMAKE_CXX_FLAGS_RELEASE}")
message(STATUS "Debug cxx: ${CMAKE_CXX_FLAGS_DEBUG}")
message(STATUS " ")
if(BUILD_TYPE STREQUAL "release")
message(STATUS "Complete cxx: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}")
message(STATUS "Complete ld: ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
else()
message(STATUS "Complete cxx: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}")
message(STATUS "Complete ld: ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
endif()