-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathCMakeLists.txt
275 lines (231 loc) · 10.3 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
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
cmake_minimum_required(VERSION 3.15)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
# I don't want to deal with filesystem from two places right now
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.15 CACHE STRING "Build for 10.1")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
string(TIMESTAMP DAY_OF_YEAR "%j")
string(TIMESTAMP YEAR "%Y")
math(EXPR PART0 "${YEAR}-2023 + 2")
math(EXPR PART1 "${DAY_OF_YEAR}/2")
message(STATUS "Using date-driven version while in alpha. 0.${PART0}.${PART1}.0")
project(conduit VERSION 0.${PART0}.${PART1}.0 LANGUAGES C CXX)
if (APPLE)
enable_language(OBJC)
enable_language(OBJCXX)
set(CMAKE_OBJC_VISIBILITY_PRESET hidden)
set(CMAKE_OBJCXX_VISIBILITY_PRESET hidden)
endif()
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Never want shared if not specified")
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
# use asan as an option (currently mac only)
option(USE_SANITIZER "Build and link with ASAN" FALSE)
# Compiler specific choices
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU")
add_compile_options(
$<$<BOOL:${USE_SANITIZER}>:-fsanitize=address>
$<$<BOOL:${USE_SANITIZER}>:-fsanitize=undefined>
$<$<OR:$<COMPILE_LANGUAGE:CXX>,$<COMPILE_LANGUAGE:OBJC>,$<COMPILE_LANGUAGE:OBJCXX>>:-fno-char8_t>
)
add_link_options(
$<$<BOOL:${USE_SANITIZER}>:-fsanitize=address>
$<$<BOOL:${USE_SANITIZER}>:-fsanitize=undefined>
)
endif()
if (MSVC)
add_compile_options(
# Set source and executable charsets to UTF-8
$<$<CXX_COMPILER_ID:MSVC>:/utf-8>
# Do *not* use the new, breaking char8_t UTF-8 bits in C++20.
$<$<COMPILE_LANGUAGE:CXX>:/Zc:char8_t->
# make msvc define __cplulsplus properly
$<$<COMPILE_LANGUAGE:CXX>:/Zc:__cplusplus>
)
endif()
# Copy on mac (could expand to other platforms)
option(COPY_AFTER_BUILD "Copy the clap to ~/Library on MACOS, ~/.clap on linux" FALSE)
add_subdirectory(libs/clap EXCLUDE_FROM_ALL)
add_subdirectory(libs/clap-helpers EXCLUDE_FROM_ALL)
add_subdirectory(libs/fmt EXCLUDE_FROM_ALL)
add_subdirectory(libs/sst/sst-clap-helpers)
if (NOT DEFINED JUCE_PATH)
set(JUCE_PATH "${CMAKE_SOURCE_DIR}/libs/JUCE")
endif()
add_clap_juce_shim(JUCE_PATH ${JUCE_PATH})
add_library(simde INTERFACE)
target_include_directories(simde INTERFACE libs/simde)
add_subdirectory(libs/sst/sst-jucegui)
add_subdirectory(libs/sst/sst-basic-blocks)
set(SST_PLUGININFRA_FILESYSTEM_FORCE_PLATFORM TRUE CACHE BOOL "Use System FS")
add_subdirectory(libs/sst/sst-plugininfra)
add_subdirectory(libs/sst/sst-cpputils)
add_subdirectory(libs/sst/sst-filters)
add_subdirectory(libs/sst/sst-waveshapers)
add_subdirectory(libs/sst/sst-effects)
add_subdirectory(libs/sst/sst-voicemanager)
add_subdirectory(libs/ni-midi2 EXCLUDE_FROM_ALL)
add_library(mts-esp-client STATIC libs/MTS-ESP/Client/libMTSClient.cpp)
target_include_directories(mts-esp-client PUBLIC libs/MTS-ESP/Client)
set(CLAP_WRAPPER_DOWNLOAD_DEPENDENCIES TRUE CACHE BOOL "Get em")
set(CLAP_WRAPPER_DONT_ADD_TARGETS TRUE CACHE BOOL "I'll targetize")
set(CLAP_WRAPPER_BUILD_AUV2 TRUE CACHE BOOL "It's only logical")
if (APPLE)
# BaconPaul has jack kinda installed
set(RTAUDIO_API_JACK FALSE CACHE BOOL "Not on apple")
endif()
add_subdirectory(libs/clap-wrapper)
set(CONDUIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE STRING "Top level source")
include(cmake/CmakeRC.cmake)
add_subdirectory(resources)
include(cmake/git-info.cmake)
add_subdirectory(src)
set(CLAP_TARGET ${PROJECT_NAME}_clap)
add_library(${CLAP_TARGET} MODULE
src/conduit-clap-entry.cpp
)
target_link_libraries(${CLAP_TARGET} conduit-impl)
target_library_make_clap(TARGET ${CLAP_TARGET}
CLAP_NAME "Conduit"
CLAP_MACOS_BUNDLE_IDENTIFIER org.surge-synth-team.conduit.clap
CLAP_MACOS_BUNDLE_VERSION ${PROJECT_VERSION}
COPY_AFTER_BUILD ${COPY_AFTER_BUILD}
)
set_target_properties(${CLAP_TARGET} PROPERTIES BUNDLE TRUE MACOSX_BUNDLE TRUE)
set(VST3_TARGET ${PROJECT_NAME}_vst3)
add_library(${VST3_TARGET} MODULE)
target_sources(${VST3_TARGET} PRIVATE src/conduit-clap-entry.cpp)
target_link_libraries(${VST3_TARGET} PRIVATE conduit-impl)
target_add_vst3_wrapper(TARGET ${VST3_TARGET}
OUTPUT_NAME "Conduit"
SUPPORTS_ALL_NOTE_EXPRESSIONS TRUE
)
if (WIN32)
# Question - do we want this default in the helpers
set_target_properties(${VST3_TARGET}
PROPERTIES
LIBRARY_OUTPUT_DIRECTORY VST3
)
endif()
if (${COPY_AFTER_BUILD})
target_vst3_copy_after_build(TARGET ${VST3_TARGET})
endif()
if (APPLE)
set(AUV2_TARGET ${PROJECT_NAME}_auv2)
add_library(${AUV2_TARGET} MODULE)
target_sources(${AUV2_TARGET} PRIVATE src/conduit-clap-entry.cpp)
target_link_libraries(${AUV2_TARGET} PRIVATE conduit-impl)
message(STATUS "Adding AUv2 with ${PROJECT_VERSION}")
target_add_auv2_wrapper(
TARGET ${AUV2_TARGET}
OUTPUT_NAME "Conduit"
BUNDLE_IDENTIFIER "org.surge-synth-team.conduit.auv2"
BUNDLE_VERSION ${PROJECT_VERSION}
CLAP_TARGET_FOR_CONFIG ${PROJECT_NAME}_clap
)
if (${COPY_AFTER_BUILD})
message(STATUS "conduit: will install auv2")
target_auv2_copy_after_build(TARGET ${AUV2_TARGET})
endif()
endif()
## Finally set up an ALL target which builds and collects
function(add_to_all)
cmake_parse_arguments(AA "" "" "TARGETS" ${ARGN} )
set(pn ${PROJECT_NAME}_all)
if (NOT TARGET ${pn})
add_custom_target(${pn})
endif()
add_dependencies(${pn} ${AA_TARGETS})
set(coldir "${CMAKE_BINARY_DIR}/conduit_products")
foreach(TGT ${AA_TARGETS})
if (APPLE)
add_custom_command(TARGET ${pn}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${coldir}
COMMAND ${CMAKE_COMMAND} -E copy_directory $<TARGET_FILE_DIR:${TGT}>/../../../$<TARGET_PROPERTY:${TGT},MACOSX_BUNDLE_BUNDLE_NAME>.$<TARGET_PROPERTY:${TGT},BUNDLE_EXTENSION>/
${coldir}/$<TARGET_PROPERTY:${TGT},MACOSX_BUNDLE_BUNDLE_NAME>.$<TARGET_PROPERTY:${TGT},BUNDLE_EXTENSION>/
)
else()
set(isb FALSE)
get_property(isb TARGET ${TGT} PROPERTY CONDUIT_HAS_BUNDLE_STRUCTURE)
if (${isb})
message(STATUS "conduit: Treating ${TGT} as a bundle on linux")
add_custom_command(TARGET ${pn}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${coldir}
COMMAND ${CMAKE_COMMAND} -E copy_directory $<TARGET_FILE_DIR:${TGT}>/../../../$<TARGET_PROPERTY:${TGT},LIBRARY_OUTPUT_NAME>.$<TARGET_PROPERTY:${TGT},CONDUIT_BUNDLE_SUFFIX>/
${coldir}/$<TARGET_PROPERTY:${TGT},LIBRARY_OUTPUT_NAME>.$<TARGET_PROPERTY:${TGT},CONDUIT_BUNDLE_SUFFIX>/
)
else()
add_custom_command(TARGET ${pn}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory ${coldir}
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${TGT}> ${coldir}
)
endif()
endif()
endforeach ()
endfunction(add_to_all)
function(make_conduit_standalone)
set(oaf ID NAME)
cmake_parse_arguments(AA "" "${oaf}" "" ${ARGN})
set(sat ${PROJECT_NAME}_${AA_ID}_standalone)
add_executable(${sat})
target_sources(${sat} PRIVATE src/conduit-clap-entry.cpp)
target_link_libraries(${sat} PRIVATE conduit-impl)
target_add_standalone_wrapper(TARGET ${sat}
OUTPUT_NAME "Conduit ${AA_NAME}"
STATICALLY_LINKED_CLAP_ENTRY True
PLUGIN_ID "org.surge-synth-team.conduit.${AA_ID}")
add_to_all(TARGETS ${sat})
endfunction()
if (${CONDUIT_BUILD_STANDALONES})
make_conduit_standalone(NAME "Polysynth" ID "polysynth")
make_conduit_standalone(NAME "Polymetric Delay" ID "polymetric-delay")
make_conduit_standalone(NAME "Ring Modulator" ID "ring-modulator")
make_conduit_standalone(NAME "Chord Memory" ID "chord-memory")
endif()
if (UNIX)
set_target_properties(${PROJECT_NAME}_vst3 PROPERTIES CONDUIT_HAS_BUNDLE_STRUCTURE TRUE CONDUIT_BUNDLE_SUFFIX "vst3")
endif()
add_to_all(TARGETS ${PROJECT_NAME}_clap ${PROJECT_NAME}_vst3)
if (APPLE)
add_to_all(TARGETS ${PROJECT_NAME}_auv2)
endif()
add_custom_command(TARGET ${PROJECT_NAME}_all
POST_BUILD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} -E copy resources/README.rtf "${CMAKE_BINARY_DIR}/conduit_products"
COMMAND ${CMAKE_COMMAND} -E copy resources/License_GPL3.txt "${CMAKE_BINARY_DIR}/conduit_products/License.txt")
add_custom_target(${PROJECT_NAME}_installer)
add_custom_command(TARGET ${PROJECT_NAME}_installer POST_BUILD
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/installer
)
string( TIMESTAMP NIGHTLY_TAG "%Y-%m-%d-%H-%M")
add_dependencies(${PROJECT_NAME}_installer ${PROJECT_NAME}_all)
if (APPLE)
add_custom_command(TARGET ${PROJECT_NAME}_installer POST_BUILD
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMAND ${CMAKE_SOURCE_DIR}/scripts/mac_installer.sh ${CMAKE_BINARY_DIR}/conduit_products ${CMAKE_BINARY_DIR}/installer nightly-${NIGHTLY_TAG}
)
elseif (WIN32)
message(STATUS "Configuring for Windows installer")
add_custom_command(
TARGET ${PROJECT_NAME}_installer
POST_BUILD
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E make_directory installer
COMMAND 7z a -r installer/conduit-win32-x64-nightly-${NIGHTLY_TAG}.zip ${CMAKE_BINARY_DIR}/conduit_products
COMMAND ${CMAKE_COMMAND} -E echo "ZIP Installer in: installer/conduit-win32-x64-nightly-${NIGHTLY_TAG}.zip")
else ()
message(STATUS "Basic installer: Target is installer/${SCXT_ZIP}")
add_custom_command(
TARGET ${PROJECT_NAME}_installer
POST_BUILD
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E make_directory installer
COMMAND ${CMAKE_COMMAND} -E tar cvf installer/conduit-lin-x64-nightly-${NIGHTLY_TAG}.zip --format=zip ${CMAKE_BINARY_DIR}/conduit_products
COMMAND ${CMAKE_COMMAND} -E echo "Installer in: installer/conduit-lin-x64-nightly-${NIGHTLY_TAG}.zip")
endif ()