Skip to content

Commit a338aa6

Browse files
AnClarkfalkTX
authored andcommitted
CMake: Add external UI support
Squashed commit of the following: commit d1a682345862ae6cc1cf83524febdb5076aa4827 Author: AnClark <[email protected]> Date: Thu Dec 15 09:03:18 2022 +0800 Refactor CMake var _dgl_library -> _dgl_has_ui in plugin build functions Plugin build functions (dpf__build_<PLUGIN_TYPE>) invokes dpf__add_ui_main() which has a parameter HAS_UI. This parameter acts like a switch, controlling if DistrhoPluginMain.cpp shall be compiled. Before this patch, value of _dgl_library is passed into HAS_UI. However, this will make it ambiguous. Variable _dgl_library should only be served as a flag of DGL UI type, and should not be a switch of whether to build DistrhoPluginMain.cpp or not. What's more, since DPF's CMake build system starts to support external UI, which is not limited to DGL, simply checking _dgl_library for dgl__add_ui_main() is no longer relevant. So, instead, I use variable _dgl_has_ui which keeps to the point. It will be set to ON if _dgl_library is non-empty or _dgl_external is ON. commit 2d162a16b6894879a941b131553aded7d451eebe Author: AnClark Liu <[email protected]> Date: Tue Dec 13 23:13:49 2022 +0800 Build ExternalUI and EmbedExternalUI example plugins with cmake Note: Build CLAP versions as well. commit 2cf060910e8d7589f9b21842f6b0ae802bc89d0a Author: AnClark Liu <[email protected]> Date: Tue Dec 13 23:07:40 2022 +0800 Add external UI support for cmake Signed-off-by: falkTX <[email protected]>
1 parent a325bf5 commit a338aa6

File tree

6 files changed

+74
-26
lines changed

6 files changed

+74
-26
lines changed

CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ if(DPF_EXAMPLES)
4747
add_subdirectory("examples/CairoUI")
4848
endif()
4949
endif()
50-
#add_subdirectory("examples/ExternalUI")
50+
add_subdirectory("examples/ExternalUI")
51+
add_subdirectory("examples/EmbedExternalUI")
5152
add_subdirectory("examples/FileHandling")
5253
add_subdirectory("examples/Info")
5354
add_subdirectory("examples/Latency")

cmake/DPF-plugin.cmake

Lines changed: 44 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ include(CMakeParseArguments)
7575
# `jack`, `ladspa`, `dssi`, `lv2`, `vst2`, `vst3`, `clap`
7676
#
7777
# `UI_TYPE` <type>
78-
# the user interface type: `opengl` (default), `cairo`
78+
# the user interface type: `opengl` (default), `cairo`, `external`
7979
#
8080
# `MONOLITHIC`
8181
# build LV2 as a single binary for UI and DSP
@@ -101,18 +101,26 @@ function(dpf_add_plugin NAME)
101101
endif()
102102

103103
set(_dgl_library)
104+
set(_dgl_external OFF)
104105
if(_dpf_plugin_FILES_UI)
105106
if(_dpf_plugin_UI_TYPE STREQUAL "cairo")
106107
dpf__add_dgl_cairo("${_dpf_plugin_NO_SHARED_RESOURCES}")
107108
set(_dgl_library dgl-cairo)
108109
elseif(_dpf_plugin_UI_TYPE STREQUAL "opengl")
109110
dpf__add_dgl_opengl("${_dpf_plugin_NO_SHARED_RESOURCES}")
110111
set(_dgl_library dgl-opengl)
112+
elseif(_dpf_plugin_UI_TYPE STREQUAL "external")
113+
set(_dgl_external ON)
111114
else()
112115
message(FATAL_ERROR "Unrecognized UI type for plugin: ${_dpf_plugin_UI_TYPE}")
113116
endif()
114117
endif()
115118

119+
set(_dgl_has_ui OFF)
120+
if(_dgl_library OR _dgl_external)
121+
set(_dgl_has_ui ON)
122+
endif()
123+
116124
###
117125
dpf__ensure_sources_non_empty(_dpf_plugin_FILES_COMMON)
118126
dpf__ensure_sources_non_empty(_dpf_plugin_FILES_DSP)
@@ -127,44 +135,55 @@ function(dpf_add_plugin NAME)
127135
target_link_libraries("${NAME}" PRIVATE "dl")
128136
endif()
129137

