194 lines
6.3 KiB
Markdown
194 lines
6.3 KiB
Markdown
A lot of thrashing was involved.
|
|
|
|
So first I'll list the steps that I _know_ are necessary.
|
|
Then after that I'll list the steps which were probably unnecessary.
|
|
|
|
# Definitely necessary
|
|
|
|
## Install Visual Studio Community:
|
|
|
|
https://www.visualstudio.com/
|
|
|
|
## Install [VST3 Audio Plug-Ins SDK](https://www.steinberg.net/en/company/developers.html)
|
|
|
|
Such that this folder exists:
|
|
|
|
```
|
|
C:\SDKs\VST_SDK\VST3_SDK
|
|
```
|
|
|
|
## Install JUCE framework
|
|
|
|
https://shop.juce.com/get-juce
|
|
|
|
JUCE should be installed to `C:\Juce`
|
|
|
|
_Note: the only thing we actually need from here is `C:\Juce\modules`. I've copied that into the repository now, so soon I'll be able to make that step skippable._
|
|
|
|
## That's all. Probably.
|
|
|
|
Well, unless you're also interested in the Setup project:
|
|
|
|
## Configure "Setup" project
|
|
|
|
This is project constructs a .exe and .msi installer (i.e. for distributing the synth).
|
|
|
|
### Install support for Visual Studio Setup projects
|
|
|
|
https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.MicrosoftVisualStudio2017InstallerProjects
|
|
|
|
### Fix unrecoverable build error
|
|
|
|
Register MergeMod.dll
|
|
|
|
https://stackoverflow.com/questions/42624572/unrecoverable-build-error-whilst-trying-to-build-setup-on-vs2015
|
|
|
|
If you encounter "Unrecoverable build error" when building juicysfplugin's setup.exe installer, you need to open an administrator prompt and register MergeMod.dll:
|
|
|
|
```bash
|
|
regsvr32 "C:\Program Files (x86)\Common Files\Microsoft Shared\MSI Tools\MergeMod.dll"
|
|
```
|
|
|
|
You may also need to run Visual Studio as Adminstrator.
|
|
|
|
# Necessary for changing the dependencies
|
|
|
|
If you want to build against a newer version of fluidsynth, you'll need libfluidsynth.dll and friends.
|
|
|
|
The way I originally got these was from MSYS2's MinGW repository.
|
|
|
|
## Install msys2 toolchain (x86_64):
|
|
|
|
http://www.msys2.org/
|
|
|
|
> MSYS2 is a software distro and building platform for Windows
|
|
> an independent rewrite of MSYS, based on modern Cygwin (POSIX compatibility layer) and MinGW-w64
|
|
> provides a bash shell, Autotools, revision control systems and the like for building native Windows applications using MinGW-w64 toolchains
|
|
> features a package management system to provide easy installation of packages, Pacman
|
|
|
|
## Grab latest package definitions:
|
|
|
|
Press the Start key to search for and launch an MSYS2 command prompt. Named `MSYS2 MinGW 64-bit`.
|
|
|
|
```
|
|
pacman -Syu
|
|
```
|
|
|
|
It may ask you to close the terminal and run update one more time:
|
|
|
|
```
|
|
pacman -Su
|
|
```
|
|
|
|
## Install libfluidsynth.dll:
|
|
|
|
https://github.com/Alexpux/MINGW-packages/blob/master/mingw-w64-fluidsynth/PKGBUILD
|
|
|
|
```
|
|
pacman -S --needed mingw64/mingw-w64-x86_64-fluidsynth
|
|
```
|
|
|
|
## Learn about how to make changes to PKGBUILD
|
|
|
|
If you want to change compile flags on the [fluidsynth package](https://github.com/Alexpux/MINGW-packages/blob/master/mingw-w64-fluidsynth/PKGBUILD), you'll need to clone the MINGW-packages repository, edit `mingw-w64-fluidsynth/PKGBUILD`, and build with `makepkg-mingw -sCLf`.
|
|
|
|
https://github.com/msys2/msys2/wiki/Creating-Packages#re-building-a-package
|
|
|
|
```bash
|
|
git clone "https://github.com/Alexpux/MINGW-packages"
|
|
cd MINGW-packages/mingw-w64-fluidsynth
|
|
makepkg-mingw -sCLf
|
|
pacman -U mingw-w64-*-fluidsynth-*-any.pkg.tar.xz
|
|
```
|
|
|
|
## Learn about dynamic linking
|
|
|
|
You can use `ldd` to check where a dll looks for its dependencies:
|
|
|
|
```
|
|
$ ldd /mingw64/bin/libfluidsynth-1.dll
|
|
libsndfile-1.dll => /mingw64/bin/libsndfile-1.dll (0x70440000)
|
|
…
|
|
```
|
|
|
|
Side-note: [fuslogvw](https://docs.microsoft.com/en-us/dotnet/framework/tools/fuslogvw-exe-assembly-binding-log-viewer) helps you debug .NET's run-time linker. Not relevant to juicysfplugin (because it's not managed code), but it's a useful tool for Windows developers to know about.
|
|
|
|
# Prefer CLion?
|
|
|
|
We don't have Windows support in our CMake project (I could add it by using Projucer to generate a CODE::Blocks exporter, but I don't want to maintain that).
|
|
|
|
Anyway, here's my notes.
|
|
|
|
## Install CLion
|
|
|
|
https://www.jetbrains.com/clion/nextversion/
|
|
|
|
## Install MinGW toolchain
|
|
|
|
Required for CLion integration.
|
|
|
|
https://stackoverflow.com/questions/36375081/how-to-run-clion-with-msys2-on-windows
|
|
|
|
You don't need all the packages here (like Ada, Fortran, Objective-C...), but space is cheap so just install all.
|
|
|
|
```bash
|
|
pacman -S --needed mingw-w64-x86_64-toolchain
|
|
```
|
|
|
|
## Configure CLion
|
|
|
|
Add MinGW Toolchain:
|
|
|
|
```
|
|
C:\msys64\mingw64
|
|
```
|
|
|
|
# Want to use Visual Studio upon a CMake project?
|
|
|
|
We don't have Windows support in our CMake project (see "Prefer CLion?" section for brief explanation), but I wrote some notes on this whilst I was thrashing around.
|
|
|
|
## Configure Visual Studio build environment
|
|
|
|
https://trac.ffmpeg.org/wiki/CompilationGuide/MSVC#Settingtheenvironment
|
|
|
|
Sets source and target architecture to x64:
|
|
|
|
```cmd
|
|
"C:\Program Files (x86)\Microsoft Visual Studio\Preview\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
|
|
```
|
|
|
|
## Configure MSYS2 environment
|
|
|
|
Press the Start key to search for and launch an MSYS2 command prompt. Named `MSYS2 MinGW 64-bit`.
|
|
|
|
Ensure that on MSYS2's path, Visual Studio's cl and link programs have the highest precedence:
|
|
|
|
```bash
|
|
echo 'export PATH="/c/Program Files (x86)/Microsoft Visual Studio/Preview/Community/VC/Tools/MSVC/14.14.26428/bin/Hostx64/x64/:$PATH"' >> ~/.bashrc
|
|
```
|
|
|
|
Ensure that any libs or headers you wish to include are added to the path:
|
|
|
|
```bash
|
|
echo 'export LIB="EXAMPLE:$LIB"' >> ~/.bashrc
|
|
echo 'export INCLUDE="EXAMPLE:$INCLUDE"' >> ~/.bashrc
|
|
```
|
|
|
|
## Install LLVM
|
|
|
|
I can't remember why, since this seems to be switching to a different toolchain or compiler altogether.
|
|
Maybe it was an alternative approach.
|
|
|
|
https://releases.llvm.org/download.html
|
|
|
|
# Glossary
|
|
|
|
https://github.com/msys2/msys2/wiki/How-does-MSYS2-differ-from-Cygwin
|
|
|
|
```
|
|
Cygwin: Gives you application support for POSIX compatible API, build and run environment. Useful when you have a native POSIX application you want to compile and run on a windows box.
|
|
|
|
MSYS2: API's and build environment. This is useful when you have something like a library you want to use that requires autotools or has a complicated build system.
|
|
|
|
MinGW: POSIX API. Useful if you want to compile, or especially cross compile using gcc, use POSIX api's and have access to unix command line tools.
|
|
``` |