Skip to content

Building from Source

André Müller edited this page Nov 13, 2026 · 1 revision

Building from Source

Requirements

  • CMake 3.25 or newer and Git, on every platform.

  • Windows: Visual Studio with the Desktop development with C++ workload (build.ps1 also finds the CMake that ships with Visual Studio).

  • macOS: macOS 11 or newer, the Xcode command line tools and Ninja.

  • Linux: a C++20 compiler, Ninja and the JUCE system libraries. On Debian/Ubuntu:

    sudo apt-get install ninja-build xvfb libasound2-dev libjack-jackd2-dev libfreetype-dev libfontconfig1-dev \
      libx11-dev libxcomposite-dev libxcursor-dev libxext-dev libxinerama-dev libxrandr-dev \
      libxrender-dev libcurl4-openssl-dev mesa-common-dev libgl1-mesa-dev

    For the Steinberg validator also libgtk-3-dev libgtkmm-3.0-dev.

JUCE 8.0.15 and Catch2 are fetched automatically by CMake on the first configure.

Windows: build.ps1

git clone https://github.com/atze187/dubcycling.git
cd dubcycling
powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1 all
Command What it does
configure CMake configure with the preset windows-x64 (Visual Studio, x64)
build Build (configures first if needed)
test Build and run all tests (CTest)
validate Build Steinberg's VST3 validator (tools/vst3validator) and run it on the plugin, then pluginval at strictness level 5 if tools\bin\pluginval.exe exists
all configure + build + test (default)

Option: -Config Debug|Release (default Release). Output: build\plugin\Dubcycling_artefacts\Release\VST3\Dubcycling.vst3. The build does not copy the plugin into your VST3 folder; copy it yourself (see Installation).

For pluginval, download pluginval_Windows.zip from Tracktion/pluginval releases and put pluginval.exe in tools\bin\.

macOS and Linux: CMake presets

build.ps1 wraps the CMake presets in CMakePresets.json, which you can call directly:

Preset Platform
windows-x64 (build/test: windows-release, windows-debug) Windows x64, Visual Studio, build folder build/
macos-universal (build/test: macos-release) macOS, Ninja, arm64;x86_64, deployment target 11.0, build folder build-macos/
linux-x64 (build/test: linux-release) Linux x86_64, Ninja, build folder build-linux/
cmake --preset macos-universal
cmake --build --preset macos-release --parallel
ctest --preset macos-release

cmake --preset linux-x64
cmake --build --preset linux-release --parallel
xvfb-run -a ctest --preset linux-release   # the GUI tests need a display

Plugin: build-macos/plugin/Dubcycling_artefacts/Release/VST3/Dubcycling.vst3 or build-linux/plugin/Dubcycling_artefacts/Release/VST3/Dubcycling.vst3. On Linux, MP3 files are decoded with JUCE's built-in decoder.

The validator has its own presets in tools/vst3validator (validator-windows, validator-macos, validator-linux); on Linux run the validator and pluginval under xvfb-run.

Project layout

Folder Contents
engine/ The audio engine in plain C++20, without JUCE: loop reading and time-stretching, regions, rules, sequencer, MIDI trigger, passes, effect inserts (engine/fx/)
plugin/ JUCE wrapper: processor, state, loop loading, presets and banks (plugin/presets/), UI (plugin/ui/)
tests/ Catch2 tests for the engine and the plugin (tests/plugin/)
tools/vst3validator/ Separate CMake project that builds Steinberg's validator
docs/superpowers/ Design specs and implementation plans

Continuous integration and releases

  • .github/workflows/build.yml runs on every push and pull request: build and tests on Windows, macOS and Linux, plus validator and pluginval on Linux. It uploads the .vst3 bundle of each platform.
  • .github/workflows/release.yml runs when a tag v* is pushed (or manually). Each platform builds, tests, runs the Steinberg validator and pluginval (strictness level 5), then packages a zip (Dubcycling-<tag>-win64.zip, -macos.zip, -linux.zip) with the plugin, README and license. The macOS bundle is ad-hoc signed and checked with codesign --verify. A final job attaches the zips of all platforms that succeeded to the GitHub release, so one failing platform does not block the others.

License

AGPLv3, see LICENSE. Contributions are welcome under the same license.

Clone this wiki locally