Start work to allow split lv2 bundles of carla plugins

Signed-off-by: falkTX <falktx@falktx.com>
This commit is contained in:
falkTX 2019-11-23 13:33:33 +00:00
parent 3de829c37c
commit f9b59964a7
No known key found for this signature in database
GPG Key ID: CDBAA37ABC74FBA0
6 changed files with 190 additions and 0 deletions

View File

@ -146,6 +146,9 @@ endif
$(MODULEDIR)/dgl.wine.a: .FORCE
@$(MAKE) -C source/modules/dgl wine
$(MODULEDIR)/water.files.a: .FORCE
@$(MAKE) -C source/modules/water files
$(MODULEDIR)/%.a: .FORCE
@$(MAKE) -C source/modules/$*
@ -176,6 +179,9 @@ endif
libjack: libs
@$(MAKE) -C source/libjack
lv2-bundles: $(MODULEDIR)/native-plugins.a $(MODULEDIR)/audio_decoder.a $(MODULEDIR)/water.a
@$(MAKE) -C source/plugin bundles
plugin: backend bridges-plugin bridges-ui discovery
@$(MAKE) -C source/plugin

View File

@ -539,6 +539,9 @@ endif
# ---------------------------------------------------------------------------------------------------------------------
AUDIO_DECODER_LIBS = $(FFMPEG_LIBS)
AUDIO_DECODER_LIBS += $(SNDFILE_LIBS)
NATIVE_PLUGINS_LIBS += $(DGL_LIBS)
NATIVE_PLUGINS_LIBS += $(FFMPEG_LIBS)
NATIVE_PLUGINS_LIBS += $(SNDFILE_LIBS)

View File

@ -32,6 +32,7 @@ OBJS_win64 = $(OBJDIR)/$(MODULENAME).cpp.win64.o
# ---------------------------------------------------------------------------------------------------------------------
all: $(MODULEDIR)/$(MODULENAME).a $(MODULEDIR)/$(MODULENAME).files.a
files: $(MODULEDIR)/$(MODULENAME).files.a
arm32: $(MODULEDIR)/$(MODULENAME).arm32.a
posix32: $(MODULEDIR)/$(MODULENAME).posix32.a
posix64: $(MODULEDIR)/$(MODULENAME).posix64.a

View File