130-
if(_dgl_library)
138+
if(_dgl_library AND NOT _dgl_external)
131139
# make sure that all code will see DGL_* definitions
132140
target_link_libraries("${NAME}" PUBLIC
133141
"${_dgl_library}-definitions"
134142
dgl-system-libs-definitions)
143+
elseif(_dgl_external)
144+
target_link_libraries("${NAME}" PUBLIC
145+
dgl-system-libs-definitions)
135146
endif()
136147

137148
dpf__add_static_library("${NAME}-dsp" ${_dpf_plugin_FILES_DSP})
138149
target_link_libraries("${NAME}-dsp" PUBLIC "${NAME}")
139150

140-
if(_dgl_library)
151+
if(_dgl_library AND NOT _dgl_external)
141152
dpf__add_static_library("${NAME}-ui" ${_dpf_plugin_FILES_UI})
142153
target_link_libraries("${NAME}-ui" PUBLIC "${NAME}" ${_dgl_library})
143154
if((NOT WIN32) AND (NOT APPLE) AND (NOT HAIKU))
144155
target_link_libraries("${NAME}-ui" PRIVATE "dl")
145156
endif()
146157
# add the files containing Objective-C classes
147158
dpf__add_plugin_specific_ui_sources("${NAME}-ui")
159+
elseif(_dgl_external)
160+
dpf__add_static_library("${NAME}-ui" ${_dpf_plugin_FILES_UI})
161+
target_link_libraries("${NAME}-ui" PUBLIC "${NAME}")
162+
if((NOT WIN32) AND (NOT APPLE) AND (NOT HAIKU))
163+
target_link_libraries("${NAME}-ui" PRIVATE "dl")
164+
endif()
165+
# add the files containing Objective-C classes
166+
dpf__add_plugin_specific_ui_sources("${NAME}-ui")
148167
else()
149168
add_library("${NAME}-ui" INTERFACE)
150169
endif()
151170

152171
###
153172
foreach(_target ${_dpf_plugin_TARGETS})
154173
if(_target STREQUAL "jack")
155-
dpf__build_jack("${NAME}" "${_dgl_library}")
174+
dpf__build_jack("${NAME}" "${_dgl_has_ui}")
156175
elseif(_target STREQUAL "ladspa")
157176
dpf__build_ladspa("${NAME}")
158177
elseif(_target STREQUAL "dssi")
159-
dpf__build_dssi("${NAME}" "${_dgl_library}")
178+
dpf__build_dssi("${NAME}" "${_dgl_has_ui}")
160179
elseif(_target STREQUAL "lv2")
161-
dpf__build_lv2("${NAME}" "${_dgl_library}" "${_dpf_plugin_MONOLITHIC}")
180+
dpf__build_lv2("${NAME}" "${_dgl_has_ui}" "${_dpf_plugin_MONOLITHIC}")
162181
elseif(_target STREQUAL "vst2")
163-
dpf__build_vst2("${NAME}" "${_dgl_library}")
182+
dpf__build_vst2("${NAME}" "${_dgl_has_ui}")
164183
elseif(_target STREQUAL "vst3")
165-
dpf__build_vst3("${NAME}" "${_dgl_library}")
184+
dpf__build_vst3("${NAME}" "${_dgl_has_ui}")
166185
elseif(_target STREQUAL "clap")
167-
dpf__build_clap("${NAME}" "${_dgl_library}")
186+
dpf__build_clap("${NAME}" "${_dgl_has_ui}")
168187
else()
169188
message(FATAL_ERROR "Unrecognized target type for plugin: ${_target}")
170189
endif()
@@ -184,12 +203,12 @@ endfunction()
184203
#
185204
# Add build rules for a JACK/Standalone program.
186205
#
187-
function(dpf__build_jack NAME DGL_LIBRARY)
206+
function(dpf__build_jack NAME HAS_UI)
188207
dpf__create_dummy_source_list(_no_srcs)
189208

