@@ -244,6 +244,112 @@ function(dpf_add_plugin NAME)
244244 endforeach ()
245245endfunction ()
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