diff --git a/dep/dep.7z b/dep/dep.7z index 07f36c49..9843bb19 100644 Binary files a/dep/dep.7z and b/dep/dep.7z differ diff --git a/include/plugin.hpp b/include/plugin.hpp index 96225b16..be050b26 100644 --- a/include/plugin.hpp +++ b/include/plugin.hpp @@ -4,6 +4,7 @@ #include // debug #include #include "tags.hpp" +#include "util/common.hpp" #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); #define RACK_PLUGIN_DECLARE(pluginname) +#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 // _MSC_VER #define RACK_PLUGIN_INIT_ID() RACK_PLUGIN_INIT_ID_INTERNAL #else @@ -87,7 +92,11 @@ RACK_PLUGIN_EXPORT void init_plugin(rack::Plugin *p) #else // Statically linked plugin build #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 #endif // RACK_PLUGIN_SHARED #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_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_INIT(pluginname, modelname) Model *create_model_##pluginname##_##modelname##(void) #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 { diff --git a/make.objects b/make.objects index b2358015..a02411ce 100644 --- a/make.objects +++ b/make.objects @@ -1,9 +1,10 @@ -COMMON_OBJ= \ +COMMON_DEP_OBJ= \ dep/jpommier-pffft-29e4f76ac53b/fftpack.o \ dep/jpommier-pffft-29e4f76ac53b/pffft.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/AudioWidget.o \ src/app/CircularShadow.o \ @@ -84,6 +85,9 @@ COMMON_OBJ= \ # src/keyboard.o +COMMON_OBJ+=$(COMMON_DEP_OBJ) + + HOST_OBJ= \ src/Core/AudioInterface.o \ src/Core/Blank.o \ @@ -101,11 +105,17 @@ LIB_OBJ= \ LIB_OBJ_WIN= \ src/util/dirent_win32/dirent.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= \ $(COMMON_OBJ) + MAIN_OBJ= \ src/vst2_main.o \ src/main.o diff --git a/makefile.linux b/makefile.linux new file mode 100644 index 00000000..403c8048 --- /dev/null +++ b/makefile.linux @@ -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 + diff --git a/makefile.msvc b/makefile.msvc index 42ebd220..4ed1da12 100644 --- a/makefile.msvc +++ b/makefile.msvc @@ -5,29 +5,29 @@ NUM_JOBS=20 -.PHONY: +.PHONY: bin bin: vst -.PHONY: +.PHONY: lib lib: make -f makefile_lib.msvc bin -j $(NUM_JOBS) -.PHONY: +.PHONY: shared_lib shared_lib: make -f makefile_shared_lib.msvc bin -j $(NUM_JOBS) && mv Rack_shared.lib plugins/ -.PHONY: +.PHONY: vst vst: lib rm -f src/vst2_main.o make -f makefile_vst_instr.msvc bin -j $(NUM_JOBS) rm -f src/vst2_main.o 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_effect.dll vst2_bin/ @ls -l vst2_bin/veeseevstrack_instr.dll @ls -l vst2_bin/veeseevstrack_effect.dll +.PHONY: clean clean: make -f makefile_lib.msvc clean make -f makefile_shared_lib.msvc clean diff --git a/makefile_lib.linux b/makefile_lib.linux new file mode 100644 index 00000000..e3b12a0d --- /dev/null +++ b/makefile_lib.linux @@ -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 diff --git a/makefile_shared_lib.linux b/makefile_shared_lib.linux new file mode 100644 index 00000000..38ba5cac --- /dev/null +++ b/makefile_shared_lib.linux @@ -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 diff --git a/makefile_vst_effect.linux b/makefile_vst_effect.linux new file mode 100644 index 00000000..3f17862e --- /dev/null +++ b/makefile_vst_effect.linux @@ -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 diff --git a/makefile_vst_effect.msvc b/makefile_vst_effect.msvc index c2539713..f67e3c3c 100644 --- a/makefile_vst_effect.msvc +++ b/makefile_vst_effect.msvc @@ -6,4 +6,5 @@ include dep/yac/install_msvc.mk TARGET_BASENAME=veeseevstrack_effect EXTRAFLAGS+= -DVST2_EFFECT -include vst2_common.mk + +include vst2_common_msvc.mk diff --git a/makefile_vst_instr.linux b/makefile_vst_instr.linux new file mode 100644 index 00000000..c5a6ddc9 --- /dev/null +++ b/makefile_vst_instr.linux @@ -0,0 +1,8 @@ + +PLUGIN_DIR=plugins/community/repos/ + +include dep/yac/install_linux.mk + +TARGET_BASENAME=veeseevstrack_instr + +include vst2_common_linux.mk diff --git a/makefile_vst_instr.msvc b/makefile_vst_instr.msvc index 8f70efc6..18c9b7b1 100644 --- a/makefile_vst_instr.msvc +++ b/makefile_vst_instr.msvc @@ -5,4 +5,4 @@ include dep/yac/install_msvc.mk TARGET_BASENAME=veeseevstrack_instr -include vst2_common.mk +include vst2_common_msvc.mk diff --git a/src/engine.cpp b/src/engine.cpp index 481e2887..80ca34e0 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -114,10 +114,12 @@ static void engineStep() { } static void engineRun() { +#ifdef _MSC_VER // Set CPU to flush-to-zero (FTZ) and denormals-are-zero (DAZ) mode // https://software.intel.com/en-us/node/682949 _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_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 const int mutexSteps = 64; diff --git a/src/plugin.cpp b/src/plugin.cpp index 99e6a9f9..dfff389d 100644 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -767,11 +767,11 @@ using namespace rack; #ifdef USE_VST2 #ifdef ARCH_WIN -extern "C" extern long seed_initialized; +extern "C" { extern long seed_initialized; } #else -extern "C" extern volatile char seed_initialized; +extern "C" { extern volatile char seed_initialized; } #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) { // Called in audio thread (see vst2_main.cpp:VSTPluginProcessReplacingFloat32()) for(Plugin *p : global->plugin.gPlugins) { diff --git a/src/vst2_main.cpp b/src/vst2_main.cpp index 7392b656..8565b6ab 100644 --- a/src/vst2_main.cpp +++ b/src/vst2_main.cpp @@ -18,7 +18,7 @@ /// created: 25Jun2018 /// changed: 26Jun2018, 27Jun2018, 29Jun2018, 01Jul2018, 02Jul2018, 06Jul2018, 13Jul2018 /// 26Jul2018, 04Aug2018, 05Aug2018, 06Aug2018, 07Aug2018, 09Aug2018, 11Aug2018 -/// 18Aug2018, 19Aug2018, 05Sep2018, 06Sep2018 +/// 18Aug2018, 19Aug2018, 05Sep2018, 06Sep2018, 10Oct2018 /// /// diff --git a/src/window.cpp b/src/window.cpp index 9ec5d3c2..b36fe306 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -38,8 +38,8 @@ #ifndef RACK_PLUGIN_SHARED_LIB_BUILD 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 void vst2_set_globals(void *) { } void vst2_window_size_set(int, int) { } diff --git a/vst2_common_linux.mk b/vst2_common_linux.mk new file mode 100644 index 00000000..309f00d5 --- /dev/null +++ b/vst2_common_linux.mk @@ -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 diff --git a/vst2_common_linux_post.mk b/vst2_common_linux_post.mk new file mode 100644 index 00000000..0914b674 --- /dev/null +++ b/vst2_common_linux_post.mk @@ -0,0 +1,3 @@ +EXTRALIBS+= Rack.a + +include dep/yac/sharedlib_linux.mk diff --git a/vst2_common_linux_pre.mk b/vst2_common_linux_pre.mk new file mode 100644 index 00000000..6166ade4 --- /dev/null +++ b/vst2_common_linux_pre.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 diff --git a/vst2_common.mk b/vst2_common_msvc.mk similarity index 100% rename from vst2_common.mk rename to vst2_common_msvc.mk