@ -21,9 +21,11 @@ BINDIR := $(CWD)/../bin
ifeq ($(DEBUG),true)
OBJDIR := $(CWD)/../build/plugin/Debug
MODULEDIR := $(CWD)/../build/modules/Debug
NPOBJDIR := $(CWD)/../build/native-plugins/Debug
else
OBJDIR := $(CWD)/../build/plugin/Release
MODULEDIR := $(CWD)/../build/modules/Release
NPOBJDIR := $(CWD)/../build/native-plugins/Release
endif
# ---------------------------------------------------------------------------------------------------------------------
@ -183,6 +185,23 @@ endif
# ---------------------------------------------------------------------------------------------------------------------
BUNDLES = audiogain files miditools
bundles: \
$(BINDIR)/carla-audiogain.lv2/carla$(LIB_EXT) \
$(BINDIR)/carla-files.lv2/carla$(LIB_EXT) \
$(BINDIR)/carla-miditools.lv2/carla$(LIB_EXT)
BUNDLE_LIBS += $(MODULEDIR)/water.files.a
BUNDLE_LIBS += $(WATER_LIBS)
BUNDLE_FILES_LIBS += $(MODULEDIR)/audio_decoder.a
BUNDLE_FILES_LIBS += $(MODULEDIR)/water.a
BUNDLE_FILES_LIBS += $(AUDIO_DECODER_LIBS)
BUNDLE_FILES_LIBS += $(WATER_LIBS)
# ---------------------------------------------------------------------------------------------------------------------
clean:
rm -f $(OBJDIR)/*.o $(TARGETS)
rm -f $(BINDIR)/carla.lv2/*.*
@ -217,6 +236,33 @@ $(BINDIR)/carla.lv2/carla-ui$(LIB_EXT): $(OBJDIR)/carla-lv2-ui.cpp.o $(LIBS_ui)
# ---------------------------------------------------------------------------------------------------------------------
$(BINDIR)/carla-audiogain.lv2/carla$(LIB_EXT): $(OBJDIR)/carla-lv2-bundles.cpp.audiogain.o \
$(NPOBJDIR)/audio-gain.c.o
-@mkdir -p $(BINDIR)/carla-audiogain.lv2
@echo "Linking carla-audiogain.lv2/carla$(LIB_EXT)"
@$(CXX) $^ $(SHARED) $(SYMBOLS_LV2) $(BUNDLE_LIBS) $(LINK_FLAGS) -ldl -o $@
$(BINDIR)/carla-files.lv2/carla$(LIB_EXT): $(OBJDIR)/carla-lv2-bundles.cpp.files.o \
$(NPOBJDIR)/audio-file.cpp.o \
$(NPOBJDIR)/midi-file.cpp.o
-@mkdir -p $(BINDIR)/carla-files.lv2
@echo "Linking carla-files.lv2/carla$(LIB_EXT)"
@$(CXX) $^ $(SHARED) $(SYMBOLS_LV2) $(BUNDLE_FILES_LIBS) $(LINK_FLAGS) -o $@
$(BINDIR)/carla-miditools.lv2/carla$(LIB_EXT): $(OBJDIR)/carla-lv2-bundles.cpp.miditools.o \
$(NPOBJDIR)/midi-channel-ab.c.o \
$(NPOBJDIR)/midi-channel-filter.c.o \
$(NPOBJDIR)/midi-channelize.c.o \
$(NPOBJDIR)/midi-gain.c.o \
$(NPOBJDIR)/midi-join.c.o \
$(NPOBJDIR)/midi-split.c.o \
$(NPOBJDIR)/midi-transpose.c.o
-@mkdir -p $(BINDIR)/carla-miditools.lv2
@echo "Linking carla-miditools.lv2/carla$(LIB_EXT)"
@$(CXX) $^ $(SHARED) $(SYMBOLS_LV2) $(BUNDLE_LIBS) $(LINK_FLAGS) -o $@
# ---------------------------------------------------------------------------------------------------------------------
$(BINDIR)/CarlaRack$(LIB_EXT): $(OBJDIR)/carla-vst.cpp.rack-syn.o $(OBJDIR)/carla-vst-export.cpp.o
-@mkdir -p $(BINDIR)
@echo "Linking CarlaRack$(LIB_EXT)"
@ -307,6 +353,23 @@ $(OBJDIR)/carla-lv2-ui.cpp.o: carla-lv2-ui.cpp
# ---------------------------------------------------------------------------------------------------------------------
$(OBJDIR)/carla-lv2-bundles.cpp.audiogain.o: carla-lv2-bundles.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling $< (audiogain)"
@$(CXX) $< $(BUILD_CXX_FLAGS) -DCARLA_BUNDLE_TYPE=1 -c -o $@
$(OBJDIR)/carla-lv2-bundles.cpp.files.o: carla-lv2-bundles.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling $< (files)"
@$(CXX) $< $(BUILD_CXX_FLAGS) -DCARLA_BUNDLE_TYPE=2 -c -o $@
$(OBJDIR)/carla-lv2-bundles.cpp.miditools.o: carla-lv2-bundles.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling $< (miditools)"
@$(CXX) $< $(BUILD_CXX_FLAGS) -DCARLA_BUNDLE_TYPE=3 -c -o $@
# ---------------------------------------------------------------------------------------------------------------------
$(OBJDIR)/carla-vst.cpp.rack-fx.o: carla-vst.cpp
-@mkdir -p $(OBJDIR)
@echo "Compiling $< (RackFX)"

View File

@ -44,6 +44,7 @@ struct PluginListManager {
for (std::size_t i=0, count = carla_getNativePluginCount(); i < count; ++i)
{
const NativePluginDescriptor* const desc(carla_getNativePluginDescriptor(i));
CARLA_SAFE_ASSERT_BREAK(desc != nullptr);
if (std::strcmp(desc->label, "audiofile" ) == 0 ||
std::strcmp(desc->label, "audiogain" ) == 0 ||

View File

@ -0,0 +1,116 @@
/*
* Carla Native Plugins
* Copyright (C) 2013-2019 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* For a full copy of the GNU General Public License see the doc/GPL.txt file.
*/
#ifndef CARLA_BUNDLE_TYPE
# error CARLA_BUNDLE_TYPE undefined
#endif
// --------------------------------------------------------------------------------------------------------------------
#include "carla-lv2.cpp"
// --------------------------------------------------------------------------------------------------------------------
#define MAX_PLUGIN_DESCRIPTORS 8
static const NativePluginDescriptor* sDescs[MAX_PLUGIN_DESCRIPTORS];
static std::size_t sDescsUsed = 0;
std::size_t carla_getNativePluginCount() noexcept
{
return sDescsUsed;
}
const NativePluginDescriptor* carla_getNativePluginDescriptor(const std::size_t index) noexcept
{
CARLA_SAFE_ASSERT_RETURN(index < sDescsUsed, nullptr);
return sDescs[index];
}
void carla_register_native_plugin(const NativePluginDescriptor* desc)
{
CARLA_SAFE_ASSERT_RETURN(sDescsUsed < MAX_PLUGIN_DESCRIPTORS,);
sDescs[sDescsUsed++] = desc;
}
// --------------------------------------------------------------------------------------------------------------------
static void carla_register_bundled_native_plugins(void);
static const struct PluginRegisterer {
PluginRegisterer() {
carla_register_bundled_native_plugins();
}
} sPluginRegisterer;
// --------------------------------------------------------------------------------------------------------------------
extern "C" {
// Simple plugins
void carla_register_native_plugin_audiogain(void);
void carla_register_native_plugin_bypass(void);
void carla_register_native_plugin_lfo(void);
void carla_register_native_plugin_midichanab(void);
void carla_register_native_plugin_midichanfilter(void);
void carla_register_native_plugin_midichannelize(void);
void carla_register_native_plugin_midigain(void);
void carla_register_native_plugin_midijoin(void);
void carla_register_native_plugin_midisplit(void);
void carla_register_native_plugin_midithrough(void);
void carla_register_native_plugin_miditranspose(void);
// Audio file
void carla_register_native_plugin_audiofile(void);
// MIDI file and sequencer
void carla_register_native_plugin_midifile(void);
void carla_register_native_plugin_midipattern(void);
// Carla
void carla_register_native_plugin_carla(void);
// External-UI plugins
void carla_register_native_plugin_bigmeter(void);
void carla_register_native_plugin_notes(void);
#ifdef HAVE_EXTERNAL_PLUGINS
void carla_register_all_native_external_plugins(void);
#endif
}
static void carla_register_bundled_native_plugins(void)
{
#if CARLA_BUNDLE_TYPE == 1
carla_register_native_plugin_audiogain();
#elif CARLA_BUNDLE_TYPE == 2
carla_register_native_plugin_audiofile();
carla_register_native_plugin_midifile();
#elif CARLA_BUNDLE_TYPE == 3
carla_register_native_plugin_midichanab();
carla_register_native_plugin_midichannelize();
carla_register_native_plugin_midichanfilter();
carla_register_native_plugin_midigain();
carla_register_native_plugin_midijoin();
carla_register_native_plugin_midisplit();
carla_register_native_plugin_miditranspose();
#endif
}
// --------------------------------------------------------------------------------------------------------------------