-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
117 lines (98 loc) · 3.17 KB
/
Copy pathCMakeLists.txt
File metadata and controls
117 lines (98 loc) · 3.17 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
cmake_minimum_required(VERSION 3.30...4.3)
project(
mb.util
DESCRIPTION "C++ utility library (header-only)"
LANGUAGES CXX
VERSION 1.4.0
)
option(
MB_UTIL_BUILD_TESTS
"Enable building tests and test infrastructure. Default: ${PROJECT_IS_TOP_LEVEL}. Values: { ON, OFF }."
${PROJECT_IS_TOP_LEVEL}
)
option(
MB_UTIL_BUILD_EXAMPLES
"Enable building examples. Default: ${PROJECT_IS_TOP_LEVEL}. Values: { ON, OFF }."
${PROJECT_IS_TOP_LEVEL}
)
option(
MB_UL_DISABLE_NAMESPACE_ALIAS
"Set to ON if you want the base namespace to be mb::ul instead of ul."
OFF
)
include(cmake/cmake-util.cmake)
list(PREPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/devenv/cmake")
if(MB_UTIL_BUILD_TESTS)
include(mb-devenv-ctest-root)
endif()
include(mb-devenv-defaults)
include(mb-devenv-cppcheck)
include(mb-devenv-install-library-config)
include(GNUInstallDirs)
mb_ul_include(gsl.cmake)
# From fetched https://github.com/devmarkusb/pre-commit (see fetchcontent-lockfile.json).
mb_pre_commit_setup_project()
add_subdirectory(src/string/sdks)
add_library(mb.util INTERFACE)
add_library(mb::util ALIAS mb.util)
add_subdirectory(include/mb/ul)
target_include_directories(
mb.util
SYSTEM
INTERFACE
"$<BUILD_INTERFACE:${GSL_SOURCE_DIR}/include>"
"$<BUILD_INTERFACE:${utfcpp_INCLUDE_DIRS}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
target_link_libraries(mb.util INTERFACE stdc++exp)
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND NOT ANDROID)
if(NOT MB_DEVENV_USING_LIBCPP)
target_link_libraries(mb.util INTERFACE stdc++exp)
endif()
# Clang's experimental invalidation analysis currently treats mutating an owning string/vector as invalidating the
# owner reference itself; suppress that false-positive class for this header-only target.
target_compile_options(mb.util INTERFACE -Wno-unsafe-buffer-usage)
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag(
"-Wno-lifetime-safety-invalidation"
MB_UTIL_HAS_LIFETIME_SAFETY_INVALIDATION_WARNING
)
if(MB_UTIL_HAS_LIFETIME_SAFETY_INVALIDATION_WARNING)
target_compile_options(
mb.util
INTERFACE -Wno-lifetime-safety-invalidation
)
endif()
endif()
mb_devenv_set_target_defaults(mb.util)
if(PROJECT_IS_TOP_LEVEL)
install(
DIRECTORY "${GSL_SOURCE_DIR}/include/"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
COMPONENT "mb.util"
)
install(
DIRECTORY "${utfcpp_INCLUDE_DIRS}/"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
COMPONENT "mb.util"
)
install(
FILES "${PROJECT_SOURCE_DIR}/cmake/cmake-util.cmake"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
COMPONENT "mb.util"
)
install(
DIRECTORY "${PROJECT_SOURCE_DIR}/cmake/cmake-util"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
USE_SOURCE_PERMISSIONS
COMPONENT "mb.util"
)
mb_devenv_install_library(mb.util)
endif()
if(MB_UTIL_BUILD_TESTS)
add_subdirectory(src)
endif()
if(MB_UTIL_BUILD_EXAMPLES)
add_subdirectory(examples)
endif()