Skip to content

Commit 6ecedf2

Browse files
committed
Update for wasm build fixes
Signed-off-by: falkTX <falktx@falktx.com>
1 parent 0e6116c commit 6ecedf2

9 files changed

Lines changed: 148 additions & 26 deletions

File tree

dpf/Makefile.base.mk

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ endif
352352
# ---------------------------------------------------------------------------------------------------------------------
353353
# Check for required libraries
354354

355-
ifneq ($(HAIKU),true)
355+
ifneq ($(HAIKU)$(WASM),true)
356356
HAVE_CAIRO = $(shell $(PKG_CONFIG) --exists cairo && echo true)
357357
endif
358358

@@ -763,7 +763,7 @@ features:
763763
# ---------------------------------------------------------------------------------------------------------------------
764764
# Extra rules for MOD Audio stuff
765765

766-
# NOTE: note path must be absolute
766+
# NOTE: path must be absolute
767767
MOD_WORKDIR ?= $(HOME)/mod-workdir
768768
MOD_ENVIRONMENT = \
769769
AR=${1}/host/usr/bin/${2}-gcc-ar \

dpf/cmake/DPF-plugin.cmake

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,8 @@ function(dpf_add_plugin NAME)
192192
dpf__build_vst3("${NAME}" "${_dgl_has_ui}")
193193
elseif(_target STREQUAL "clap")
194194
dpf__build_clap("${NAME}" "${_dgl_has_ui}")
195+
elseif(_target STREQUAL "static")
196+
dpf__build_static("${NAME}" "${_dgl_has_ui}")
195197
else()
196198
message(FATAL_ERROR "Unrecognized target type for plugin: ${_target}")
197199
endif()
@@ -510,7 +512,7 @@ endfunction()
510512
# dpf__build_clap
511513
# ------------------------------------------------------------------------------
512514
#
513-
# Add build rules for a VST2 plugin.
515+
# Add build rules for a CLAP plugin.
514516
#
515517
function(dpf__build_clap NAME HAS_UI)
516518
dpf__create_dummy_source_list(_no_srcs)
@@ -540,6 +542,34 @@ function(dpf__build_clap NAME HAS_UI)
540542
endif()
541543
endfunction()
542544

545+
# dpf__build_static
546+
# ------------------------------------------------------------------------------
547+
#
548+
# Add build rules for a static library.
549+
#
550+
function(dpf__build_static NAME HAS_UI)
551+
dpf__create_dummy_source_list(_no_srcs)
552+
553+
dpf__add_module("${NAME}-static" ${_no_srcs} STATIC)
554+
dpf__add_plugin_main("${NAME}-static" "static")
555+
dpf__add_ui_main("${NAME}-static" "static" "${HAS_UI}")
556+
target_link_libraries("${NAME}-static" PRIVATE "${NAME}-dsp" "${NAME}-ui")
557+
558+
get_target_property(dsp_srcs "${NAME}-dsp" SOURCES)
559+
get_target_property(ui_srcs "${NAME}-ui" SOURCES)
560+
foreach(src ${dsp_srcs})
561+
target_sources("${NAME}-static" PRIVATE ${src})
562+
endforeach()
563+
foreach(src ${ui_srcs})
564+
target_sources("${NAME}-static" PRIVATE ${src})
565+
endforeach()
566+
567+
set_target_properties("${NAME}-static" PROPERTIES
568+
ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin/$<0:>"
569+
OUTPUT_NAME "${NAME}"
570+
PREFIX "")
571+
endfunction()
572+
543573
# dpf__add_dgl_cairo
544574
# ------------------------------------------------------------------------------
545575
#

dpf/distrho/DistrhoUIMain.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* DISTRHO Plugin Framework (DPF)
3-
* Copyright (C) 2012-2022 Filipe Coelho <falktx@falktx.com>
3+
* Copyright (C) 2012-2023 Filipe Coelho <falktx@falktx.com>
44
*
55
* Permission to use, copy, modify, and/or distribute this software for any purpose with
66
* or without fee is hereby granted, provided that the above copyright notice and this
@@ -16,10 +16,13 @@
1616

