diff --git a/include/plugin.hpp b/include/plugin.hpp index 7d347759..72166f90 100644 --- a/include/plugin.hpp +++ b/include/plugin.hpp @@ -13,6 +13,8 @@ namespace rack { struct Plugin; + + typedef void (*InitCallback)(Plugin *); } typedef void (*vst2_handle_ui_param_fxn_t) (int uniqueParamId, float normValue); @@ -30,7 +32,7 @@ extern void vst2_queue_param_sync (int _uniqueParamId, float _value, bool _bNorm #ifdef _MSC_VER #define RACK_PLUGIN_INIT(pluginname) extern "C" void init_plugin_##pluginname##(rack::Plugin *p) #else -#define RACK_PLUGIN_INIT(pluginname) extern "C" void CONCAT(init_plugin_, pluginname) (rack::Plugin *p) +#define RACK_PLUGIN_INIT(pluginname) static void loc_init_plugin(rack::Plugin *p); extern "C" { void CONCAT(init_plugin_, pluginname) (rack::Plugin *p) { loc_init_plugin(p); } } static void loc_init_plugin(rack::Plugin *p) #endif // _MSC_VER #define RACK_PLUGIN_INIT_ID() RACK_PLUGIN_INIT_ID_INTERNAL @@ -80,7 +82,7 @@ namespace rack { \ seed_initialized = p->json.seed_initialized; \ } \ } \ -RACK_PLUGIN_EXPORT void init_plugin(rack::Plugin *p) +static void loc_init_plugin(rack::Plugin *p); extern "C" { RACK_PLUGIN_EXPORT void init_plugin(rack::Plugin *p) { loc_init_plugin(p); } } static void loc_init_plugin(rack::Plugin *p) #define RACK_PLUGIN_INIT_ID() \ rack::plugin = p; \ rack::plugin->set_tls_globals_fxn = &rack::loc_set_tls_globals; \ @@ -95,7 +97,7 @@ RACK_PLUGIN_EXPORT void init_plugin(rack::Plugin *p) #ifdef _MSC_VER #define RACK_PLUGIN_INIT(pluginname) extern "C" void init_plugin_##pluginname##(rack::Plugin *p) #else - #define RACK_PLUGIN_INIT(pluginname) extern "C" void CONCAT(init_plugin_, pluginname) (rack::Plugin *p) + #define RACK_PLUGIN_INIT(pluginname) static void loc_init_plugin(rack::Plugin *p); extern "C" { void CONCAT(init_plugin_, pluginname) (rack::Plugin *p) { loc_init_plugin(p); } } static void loc_init_plugin(rack::Plugin *p) #endif #define RACK_PLUGIN_INIT_ID() RACK_PLUGIN_INIT_ID_INTERNAL #endif // RACK_PLUGIN_SHARED diff --git a/make.objects b/make.objects index a02411ce..7f077c3d 100644 --- a/make.objects +++ b/make.objects @@ -106,7 +106,8 @@ LIB_OBJ_WIN= \ src/util/dirent_win32/dirent.o \ dep/lglw/lglw_windows.o \ dep/lglw/lglw_windows_cpp.o \ - dep/osdialog/osdialog_win.o + dep/osdialog/osdialog_win.o \ + src/plugin_static.o LIB_OBJ_LINUX= \ dep/lglw/lglw_linux.o \ diff --git a/makefile_lib.linux b/makefile_lib.linux index 9ea4fb73..bf3053e4 100644 --- a/makefile_lib.linux +++ b/makefile_lib.linux @@ -8,7 +8,7 @@ include dep/yac/install_linux.mk TARGET_BASENAME=Rack EXTRAFLAGS= -DVERSION=0.6.1 -DARCH_LIN -D_USE_MATH_DEFINES -DRACK_HOST -DUSE_VST2 -Iinclude/ -Idep/include -Idep/ -EXTRAFLAGS+= -DSKIP_STATIC_MODULES +#EXTRAFLAGS+= -DSKIP_STATIC_MODULES # for osdialog: EXTRAFLAGS+= `pkg-config gtk+-2.0 --cflags` @@ -22,6 +22,10 @@ PLAF_OBJ= include make.objects +# compile but link this one in a different order than the other objects +# (the GNU linker is very unforgiving in this regard) +BIN_RULES+= src/plugin_static.o + ALL_OBJ=$(LIB_OBJ) $(LIB_OBJ_LINUX) include dep/yac/staticlib_linux.mk diff --git a/plugins/build_shared_plugin_pre_linux.mk b/plugins/build_shared_plugin_pre_linux.mk index 64090b2a..d1e9bfc5 100644 --- a/plugins/build_shared_plugin_pre_linux.mk +++ b/plugins/build_shared_plugin_pre_linux.mk @@ -10,6 +10,14 @@ EXTRAFLAGS+= EXTRALIBS+= ../../../Rack_shared.a # ../../../../dep/lib/linux_gcc/ +ifeq ($(BUILD_64),y) +EXTRALIBS_DEP= $(VSVR_BASE_DIR)/dep/lib/linux_gcc/x64 +else +EXTRALIBS_DEP= $(VSVR_BASE_DIR)/dep/lib/linux_gcc/x86 +endif + +EXTRALIBS+= $(EXTRALIBS_DEP)/libspeexdsp.a $(EXTRALIBS_DEP)/glew.a $(EXTRALIBS_DEP)/jansson.a `pkg-config gtk+-2.0 --libs` -lGL + PLAF_OBJ+= EXTRAFLAGS+= -DARCH_LIN diff --git a/src/Core/Core.hpp b/src/Core/Core.hpp index bf998888..c0dfb959 100644 --- a/src/Core/Core.hpp +++ b/src/Core/Core.hpp @@ -3,7 +3,7 @@ #ifndef RACK_PLUGIN_SHARED using namespace rack; -RACK_PLUGIN_INIT(Core); +// // RACK_PLUGIN_INIT(Core); struct GridChoice : LedDisplayChoice { virtual void setId(int id) {} diff --git a/src/asset.cpp b/src/asset.cpp index c7e2bd6d..cdd3d70e 100644 --- a/src/asset.cpp +++ b/src/asset.cpp @@ -26,12 +26,14 @@ namespace rack { void assetInit(bool devMode) { +#ifndef USE_VST2 if (devMode) { // Use current working directory if running in development mode global->asset.globalDir = "."; global->asset.localDir = "."; return; } +#endif // USE_VST2 #if ARCH_MAC CFBundleRef bundle = CFBundleGetMainBundle(); @@ -69,6 +71,7 @@ void assetInit(bool devMode) { #endif #if ARCH_LIN +#ifndef USE_VST2 // TODO For now, users should launch Rack from their terminal in the global directory global->asset.globalDir = "."; @@ -81,6 +84,10 @@ void assetInit(bool devMode) { } global->asset.localDir = homeBuf; global->asset.localDir += "/.Rack"; +#else + global->asset.globalDir = global->vst2.program_dir; + global->asset.localDir = global->vst2.program_dir; +#endif // USE_VST2 #endif systemCreateDirectory(global->asset.localDir); } diff --git a/src/plugin.cpp b/src/plugin.cpp index dae3fd2b..bc44e66f 100644 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -42,14 +42,14 @@ #endif -namespace rack { +extern "C" { extern void init_plugin_Core (rack::Plugin *p); } +namespace rack { -typedef void (*InitCallback)(Plugin *); #ifdef USE_VST2 #ifndef RACK_PLUGIN -static void vst2_load_static_rack_plugins(void); +extern void vst2_load_static_rack_plugins(void); #endif // RACK_PLUGIN #endif // USE_VST2 @@ -74,18 +74,21 @@ static bool loadPlugin(std::string path, bool _bFX) { #ifdef RACK_HOST std::string libraryFilename; #if ARCH_LIN - libraryFilename = path + "/" + "plugin.so"; + libraryFilename = path + "/" + "plugin.so" + (_bFX ? ".fx" : ".instr"); #elif ARCH_WIN libraryFilename = path + "/" + "plugin.dll" + (_bFX ? ".fx" : ".instr"); #elif ARCH_MAC - libraryFilename = path + "/" + "plugin.dylib"; + libraryFilename = path + "/" + "plugin.dylib" + (_bFX ? ".fx" : ".instr"); #endif // Check file existence if (!systemIsFile(libraryFilename)) { - warn("Plugin file %s does not exist", libraryFilename.c_str()); + // warn("Plugin file %s does not exist", libraryFilename.c_str()); return false; } + else { + info("trying to load shared plugin file %s", libraryFilename.c_str()); + } // Load dynamic/shared library #if ARCH_WIN @@ -600,171 +603,6 @@ Model *pluginGetModel(std::string pluginSlug, std::string modelSlug) { } - -#ifdef USE_VST2 -#ifndef RACK_PLUGIN -#ifndef SKIP_STATIC_MODULES -extern "C" { -extern void init_plugin_21kHz (rack::Plugin *p); -extern void init_plugin_AmalgamatedHarmonics (rack::Plugin *p); -extern void init_plugin_Alikins (rack::Plugin *p); -extern void init_plugin_alto777_LFSR (rack::Plugin *p); -extern void init_plugin_AS (rack::Plugin *p); -extern void init_plugin_AudibleInstruments (rack::Plugin *p); -extern void init_plugin_Autodafe (rack::Plugin *p); -extern void init_plugin_BaconMusic (rack::Plugin *p); -extern void init_plugin_Befaco (rack::Plugin *p); -extern void init_plugin_Bidoo (rack::Plugin *p); -extern void init_plugin_Bogaudio (rack::Plugin *p); -// extern void init_plugin_bsp (rack::Plugin *p); // contains GPLv3 code from Ob-Xd (Obxd_VCF) -// extern void init_plugin_BOKONTEPByteBeatMachine (rack::Plugin *p); // unstable -extern void init_plugin_CastleRocktronics (rack::Plugin *p); -extern void init_plugin_cf (rack::Plugin *p); -extern void init_plugin_com_soundchasing_stochasm (rack::Plugin *p); -extern void init_plugin_computerscare (rack::Plugin *p); -//extern void init_plugin_dBiz (rack::Plugin *p); // now a DLL (13Jul2018) -extern void init_plugin_DHE_Modules (rack::Plugin *p); -extern void init_plugin_DrumKit (rack::Plugin *p); -extern void init_plugin_ErraticInstruments (rack::Plugin *p); -extern void init_plugin_ESeries (rack::Plugin *p); -extern void init_plugin_FrankBussFormula (rack::Plugin *p); -extern void init_plugin_FrozenWasteland (rack::Plugin *p); -extern void init_plugin_Fundamental (rack::Plugin *p); -extern void init_plugin_Geodesics (rack::Plugin *p); -extern void init_plugin_Gratrix (rack::Plugin *p); -extern void init_plugin_HetrickCV (rack::Plugin *p); -extern void init_plugin_huaba (rack::Plugin *p); -extern void init_plugin_ImpromptuModular (rack::Plugin *p); -extern void init_plugin_JE (rack::Plugin *p); -extern void init_plugin_JW_Modules (rack::Plugin *p); -extern void init_plugin_Koralfx (rack::Plugin *p); -extern void init_plugin_LindenbergResearch (rack::Plugin *p); -extern void init_plugin_LOGinstruments (rack::Plugin *p); -extern void init_plugin_mental (rack::Plugin *p); -extern void init_plugin_ML_modules (rack::Plugin *p); -extern void init_plugin_moDllz (rack::Plugin *p); -extern void init_plugin_modular80 (rack::Plugin *p); -extern void init_plugin_mscHack (rack::Plugin *p); -extern void init_plugin_mtsch_plugins (rack::Plugin *p); -extern void init_plugin_NauModular (rack::Plugin *p); -extern void init_plugin_Nohmad (rack::Plugin *p); -extern void init_plugin_Ohmer (rack::Plugin *p); -// extern void init_plugin_ParableInstruments (rack::Plugin *p); // alternative "Clouds" module (crashes) -extern void init_plugin_PG_Instruments (rack::Plugin *p); -extern void init_plugin_PvC (rack::Plugin *p); -extern void init_plugin_Qwelk (rack::Plugin *p); -extern void init_plugin_RJModules (rack::Plugin *p); -extern void init_plugin_SerialRacker (rack::Plugin *p); -extern void init_plugin_SonusModular (rack::Plugin *p); -extern void init_plugin_Southpole (rack::Plugin *p); -extern void init_plugin_Southpole_parasites (rack::Plugin *p); -extern void init_plugin_squinkylabs_plug1 (rack::Plugin *p); -extern void init_plugin_SubmarineFree (rack::Plugin *p); -extern void init_plugin_SynthKit (rack::Plugin *p); -extern void init_plugin_Template (rack::Plugin *p); -extern void init_plugin_TheXOR (rack::Plugin *p); -extern void init_plugin_trowaSoft (rack::Plugin *p); -extern void init_plugin_unless_modules (rack::Plugin *p); -extern void init_plugin_Valley (rack::Plugin *p); -// extern void init_plugin_VultModules (rack::Plugin *p); -} -#endif // SKIP_STATIC_MODULES - -static void vst2_load_static_rack_plugin(const char *_name, InitCallback _initCallback) { - - std::string path = assetStaticPlugin(_name); - - // Construct and initialize Plugin instance - Plugin *plugin = new Plugin(); - plugin->path = path; - plugin->handle = NULL; - _initCallback(plugin); - -#if 0 - // Reject plugin if slug already exists - Plugin *oldPlugin = pluginGetPlugin(plugin->slug); - if (oldPlugin) { - warn("Plugin \"%s\" is already loaded, not attempting to load it again", plugin->slug.c_str()); - // TODO - // Fix memory leak with `plugin` here - return false; - } -#endif - - // Add plugin to list - global->plugin.gPlugins.push_back(plugin); - info("vcvrack: Loaded static plugin %s %s", plugin->slug.c_str(), plugin->version.c_str()); -} - -void vst2_load_static_rack_plugins(void) { -#ifndef SKIP_STATIC_MODULES - vst2_load_static_rack_plugin("21kHz", &init_plugin_21kHz); - vst2_load_static_rack_plugin("AmalgamatedHarmonics", &init_plugin_AmalgamatedHarmonics); - vst2_load_static_rack_plugin("Alikins", &init_plugin_Alikins); - vst2_load_static_rack_plugin("alto777_LFSR", &init_plugin_alto777_LFSR); - vst2_load_static_rack_plugin("AS", &init_plugin_AS); - vst2_load_static_rack_plugin("AudibleInstruments", &init_plugin_AudibleInstruments); - vst2_load_static_rack_plugin("Autodafe", &init_plugin_Autodafe); - vst2_load_static_rack_plugin("BaconMusic", &init_plugin_BaconMusic); - vst2_load_static_rack_plugin("Befaco", &init_plugin_Befaco); - vst2_load_static_rack_plugin("Bidoo", &init_plugin_Bidoo); - vst2_load_static_rack_plugin("Bogaudio", &init_plugin_Bogaudio); - // vst2_load_static_rack_plugin("bsp", &init_plugin_bsp); // contains GPLv3 code from Ob-Xd (Obxd_VCF) - // vst2_load_static_rack_plugin("BOKONTEPByteBeatMachine", &init_plugin_BOKONTEPByteBeatMachine); - vst2_load_static_rack_plugin("CastleRocktronics", &init_plugin_CastleRocktronics); - vst2_load_static_rack_plugin("cf", &init_plugin_cf); - vst2_load_static_rack_plugin("com_soundchasing_stochasm", &init_plugin_com_soundchasing_stochasm); - vst2_load_static_rack_plugin("computerscare", &init_plugin_computerscare); - // vst2_load_static_rack_plugin("dBiz", &init_plugin_dBiz); // now a DLL (13Jul2018) - vst2_load_static_rack_plugin("DHE-Modules", &init_plugin_DHE_Modules); - vst2_load_static_rack_plugin("DrumKit", &init_plugin_DrumKit); - vst2_load_static_rack_plugin("ErraticInstruments", &init_plugin_ErraticInstruments); - vst2_load_static_rack_plugin("ESeries", &init_plugin_ESeries); - vst2_load_static_rack_plugin("FrankBussFormula", &init_plugin_FrankBussFormula); - vst2_load_static_rack_plugin("FrozenWasteland", &init_plugin_FrozenWasteland); - vst2_load_static_rack_plugin("Fundamental", &init_plugin_Fundamental); - vst2_load_static_rack_plugin("Geodesics", &init_plugin_Geodesics); - vst2_load_static_rack_plugin("Gratrix", &init_plugin_Gratrix); - vst2_load_static_rack_plugin("HetrickCV", &init_plugin_HetrickCV); - vst2_load_static_rack_plugin("huaba", &init_plugin_huaba); - vst2_load_static_rack_plugin("ImpromptuModular", &init_plugin_ImpromptuModular); - vst2_load_static_rack_plugin("JE", &init_plugin_JE); - vst2_load_static_rack_plugin("JW_Modules", &init_plugin_JW_Modules); - vst2_load_static_rack_plugin("Koralfx-Modules", &init_plugin_Koralfx); - vst2_load_static_rack_plugin("LindenbergResearch", &init_plugin_LindenbergResearch); - vst2_load_static_rack_plugin("LOGinstruments", &init_plugin_LOGinstruments); - vst2_load_static_rack_plugin("mental", &init_plugin_mental); - vst2_load_static_rack_plugin("ML_modules", &init_plugin_ML_modules); - vst2_load_static_rack_plugin("moDllz", &init_plugin_moDllz); - vst2_load_static_rack_plugin("modular80", &init_plugin_modular80); - vst2_load_static_rack_plugin("mscHack", &init_plugin_mscHack); - vst2_load_static_rack_plugin("mtsch_plugins", &init_plugin_mtsch_plugins); - vst2_load_static_rack_plugin("NauModular", &init_plugin_NauModular); - vst2_load_static_rack_plugin("Nohmad", &init_plugin_Nohmad); - vst2_load_static_rack_plugin("Ohmer", &init_plugin_Ohmer); - // vst2_load_static_rack_plugin("ParableInstruments", &init_plugin_ParableInstruments); - vst2_load_static_rack_plugin("PG_Instruments", &init_plugin_PG_Instruments); - vst2_load_static_rack_plugin("PvC", &init_plugin_PvC); - vst2_load_static_rack_plugin("Qwelk", &init_plugin_Qwelk); - vst2_load_static_rack_plugin("RJModules", &init_plugin_RJModules); - vst2_load_static_rack_plugin("SerialRacker", &init_plugin_SerialRacker); - vst2_load_static_rack_plugin("SonusModular", &init_plugin_SonusModular); - vst2_load_static_rack_plugin("Southpole", &init_plugin_Southpole); - vst2_load_static_rack_plugin("Southpole_parasites", &init_plugin_Southpole_parasites); - vst2_load_static_rack_plugin("squinkylabs-plug1", &init_plugin_squinkylabs_plug1); - vst2_load_static_rack_plugin("SubmarineFree", &init_plugin_SubmarineFree); - vst2_load_static_rack_plugin("SynthKit", &init_plugin_SynthKit); - vst2_load_static_rack_plugin("Template", &init_plugin_Template); - vst2_load_static_rack_plugin("TheXOR", &init_plugin_TheXOR); - vst2_load_static_rack_plugin("trowaSoft", &init_plugin_trowaSoft); - vst2_load_static_rack_plugin("unless_modules", &init_plugin_unless_modules); - vst2_load_static_rack_plugin("Valley", &init_plugin_Valley); - // vst2_load_static_rack_plugin("VultModules", &init_plugin_VultModules); -#endif // SKIP_STATIC_MODULES -} -#endif // RACK_PLUGIN -#endif // USE_VST2 - } // namespace rack using namespace rack; diff --git a/src/plugin_static.cpp b/src/plugin_static.cpp new file mode 100644 index 00000000..6cb6391a --- /dev/null +++ b/src/plugin_static.cpp @@ -0,0 +1,218 @@ +#include "global_pre.hpp" +#include "plugin.hpp" +#include "Core/Core.hpp" +#include "app.hpp" +#include "asset.hpp" +#include "util/request.hpp" +#include "osdialog.h" + +#include +#include +#include + +#ifdef YAC_POSIX +#include +#include +#include +#include // for MAXPATHLEN +#include +#include +#else +#include "util/dirent_win32/dirent.h" +#endif // YAC_POSIX + +#include +#include + +#include "global.hpp" +#include "global_ui.hpp" + +#ifndef USE_VST2 +#define ZIP_STATIC +#include +#endif // USE_VST2 +#include + +#if ARCH_WIN + #include + #include + #define mkdir(_dir, _perms) _mkdir(_dir) +#else + #include +#endif + + +namespace rack { + +extern Plugin *pluginGetPlugin (std::string pluginSlug); + +#ifdef USE_VST2 +#ifndef RACK_PLUGIN +#ifndef SKIP_STATIC_MODULES +extern "C" { +extern void init_plugin_21kHz (rack::Plugin *p); +extern void init_plugin_AmalgamatedHarmonics (rack::Plugin *p); +extern void init_plugin_Alikins (rack::Plugin *p); +extern void init_plugin_alto777_LFSR (rack::Plugin *p); +extern void init_plugin_AS (rack::Plugin *p); +extern void init_plugin_AudibleInstruments (rack::Plugin *p); +extern void init_plugin_Autodafe (rack::Plugin *p); +extern void init_plugin_BaconMusic (rack::Plugin *p); +extern void init_plugin_Befaco (rack::Plugin *p); +extern void init_plugin_Bidoo (rack::Plugin *p); +extern void init_plugin_Bogaudio (rack::Plugin *p); +// extern void init_plugin_bsp (rack::Plugin *p); // contains GPLv3 code from Ob-Xd (Obxd_VCF) +// extern void init_plugin_BOKONTEPByteBeatMachine (rack::Plugin *p); // unstable +extern void init_plugin_CastleRocktronics (rack::Plugin *p); +extern void init_plugin_cf (rack::Plugin *p); +extern void init_plugin_com_soundchasing_stochasm (rack::Plugin *p); +extern void init_plugin_computerscare (rack::Plugin *p); +//extern void init_plugin_dBiz (rack::Plugin *p); // now a DLL (13Jul2018) +extern void init_plugin_DHE_Modules (rack::Plugin *p); +extern void init_plugin_DrumKit (rack::Plugin *p); +extern void init_plugin_ErraticInstruments (rack::Plugin *p); +extern void init_plugin_ESeries (rack::Plugin *p); +extern void init_plugin_FrankBussFormula (rack::Plugin *p); +extern void init_plugin_FrozenWasteland (rack::Plugin *p); +extern void init_plugin_Fundamental (rack::Plugin *p); +extern void init_plugin_Geodesics (rack::Plugin *p); +extern void init_plugin_Gratrix (rack::Plugin *p); +extern void init_plugin_HetrickCV (rack::Plugin *p); +extern void init_plugin_huaba (rack::Plugin *p); +extern void init_plugin_ImpromptuModular (rack::Plugin *p); +extern void init_plugin_JE (rack::Plugin *p); +extern void init_plugin_JW_Modules (rack::Plugin *p); +extern void init_plugin_Koralfx (rack::Plugin *p); +extern void init_plugin_LindenbergResearch (rack::Plugin *p); +extern void init_plugin_LOGinstruments (rack::Plugin *p); +extern void init_plugin_mental (rack::Plugin *p); +extern void init_plugin_ML_modules (rack::Plugin *p); +extern void init_plugin_moDllz (rack::Plugin *p); +extern void init_plugin_modular80 (rack::Plugin *p); +extern void init_plugin_mscHack (rack::Plugin *p); +extern void init_plugin_mtsch_plugins (rack::Plugin *p); +extern void init_plugin_NauModular (rack::Plugin *p); +extern void init_plugin_Nohmad (rack::Plugin *p); +extern void init_plugin_Ohmer (rack::Plugin *p); +// extern void init_plugin_ParableInstruments (rack::Plugin *p); // alternative "Clouds" module (crashes) +extern void init_plugin_PG_Instruments (rack::Plugin *p); +extern void init_plugin_PvC (rack::Plugin *p); +extern void init_plugin_Qwelk (rack::Plugin *p); +extern void init_plugin_RJModules (rack::Plugin *p); +extern void init_plugin_SerialRacker (rack::Plugin *p); +extern void init_plugin_SonusModular (rack::Plugin *p); +extern void init_plugin_Southpole (rack::Plugin *p); +extern void init_plugin_Southpole_parasites (rack::Plugin *p); +extern void init_plugin_squinkylabs_plug1 (rack::Plugin *p); +extern void init_plugin_SubmarineFree (rack::Plugin *p); +extern void init_plugin_SynthKit (rack::Plugin *p); +extern void init_plugin_Template (rack::Plugin *p); +extern void init_plugin_TheXOR (rack::Plugin *p); +extern void init_plugin_trowaSoft (rack::Plugin *p); +extern void init_plugin_unless_modules (rack::Plugin *p); +extern void init_plugin_Valley (rack::Plugin *p); +// extern void init_plugin_VultModules (rack::Plugin *p); +} +#endif // SKIP_STATIC_MODULES + +static void vst2_load_static_rack_plugin(const char *_name, InitCallback _initCallback) { + + std::string path = assetStaticPlugin(_name); + + // Construct and initialize Plugin instance + Plugin *plugin = new Plugin(); + plugin->path = path; + plugin->handle = NULL; + _initCallback(plugin); + +#if 0 + // Reject plugin if slug already exists + Plugin *oldPlugin = pluginGetPlugin(plugin->slug); + if (oldPlugin) { + warn("Plugin \"%s\" is already loaded, not attempting to load it again", plugin->slug.c_str()); + // TODO + // Fix memory leak with `plugin` here + return false; + } +#endif + + // Add plugin to list + global->plugin.gPlugins.push_back(plugin); + info("vcvrack: Loaded static plugin %s %s", plugin->slug.c_str(), plugin->version.c_str()); +} + +void vst2_load_static_rack_plugins(void) { +#ifndef SKIP_STATIC_MODULES + printf("[dbg] vst2_load_static_rack_plugins: ENTER\n"); +#if 1 + vst2_load_static_rack_plugin("21kHz", &init_plugin_21kHz); + vst2_load_static_rack_plugin("AmalgamatedHarmonics", &init_plugin_AmalgamatedHarmonics); + vst2_load_static_rack_plugin("Alikins", &init_plugin_Alikins); + vst2_load_static_rack_plugin("alto777_LFSR", &init_plugin_alto777_LFSR); + vst2_load_static_rack_plugin("AS", &init_plugin_AS); + vst2_load_static_rack_plugin("AudibleInstruments", &init_plugin_AudibleInstruments); + vst2_load_static_rack_plugin("Autodafe", &init_plugin_Autodafe); + vst2_load_static_rack_plugin("BaconMusic", &init_plugin_BaconMusic); + vst2_load_static_rack_plugin("Befaco", &init_plugin_Befaco); + vst2_load_static_rack_plugin("Bidoo", &init_plugin_Bidoo); + vst2_load_static_rack_plugin("Bogaudio", &init_plugin_Bogaudio); + // vst2_load_static_rack_plugin("bsp", &init_plugin_bsp); // contains GPLv3 code from Ob-Xd (Obxd_VCF) + // vst2_load_static_rack_plugin("BOKONTEPByteBeatMachine", &init_plugin_BOKONTEPByteBeatMachine); + vst2_load_static_rack_plugin("CastleRocktronics", &init_plugin_CastleRocktronics); + vst2_load_static_rack_plugin("cf", &init_plugin_cf); + vst2_load_static_rack_plugin("com_soundchasing_stochasm", &init_plugin_com_soundchasing_stochasm); + vst2_load_static_rack_plugin("computerscare", &init_plugin_computerscare); + // vst2_load_static_rack_plugin("dBiz", &init_plugin_dBiz); // now a DLL (13Jul2018) + vst2_load_static_rack_plugin("DHE-Modules", &init_plugin_DHE_Modules); + vst2_load_static_rack_plugin("DrumKit", &init_plugin_DrumKit); + vst2_load_static_rack_plugin("ErraticInstruments", &init_plugin_ErraticInstruments); + vst2_load_static_rack_plugin("ESeries", &init_plugin_ESeries); + vst2_load_static_rack_plugin("FrankBussFormula", &init_plugin_FrankBussFormula); + vst2_load_static_rack_plugin("FrozenWasteland", &init_plugin_FrozenWasteland); + vst2_load_static_rack_plugin("Fundamental", &init_plugin_Fundamental); + vst2_load_static_rack_plugin("Geodesics", &init_plugin_Geodesics); + vst2_load_static_rack_plugin("Gratrix", &init_plugin_Gratrix); + vst2_load_static_rack_plugin("HetrickCV", &init_plugin_HetrickCV); + vst2_load_static_rack_plugin("huaba", &init_plugin_huaba); + vst2_load_static_rack_plugin("ImpromptuModular", &init_plugin_ImpromptuModular); + vst2_load_static_rack_plugin("JE", &init_plugin_JE); + vst2_load_static_rack_plugin("JW_Modules", &init_plugin_JW_Modules); + vst2_load_static_rack_plugin("Koralfx-Modules", &init_plugin_Koralfx); + vst2_load_static_rack_plugin("LindenbergResearch", &init_plugin_LindenbergResearch); + vst2_load_static_rack_plugin("LOGinstruments", &init_plugin_LOGinstruments); + vst2_load_static_rack_plugin("mental", &init_plugin_mental); + vst2_load_static_rack_plugin("ML_modules", &init_plugin_ML_modules); + vst2_load_static_rack_plugin("moDllz", &init_plugin_moDllz); + vst2_load_static_rack_plugin("modular80", &init_plugin_modular80); + vst2_load_static_rack_plugin("mscHack", &init_plugin_mscHack); + vst2_load_static_rack_plugin("mtsch_plugins", &init_plugin_mtsch_plugins); + vst2_load_static_rack_plugin("NauModular", &init_plugin_NauModular); + vst2_load_static_rack_plugin("Nohmad", &init_plugin_Nohmad); + vst2_load_static_rack_plugin("Ohmer", &init_plugin_Ohmer); + // vst2_load_static_rack_plugin("ParableInstruments", &init_plugin_ParableInstruments); + vst2_load_static_rack_plugin("PG_Instruments", &init_plugin_PG_Instruments); + vst2_load_static_rack_plugin("PvC", &init_plugin_PvC); + vst2_load_static_rack_plugin("Qwelk", &init_plugin_Qwelk); + vst2_load_static_rack_plugin("RJModules", &init_plugin_RJModules); + vst2_load_static_rack_plugin("SerialRacker", &init_plugin_SerialRacker); + vst2_load_static_rack_plugin("SonusModular", &init_plugin_SonusModular); + vst2_load_static_rack_plugin("Southpole", &init_plugin_Southpole); + vst2_load_static_rack_plugin("Southpole_parasites", &init_plugin_Southpole_parasites); + vst2_load_static_rack_plugin("squinkylabs-plug1", &init_plugin_squinkylabs_plug1); + vst2_load_static_rack_plugin("SubmarineFree", &init_plugin_SubmarineFree); + vst2_load_static_rack_plugin("SynthKit", &init_plugin_SynthKit); + vst2_load_static_rack_plugin("Template", &init_plugin_Template); + vst2_load_static_rack_plugin("TheXOR", &init_plugin_TheXOR); + vst2_load_static_rack_plugin("trowaSoft", &init_plugin_trowaSoft); + vst2_load_static_rack_plugin("unless_modules", &init_plugin_unless_modules); + vst2_load_static_rack_plugin("Valley", &init_plugin_Valley); + // vst2_load_static_rack_plugin("VultModules", &init_plugin_VultModules); +#else + vst2_load_static_rack_plugin("Template", &init_plugin_Template); +#endif + printf("[dbg] vst2_load_static_rack_plugins: LEAVE\n"); +#endif // SKIP_STATIC_MODULES +} +#endif // RACK_PLUGIN +#endif // USE_VST2 +} diff --git a/vst2_common_linux.mk b/vst2_common_linux.mk index d1f5f282..3a5a6919 100644 --- a/vst2_common_linux.mk +++ b/vst2_common_linux.mk @@ -5,8 +5,11 @@ EXTRAFLAGS+= -DVERSION=0.6.1 -D_USE_MATH_DEFINES -Iinclude/ -Idep/include -Idep/ -DUSE_VST2 +EXTRALIBS+= src/plugin_static.o + ## note: remove -DSKIP_STATIC_MODULES in makefile_lib.linux and uncomment the following line to link the add-on modules -#include vst2_common_staticlibs.mk +include vst2_common_staticlibs.mk +##EXTRALIBS+= $(call plugin_lib,Template) EXTRALIBS+= Rack.a