-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontent.cmake
More file actions
296 lines (275 loc) · 8.59 KB
/
Copy pathcontent.cmake
File metadata and controls
296 lines (275 loc) · 8.59 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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
# for clap-wrapper
if(APPLE)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15")
enable_language(OBJC OBJCXX)
endif()
# with this flag we can use set() to set options for the following packages
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
# needed for any dynamic libs on linux
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(CXX_VISIBILITY_PRESET "hidden")
include(FetchContent)
function(target_enable_warnings target_name)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
target_compile_options(${target_name} PRIVATE -Wall -Wextra -Wno-unused-parameter -Wno-missing-braces -Wno-nested-anon-types -Wno-gnu-anonymous-struct -Wno-c++98-compat -Wno-c++98-compat-pedantic)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(${target_name} PRIVATE -Wall -Wextra -Wno-unused-parameter -Wno-missing-braces)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
target_compile_options(${target_name} PRIVATE /W3)
target_compile_definitions(${target_name} PRIVATE -D_CRT_SECURE_NO_WARNINGS)
endif()
endfunction()
function(target_disable_warnings target_name)
get_target_property(include_dirs ${target_name} INTERFACE_INCLUDE_DIRECTORIES)
set_target_properties(${target_name} PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${include_dirs}")
endfunction()
function(target_enable_asan target_name)
# https://clang.llvm.org/docs/AddressSanitizer.html
# force off - this flag breaks under asan
set(CORRADE_CPU_USE_IFUNC OFF CACHE BOOL "" FORCE)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
target_compile_options(${target_name} PRIVATE -O1 -g -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls)
target_link_options(${target_name} PRIVATE -fsanitize=address -shared-libasan)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
target_compile_options(${target_name} PRIVATE /fsanitize=address)
target_link_options(${target_name} PRIVATE /DEBUG)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(${target_name} PRIVATE -O1 -g -fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls)
target_link_options(${target_name} PRIVATE -fsanitize=address)
else ()
message(FATAL_ERROR "ASAN enabled but not supported on current compiler")
endif()
message(STATUS "AddressSanitizer enabled")
endfunction()
function(target_enable_msan target_name)
# https://clang.llvm.org/docs/MemorySanitizer.html
if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
message(FATAL_ERROR "MemorySanitizer enabled, so we need to use clang.")
endif()
target_compile_options(${target_name} PRIVATE -O1 -g -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -fno-optimize-sibling-calls)
target_link_options(${target_name} PRIVATE -fsanitize=memory)
set(CORRADE_CPU_USE_IFUNC OFF CACHE BOOL "" FORCE)
message(STATUS "MemorySanitizer enabled")
endfunction()
function(target_enable_tsan target_name)
# https://clang.llvm.org/docs/ThreadSanitizer.html
if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
message(FATAL_ERROR "ThreadSanitizer enabled, so we need to use clang.")
endif()
target_compile_options(${target_name} PRIVATE -O1 -g -fsanitize=thread)
target_link_options(${target_name} PRIVATE -fsanitize=thread)
set(CORRADE_CPU_USE_IFUNC OFF CACHE BOOL "" FORCE)
message(STATUS "ThreadSanitizer enabled")
endfunction()
function(enable_fast_math)
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
add_compile_options("/fp:fast")
else()
add_compile_options("-ffast-math" "-fno-finite-math-only" "-fsigned-zeros" "-fno-associative-math")
endif()
endfunction()
# local
set(KITSBLIPS_DIR ${CMAKE_CURRENT_LIST_DIR})
FetchContent_Declare(
KitDSP
SOURCE_DIR ${KITSBLIPS_DIR}/kitdsp
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
KitDSP-GPL
SOURCE_DIR ${KITSBLIPS_DIR}/kitdsp-gpl
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
KitGui
SOURCE_DIR ${KITSBLIPS_DIR}/kitgui
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
clapeze
SOURCE_DIR ${KITSBLIPS_DIR}/clapeze
EXCLUDE_FROM_ALL
)
# TODO: switch to FetchContent?
set(IMGUI_DIR ${CMAKE_CURRENT_LIST_DIR}/sdk/imgui)
set(IMPLOT_DIR ${CMAKE_CURRENT_LIST_DIR}/sdk/implot)
set(PUGL_DIR ${CMAKE_CURRENT_LIST_DIR}/sdk/pugl)
# core
FetchContent_Declare(
fmt
GIT_REPOSITORY https://github.com/fmtlib/fmt
GIT_TAG 11.2.0
SYSTEM
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
etl
GIT_REPOSITORY https://github.com/ETLCPP/etl
GIT_TAG 20.44.2
SYSTEM
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
clap
GIT_REPOSITORY https://github.com/free-audio/clap.git
GIT_TAG 1.2.7
SYSTEM
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
clap-wrapper
GIT_REPOSITORY https://github.com/alloyed/clap-wrapper.git
GIT_TAG 4f2ed4bde044b149cf175f372101b039f6eaba80
SYSTEM
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
miniz
GIT_REPOSITORY https://github.com/richgel999/miniz.git
GIT_TAG 3.1.0
SYSTEM
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
tomlplusplus
GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git
GIT_TAG v3.4.0
SYSTEM
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
daisy
GIT_REPOSITORY https://github.com/alloyed/libDaisy.git
GIT_TAG kitdsp
EXCLUDE_FROM_ALL
)
# gfx
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
set(SDL_SHARED OFF)
set(SDL_STATIC ON)
else()
set(SDL_SHARED ON)
set(SDL_STATIC OFF)
endif()
FetchContent_Declare(
SDL3
GIT_REPOSITORY https://github.com/libsdl-org/SDL.git
GIT_TAG release-3.4.0
SYSTEM
EXCLUDE_FROM_ALL
FIND_PACKAGE_ARGS
)
set(NFD_PORTAL ON)
FetchContent_Declare(
nfd
GIT_REPOSITORY https://github.com/btzy/nativefiledialog-extended.git
GIT_TAG v1.3.0
SYSTEM
EXCLUDE_FROM_ALL
FIND_PACKAGE_ARGS
)
set(BASISU_STATIC ON)
set(BASISU_EXAMPLES OFF)
set(BASISU_ZSTD OFF)
add_definitions(
# unused runtime formats
-DBASISD_SUPPORT_PVRTC1=0
-DBASISD_SUPPORT_PVRTC2=0
-DBASISD_SUPPORT_FXT1=0
-DBASISD_SUPPORT_ATC=0
-DBASISD_SUPPORT_DXT1=0
-DBASISD_SUPPORT_ETC2_EAC_RG11=1
-DBASISD_SUPPORT_ETC2_EAC_A8=1
)
set(CORRADE_BUILD_STATIC ON)
set(MAGNUM_BUILD_STATIC ON)
set(MAGNUM_BUILD_PLUGINS_STATIC ON)
set(MAGNUM_WITH_IMGUIINTEGRATION ON)
# opting into images, scenes, fonts
set(MAGNUM_WITH_ANYIMAGEIMPORTER ON)
set(MAGNUM_WITH_ANYSCENEIMPORTER ON)
set(MAGNUM_WITH_MAGNUMFONT ON)
# specific dependencies for above
set(MAGNUM_WITH_STBIMAGEIMPORTER ON)
set(MAGNUM_WITH_STBTRUETYPEFONT ON)
set(MAGNUM_WITH_GLTFIMPORTER ON)
set(MAGNUM_WITH_KTXIMPORTER ON)
set(MAGNUM_WITH_BASISIMPORTER ON)
# opengl
set(MAGNUM_WITH_GL ON)
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
set(MAGNUM_WITH_WGLCONTEXT ON)
set(MAGNUM_PLATFORMGL Magnum::WglContext)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(MAGNUM_WITH_CGLCONTEXT ON)
set(MAGNUM_PLATFORMGL Magnum::CglContext)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(MAGNUM_WITH_EGLCONTEXT ON)
set(MAGNUM_PLATFORMGL Magnum::EglContext)
endif()
FetchContent_Declare(
corrade
GIT_REPOSITORY https://github.com/mosra/corrade.git
GIT_TAG b65bcc0d08c8ef4b47a19ac37cdffb267e7c9994
SYSTEM
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
magnum
GIT_REPOSITORY https://github.com/mosra/magnum.git
GIT_TAG bd52eb9be27f647cbec5475a920b79ce61953c8b
SYSTEM
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
magnum-plugins
GIT_REPOSITORY https://github.com/mosra/magnum-plugins.git
GIT_TAG 420a0e27b8a3a006a1b4db9c200139473a047b84
SYSTEM
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
magnum-integration
GIT_REPOSITORY https://github.com/mosra/magnum-integration.git
GIT_TAG 0184c8371d499d4a4f20b5982722f7942ff6f364
SYSTEM
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
basis_universal
GIT_REPOSITORY https://github.com/BinomialLLC/basis_universal.git
#GIT_TAG v2_0_2
GIT_TAG v1_50_0_2
SYSTEM
EXCLUDE_FROM_ALL
FIND_PACKAGE_ARGS
)
# debug/test
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG v1.17.0
SYSTEM
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
cpptrace
GIT_REPOSITORY https://github.com/jeremy-rifkin/cpptrace.git
GIT_TAG v1.0.0
SYSTEM
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
AudioFile
GIT_REPOSITORY https://github.com/adamstark/AudioFile.git
GIT_TAG 1.1.4
SYSTEM
EXCLUDE_FROM_ALL
)
FetchContent_Declare(
tracy
GIT_REPOSITORY https://github.com/wolfpld/tracy.git
GIT_TAG v0.13.1
SYSTEM
EXCLUDE_FROM_ALL
)