As I am learning about VST development I wanted to share my notes, first as a way to document my own understanding for the future and second as a way to help others following a similar path.

This is currently a work in progress. This is not meant to be generic for all platforms and is only focusing on macOS.

Configuration

At the time of this writing (February 2018) I am using:

  • Hardware: MacBook Pro (Mid 2014) / 2.8Ghz Intel Core i7 / 16GB
  • macOS High Sierra 10.13.3
  • XCode 9.2

Notes

Install

Version VST 3 / 368 (vstsdk368_08_11_2017_build_121) downloaded from Steinberg

After unpacking, run

./copy_vst2_to_vst3_sdk.sh

to make sure that we can build VST2 wrappers as well (VST3 is very poorly supported, ex: Maschine by Native Instruments or Reason by Properllerhead do not support it)

Documentation

Documentation starts with VST3_SDK/index.html and is not really beginner friendly.

Building the SDK

Unlike what the documentation states (“How to use cmake for Building VST 3 Plug-in”), CMake is not used to build VST 3 plugins. CMake is used to generate a platform dependent project (ex: XCode project for Mac, Visual Studio project for Windows). This project (hence the build framework associated with it) is then used (not CMake!) to build the examples provided in the sdk as well as compile the SDK itself (multiple libraries) and some tools.

This still does not explain how to build your OWN vst plugins.

Generate XCode project

  • Run cmake-gui (version 3.9.4 installed from CMake download) from anywhere.
  • In the Where is the source code: field, point to the VST3_SDK folder.
  • In the Where to build the binaries: field, point to any folder you want but since it will create a project whose purpose is to build the SDK I choose to put it at the same level as VST3_SDK and call it build.
  • Click Configure (and approve creation of the output folder if it does not exist).
  • Select Xcode for the generator for this project.
  • Once the configuration completes, the Name/Value section will have some default values. Check the SMTG_CREATE_VST2_VERSION option because we want to build VST2 plugins as well.
  • Click Generate

Build the again example

All this is relative to the Where to build the binaries: folder previously set (which in my case is <SDK_ROOT>/build)
  • Under the output folder previously selected there is now a Xcode project called vstsdk. Double click to open in Xcode.
  • In the Scheme selection dropdown (on the right of the buttons that look like play & stop), select again / My Mac
  • Now select menu Product/Build to build again plugin
  • The result of the build will be stored under VST3/Debug/again.vst3
  • As a side effect of this build, some libraries were generated (under lib/Debug) and a validator tool (bin/Debug/validator)
  • Run the validator tool:
./bin/Debug/validator VST3/Debug/again.vst3
...
* Scanning classes...

  Factory Info:
	vendor = Steinberg Media Technologies
	url = http://www.steinberg.net
	email = mailto:info@steinberg.de

  Class Info 0:
	name = AGain VST3
	category = Audio Module Class
	cid = 84E8DE5F92554F5396FAE4133C935A18

  Class Info 1:
	name = AGain VST3Controller
	category = Component Controller Class
	cid = D39D5B65D7AF42FA843F4AC841EB04F0

  Class Info 2:
	name = AGain SideChain VST3
	category = Audio Module Class
	cid = 41347FD6FED64094AFBB12B7DBA1D441
...
-------------------------------------------------------------
Result: 78 tests passed, 0 tests failed
-------------------------------------------------------------
  • Copy the plugin as a VST2 plugin for local testing
    cp -r VST3/Debug/again.vst3 ~/Library/Audio/Plug-Ins/VST/again.vst
  • Open a DAW application (Maschine in my example) and assign the plugin to a sound (the plugin is under Steinberg Media Technologies)

TO BE CONTINUED

Open questions:

  • How to build your own plugin OUTSIDE the SDK. Ideally depending only on header files and libraries generated during the previous build
  • How to build in Release mode

This post will be updated soon…