1717
#include "src/DistrhoUI.cpp"
1818

19-
#if ! DISTRHO_PLUGIN_HAS_UI
19+
// we might be building a plugin with external UI, which works on most formats except VST2/3
20+
#if ! DISTRHO_PLUGIN_HAS_UI && ! defined(DISTRHO_PLUGIN_VST_HPP_INCLUDED)
2021
# error Trying to build UI without DISTRHO_PLUGIN_HAS_UI set to 1
2122
#endif
2223

24+
#if DISTRHO_PLUGIN_HAS_UI
25+
2326
#if defined(DISTRHO_PLUGIN_TARGET_CARLA)
2427
# define DISTRHO_PLUGIN_AND_UI_IN_SINGLE_OBJECT 1
2528
#elif defined(DISTRHO_PLUGIN_TARGET_CLAP)
@@ -51,3 +54,5 @@
5154
# endif
5255
# include "src/DistrhoUtils.cpp"
5356
#endif
57+
58+
#endif

dpf/distrho/src/DistrhoUIInternal.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,13 @@ class UIExporter
261261
uiData->app.quit();
262262
}
263263

264+
#if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI
265+
void repaint()
266+
{
267+
uiData->window->repaint();
268+
}
269+
#endif
270+
264271
// -------------------------------------------------------------------
265272

266273
#if defined(DISTRHO_OS_MAC) || defined(DISTRHO_OS_WINDOWS)

dpf/distrho/src/DistrhoUtils.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ const char* getPluginFormatName() noexcept
9999
return "VST3";
100100
#elif defined(DISTRHO_PLUGIN_TARGET_CLAP)
101101
return "CLAP";
102+
#elif defined(DISTRHO_PLUGIN_TARGET_STATIC) && defined(DISTRHO_PLUGIN_TARGET_STATIC_NAME)
103+
return DISTRHO_PLUGIN_TARGET_STATIC_NAME;
102104
#else
103105
return "Unknown";
104106
#endif

dpf/distrho/src/jackbridge/JackBridge.cpp

