Skip to content

Commit 2fde292

Browse files
committed
Replace shared lib build option with a minimal interface
Signed-off-by: falkTX <falktx@falktx.com>
1 parent a9718ea commit 2fde292

File tree

10 files changed

+287
-56
lines changed

10 files changed

+287
-56
lines changed

Makefile.plugins.mk

Lines changed: 40 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -375,19 +375,19 @@ else
375375
jack = $(TARGET_DIR)/$(NAME)$(APP_EXT)
376376
endif
377377

378-
ladspa_dsp = $(TARGET_DIR)/$(NAME)-ladspa$(LIB_EXT)
378+
clap = $(TARGET_DIR)/$(CLAP_FILENAME)
379379
dssi_dsp = $(TARGET_DIR)/$(NAME)-dssi$(LIB_EXT)
380380
dssi_ui = $(TARGET_DIR)/$(NAME)-dssi/$(NAME)_ui$(APP_EXT)
381+
ladspa_dsp = $(TARGET_DIR)/$(NAME)-ladspa$(LIB_EXT)
381382
lv2 = $(TARGET_DIR)/$(NAME).lv2/$(NAME)$(LIB_EXT)
382383
lv2_dsp = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_dsp$(LIB_EXT)
383384
lv2_ui = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_ui$(LIB_EXT)
385+
mapi = $(TARGET_DIR)/$(NAME)$(LIB_EXT)
386+
static = $(TARGET_DIR)/$(NAME).a
384387
vst2 = $(TARGET_DIR)/$(VST2_FILENAME)
385388
ifneq ($(VST3_FILENAME),)
386389
vst3 = $(TARGET_DIR)/$(VST3_FILENAME)
387390
endif
388-
clap = $(TARGET_DIR)/$(CLAP_FILENAME)
389-
shared = $(TARGET_DIR)/$(NAME)$(LIB_EXT)
390-
static = $(TARGET_DIR)/$(NAME).a
391391

392392
ifeq ($(MACOS),true)
393393
BUNDLE_RESOURCES = Info.plist PkgInfo Resources/empty.lproj
@@ -414,45 +414,45 @@ endif
414414

