| @@ -4,6 +4,7 @@ | |||||
| #include <stdio.h> // debug | #include <stdio.h> // debug | ||||
| #include <list> | #include <list> | ||||
| #include "tags.hpp" | #include "tags.hpp" | ||||
| #include "util/common.hpp" | |||||
| #define RACK_PLUGIN_INIT_ID_INTERNAL p->slug = TOSTRING(SLUG); p->version = TOSTRING(VERSION) | #define RACK_PLUGIN_INIT_ID_INTERNAL p->slug = TOSTRING(SLUG); p->version = TOSTRING(VERSION) | ||||
| @@ -26,7 +27,11 @@ extern void vst2_handle_ui_param (int uniqueParamId, float normValue); | |||||
| extern void vst2_queue_param_sync (int _uniqueParamId, float _value, bool _bNormalized); | extern void vst2_queue_param_sync (int _uniqueParamId, float _value, bool _bNormalized); | ||||
| #define RACK_PLUGIN_DECLARE(pluginname) | #define RACK_PLUGIN_DECLARE(pluginname) | ||||
| #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 | |||||
| #define RACK_PLUGIN_INIT(pluginname) extern "C" void CONCAT(init_plugin_, pluginname) (rack::Plugin *p) | |||||
| #endif // _MSC_VER | |||||
| #define RACK_PLUGIN_INIT_ID() RACK_PLUGIN_INIT_ID_INTERNAL | #define RACK_PLUGIN_INIT_ID() RACK_PLUGIN_INIT_ID_INTERNAL | ||||
| #else | #else | ||||
| @@ -87,7 +92,11 @@ RACK_PLUGIN_EXPORT void init_plugin(rack::Plugin *p) | |||||
| #else | #else | ||||
| // Statically linked plugin build | // Statically linked plugin build | ||||
| #define RACK_PLUGIN_DECLARE(pluginname) | #define RACK_PLUGIN_DECLARE(pluginname) | ||||
| #define RACK_PLUGIN_INIT(pluginname) extern "C" void init_plugin_##pluginname##(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) | |||||
| #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 | ||||
| #endif // RACK_PLUGIN_SHARED_LIB_BUILD | #endif // RACK_PLUGIN_SHARED_LIB_BUILD | ||||
| @@ -107,9 +116,17 @@ RACK_PLUGIN_EXPORT void init_plugin(rack::Plugin *p) | |||||
| #define RACK_PLUGIN_INIT_MANUAL(url) p->manual = url | #define RACK_PLUGIN_INIT_MANUAL(url) p->manual = url | ||||
| #define RACK_PLUGIN_INIT_VERSION(ver) p->version = ver | #define RACK_PLUGIN_INIT_VERSION(ver) p->version = ver | ||||
| #ifdef _MSC_VER | |||||
| #define RACK_PLUGIN_MODEL_DECLARE(pluginname, modelname) extern Model *create_model_##pluginname##_##modelname##(void) | #define RACK_PLUGIN_MODEL_DECLARE(pluginname, modelname) extern Model *create_model_##pluginname##_##modelname##(void) | ||||
| #define RACK_PLUGIN_MODEL_INIT(pluginname, modelname) Model *create_model_##pluginname##_##modelname##(void) | #define RACK_PLUGIN_MODEL_INIT(pluginname, modelname) Model *create_model_##pluginname##_##modelname##(void) | ||||
| #define RACK_PLUGIN_MODEL_ADD(pluginname, modelname) p->addModel(create_model_##pluginname##_##modelname##()) | #define RACK_PLUGIN_MODEL_ADD(pluginname, modelname) p->addModel(create_model_##pluginname##_##modelname##()) | ||||
| #else | |||||
| #define CONCAT_USCORE_LITERAL(x, y) x ## _ ## y | |||||
| #define CONCAT_USCORE(x, y) CONCAT_USCORE_LITERAL(x, y) | |||||
| #define RACK_PLUGIN_MODEL_DECLARE(pluginname, modelname) extern Model *CONCAT(create_model_, CONCAT_USCORE(pluginname, modelname))(void) | |||||
| #define RACK_PLUGIN_MODEL_INIT(pluginname, modelname) Model *CONCAT(create_model_, CONCAT_USCORE(pluginname, modelname))(void) | |||||
| #define RACK_PLUGIN_MODEL_ADD(pluginname, modelname) p->addModel(CONCAT(create_model_, CONCAT_USCORE(pluginname, modelname))()) | |||||
| #endif // _MSC_VER | |||||
| namespace rack { | namespace rack { | ||||
| @@ -1,9 +1,10 @@ | |||||
| COMMON_OBJ= \ | |||||
| COMMON_DEP_OBJ= \ | |||||
| dep/jpommier-pffft-29e4f76ac53b/fftpack.o \ | dep/jpommier-pffft-29e4f76ac53b/fftpack.o \ | ||||
| dep/jpommier-pffft-29e4f76ac53b/pffft.o \ | dep/jpommier-pffft-29e4f76ac53b/pffft.o \ | ||||
| dep/nanovg/src/nanovg.o \ | dep/nanovg/src/nanovg.o \ | ||||
| dep/osdialog/osdialog.o \ | |||||
| dep/osdialog/osdialog_win.o \ | |||||
| dep/osdialog/osdialog.o | |||||
| COMMON_OBJ= \ | |||||
| src/app/app.o \ | src/app/app.o \ | ||||
| src/app/AudioWidget.o \ | src/app/AudioWidget.o \ | ||||
| src/app/CircularShadow.o \ | src/app/CircularShadow.o \ | ||||
| @@ -84,6 +85,9 @@ COMMON_OBJ= \ | |||||
| # src/keyboard.o | # src/keyboard.o | ||||
| COMMON_OBJ+=$(COMMON_DEP_OBJ) | |||||
| HOST_OBJ= \ | HOST_OBJ= \ | ||||
| src/Core/AudioInterface.o \ | src/Core/AudioInterface.o \ | ||||
| src/Core/Blank.o \ | src/Core/Blank.o \ | ||||
| @@ -101,11 +105,17 @@ LIB_OBJ= \ | |||||
| LIB_OBJ_WIN= \ | 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 | |||||
| LIB_OBJ_LINUX= \ | |||||
| dep/lglw/lglw_linux.o \ | |||||
| dep/osdialog/osdialog_gtk2.o | |||||
| SHARED_LIB_OBJ= \ | SHARED_LIB_OBJ= \ | ||||
| $(COMMON_OBJ) | $(COMMON_OBJ) | ||||
| MAIN_OBJ= \ | MAIN_OBJ= \ | ||||
| src/vst2_main.o \ | src/vst2_main.o \ | ||||
| src/main.o | src/main.o | ||||
| @@ -0,0 +1,37 @@ | |||||
| # | |||||
| # Makefile for VCV rack lib + GCC | |||||
| # | |||||
| # | |||||
| #NUM_JOBS=20 | |||||
| NUM_JOBS=1 | |||||
| .PHONY: bin | |||||
| bin: vst | |||||
| .PHONY: lib | |||||
| lib: | |||||
| make -f makefile_lib.linux bin -j $(NUM_JOBS) | |||||
| .PHONY: shared_lib | |||||
| shared_lib: | |||||
| make -f makefile_shared_lib.linux bin -j $(NUM_JOBS) && mv Rack_shared.a plugins/ | |||||
| .PHONY: vst | |||||
| vst: lib | |||||
| rm -f src/vst2_main.o | |||||
| make -f makefile_vst_instr.linux bin -j $(NUM_JOBS) | |||||
| rm -f src/vst2_main.o | |||||
| make -f makefile_vst_effect.linux bin -j $(NUM_JOBS) | |||||
| mv veeseevstrack_instr.so vst2_bin/ | |||||
| mv veeseevstrack_effect.so vst2_bin/ | |||||
| @ls -l vst2_bin/veeseevstrack_instr.so | |||||
| @ls -l vst2_bin/veeseevstrack_effect.so | |||||
| .PHONY: clean | |||||
| clean: | |||||
| make -f makefile_lib.linux clean | |||||
| make -f makefile_shared_lib.linux clean | |||||
| make -f makefile_vst_instr.linux clean | |||||
| make -f makefile_vst_effect.linux clean | |||||
| @@ -5,29 +5,29 @@ | |||||
| NUM_JOBS=20 | NUM_JOBS=20 | ||||
| .PHONY: | |||||
| .PHONY: bin | |||||
| bin: vst | bin: vst | ||||
| .PHONY: | |||||
| .PHONY: lib | |||||
| lib: | lib: | ||||
| make -f makefile_lib.msvc bin -j $(NUM_JOBS) | make -f makefile_lib.msvc bin -j $(NUM_JOBS) | ||||
| .PHONY: | |||||
| .PHONY: shared_lib | |||||
| shared_lib: | shared_lib: | ||||
| make -f makefile_shared_lib.msvc bin -j $(NUM_JOBS) && mv Rack_shared.lib plugins/ | make -f makefile_shared_lib.msvc bin -j $(NUM_JOBS) && mv Rack_shared.lib plugins/ | ||||
| .PHONY: | |||||
| .PHONY: vst | |||||
| vst: lib | vst: lib | ||||
| rm -f src/vst2_main.o | rm -f src/vst2_main.o | ||||
| make -f makefile_vst_instr.msvc bin -j $(NUM_JOBS) | make -f makefile_vst_instr.msvc bin -j $(NUM_JOBS) | ||||
| rm -f src/vst2_main.o | rm -f src/vst2_main.o | ||||
| make -f makefile_vst_effect.msvc bin -j $(NUM_JOBS) | make -f makefile_vst_effect.msvc bin -j $(NUM_JOBS) | ||||
| # (note) cannot use both instrument and effect plugin at the same time! | |||||
| mv veeseevstrack_instr.dll vst2_bin/ | mv veeseevstrack_instr.dll vst2_bin/ | ||||
| mv veeseevstrack_effect.dll vst2_bin/ | mv veeseevstrack_effect.dll vst2_bin/ | ||||
| @ls -l vst2_bin/veeseevstrack_instr.dll | @ls -l vst2_bin/veeseevstrack_instr.dll | ||||
| @ls -l vst2_bin/veeseevstrack_effect.dll | @ls -l vst2_bin/veeseevstrack_effect.dll | ||||
| .PHONY: clean | |||||
| clean: | clean: | ||||
| make -f makefile_lib.msvc clean | make -f makefile_lib.msvc clean | ||||
| make -f makefile_shared_lib.msvc clean | make -f makefile_shared_lib.msvc clean | ||||
| @@ -0,0 +1,26 @@ | |||||
| # | |||||
| # Makefile for VCV rack lib + GCC | |||||
| # | |||||
| # | |||||
| 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/ | |||||
| # for osdialog: | |||||
| EXTRAFLAGS+= `pkg-config gtk+-2.0 --cflags` | |||||
| EXTRALIBS+= | |||||
| # need to link these later on: | |||||
| #jansson.a | |||||
| PLAF_OBJ= | |||||
| include make.objects | |||||
| ALL_OBJ=$(LIB_OBJ) $(LIB_OBJ_LINUX) | |||||
| include dep/yac/staticlib_linux.mk | |||||
| @@ -0,0 +1,34 @@ | |||||
| # | |||||
| # Makefile for VCV rack shared lib + GCC | |||||
| # | |||||
| # | |||||
| include dep/yac/install_linux.mk | |||||
| TARGET_BASENAME=Rack_shared | |||||
| EXTRAFLAGS= -DVERSION=0.6.1 -DARCH_LIN -D_USE_MATH_DEFINES -DRACK_PLUGIN -DRACK_PLUGIN_SHARED -DUSE_VST2 -Iinclude/ -Idep/include -Idep/ | |||||
| EXTRAFLAGS+= -DRACK_PLUGIN_SHARED_LIB_BUILD | |||||
| # for osdialog: | |||||
| EXTRAFLAGS+= `pkg-config gtk+-2.0 --cflags` | |||||
| ifeq ($(BUILD_64),y) | |||||
| EXTRALIBS_DEP= dep/lib/linux_gcc/x64 | |||||
| else | |||||
| EXTRALIBS_DEP= dep/lib/linux_gcc/x86 | |||||
| endif | |||||
| # need to link these later on: | |||||
| #EXTRALIBS+= `pkg-config gtk+-2.0 --libs` | |||||
| #EXTRALIBS+= $(EXTRALIBS_DEP)/jansson.a | |||||
| #EXTRALIBS+= $(EXTRALIBS_DEP)/glew.a | |||||
| #libspeexdsp.a | |||||
| PLAF_OBJ= | |||||
| include make.objects | |||||
| ALL_OBJ=$(SHARED_LIB_OBJ) $(LIB_OBJ_LINUX) | |||||
| include dep/yac/staticlib_linux.mk | |||||
| @@ -0,0 +1,10 @@ | |||||
| PLUGIN_DIR=plugins/community/repos/ | |||||
| include dep/yac/install_linux.mk | |||||
| TARGET_BASENAME=veeseevstrack_effect | |||||
| EXTRAFLAGS+= -DVST2_EFFECT | |||||
| include vst2_common_linux.mk | |||||
| @@ -6,4 +6,5 @@ include dep/yac/install_msvc.mk | |||||
| TARGET_BASENAME=veeseevstrack_effect | TARGET_BASENAME=veeseevstrack_effect | ||||
| EXTRAFLAGS+= -DVST2_EFFECT | EXTRAFLAGS+= -DVST2_EFFECT | ||||
| include vst2_common.mk | |||||
| include vst2_common_msvc.mk | |||||
| @@ -0,0 +1,8 @@ | |||||
| PLUGIN_DIR=plugins/community/repos/ | |||||
| include dep/yac/install_linux.mk | |||||
| TARGET_BASENAME=veeseevstrack_instr | |||||
| include vst2_common_linux.mk | |||||
| @@ -5,4 +5,4 @@ include dep/yac/install_msvc.mk | |||||
| TARGET_BASENAME=veeseevstrack_instr | TARGET_BASENAME=veeseevstrack_instr | ||||
| include vst2_common.mk | |||||
| include vst2_common_msvc.mk | |||||
| @@ -114,10 +114,12 @@ static void engineStep() { | |||||
| } | } | ||||
| static void engineRun() { | static void engineRun() { | ||||
| #ifdef _MSC_VER | |||||
| // Set CPU to flush-to-zero (FTZ) and denormals-are-zero (DAZ) mode | // Set CPU to flush-to-zero (FTZ) and denormals-are-zero (DAZ) mode | ||||
| // https://software.intel.com/en-us/node/682949 | // https://software.intel.com/en-us/node/682949 | ||||
| _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON); | _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON); | ||||
| _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON); | _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON); | ||||
| #endif // _MSC_VER | |||||
| // Every time the engine waits and locks a mutex, it steps this many frames | // Every time the engine waits and locks a mutex, it steps this many frames | ||||
| const int mutexSteps = 64; | const int mutexSteps = 64; | ||||
| @@ -767,11 +767,11 @@ using namespace rack; | |||||
| #ifdef USE_VST2 | #ifdef USE_VST2 | ||||
| #ifdef ARCH_WIN | #ifdef ARCH_WIN | ||||
| extern "C" extern long seed_initialized; | |||||
| extern "C" { extern long seed_initialized; } | |||||
| #else | #else | ||||
| extern "C" extern volatile char seed_initialized; | |||||
| extern "C" { extern volatile char seed_initialized; } | |||||
| #endif // ARCH_WIN | #endif // ARCH_WIN | ||||
| extern "C" extern volatile uint32_t hashtable_seed; | |||||
| extern "C" { extern volatile uint32_t hashtable_seed; } | |||||
| void vst2_set_shared_plugin_tls_globals(void) { | void vst2_set_shared_plugin_tls_globals(void) { | ||||
| // Called in audio thread (see vst2_main.cpp:VSTPluginProcessReplacingFloat32()) | // Called in audio thread (see vst2_main.cpp:VSTPluginProcessReplacingFloat32()) | ||||
| for(Plugin *p : global->plugin.gPlugins) { | for(Plugin *p : global->plugin.gPlugins) { | ||||
| @@ -18,7 +18,7 @@ | |||||
| /// created: 25Jun2018 | /// created: 25Jun2018 | ||||
| /// changed: 26Jun2018, 27Jun2018, 29Jun2018, 01Jul2018, 02Jul2018, 06Jul2018, 13Jul2018 | /// changed: 26Jun2018, 27Jun2018, 29Jun2018, 01Jul2018, 02Jul2018, 06Jul2018, 13Jul2018 | ||||
| /// 26Jul2018, 04Aug2018, 05Aug2018, 06Aug2018, 07Aug2018, 09Aug2018, 11Aug2018 | /// 26Jul2018, 04Aug2018, 05Aug2018, 06Aug2018, 07Aug2018, 09Aug2018, 11Aug2018 | ||||
| /// 18Aug2018, 19Aug2018, 05Sep2018, 06Sep2018 | |||||
| /// 18Aug2018, 19Aug2018, 05Sep2018, 06Sep2018, 10Oct2018 | |||||
| /// | /// | ||||
| /// | /// | ||||
| @@ -38,8 +38,8 @@ | |||||
| #ifndef RACK_PLUGIN_SHARED_LIB_BUILD | #ifndef RACK_PLUGIN_SHARED_LIB_BUILD | ||||
| extern void vst2_set_globals (void *_wrapper); | extern void vst2_set_globals (void *_wrapper); | ||||
| extern "C" extern void lglw_timer_cbk (lglw_t _lglw); // implemented in vst2_main.cpp | |||||
| extern "C" extern void lglw_redraw_cbk (lglw_t _lglw); // implemented in vst2_main.cpp | |||||
| extern "C" { extern void lglw_timer_cbk (lglw_t _lglw); } // implemented in vst2_main.cpp | |||||
| extern "C" { extern void lglw_redraw_cbk (lglw_t _lglw); } // implemented in vst2_main.cpp | |||||
| #else | #else | ||||
| void vst2_set_globals(void *) { } | void vst2_set_globals(void *) { } | ||||
| void vst2_window_size_set(int, int) { } | void vst2_window_size_set(int, int) { } | ||||
| @@ -0,0 +1,18 @@ | |||||
| # | |||||
| # Makefile for VCV rack VST2 plugin | |||||
| # | |||||
| # | |||||
| EXTRAFLAGS+= -DVERSION=0.6.1 -D_USE_MATH_DEFINES -Iinclude/ -Idep/include -Idep/ -DUSE_VST2 | |||||
| include vst2_common_linux_pre.mk | |||||
| include vst2_common_staticlibs.mk | |||||
| PLAF_OBJ= | |||||
| include make.objects | |||||
| ALL_OBJ= $(MAIN_OBJ) | |||||
| include vst2_common_linux_post.mk | |||||
| @@ -0,0 +1,3 @@ | |||||
| EXTRALIBS+= Rack.a | |||||
| include dep/yac/sharedlib_linux.mk | |||||
| @@ -0,0 +1,14 @@ | |||||
| EXTRAFLAGS+= -DARCH_LIN | |||||
| EXTRAFLAGS+= -I../../dev/vstsdk2.4/pluginterfaces/vst2.x/ | |||||
| EXTRALIBS= | |||||
| ifeq ($(BUILD_64),y) | |||||
| EXTRALIBS_DEP= dep/lib/linux_gcc/x64 | |||||
| else | |||||
| EXTRALIBS_DEP= dep/lib/linux_gcc/x86 | |||||
| endif | |||||
| EXTRALIBS+= $(EXTRALIBS_DEP)/libspeexdsp.a $(EXTRALIBS_DEP)/glew.a -lGL | |||||
| plugin_lib = $(PLUGIN_DIR)/$(1)/$(1).a | |||||