Lines changed: 91 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ typedef int (JACKSYM_API *JackSymSyncCallback)(jack_transport_state_t, jack_pos
101101
typedef void (JACKSYM_API *JackSymTimebaseCallback)(jack_transport_state_t, jack_nframes_t, jack_position_t*, int, void*);
102102
typedef void (JACKSYM_API *JackSymSessionCallback)(jack_session_event_t*, void*);
103103
typedef void (JACKSYM_API *JackSymPropertyChangeCallback)(jack_uuid_t, const char*, jack_property_change_t, void*);
104+
typedef void* (JACKSYM_API *JackSymThreadCallback)(void*);
104105

105106
typedef void (JACKSYM_API *jacksym_get_version)(int*, int*, int*, int*);
106107
typedef const char* (JACKSYM_API *jacksym_get_version_string)(void);
@@ -217,6 +218,10 @@ typedef int (JACKSYM_API *jacksym_remove_properties)(jack_client_t*, jack_uuid_
217218
typedef int (JACKSYM_API *jacksym_remove_all_properties)(jack_client_t*);
218219
typedef int (JACKSYM_API *jacksym_set_property_change_callback)(jack_client_t*, JackSymPropertyChangeCallback, void*);
219220

221+
typedef bool (JACKSYM_API *jacksym_set_process_thread)(jack_client_t*, JackSymThreadCallback callback, void*);
222+
typedef jack_nframes_t (JACKSYM_API *jacksym_cycle_wait)(jack_client_t*);
223+
typedef void (JACKSYM_API *jacksym_cycle_signal)(jack_client_t*, int);
224+
220225
#ifdef __WINE__
221226
typedef int (JACKSYM_API *jacksym_thread_creator_t)(pthread_t*, const pthread_attr_t*, void *(*)(void*), void*);
222227
typedef void (JACKSYM_API *jacksym_set_thread_creator)(jacksym_thread_creator_t);
@@ -344,6 +349,10 @@ struct JackBridge {
344349
jacksym_remove_all_properties remove_all_properties_ptr;
345350
jacksym_set_property_change_callback set_property_change_callback_ptr;
346351

352+
jacksym_set_process_thread set_process_thread_ptr;
353+
jacksym_cycle_wait cycle_wait_ptr;
354+
jacksym_cycle_signal cycle_signal_ptr;
355+
347356
#ifdef __WINE__
348357
jacksym_set_thread_creator set_thread_creator_ptr;
349358
#endif
@@ -441,7 +450,10 @@ struct JackBridge {
441450
remove_property_ptr(nullptr),
442451
remove_properties_ptr(nullptr),
443452
remove_all_properties_ptr(nullptr),
444-
set_property_change_callback_ptr(nullptr)
453+
set_property_change_callback_ptr(nullptr),
454+
set_process_thread_ptr(nullptr),
455+
cycle_wait_ptr(nullptr),
456+
cycle_signal_ptr(nullptr)
445457
#ifdef __WINE__
446458
, set_thread_creator_ptr(nullptr)
447459
#endif
@@ -587,6 +599,10 @@ struct JackBridge {
587599
LIB_SYMBOL(remove_all_properties)
588600
LIB_SYMBOL(set_property_change_callback)
589601

602+
LIB_SYMBOL(set_process_thread)
603+
LIB_SYMBOL(cycle_wait)
604+
LIB_SYMBOL(cycle_signal)
605+
590606
#ifdef __WINE__
591607
LIB_SYMBOL(set_thread_creator)
592608
#endif
@@ -650,6 +666,7 @@ struct WineBridge {
650666
JackTimebaseCallback timebase_cb;
651667
JackSessionCallback session_cb;
652668
JackPropertyChangeCallback prop_change_cb;
669+
JackThreadCallback proc_thread_cb;
653670

654671
void* (*creator_func)(void*);
655672
void* creator_arg;
@@ -676,6 +693,7 @@ struct WineBridge {
676693
timebase_cb(nullptr),
677694
session_cb(nullptr),
678695
prop_change_cb(nullptr),
696+
proc_thread_cb(nullptr),
679697
creator_func(nullptr),
680698
creator_arg(nullptr),
681699
creator_handle(nullptr),
@@ -687,24 +705,25 @@ struct WineBridge {
687705
return bridge;
688706
}
689707

690-
void set_latency (JackLatencyCallback cb) noexcept { latency_cb = cb; }
691-
void set_process (JackProcessCallback cb) noexcept { process_cb = cb; }
692-
void set_thread_init (JackThreadInitCallback cb) noexcept { thread_init_cb = cb; }
693-
void set_graph_order (JackGraphOrderCallback cb) noexcept { graph_order_cb = cb; }
694-
void set_xrun (JackXRunCallback cb) noexcept { xrun_cb = cb; }
695-
void set_bufsize (JackBufferSizeCallback cb) noexcept { bufsize_cb = cb; }
696-
void set_srate (JackSampleRateCallback cb) noexcept { srate_cb = cb; }
697-
void set_port_reg (JackPortRegistrationCallback cb) noexcept { port_reg_cb = cb; }
698-
void set_client_reg (JackClientRegistrationCallback cb) noexcept { client_reg_cb = cb; }
699-
void set_port_conn (JackPortConnectCallback cb) noexcept { port_conn_cb = cb; }
700-
void set_port_rename (JackPortRenameCallback cb) noexcept { port_rename_cb = cb; }
701-
void set_freewheel (JackFreewheelCallback cb) noexcept { freewheel_cb = cb; }
702-
void set_shutdown (JackShutdownCallback cb) noexcept { shutdown_cb = cb; }
703-
void set_info_shutdown(JackInfoShutdownCallback cb) noexcept { info_shutdown_cb = cb; }
704-
void set_sync (JackSyncCallback cb) noexcept { sync_cb = cb; }
705-
void set_timebase (JackTimebaseCallback cb) noexcept { timebase_cb = cb; }
706-
void set_session (JackSessionCallback cb) noexcept { session_cb = cb; }
707-
void set_prop_change (JackPropertyChangeCallback cb) noexcept { prop_change_cb = cb; }
708+
void set_latency (JackLatencyCallback cb) noexcept { latency_cb = cb; }
709+
void set_process (JackProcessCallback cb) noexcept { process_cb = cb; }
710+
void set_thread_init (JackThreadInitCallback cb) noexcept { thread_init_cb = cb; }
711+
void set_graph_order (JackGraphOrderCallback cb) noexcept { graph_order_cb = cb; }
712+
void set_xrun (JackXRunCallback cb) noexcept { xrun_cb = cb; }
713+
void set_bufsize (JackBufferSizeCallback cb) noexcept { bufsize_cb = cb; }
714+
void set_srate (JackSampleRateCallback cb) noexcept { srate_cb = cb; }
715+
void set_port_reg (JackPortRegistrationCallback cb) noexcept { port_reg_cb = cb; }
716+
void set_client_reg (JackClientRegistrationCallback cb) noexcept { client_reg_cb = cb; }
717+
void set_port_conn (JackPortConnectCallback cb) noexcept { port_conn_cb = cb; }
718+
void set_port_rename (JackPortRenameCallback cb) noexcept { port_rename_cb = cb; }
719+
void set_freewheel (JackFreewheelCallback cb) noexcept { freewheel_cb = cb; }
720+
void set_shutdown (JackShutdownCallback cb) noexcept { shutdown_cb = cb; }
721+
void set_info_shutdown (JackInfoShutdownCallback cb) noexcept { info_shutdown_cb = cb; }
722+
void set_sync (JackSyncCallback cb) noexcept { sync_cb = cb; }
723+
void set_timebase (JackTimebaseCallback cb) noexcept { timebase_cb = cb; }
724+
void set_session (JackSessionCallback cb) noexcept { session_cb = cb; }
725+
void set_prop_change (JackPropertyChangeCallback cb) noexcept { prop_change_cb = cb; }
726+
void set_process_thread(JackThreadCallback cb) noexcept { proc_thread_cb = cb; }
708727

709728
static DWORD WINAPI thread_creator_helper(LPVOID)
710729
{
@@ -832,6 +851,11 @@ struct WineBridge {
832851
return getInstance().prop_change_cb(subject, key, change, arg);
833852
}
834853

854+
static void* process_thread(void* arg)
855+
{
856+
return getInstance().proc_thread_cb(arg);
857+
}
858+
835859
DISTRHO_DECLARE_NON_COPYABLE(WineBridge);
836860
};
837861

@@ -2292,8 +2316,54 @@ bool jackbridge_set_property_change_callback(jack_client_t* client, JackProperty
22922316
return false;
22932317
}
22942318

2319+
bool jackbridge_set_process_thread(jack_client_t* client, JackThreadCallback callback, void* arg)
2320+
{
2321+
#if defined(JACKBRIDGE_DUMMY)
2322+
#elif defined(JACKBRIDGE_DIRECT)
2323+
return (jack_set_process_thread(client, callback, arg) == 0);
2324+
#else
2325+
if (usingRealJACK && getBridgeInstance().set_process_thread_ptr != nullptr)
2326+
{
2327+
# ifdef __WINE__
2328+
WineBridge::getInstance().set_process_thread(callback);
2329+
return (getBridgeInstance().set_process_thread_ptr(client, WineBridge::process_thread, arg) == 0);
2330+
# else
2331+
return (getBridgeInstance().set_process_thread_ptr(client, callback, arg) == 0);
2332+
# endif
2333+
}
2334+
#endif
2335+
return false;
2336+
}
2337+
2338+
jack_nframes_t jackbridge_cycle_wait(jack_client_t* client)
2339+
{
2340+
#if defined(JACKBRIDGE_DUMMY)
2341+
#elif defined(JACKBRIDGE_DIRECT)
2342+
return jack_cycle_wait(client);
2343+
#else
2344+
if (usingRealJACK)
2345+
if (getBridgeInstance().cycle_wait_ptr != nullptr)
2346+
return getBridgeInstance().cycle_wait_ptr(client);
2347+
#endif
2348+
return 0;
2349+
}
2350+
2351+
void jackbridge_cycle_signal(jack_client_t* client, int status)
2352+
{
2353+
#if defined(JACKBRIDGE_DUMMY)
2354+
#elif defined(JACKBRIDGE_DIRECT)
2355+
jack_cycle_signal(client, status);
2356+
#else
2357+
if (usingRealJACK)
2358+
if (getBridgeInstance().cycle_signal_ptr != nullptr)
2359+
getBridgeInstance().cycle_signal_ptr(client, status);
2360+
#endif
2361+
}
2362+
22952363
// -----------------------------------------------------------------------------
22962364

2365+
#ifndef JACKBRIDGE_SKIP_NATIVE_UTILS
2366+
22972367
START_NAMESPACE_DISTRHO
22982368

22992369
bool isUsingNativeAudio() noexcept
@@ -2388,4 +2458,6 @@ bool requestMIDI()
23882458

23892459
END_NAMESPACE_DISTRHO
23902460

2461+
#endif // JACKBRIDGE_SKIP_NATIVE_UTILS
2462+
23912463
// -----------------------------------------------------------------------------

dpf/distrho/src/jackbridge/JackBridge.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ typedef int (JACKBRIDGE_API *JackSyncCallback)(jack_transport_state_t state, ja
287287
typedef void (JACKBRIDGE_API *JackTimebaseCallback)(jack_transport_state_t state, jack_nframes_t nframes, jack_position_t* pos, int new_pos, void* arg);
288288
typedef void (JACKBRIDGE_API *JackSessionCallback)(jack_session_event_t* event, void* arg);
289289
typedef void (JACKBRIDGE_API *JackPropertyChangeCallback)(jack_uuid_t subject, const char* key, jack_property_change_t change, void* arg);
290+
typedef void *(JACKBRIDGE_API *JackThreadCallback)(void* arg);
290291

291292
} // extern "C"
292293

@@ -409,4 +410,8 @@ JACKBRIDGE_API int jackbridge_remove_properties(jack_client_t* client, jack_uui
409410
JACKBRIDGE_API bool jackbridge_remove_all_properties(jack_client_t* client);
410411
JACKBRIDGE_API bool jackbridge_set_property_change_callback(jack_client_t* client, JackPropertyChangeCallback callback, void* arg);
411412

413+
JACKBRIDGE_API bool jackbridge_set_process_thread(jack_client_t* client, JackThreadCallback callback, void* arg);
414+
JACKBRIDGE_API jack_nframes_t jackbridge_cycle_wait(jack_client_t* client);
415+
JACKBRIDGE_API void jackbridge_cycle_signal(jack_client_t* client, int status);
416+
412417
#endif // JACKBRIDGE_HPP_INCLUDED

dpf/distrho/src/jackbridge/RtAudioBridge.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* RtAudio Bridge for DPF
3-
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com>
3+
* Copyright (C) 2021-2023 Filipe Coelho <falktx@falktx.com>
44
*
55
* Permission to use, copy, modify, and/or distribute this software for any purpose with
66
* or without fee is hereby granted, provided that the above copyright notice and this
@@ -162,7 +162,6 @@ struct RtAudioBridge : NativeBridge {
162162

163163
bool isMIDIEnabled() const override
164164
{
165-
d_stdout("%s %d", __PRETTY_FUNCTION__, __LINE__);
166165
#if defined(RTMIDI_API_TYPE) && DISTRHO_PLUGIN_WANT_MIDI_INPUT
167166
if (!midiIns.empty())
168167
return true;

plugins/Nekobi/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ include ../../dpf/Makefile.plugins.mk
2929
# --------------------------------------------------------------
3030
# Extra flags
3131

32+
ifneq ($(WASM),true)
3233
BASE_FLAGS += -pthread
3334
LINK_FLAGS += -pthread
35+
endif
3436

3537
# --------------------------------------------------------------
3638
# Enable all possible plugin types

0 commit comments

Comments
 (0)