415415
ifeq ($(MACOS),true)
416416
SYMBOLS_AU = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/au.exp
417-
SYMBOLS_LADSPA = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/ladspa.exp
417+
SYMBOLS_CLAP = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/clap.exp
418418
SYMBOLS_DSSI = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/dssi.exp
419+
SYMBOLS_LADSPA = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/ladspa.exp
420+
SYMBOLS_LV2 = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/lv2.exp
419421
SYMBOLS_LV2DSP = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/lv2-dsp.exp
420422
SYMBOLS_LV2UI = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/lv2-ui.exp
421-
SYMBOLS_LV2 = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/lv2.exp
423+
SYMBOLS_MAPI = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/mapi.exp
422424
SYMBOLS_VST2 = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/vst2.exp
423425
SYMBOLS_VST3 = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/vst3.exp
424-
SYMBOLS_CLAP = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/clap.exp
425-
SYMBOLS_SHARED = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/shared.exp
426426
else ifeq ($(WASM),true)
427-
SYMBOLS_LADSPA = -sEXPORTED_FUNCTIONS="['ladspa_descriptor']"
427+
SYMBOLS_CLAP = -sEXPORTED_FUNCTIONS="['clap_entry']"
428428
SYMBOLS_DSSI = -sEXPORTED_FUNCTIONS="['ladspa_descriptor','dssi_descriptor']"
429+
SYMBOLS_LADSPA = -sEXPORTED_FUNCTIONS="['ladspa_descriptor']"
430+
SYMBOLS_LV2 = -sEXPORTED_FUNCTIONS="['lv2_descriptor','lv2_generate_ttl','lv2ui_descriptor']"
429431
SYMBOLS_LV2DSP = -sEXPORTED_FUNCTIONS="['lv2_descriptor','lv2_generate_ttl']"
430432
SYMBOLS_LV2UI = -sEXPORTED_FUNCTIONS="['lv2ui_descriptor']"
431-
SYMBOLS_LV2 = -sEXPORTED_FUNCTIONS="['lv2_descriptor','lv2_generate_ttl','lv2ui_descriptor']"
433+
SYMBOLS_MAPI = -sEXPORTED_FUNCTIONS="['mapi_create','mapi_process','mapi_set_parameter','mapi_set_state','mapi_destroy']"
432434
SYMBOLS_VST2 = -sEXPORTED_FUNCTIONS="['VSTPluginMain']"
433435
SYMBOLS_VST3 = -sEXPORTED_FUNCTIONS="['GetPluginFactory','ModuleEntry','ModuleExit']"
434-
SYMBOLS_CLAP = -sEXPORTED_FUNCTIONS="['clap_entry']"
435-
SYMBOLS_SHARED = -sEXPORTED_FUNCTIONS="['createSharedPlugin']"
436436
else ifeq ($(WINDOWS),true)
437-
SYMBOLS_LADSPA = $(DPF_PATH)/utils/symbols/ladspa.def
437+
SYMBOLS_CLAP = $(DPF_PATH)/utils/symbols/clap.def
438438
SYMBOLS_DSSI = $(DPF_PATH)/utils/symbols/dssi.def
439+
SYMBOLS_LADSPA = $(DPF_PATH)/utils/symbols/ladspa.def
440+
SYMBOLS_LV2 = $(DPF_PATH)/utils/symbols/lv2.def
439441
SYMBOLS_LV2DSP = $(DPF_PATH)/utils/symbols/lv2-dsp.def
440442
SYMBOLS_LV2UI = $(DPF_PATH)/utils/symbols/lv2-ui.def
441-
SYMBOLS_LV2 = $(DPF_PATH)/utils/symbols/lv2.def
443+
SYMBOLS_MAPI = $(DPF_PATH)/utils/symbols/mapi.def
442444
SYMBOLS_VST2 = $(DPF_PATH)/utils/symbols/vst2.def
443445
SYMBOLS_VST3 = $(DPF_PATH)/utils/symbols/vst3.def
444-
SYMBOLS_CLAP = $(DPF_PATH)/utils/symbols/clap.def
445-
SYMBOLS_SHARED = $(DPF_PATH)/utils/symbols/shared.def
446446
else ifneq ($(DEBUG),true)
447-
SYMBOLS_LADSPA = -Wl,--version-script=$(DPF_PATH)/utils/symbols/ladspa.version
447+
SYMBOLS_CLAP = -Wl,--version-script=$(DPF_PATH)/utils/symbols/clap.version
448448
SYMBOLS_DSSI = -Wl,--version-script=$(DPF_PATH)/utils/symbols/dssi.version
449+
SYMBOLS_LADSPA = -Wl,--version-script=$(DPF_PATH)/utils/symbols/ladspa.version
450+
SYMBOLS_LV2 = -Wl,--version-script=$(DPF_PATH)/utils/symbols/lv2.version
449451
SYMBOLS_LV2DSP = -Wl,--version-script=$(DPF_PATH)/utils/symbols/lv2-dsp.version
450452
SYMBOLS_LV2UI = -Wl,--version-script=$(DPF_PATH)/utils/symbols/lv2-ui.version
451-
SYMBOLS_LV2 = -Wl,--version-script=$(DPF_PATH)/utils/symbols/lv2.version
453+
SYMBOLS_MAPI = -Wl,--version-script=$(DPF_PATH)/utils/symbols/mapi.version
452454
SYMBOLS_VST2 = -Wl,--version-script=$(DPF_PATH)/utils/symbols/vst2.version
453455
SYMBOLS_VST3 = -Wl,--version-script=$(DPF_PATH)/utils/symbols/vst3.version
454-
SYMBOLS_CLAP = -Wl,--version-script=$(DPF_PATH)/utils/symbols/clap.version
455-
SYMBOLS_SHARED = -Wl,--version-script=$(DPF_PATH)/utils/symbols/shared.version
456456
endif
457457