190209
dpf__add_executable("${NAME}-jack" ${_no_srcs})
191210
dpf__add_plugin_main("${NAME}-jack" "jack")
192-
dpf__add_ui_main("${NAME}-jack" "jack" "${DGL_LIBRARY}")
211+
dpf__add_ui_main("${NAME}-jack" "jack" "${HAS_UI}")
193212
target_link_libraries("${NAME}-jack" PRIVATE "${NAME}-dsp" "${NAME}-ui")
194213
set_target_properties("${NAME}-jack" PROPERTIES
195214
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/$<0:>"
@@ -267,7 +286,7 @@ endfunction()
267286
#
268287
# Add build rules for a DSSI plugin.
269288
#
270-
function(dpf__build_dssi NAME DGL_LIBRARY)
289+
function(dpf__build_dssi NAME HAS_UI)
271290
find_package(PkgConfig)
272291
pkg_check_modules(LIBLO "liblo")
273292
if(NOT LIBLO_FOUND)
@@ -288,9 +307,9 @@ function(dpf__build_dssi NAME DGL_LIBRARY)
288307
OUTPUT_NAME "${NAME}-dssi"
289308
PREFIX "")
290309

291-
if(DGL_LIBRARY)
310+
if(HAS_UI)
292311
dpf__add_executable("${NAME}-dssi-ui" ${_no_srcs})
293-
dpf__add_ui_main("${NAME}-dssi-ui" "dssi" "${DGL_LIBRARY}")
312+
dpf__add_ui_main("${NAME}-dssi-ui" "dssi" "${HAS_UI}")
294313
target_link_libraries("${NAME}-dssi-ui" PRIVATE "${NAME}-ui")
295314
set_target_properties("${NAME}-dssi-ui" PROPERTIES
296315
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/${NAME}-dssi/$<0:>"
@@ -308,12 +327,12 @@ endfunction()
308327
#
309328
# Add build rules for an LV2 plugin.
310329
#
311-
function(dpf__build_lv2 NAME DGL_LIBRARY MONOLITHIC)
330+
function(dpf__build_lv2 NAME HAS_UI MONOLITHIC)
312331
dpf__create_dummy_source_list(_no_srcs)
313332

314333
dpf__add_module("${NAME}-lv2" ${_no_srcs})
315334
dpf__add_plugin_main("${NAME}-lv2" "lv2")
316-
if(DGL_LIBRARY AND MONOLITHIC)
335+
if(HAS_UI AND MONOLITHIC)
317336
dpf__set_module_export_list("${NAME}-lv2" "lv2")
318337
else()
319338
dpf__set_module_export_list("${NAME}-lv2" "lv2-dsp")
@@ -325,15 +344,15 @@ function(dpf__build_lv2 NAME DGL_LIBRARY MONOLITHIC)
325344
OUTPUT_NAME "${NAME}_dsp"
326345
PREFIX "")
327346

