Skip to content

Building from Source

atze187 edited this page Oct 27, 2026 · 3 revisions

Building from Source

Requirements

  • Windows 10/11 x64 with Visual Studio 2022 or 2026 and the Desktop development with C++ workload (includes MSVC and CMake), or
  • macOS 11 or newer with the Xcode command line tools, CMake 3.25+ and Ninja (so far only built on GitHub Actions)
  • Git

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

Build, test, install

git clone https://github.com/atze187/dubgefahren.git
cd dubgefahren
powershell -NoProfile -ExecutionPolicy Bypass -File build.ps1 all
Command What it does
configure CMake configure (Visual Studio generator, x64)
build Build (configures first if needed)
test Build and run all tests (CTest)
install Build and copy the plugin to %CommonProgramFiles%\VST3 — run in an administrator PowerShell; never overwrites an existing config
validate Build Steinberg's VST3 validator and run it on the plugin, then pluginval (strictness 5) if tools\bin\pluginval.exe exists
all configure + build + test

Option: -Config Debug|Release (default Release). Output: build\plugin\Dubgefahren_artefacts\Release\VST3\Dubgefahren.vst3.

build.ps1 is a thin wrapper around the CMake presets in CMakePresets.json, which you can also call directly (this is how the macOS build works):

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

For pluginval, download pluginval_Windows.zip from Tracktion/pluginval releases and put pluginval.exe in tools\bin\ (ignored by git).

Project layout

Folder Contents
engine/ The DSP engine in plain C++20, no JUCE: oscillator, LFO, envelope, siren voice, sample player, pad router (trigger modes, choke, focus), filter, saturator, tape delay, phaser, spring reverb, FX chain, factory kit, engine
plugin/ JUCE wrapper: parameters, processor, state, kit files, config, UI (plugin/ui/)
tests/ Catch2 tests for the engine and the plugin, plus an install test
cmake/ Install and post-build helper scripts
tools/vst3validator/ Separate CMake project that builds Steinberg's validator
docs/superpowers/ Design spec and implementation plan

The engine is independent of JUCE and fully unit-tested; slots talk to their sound source (siren or sample) through a SoundSource interface, so the router and the FX chain do not care which one is playing.

Releases

Pushing a tag v* runs .github/workflows/release.yml. The jobs windows and macos run in parallel on GitHub-hosted runners; each does build, tests, Steinberg validator and pluginval, then uploads its zip (Dubgefahren-<tag>-win64.zip, Dubgefahren-<tag>-macos.zip; the macOS bundle is ad-hoc signed and checked with codesign --verify). The job publish attaches the zips of all successful jobs to the GitHub release, so a failing macOS job does not block the Windows release. The workflow can also be started manually from the Actions tab; the zips are then available as build artifacts without a release.

License

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

Clone this wiki locally