zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit c6aac1a512b0d3bf5013dd3712bbc2f5d60f5211
parent 4b95ad25aebe87c79edfcfde86bd03ac46031d48
Author: Jeremy Carter <Jeremy@JeremyCarter.ca>
Date:   Mon,  3 Oct 2016 00:57:24 -0400

Unofficial instructions for compiling on Win64 MinGW64 MSYS2

Diffstat:
Adoc/win64-mingw64-msys2/README.txt | 221+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 221 insertions(+), 0 deletions(-)

diff --git a/doc/win64-mingw64-msys2/README.txt b/doc/win64-mingw64-msys2/README.txt @@ -0,0 +1,220 @@ +How to compile ZynAddSubFX on Windows MinGW64 MSYS2: + +Tested on Windows 10 64-bit at commit 4b95ad25aebe87c79edfcfde86bd03ac46031d48 on 2016-10-02 + +This is an unofficial way to get ZynAddSubFX running as a 64-bit VST plugin +on Windows. Following this method will modify the Zyn source code in ways +which may break Linux compatibility. Or not, I didn't test it on Linux +after making the changes. + +The VST plugin doesn't have a UI, but we can build the zynaddsubfx-ext-gui, +which can be used to connect to your running Zyn VST instances, providing +that familiar Zyn UI. It works quite well, although it would be better if +the VST plugins could just open their own UI instead. + + +Download and install MSYS2 64-bit ( https://msys2.github.io ) + +Open an MSYS2 shell. + + +Install some dependencies with pacman: + +pacman -S --force mingw-w64-x86_64-toolchain git make gcc mingw-w64-x86_64-fftw diffutils mingw-w64-i686-toolchain mingw-w64-x86_64-fltk + + +Make a folder to hold your downloads: + +mkdir -p ~/Downloads + + +Close your MSYS2 shell and open a MinGW64 MSYS2 shell. + +cd ~/Downloads + +Enable multithreaded compiling: + +export MAKE="make -j" + +Install some source dependencies: + +git clone https://github.com/sharpee/mxml +cd mxml +./configure --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --prefix=/mingw64 CFLAGS=-D__CRT__NO_INLINE +make -D__CRT__NO_INLINE +make install + +cd ~/Downloads +git clone https://github.com/guysherman/MINGW-packages.git +cd MINGW-packages +git checkout guypkgs +cd mingw-w64-liblo && makepkg-mingw --install && cd .. + + +Add the MinGW and MSYS2 bin dirs to your Windows PATH: + +Open System Properties, click Environment Variables, +Then edit the system Path variable. Add these two paths in this order: + +C:\msys64\mingw64\bin +C:\msys64\usr\bin + + +Clone the Zyn git repo: + +cd ~/Downloads +git clone https://github.com/zynaddsubfx/zynaddsubfx.git +cd zynaddsubfx +git submodule update --init --recursive + + +Fix some of Zyn's CMake build scripts: + +sed -i "s/string(STRIP \${FLTK_LDFLAGS} FLTK_LIBRARIES)/string(STRIP \"\${FLTK_LDFLAGS}\" FLTK_LIBRARIES)/g" src/CMakeLists.txt +sed -i "s/target_link_libraries(zynaddsubfx_gui \${FLTK_LIBRARIES})/target_link_libraries(zynaddsubfx_gui \${FLTK_BASE_LIBRARY})/g" src/UI/CMakeLists.txt +sed -i "s/install(TARGETS ZynAddSubFX_vst LIBRARY/install(TARGETS ZynAddSubFX_vst RUNTIME/g" src/Plugin/ZynAddSubFX/CMakeLists.txt +cat src/Plugin/ZynAddSubFX/CMakeLists.txt | tr '\n' '\r' | sed -e "s/elseif(FltkGui)\r\r# UI Enabled using FLTK: external only\radd_library(ZynAddSubFX_lv2 SHARED\r \${CMAKE_SOURCE_DIR}\/src\/globals.cpp\r \${CMAKE_SOURCE_DIR}\/src\/UI\/ConnectionDummy.cpp\r \${CMAKE_SOURCE_DIR}\/DPF\/distrho\/DistrhoPluginMain.cpp\r ZynAddSubFX.cpp)/elseif(FltkGui)\r\r# UI Enabled using FLTK: external only\r#\[\[\radd_library(ZynAddSubFX_lv2 SHARED\r \${CMAKE_SOURCE_DIR}\/src\/globals.cpp\r \${CMAKE_SOURCE_DIR}\/src\/UI\/ConnectionDummy.cpp\r \${CMAKE_SOURCE_DIR}\/DPF\/distrho\/DistrhoPluginMain.cpp\r ZynAddSubFX.cpp)\r\]\]\r/g" | tr '\r' '\n' > src/Plugin/ZynAddSubFX/CMakeLists.txt +cat src/Plugin/ZynAddSubFX/CMakeLists.txt | tr '\n' '\r' | sed -e "s/set_target_properties(ZynAddSubFX_lv2 PROPERTIES COMPILE_DEFINITIONS \"DISTRHO_PLUGIN_TARGET_LV2\")\rset_target_properties(ZynAddSubFX_lv2 PROPERTIES LIBRARY_OUTPUT_DIRECTORY \"lv2\")\rset_target_properties(ZynAddSubFX_lv2 PROPERTIES OUTPUT_NAME \"ZynAddSubFX\")\rset_target_properties(ZynAddSubFX_lv2 PROPERTIES PREFIX \"\")/#\[\[\rset_target_properties(ZynAddSubFX_lv2 PROPERTIES COMPILE_DEFINITIONS \"DISTRHO_PLUGIN_TARGET_LV2\")\rset_target_properties(ZynAddSubFX_lv2 PROPERTIES LIBRARY_OUTPUT_DIRECTORY \"lv2\")\rset_target_properties(ZynAddSubFX_lv2 PROPERTIES OUTPUT_NAME \"ZynAddSubFX\")\rset_target_properties(ZynAddSubFX_lv2 PROPERTIES PREFIX \"\")\r\]\]/g" | tr '\r' '\n' > src/Plugin/ZynAddSubFX/CMakeLists.txt +cat src/Plugin/ZynAddSubFX/CMakeLists.txt | tr '\n' '\r' | sed -e "s/target_link_libraries(ZynAddSubFX_lv2 zynaddsubfx_core \${OS_LIBRARIES} \${LIBLO_LIBRARIES}\r \${PLATFORM_LIBRARIES})/#\[\[\rtarget_link_libraries(ZynAddSubFX_lv2 zynaddsubfx_core \${OS_LIBRARIES} \${LIBLO_LIBRARIES}\r \${PLATFORM_LIBRARIES})\r\]\]/g" | tr '\r' '\n' > src/Plugin/ZynAddSubFX/CMakeLists.txt +sed -i "s/install(TARGETS ZynAddSubFX_lv2 LIBRARY DESTINATION \${PluginLibDir}\/lv2\/ZynAddSubFX.lv2\/)/#install(TARGETS ZynAddSubFX_lv2 LIBRARY DESTINATION \${PluginLibDir}\/lv2\/ZynAddSubFX.lv2\/)/g" src/Plugin/ZynAddSubFX/CMakeLists.txt +cat src/Plugin/ZynAddSubFX/CMakeLists.txt | tr '\n' '\r' | sed -e "s/add_library(ZynAddSubFX_lv2_ui SHARED\r \${CMAKE_SOURCE_DIR}\/DPF\/distrho\/DistrhoUIMain.cpp\r ZynAddSubFX-UI.cpp)/#\[\[\radd_library(ZynAddSubFX_lv2_ui SHARED\r \${CMAKE_SOURCE_DIR}\/DPF\/distrho\/DistrhoUIMain.cpp\r ZynAddSubFX-UI.cpp)\r\]\]/g" | tr '\r' '\n' > src/Plugin/ZynAddSubFX/CMakeLists.txt + + + +Fix some other files which cause the Zyn build to fail on MinGW: + +sed -i "s/lstat/stat/g" src/Misc/BankDb.cpp +sed -i "s/if(ret != -1)/\/\/if(ret != -1)/g" src/Misc/BankDb.cpp +sed -i "s/time = st.st_mtim.tv_sec;/\/\/time = st.st_mtim.tv_sec;/g" src/Misc/BankDb.cpp +sed -i "s/printf(\"desired mask = %x\\\n\", mask);/\/\/printf(\"desired mask = %x\\\n\", mask);/g" src/Misc/MiddleWare.cpp +sed -i "s/#include <err.h>/\/\/#include <err.h>/g" src/main.cpp +cat src/UI/MasterUI.fl | tr '\n' '\r' | sed -e "s/decl {\\\#include <stdlib.h>} {public local\r}/decl {\\\#undef WIN32\r\\\#include <FL\/x.H>\r\\\#define WIN32} {public local\r}\r\rdecl {\\\#include <stdlib.h>} {public local\r}\r/g" | tr '\r' '\n' > src/UI/MasterUI.fl +sed -i "s/index/strchr/g" src/UI/Fl_Osc_Tree.H + + +Make a build folder: + +mkdir -p build +cd build + + +Download and install CMake 64-bit ( https://cmake.org/download/ ) + +During the install, choose "Add CMake to the system PATH for all users", +and "Create CMake Desktop Icon". + +Open CMake-gui, set the source code location to: + +C:\msys64\home\<your username>\Downloads\zynaddsubfx + +Set the build location to: + +C:\msys64\home\<your username>\Downloads\zynaddsubfx\build + +Click Configure, then choose the MinGW Makefiles generator, click Finish. + +It will give an error about sh.exe being in your path. That's okay, +Click Configure again. It should succeed and say "Configuring done" at the +bottom. + +Uncheck OssEnable and change GuiModule to "fltk" if it isn't set on that. + +Click Configure. If it fails, fix any errors and then repeat until it +succeeds. + +Click Generate. + + +Compile and install ZynAddSubFX: + +MSYSTEM='' +mingw32-make + + +It will error out with: +C:/msys64-zyn/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/6.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -llo + +So we will patch some CMake output files (there must be a better way, but I +couldn't find where all the -llo were coming from): + +sed -i "s/-llo/-l:liblo.dll.a/g" src/Plugin/ZynAddSubFX/CMakeFiles/ZynAddSubFX_lv2.dir/linklibs.rsp +sed -i "s/-llo/-l:liblo.dll.a/g" src/Plugin/ZynAddSubFX/CMakeFiles/ZynAddSubFX_vst.dir/linklibs.rsp +sed -i "s/-llo/-l:liblo.dll.a/g" src/CMakeFiles/zynaddsubfx.dir/linklibs.rsp +sed -i "s/-llo/-l:liblo.dll.a/g" src/UI/CMakeFiles/zynaddsubfx-ext-gui.dir/linklibs.rsp + +Add a missing folder and compile again: + +mkdir -p src/Plugin/ZynAddSubFX/lv2 +mingw32-make + +If the build failed, fix any errors until it succeeds (and please tell me +about them), and then copy your shiny new Zyn VST plugin dll into the spot +where your DAW wants it. For Ardour: + +copy C:\msys64\home\<your username>\Downloads\zynaddsubfx\build\src\Plugin\ZynAddSubFX\ZynAddSubFX.dll +to +C:\Users\<your username>\Documents\Plugins\VST + + +Make a symlink to the instruments that come with Zyn, so it can find them: + +cd ~ +ln -s ~/Downloads/zynaddsubfx/instruments/banks + + +If it all worked, OMG, You can use Zyn on Windows now! But how to use it?: + +I've only tried it in Ardour, so I can't speak for other DAWs, but to use +it in Ardour, you need to launch Ardour from a terminal, make a new session, +add a MIDI track, then open Preferences. + +Go to Plugins -> VST, check "Scan for [new] VST Plugins on Application Start" +and make sure Verbose Plugin Scan is checked. + +Now click "Scan for Plugins", then go back to the Editor or Mixer view and +you should be able to add your new ZynAddSubFX VST plugin to the MIDI track. + +Once added, you should be able to play the default sine wave synth and hear +the audio from it. But you'll probably notice there's no UI. We need the UI! + + +Enter zynaddsubfx-ext-gui. This is a familiar FLTK frontend to Zyn which +can connect to a Zyn VST instance. To launch it, do this in the MinGW64 +MSYS2 shell: + +cd ~/Downloads/zynaddsubfx/build/src/UI + +Now take a look at the terminal that you're running your DAW in, and look +for some output that looks like "lo server running on <some number>". + +You will see two lines like that which are from when you added the Zyn VST +plugin to your MIDI track. We need the number from the second line. + +Now launch the ext-gui pointing at your VST instance: + +./zynaddsubfx-ext-gui.exe osc.udp://localhost:<the second number> + +The GUI should open, and if you got the number right, some of the knobs +in the GUI should be turned up, and then you'll be able to control the VST +with the GUI, and also the GUI with the VST. + +If the number was wrong, all the knobs in the GUI will be turned down, and +everything will be set to empty or disabled values. In that case, check the +terminal output again, and try a different number. + +In Ardour, sometimes the line with the correct number won't show until the +next time you save your session after adding a VST instance of Zyn. + +You can totally use as many Zyn VST instances as you want and attach GUIs +to each of them. The order of the numbers printed in the terminal should +reflect either the order the plugins were added in, or maybe the order of +the tracks they are in, remember though that the first line with the number +which shows in the terminal is not valid, so connect your GUIs starting +from the second number onwards. + + +Yay, Zyn 64-bit VST in Windows! That was hard! Let me know how it goes, and +if this process breaks in the future, I'll happily accept pull requests to +fix it. + +~Jeremy Carter <Jeremy@JeremyCarter.ca> 2016 +\ No newline at end of file