@@ -13,6 +13,8 @@ | |||||
namespace rack { | namespace rack { | ||||
struct Plugin; | struct Plugin; | ||||
typedef void (*InitCallback)(Plugin *); | |||||
} | } | ||||
typedef void (*vst2_handle_ui_param_fxn_t) (int uniqueParamId, float normValue); | 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 | #ifdef _MSC_VER | ||||
#define RACK_PLUGIN_INIT(pluginname) extern "C" void init_plugin_##pluginname##(rack::Plugin *p) | #define RACK_PLUGIN_INIT(pluginname) extern "C" void init_plugin_##pluginname##(rack::Plugin *p) | ||||
#else | #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 | #endif // _MSC_VER | ||||
#define RACK_PLUGIN_INIT_ID() RACK_PLUGIN_INIT_ID_INTERNAL | #define RACK_PLUGIN_INIT_ID() RACK_PLUGIN_INIT_ID_INTERNAL | ||||
@@ -80,7 +82,7 @@ namespace rack { \ | |||||
seed_initialized = p->json.seed_initialized; \ | 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() \ | #define RACK_PLUGIN_INIT_ID() \ | ||||
rack::plugin = p; \ | rack::plugin = p; \ | ||||
rack::plugin->set_tls_globals_fxn = &rack::loc_set_tls_globals; \ | 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 | #ifdef _MSC_VER | ||||
#define RACK_PLUGIN_INIT(pluginname) extern "C" void init_plugin_##pluginname##(rack::Plugin *p) | #define RACK_PLUGIN_INIT(pluginname) extern "C" void init_plugin_##pluginname##(rack::Plugin *p) | ||||
#else | #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 | #endif | ||||
#define RACK_PLUGIN_INIT_ID() RACK_PLUGIN_INIT_ID_INTERNAL | #define RACK_PLUGIN_INIT_ID() RACK_PLUGIN_INIT_ID_INTERNAL | ||||
#endif // RACK_PLUGIN_SHARED | #endif // RACK_PLUGIN_SHARED | ||||
@@ -106,7 +106,8 @@ LIB_OBJ_WIN= \ | |||||
src/util/dirent_win32/dirent.o \ | src/util/dirent_win32/dirent.o \ | ||||
dep/lglw/lglw_windows.o \ | dep/lglw/lglw_windows.o \ | ||||
dep/lglw/lglw_windows_cpp.o \ | dep/lglw/lglw_windows_cpp.o \ | ||||
dep/osdialog/osdialog_win.o | |||||
dep/osdialog/osdialog_win.o \ | |||||
src/plugin_static.o | |||||
LIB_OBJ_LINUX= \ | LIB_OBJ_LINUX= \ | ||||
dep/lglw/lglw_linux.o \ | dep/lglw/lglw_linux.o \ | ||||
@@ -8,7 +8,7 @@ include dep/yac/install_linux.mk | |||||
TARGET_BASENAME=Rack | TARGET_BASENAME=Rack | ||||
EXTRAFLAGS= -DVERSION=0.6.1 -DARCH_LIN -D_USE_MATH_DEFINES -DRACK_HOST -DUSE_VST2 -Iinclude/ -Idep/include -Idep/ | 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: | # for osdialog: | ||||
EXTRAFLAGS+= `pkg-config gtk+-2.0 --cflags` | EXTRAFLAGS+= `pkg-config gtk+-2.0 --cflags` | ||||
@@ -22,6 +22,10 @@ PLAF_OBJ= | |||||
include make.objects | 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) | ALL_OBJ=$(LIB_OBJ) $(LIB_OBJ_LINUX) | ||||
include dep/yac/staticlib_linux.mk | include dep/yac/staticlib_linux.mk |
@@ -10,6 +10,14 @@ EXTRAFLAGS+= | |||||
EXTRALIBS+= ../../../Rack_shared.a | EXTRALIBS+= ../../../Rack_shared.a | ||||
# ../../../../dep/lib/linux_gcc/ | # ../../../../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+= | PLAF_OBJ+= | ||||
EXTRAFLAGS+= -DARCH_LIN | EXTRAFLAGS+= -DARCH_LIN | ||||
@@ -3,7 +3,7 @@ | |||||
#ifndef RACK_PLUGIN_SHARED | #ifndef RACK_PLUGIN_SHARED | ||||
using namespace rack; | using namespace rack; | ||||
RACK_PLUGIN_INIT(Core); | |||||
// // RACK_PLUGIN_INIT(Core); | |||||
struct GridChoice : LedDisplayChoice { | struct GridChoice : LedDisplayChoice { | ||||
virtual void setId(int id) {} | virtual void setId(int id) {} | ||||
@@ -26,12 +26,14 @@ namespace rack { | |||||
void assetInit(bool devMode) { | void assetInit(bool devMode) { | ||||
#ifndef USE_VST2 | |||||
if (devMode) { | if (devMode) { | ||||
// Use current working directory if running in development mode | // Use current working directory if running in development mode | ||||
global->asset.globalDir = "."; | global->asset.globalDir = "."; | ||||
global->asset.localDir = "."; | global->asset.localDir = "."; | ||||
return; | return; | ||||
} | } | ||||
#endif // USE_VST2 | |||||
#if ARCH_MAC | #if ARCH_MAC | ||||
CFBundleRef bundle = CFBundleGetMainBundle(); | CFBundleRef bundle = CFBundleGetMainBundle(); | ||||
@@ -69,6 +71,7 @@ void assetInit(bool devMode) { | |||||
#endif | #endif | ||||
#if ARCH_LIN | #if ARCH_LIN | ||||
#ifndef USE_VST2 | |||||
// TODO For now, users should launch Rack from their terminal in the global directory | // TODO For now, users should launch Rack from their terminal in the global directory | ||||
global->asset.globalDir = "."; | global->asset.globalDir = "."; | ||||
@@ -81,6 +84,10 @@ void assetInit(bool devMode) { | |||||
} | } | ||||
global->asset.localDir = homeBuf; | global->asset.localDir = homeBuf; | ||||
global->asset.localDir += "/.Rack"; | global->asset.localDir += "/.Rack"; | ||||
#else | |||||
global->asset.globalDir = global->vst2.program_dir; | |||||
global->asset.localDir = global->vst2.program_dir; | |||||
#endif // USE_VST2 | |||||
#endif | #endif | ||||
systemCreateDirectory(global->asset.localDir); | systemCreateDirectory(global->asset.localDir); | ||||
} | } | ||||
@@ -42,14 +42,14 @@ | |||||
#endif | #endif | ||||
namespace rack { | |||||
extern "C" { extern void init_plugin_Core (rack::Plugin *p); } | |||||
namespace rack { | |||||
typedef void (*InitCallback)(Plugin *); | |||||
#ifdef USE_VST2 | #ifdef USE_VST2 | ||||
#ifndef RACK_PLUGIN | #ifndef RACK_PLUGIN | ||||
static void vst2_load_static_rack_plugins(void); | |||||
extern void vst2_load_static_rack_plugins(void); | |||||
#endif // RACK_PLUGIN | #endif // RACK_PLUGIN | ||||
#endif // USE_VST2 | #endif // USE_VST2 | ||||
@@ -74,18 +74,21 @@ static bool loadPlugin(std::string path, bool _bFX) { | |||||
#ifdef RACK_HOST | #ifdef RACK_HOST | ||||
std::string libraryFilename; | std::string libraryFilename; | ||||
#if ARCH_LIN | #if ARCH_LIN | ||||
libraryFilename = path + "/" + "plugin.so"; | |||||
libraryFilename = path + "/" + "plugin.so" + (_bFX ? ".fx" : ".instr"); | |||||
#elif ARCH_WIN | #elif ARCH_WIN | ||||
libraryFilename = path + "/" + "plugin.dll" + (_bFX ? ".fx" : ".instr"); | libraryFilename = path + "/" + "plugin.dll" + (_bFX ? ".fx" : ".instr"); | ||||
#elif ARCH_MAC | #elif ARCH_MAC | ||||
libraryFilename = path + "/" + "plugin.dylib"; | |||||
libraryFilename = path + "/" + "plugin.dylib" + (_bFX ? ".fx" : ".instr"); | |||||
#endif | #endif | ||||
// Check file existence | // Check file existence | ||||
if (!systemIsFile(libraryFilename)) { | 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; | return false; | ||||
} | } | ||||
else { | |||||
info("trying to load shared plugin file %s", libraryFilename.c_str()); | |||||
} | |||||
// Load dynamic/shared library | // Load dynamic/shared library | ||||
#if ARCH_WIN | #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 | } // namespace rack | ||||
using 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 | 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 | ## 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 | EXTRALIBS+= Rack.a | ||||