-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
158 lines (127 loc) · 4.14 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
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
cmake_minimum_required(VERSION 3.26)
SET(IOCore_CMAKE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
# Additional paths to search for custom and third-party CMake modules
list(PREPEND CMAKE_MODULE_PATH ${IOCore_CMAKE_SOURCE_DIR}/CMake)
include(BuildProperties)
include(DefaultConfig)
project(IOCore
VERSION 0.2.25
LANGUAGES C CXX
# HOMEPAGE_URL <URL>
DESCRIPTION "A framework for application management, file IO, etc"
)
include(CPM)
if( NOT CMAKE_BUILD_TYPE )
SET( CMAKE_BUILD_TYPE Debug )
endif()
set(CMAKE_C_STANDARD 17)
set(CMAKE_CXX_STANDARD 20)
# Disable GNU compiler extensions
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_CXX_EXTENSIONS OFF)
if (UNIX AND NOT(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux"))
option(USE_BOOST_STACKTRACE "Use Boost::stacktrace for stack traces" OFF)
option(USE_EXECINFO_STACKTRACE "Use BSD/UNIX execinfo for stack traces" ON)
else()
option(USE_BOOST_STACKTRACE "Use Boost::stacktrace for stack traces" ON)
option(USE_EXECINFO_STACKTRACE "Use BSD/UNIX execinfo for stack traces" OFF)
endif()
# enable compile_commands.json generation for clangd
set(CMAKE_EXPORT_COMPILE_COMMANDS On)
# Initialize FetchContent
include(FetchContent)
# Initialize CHECK_INCLUDE_FILES
include(CheckIncludeFile)
# Initialize pkgconf
find_package(PkgConfig REQUIRED)
# Example: Find SDL2, SDL2_image, and SDL2_gfx using PkgConfig
# add IMPORTED_TARGET to enable fancy PkgConfig::SDL2 syntax
#pkg_check_modules(SDL2 REQUIRED IMPORTED_TARGET SDL2)
#pkg_check_modules(SDL2_IMAGE REQUIRED IMPORTED_TARGET SDL2_image)
#pkg_check_modules(SDL2_GFX REQUIRED IMPORTED_TARGET SDL2_gfx)
if (USE_EXECINFO_STACKTRACE AND (NOT USE_BOOST_STACKTRACE))
CHECK_INCLUDE_FILE("execinfo.h" HAVE_EXECINFO_H)
if (HAVE_EXECINFO_H)
add_definitions(-DHAVE_EXECINFO_H=1)
endif()
find_library(LIB_EXEC_INFO
NAMES execinfo # Specify the library name without the 'lib' prefix or file extension
HINTS /usr/lib /usr/local/lib # Optional hint for the library location
)
if (LIB_EXEC_INFO)
message(STATUS "Found libexecinfo: ${LIB_EXEC_INFO}")
set(STACKTRACE_DEP_LIBS ${LIB_EXEC_INFO})
endif()
elseif((NOT USE_EXECINFO_STACKTRACE) AND USE_BOOST_STACKTRACE)
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_STATIC_RUNTIME OFF) # Do not require static C++ runtime
set(Boost_USE_MULTITHREADED ON)
find_package(Boost 1.82.0 COMPONENTS system filesystem REQUIRED)
if (Boost_FOUND)
add_definitions(-DBOOST_STACKTRACER=1)
add_definitions(-DBOOST_STACKTRACE_USE_ADDR2LINE=1)
include_directories(${Boost_INCLUDE_DIRS})
endif()
endif()
CPMFindPackage(
NAME fmt
URL https://github.com/fmtlib/fmt/archive/refs/tags/10.2.1.zip
URL_HASH SHA256=d368f9c39a33a3aef800f5be372ec1df1c12ad57ada1f60adc62f24c0e348469
)
if (fmt_DIR)
list(APPEND CMAKE_MODULE_PATH ${fmt_DIR})
endif()
CPMFindPackage(NAME tomlplusplus
URL https://github.com/marzer/tomlplusplus/archive/refs/tags/v3.4.0.zip
URL_HASH SHA256=ad2a4cd786e25305d802e7490ea65a2531195e5834bf6b4fa5a323421fd81f9b
)
if (tomlplusplus_DIR)
list(APPEND CMAKE_MODULE_PATH ${tomlplusplus_DIR})
endif()
CPMFindPackage(NAME nlohmann_json
URL https://github.com/nlohmann/json/archive/refs/tags/v3.11.3.zip
URL_HASH SHA256=04022b05d806eb5ff73023c280b68697d12b93e1b7267a0b22a1a39ec7578069
)
if (nlohmann_json_DIR)
list(APPEND CMAKE_MODULE_PATH ${nlohmann_json_DIR})
endif()
if (BUILD_TESTING)
CPMFindPackage(NAME Catch2
GITHUB_REPOSITORY catchorg/Catch2
VERSION 3.4.0
OPTIONS
"CATCH_DEVELOPMENT_BUILD OFF"
"CATCH_BUILD_TESTING OFF"
)
CPMFindPackage(NAME FakeIt
GITHUB_REPOSITORY eranpeer/FakeIt
GIT_TAG 2.4.0
OPTIONS
"BUILD_TESTINGING OFF"
)
if (TARGET Catch2)
set_target_properties(Catch2 PROPERTIES
CXX_STANDARD 20
)
endif()
if (TARGET Catch2WithMain)
set_target_properties(Catch2WithMain PROPERTIES
CXX_STANDARD 20
)
endif()
if (Catch2_ADDED)
list(APPEND CMAKE_MODULE_PATH ${Catch2_SOURCE_DIR}/extras)
else()
if (Catch2_DIR)
list(APPEND CMAKE_MODULE_PATH ${Catch2_DIR})
endif()
endif()
endif()
# Set output directories for build targets
set_artifact_dir(${CMAKE_BINARY_DIR}/out)
# Add subdirectories
add_subdirectory(src)
if(BUILD_TESTING)
add_subdirectory(tests)
endif()
# vim: ts=4 sw=4 noet foldmethod=indent :