458458
# ---------------------------------------------------------------------------------------------------------------------
@@ -811,6 +811,16 @@ endif
811811
@echo "Creating AU component for $(NAME)"
812812
$(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(EXTRA_LIBS) $(EXTRA_DSP_LIBS) $(EXTRA_UI_LIBS) $(DGL_LIBS) -framework AudioToolbox -framework AudioUnit -framework CoreFoundation $(SHARED) $(SYMBOLS_AU) -o $@
813813

814+
# ---------------------------------------------------------------------------------------------------------------------
815+
# MAPI
816+
817+
mapi: $(mapi)
818+
819+
$(mapi): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_MAPI.cpp.o
820+
-@mkdir -p $(shell dirname $@)
821+
@echo "Creating MAPI for $(NAME)"
822+
$(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(EXTRA_LIBS) $(EXTRA_DSP_LIBS) $(EXTRA_UI_LIBS) $(DGL_LIBS) $(SHARED) $(SYMBOLS_MAPI) -o $@
823+
814824
# ---------------------------------------------------------------------------------------------------------------------
815825
# Export
816826

@@ -823,20 +833,6 @@ endif
823833
@echo "Creating export tool for $(NAME)"
824834
$(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(EXTRA_LIBS) $(EXTRA_DSP_LIBS) $(EXTRA_UI_LIBS) $(DGL_LIBS) -o $@
825835

826-
# ---------------------------------------------------------------------------------------------------------------------
827-
# Shared
828-
829-
shared: $(shared)
830-
831-
ifeq ($(HAVE_DGL),true)
832-
$(shared): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_SHARED.cpp.o $(BUILD_DIR)/DistrhoUIMain_SHARED.cpp.o $(DGL_LIB) $(DGL_LIB_SHARED)
833-
else
834-
$(shared): $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginMain_SHARED.cpp.o
835-
endif
836-
-@mkdir -p $(shell dirname $@)
837-
@echo "Creating shared library for $(NAME)"
838-
$(SILENT)$(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) $(EXTRA_LIBS) $(EXTRA_DSP_LIBS) $(EXTRA_UI_LIBS) $(DGL_LIBS) $(SHARED) $(SYMBOLS_SHARED) -o $@
839-
840836
# ---------------------------------------------------------------------------------------------------------------------
841837
# Static
842838

@@ -885,28 +881,27 @@ ifneq ($(UI_TYPE),)
885881
-include $(OBJS_UI:%.o=%.d)
886882
endif
887883

884+
-include $(BUILD_DIR)/DistrhoPluginMain_AU.cpp.d
885+
-include $(BUILD_DIR)/DistrhoPluginMain_CLAP.cpp.d
886+
-include $(BUILD_DIR)/DistrhoPluginMain_DSSI.cpp.d
887+
-include $(BUILD_DIR)/DistrhoPluginMain_Export.cpp.d
888888
-include $(BUILD_DIR)/DistrhoPluginMain_JACK.cpp.d
889889
-include $(BUILD_DIR)/DistrhoPluginMain_LADSPA.cpp.d
890-
-include $(BUILD_DIR)/DistrhoPluginMain_DSSI.cpp.d
891890
-include $(BUILD_DIR)/DistrhoPluginMain_LV2.cpp.d
892891
-include $(BUILD_DIR)/DistrhoPluginMain_LV2_single_obj.cpp.d
892+
-include $(BUILD_DIR)/DistrhoPluginMain_MAPI.cpp.d
893+
-include $(BUILD_DIR)/DistrhoPluginMain_STATIC.cpp.d
893894
-include $(BUILD_DIR)/DistrhoPluginMain_VST2.cpp.d
894895
-include $(BUILD_DIR)/DistrhoPluginMain_VST3.cpp.d
895-
-include $(BUILD_DIR)/DistrhoPluginMain_CLAP.cpp.d
896-
-include $(BUILD_DIR)/DistrhoPluginMain_AU.cpp.d
897-
-include $(BUILD_DIR)/DistrhoPluginMain_Export.cpp.d
898-
-include $(BUILD_DIR)/DistrhoPluginMain_SHARED.cpp.d
899-
-include $(BUILD_DIR)/DistrhoPluginMain_STATIC.cpp.d
900896

901-
-include $(BUILD_DIR)/DistrhoUIMain_JACK.cpp.d
897+
-include $(BUILD_DIR)/DistrhoUIMain_AU.cpp.d
898+
-include $(BUILD_DIR)/DistrhoUIMain_CLAP.cpp.d
902899
-include $(BUILD_DIR)/DistrhoUIMain_DSSI.cpp.d
900+
-include $(BUILD_DIR)/DistrhoUIMain_JACK.cpp.d
903901
-include $(BUILD_DIR)/DistrhoUIMain_LV2.cpp.d
904902
-include $(BUILD_DIR)/DistrhoUIMain_LV2_single_obj.cpp.d
903+
-include $(BUILD_DIR)/DistrhoUIMain_STATIC.cpp.d
905904
-include $(BUILD_DIR)/DistrhoUIMain_VST2.cpp.d
906905
-include $(BUILD_DIR)/DistrhoUIMain_VST3.cpp.d
907-
-include $(BUILD_DIR)/DistrhoUIMain_CLAP.cpp.d
908-
-include $(BUILD_DIR)/DistrhoUIMain_AU.cpp.d
909-
-include $(BUILD_DIR)/DistrhoUIMain_SHARED.cpp.d
910-
-include $(BUILD_DIR)/DistrhoUIMain_STATIC.cpp.d
911906

912907
# ---------------------------------------------------------------------------------------------------------------------

distrho/DistrhoPluginMain.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* DISTRHO Plugin Framework (DPF)
3-
* Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com>
3+
* Copyright (C) 2012-2025 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
@@ -29,15 +29,14 @@
2929
#elif defined(DISTRHO_PLUGIN_TARGET_LV2)
3030
# include "src/DistrhoPluginLV2.cpp"
3131
# include "src/DistrhoPluginLV2export.cpp"
32+
#elif defined(DISTRHO_PLUGIN_TARGET_MAPI)
33+
# include "src/DistrhoPluginMAPI.cpp"
3234
#elif defined(DISTRHO_PLUGIN_TARGET_VST2)
3335
# include "src/DistrhoPluginVST2.cpp"
3436
#elif defined(DISTRHO_PLUGIN_TARGET_VST3)
3537
# include "src/DistrhoPluginVST3.cpp"
3638
#elif defined(DISTRHO_PLUGIN_TARGET_EXPORT)
3739
# include "src/DistrhoPluginExport.cpp"
38-
#elif defined(DISTRHO_PLUGIN_TARGET_SHARED)
39-
DISTRHO_PLUGIN_EXPORT DISTRHO_NAMESPACE::Plugin* createSharedPlugin();
40-
DISTRHO_PLUGIN_EXPORT DISTRHO_NAMESPACE::Plugin* createSharedPlugin() { return DISTRHO_NAMESPACE::createPlugin(); }
4140
#elif defined(DISTRHO_PLUGIN_TARGET_STATIC)
4241
START_NAMESPACE_DISTRHO
4342
Plugin* createStaticPlugin() { return createPlugin(); }

distrho/src/DistrhoPluginMAPI.cpp

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
/*
2+
* DISTRHO Plugin Framework (DPF)
3+
* Copyright (C) 2012-2025 Filipe Coelho <falktx@falktx.com>
4+
*
5+
* Permission to use, copy, modify, and/or distribute this software for any purpose with
6+
* or without fee is hereby granted, provided that the above copyright notice and this
7+
* permission notice appear in all copies.
8+
*
9+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
10+
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
11+
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
12+
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
13+
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14+
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15+
*/
16+
17+
#include "DistrhoPluginInternal.hpp"
18+
19+
#ifndef DISTRHO_NO_WARNINGS
20+
# if DISTRHO_PLUGIN_WANT_PARAMETER_VALUE_CHANGE_REQUEST
21+
# error Cannot use parameter value change request with MAPI
22+
# endif
23+
# if DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_MIDI_OUTPUT
24+
# error Cannot use MIDI with MAPI
25+
# endif
26+
# if DISTRHO_PLUGIN_WANT_FULL_STATE
27+
# error Cannot use full state with MAPI
28+
# endif
29+
# if DISTRHO_PLUGIN_WANT_TIMEPOS
30+
# error Cannot use time position with MAPI
31+
# endif
32+
#endif
33+
34+
#include "mapi/mapi.h"
35+
36+
START_NAMESPACE_DISTRHO
37+
38+
// --------------------------------------------------------------------------------------------------------------------
39+
40+
class PluginMAPI
41+
{
42+
public:
43+
PluginMAPI()
44+
: fPlugin(nullptr, nullptr, nullptr, nullptr)
45+
{
46+
fPlugin.activate();
47+
}
48+
49+
~PluginMAPI() noexcept
50+
{
51+
fPlugin.deactivate();
52+
}
53+
54+
// ----------------------------------------------------------------------------------------------------------------
55+
56+
void process(const float* const* ins, float** outs, unsigned int frames)
57+
{
58+
#if DISTRHO_PLUGIN_WANT_MIDI_INPUT
59+
fPlugin.run(ins, outs, frames, nullptr, 0);
60+
#else
61+
fPlugin.run(const_cast<const float**>(ins), outs, frames);
62+
#endif
63+
64+
updateParameterOutputsAndTriggers();
65+
}
66+
67+
void setParameter(unsigned int index, float value)
68+
{
69+
fPlugin.setParameterValue(index, fPlugin.getParameterRanges(index).getUnnormalizedValue(value));
70+
}
71+
72+
#if DISTRHO_PLUGIN_WANT_STATE
73+
void setState(const char* key, const char* value)
74+
{
75+
fPlugin.setState(key, value);
76+
}
77+
#endif
78+
79+
// ----------------------------------------------------------------------------------------------------------------
80+
81+
private:
82+
PluginExporter fPlugin;
83+
84+
void updateParameterOutputsAndTriggers()
85+
{
86+
float value;
87+
88+
for (uint32_t i = 0, count = fPlugin.getParameterCount(); i < count; ++i)
89+
{
90+
if ((fPlugin.getParameterHints(i) & kParameterIsTrigger) == kParameterIsTrigger)
91+
{
92+
// NOTE: no trigger support in MAPI, simulate it here
93+
value = fPlugin.getParameterRanges(i).def;
94+
95+
if (d_isEqual(value, fPlugin.getParameterValue(i)))
96+
continue;
97+
98+
fPlugin.setParameterValue(i, value);
99+
}
100+
}
101+
}
102+
};
103+
104+
// --------------------------------------------------------------------------------------------------------------------
105+
106+
MAPI_EXPORT
107+
mapi_handle_t mapi_create(unsigned int sample_rate)
108+
{
109+
if (d_nextBufferSize == 0)
110+
{
111+
#if defined(_DARKGLASS_DEVICE_PABLITO)
112+
d_nextBufferSize = 16;
113+
#elif defined(__MOD_DEVICES__)
114+
d_nextBufferSize = 128;
115+
#else
116+
d_nextBufferSize = 2048;
117+
#endif
118+
}
119+
120+
d_nextSampleRate = sample_rate;
121+
122+
return new PluginMAPI();
123+
}
124+
125+
MAPI_EXPORT
126+
void mapi_process(mapi_handle_t handle,
127+
const float* const* ins,
128+
float** outs,
129+
unsigned int frames)
130+
{
131+
static_cast<PluginMAPI*>(handle)->process(ins, outs, frames);
132+
}
133+
134+
MAPI_EXPORT
135+
void mapi_set_parameter(mapi_handle_t handle, unsigned int index, float value)
136+
{
137+
static_cast<PluginMAPI*>(handle)->setParameter(index, value);
138+
}
139+
140+
#if DISTRHO_PLUGIN_WANT_STATE
141+
MAPI_EXPORT
142+
void mapi_set_state(mapi_handle_t handle, const char* key, const char* value)
143+
{
144+
static_cast<PluginMAPI*>(handle)->setState(key, value);
145+
}
146+
#endif
147+
148+
MAPI_EXPORT
149+
void mapi_destroy(mapi_handle_t handle)
150+
{
151+
delete static_cast<PluginMAPI*>(handle);
152+
}
153+
154+
// --------------------------------------------------------------------------------------------------------------------
155+
156+
END_NAMESPACE_DISTRHO

0 commit comments

Comments
 (0)