| @@ -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 | |||
| @@ -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 \ | |||
| @@ -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 | |||
| @@ -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 | |||
| @@ -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) {} | |||
| @@ -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); | |||
| } | |||
| @@ -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; | |||
| @@ -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 <stdio.h> | |||
| #include <assert.h> | |||
| #include <string.h> | |||
| #ifdef YAC_POSIX | |||
| #include <unistd.h> | |||
| #include <sys/types.h> | |||
| #include <sys/stat.h> | |||
| #include <sys/param.h> // for MAXPATHLEN | |||
| #include <fcntl.h> | |||
| #include <dirent.h> | |||
| #else | |||
| #include "util/dirent_win32/dirent.h" | |||
| #endif // YAC_POSIX | |||
| #include <thread> | |||
| #include <stdexcept> | |||
| #include "global.hpp" | |||
| #include "global_ui.hpp" | |||
| #ifndef USE_VST2 | |||
| #define ZIP_STATIC | |||
| #include <zip.h> | |||
| #endif // USE_VST2 | |||
| #include <jansson.h> | |||
| #if ARCH_WIN | |||
| #include <windows.h> | |||
| #include <direct.h> | |||
| #define mkdir(_dir, _perms) _mkdir(_dir) | |||
| #else | |||
| #include <dlfcn.h> | |||
| #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 | |||
| } | |||
| @@ -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 | |||