Skip to content

Commit 6c06c80

Browse files
committed
Add dpf_add_executable cmake function
Signed-off-by: falkTX <falktx@falktx.com>
1 parent 4434b45 commit 6c06c80

2 files changed

Lines changed: 107 additions & 1 deletion

File tree

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# DISTRHO Plugin Framework (DPF)
22
# Copyright (C) 2021 Jean Pierre Cimalando <jp-dev@inbox.ru>
3-
# Copyright (C) 2022-2024 Filipe Coelho <falktx@falktx.com>
3+
# Copyright (C) 2022-2025 Filipe Coelho <falktx@falktx.com>
44
#
55
# SPDX-License-Identifier: ISC
66

cmake/DPF-plugin.cmake

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,112 @@ function(dpf_add_plugin NAME)
244244
endforeach()
245245
endfunction()
246246

247+
# dpf_add_executable(target <args...>)
248+
# ------------------------------------------------------------------------------
249+
#
250+
# Add a simple executable built using the DISTRHO Plugin Framework.
251+
#
252+
# ------------------------------------------------------------------------------
253+
# Arguments:
254+
#
255+
# `UI_TYPE` <type>
256+
# the user interface type, can be one of the following:
257+
# - cairo
258+
# - external
259+
# - opengl (default)
260+
# - opengl3
261+
# - vulkan
262+
# - webview
263+
#
264+
# `NO_SHARED_RESOURCES`
265+
# do not build DPF shared resources (fonts, etc)
266+
#
267+
# `USE_FILE_BROWSER`
268+
# enable file browser dialog APIs
269+
#
270+
# `USE_WEB_VIEW`
271+
# enable web browser view APIs
272+
#
273+
function(dpf_add_executable NAME)
274+
set(options NO_SHARED_RESOURCES USE_FILE_BROWSER USE_WEB_VIEW)
275+
set(oneValueArgs UI_TYPE)
276+
cmake_parse_arguments(_dpf_plugin "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
277+
278+
if("${_dpf_plugin_UI_TYPE}" STREQUAL "")
279+
set(_dpf_plugin_UI_TYPE "opengl")
280+
endif()
281+
282+
set(_dgl_library)
283+
if(_dpf_plugin_UI_TYPE STREQUAL "cairo")
284+
dpf__add_dgl_cairo($<NOT:$<BOOL:${_dpf_plugin_NO_SHARED_RESOURCES}>>
285+
$<BOOL:${_dpf_plugin_USE_FILE_BROWSER}>
286+
$<BOOL:${_dpf_plugin_USE_WEB_VIEW}>)
287+
set(_dgl_library dgl-cairo)
288+
elseif(_dpf_plugin_UI_TYPE STREQUAL "external")
289+
dpf__add_dgl_external($<BOOL:${_dpf_plugin_USE_FILE_BROWSER}>
290+
$<BOOL:${_dpf_plugin_USE_WEB_VIEW}>)
291+
set(_dgl_library dgl-external)
292+
elseif(_dpf_plugin_UI_TYPE STREQUAL "opengl")
293+
dpf__add_dgl_opengl($<NOT:$<BOOL:${_dpf_plugin_NO_SHARED_RESOURCES}>>
294+
$<BOOL:${_dpf_plugin_USE_FILE_BROWSER}>
295+
$<BOOL:${_dpf_plugin_USE_WEB_VIEW}>)
296+
set(_dgl_library dgl-opengl)
297+
elseif(_dpf_plugin_UI_TYPE STREQUAL "opengl3")
298+
dpf__add_dgl_opengl3($<NOT:$<BOOL:${_dpf_plugin_NO_SHARED_RESOURCES}>>
299+
$<BOOL:${_dpf_plugin_USE_FILE_BROWSER}>
300+
$<BOOL:${_dpf_plugin_USE_WEB_VIEW}>)
301+
set(_dgl_library dgl-opengl3)
302+
elseif(_dpf_plugin_UI_TYPE STREQUAL "vulkan")
303+
dpf__add_dgl_vulkan($<NOT:$<BOOL:${_dpf_plugin_NO_SHARED_RESOURCES}>>
304+
$<BOOL:${_dpf_plugin_USE_FILE_BROWSER}>
305+
$<BOOL:${_dpf_plugin_USE_WEB_VIEW}>)
306+
set(_dgl_library dgl-vulkan)
307+
elseif(_dpf_plugin_UI_TYPE STREQUAL "webview")
308+
set(_dpf_plugin_USE_WEB_VIEW TRUE)
309+
dpf__add_dgl_external($<BOOL:${_dpf_plugin_USE_FILE_BROWSER}>
310+
$<BOOL:${_dpf_plugin_USE_WEB_VIEW}>)
311+
set(_dgl_library dgl-external)
312+
else()
313+
message(FATAL_ERROR "Unrecognized UI type for executable: ${_dpf_plugin_UI_TYPE}")
314+
endif()
315+
316+
set(_dgl_has_ui OFF)
317+
if(_dgl_library)
318+
set(_dgl_has_ui ON)
319+
endif()
320+
321+
dpf__create_dummy_source_list(_no_srcs)
322+
dpf__add_executable("${NAME}" ${_no_srcs})
323+
target_include_directories("${NAME}" PUBLIC "${DPF_ROOT_DIR}/distrho")
324+
325+
if(_dpf_plugin_USE_FILE_BROWSER)
326+
target_compile_definitions("${NAME}" PUBLIC "DGL_USE_FILE_BROWSER")
327+
endif()
328+
329+
if(_dpf_plugin_USE_WEB_VIEW)
330+
target_compile_definitions("${NAME}" PUBLIC "DGL_USE_WEB_VIEW")
331+
endif()
332+
333+
if((NOT WIN32) AND (NOT APPLE) AND (NOT HAIKU))
334+
target_link_libraries("${NAME}" PRIVATE "dl")
335+
endif()
336+
337+
if(_dgl_library)
338+
# make sure that all code will see DGL_* definitions
339+
target_link_libraries("${NAME}" PUBLIC
340+
"${_dgl_library}"
341+
"${_dgl_library}-definitions"
342+
dgl-system-libs-definitions
343+
dgl-system-libs)
344+
# extra linkage for linux web view
345+
if(LINUX AND _dpf_plugin_USE_WEB_VIEW)
346+
target_link_libraries("${NAME}" PRIVATE "rt")
347+
endif()
348+
# add the files containing C++17 or Objective-C classes
349+
dpf__add_plugin_specific_ui_sources("${NAME}" "${_dpf_plugin_USE_WEB_VIEW}")
350+
endif()
351+
endfunction()
352+
247353
# ------------------------------------------------------------------------------
248354
# DPF private functions (prefixed with `dpf__`)
249355
# ------------------------------------------------------------------------------

0 commit comments

Comments
 (0)