328-
if(DGL_LIBRARY)
347+
if(HAS_UI)
329348
if(MONOLITHIC)
330-
dpf__add_ui_main("${NAME}-lv2" "lv2" "${DGL_LIBRARY}")
349+
dpf__add_ui_main("${NAME}-lv2" "lv2" "${HAS_UI}")
331350
target_link_libraries("${NAME}-lv2" PRIVATE "${NAME}-ui")
332351
set_target_properties("${NAME}-lv2" PROPERTIES
333352
OUTPUT_NAME "${NAME}")
334353
else()
335354
dpf__add_module("${NAME}-lv2-ui" ${_no_srcs})
336-
dpf__add_ui_main("${NAME}-lv2-ui" "lv2" "${DGL_LIBRARY}")
355+
dpf__add_ui_main("${NAME}-lv2-ui" "lv2" "${HAS_UI}")
337356
dpf__set_module_export_list("${NAME}-lv2-ui" "lv2-ui")
338357
target_link_libraries("${NAME}-lv2-ui" PRIVATE "${NAME}-ui")
339358
set_target_properties("${NAME}-lv2-ui" PROPERTIES
@@ -361,12 +380,12 @@ endfunction()
361380
#
362381
# Add build rules for a VST2 plugin.
363382
#
364-
function(dpf__build_vst2 NAME DGL_LIBRARY)
383+
function(dpf__build_vst2 NAME HAS_UI)
365384
dpf__create_dummy_source_list(_no_srcs)
366385

367386
dpf__add_module("${NAME}-vst2" ${_no_srcs})
368387
dpf__add_plugin_main("${NAME}-vst2" "vst2")
369-
dpf__add_ui_main("${NAME}-vst2" "vst2" "${DGL_LIBRARY}")
388+
dpf__add_ui_main("${NAME}-vst2" "vst2" "${HAS_UI}")
370389
dpf__set_module_export_list("${NAME}-vst2" "vst2")
371390
target_link_libraries("${NAME}-vst2" PRIVATE "${NAME}-dsp" "${NAME}-ui")
372391
set_target_properties("${NAME}-vst2" PROPERTIES
@@ -439,14 +458,14 @@ endfunction()
439458
#
440459
# Add build rules for a VST3 plugin.
441460
#
442-
function(dpf__build_vst3 NAME DGL_LIBRARY)
461+
function(dpf__build_vst3 NAME HAS_UI)
443462
dpf__determine_vst3_package_architecture(vst3_arch)
444463

445464
dpf__create_dummy_source_list(_no_srcs)
446465

447466
dpf__add_module("${NAME}-vst3" ${_no_srcs})
448467
dpf__add_plugin_main("${NAME}-vst3" "vst3")
449-
dpf__add_ui_main("${NAME}-vst3" "vst3" "${DGL_LIBRARY}")
468+
dpf__add_ui_main("${NAME}-vst3" "vst3" "${HAS_UI}")
450469
dpf__set_module_export_list("${NAME}-vst3" "vst3")
451470
target_link_libraries("${NAME}-vst3" PRIVATE "${NAME}-dsp" "${NAME}-ui")
452471
set_target_properties("${NAME}-vst3" PROPERTIES
@@ -481,12 +500,12 @@ endfunction()
481500
#
482501
# Add build rules for a VST2 plugin.
483502
#
484-
function(dpf__build_clap NAME DGL_LIBRARY)
503+
function(dpf__build_clap NAME HAS_UI)
485504
dpf__create_dummy_source_list(_no_srcs)
486505

487506
dpf__add_module("${NAME}-clap" ${_no_srcs})
488507
dpf__add_plugin_main("${NAME}-clap" "clap")
489-
dpf__add_ui_main("${NAME}-clap" "clap" "${DGL_LIBRARY}")
508+
dpf__add_ui_main("${NAME}-clap" "clap" "${HAS_UI}")
490509
dpf__set_module_export_list("${NAME}-clap" "clap")
491510
target_link_libraries("${NAME}-clap" PRIVATE "${NAME}-dsp" "${NAME}-ui")
492511
set_target_properties("${NAME}-clap" PROPERTIES
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# CMake file for DISTRHO Plugins #
2+
# ------------------------------ #
3+
4+
dpf_add_plugin(d_embed_external_ui
5+
TARGETS lv2 vst2 vst3 clap
6+
UI_TYPE external
7+
FILES_DSP
8+
EmbedExternalExamplePlugin.cpp
9+
FILES_UI
10+
EmbedExternalExampleUI.cpp)
11+
12+
target_include_directories(
13+
d_embed_external_ui PUBLIC ".")

examples/EmbedExternalUI/DistrhoPluginInfo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#define DISTRHO_PLUGIN_BRAND "DISTRHO"
2121
#define DISTRHO_PLUGIN_NAME "EmbedExternalUI"
2222
#define DISTRHO_PLUGIN_URI "http://distrho.sf.net/examples/EmbedExternalUI"
23+
#define DISTRHO_PLUGIN_CLAP_ID "studio.kx.distrho.examples.embed-external-ui"
2324

2425
#define DISTRHO_PLUGIN_HAS_UI 1
2526
#define DISTRHO_PLUGIN_HAS_EMBED_UI 1

examples/ExternalUI/CMakeLists.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# CMake file for DISTRHO Plugins #
2+
# ------------------------------ #
3+
4+
dpf_add_plugin(d_external_ui
5+
TARGETS lv2 vst2 vst3 clap
6+
UI_TYPE external
7+
FILES_DSP
8+
ExternalExamplePlugin.cpp
9+
FILES_UI
10+
ExternalExampleUI.cpp)
11+
12+
target_include_directories(
13+
d_external_ui PUBLIC ".")

examples/ExternalUI/DistrhoPluginInfo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#define DISTRHO_PLUGIN_BRAND "DISTRHO"
2121
#define DISTRHO_PLUGIN_NAME "ExternalUI"
2222
#define DISTRHO_PLUGIN_URI "http://distrho.sf.net/examples/ExternalUI"
23+
#define DISTRHO_PLUGIN_CLAP_ID "studio.kx.distrho.examples.external-ui"
2324

2425
#define DISTRHO_PLUGIN_HAS_UI 1
2526
#define DISTRHO_PLUGIN_HAS_EMBED_UI 1

0 commit comments

Comments
 (0)