Build from source
Prerequisites
- CMake
3.22+ - C++20 compiler
- Git
Platform setup
Pick your platform below to install the required toolchain and libraries, then follow the shared Clone and build steps.
Windows
- Install Visual Studio 2022 (Community edition is free). During installation, select the “Desktop development with C++” workload.
- Install CMake (add to PATH during install) and Git.
macOS
- Install Xcode Command Line Tools:
xcode-select --install - Install CMake via Homebrew:
brew install cmake
Linux — Debian / Ubuntu
sudo apt update
sudo apt install -y build-essential cmake git libasound2-dev libfreetype-dev \
libx11-dev libxrandr-dev libxcursor-dev libxinerama-dev \
libwebkit2gtk-4.1-dev libcurl4-openssl-dev
Linux — Fedora
sudo dnf install -y gcc-c++ cmake git alsa-lib-devel freetype-devel \
libX11-devel libXrandr-devel libXcursor-devel libXinerama-devel \
webkit2gtk4.1-devel libcurl-devel
Linux — Arch
sudo pacman -S --needed base-devel cmake git alsa-lib freetype2 \
libx11 libxrandr libxcursor libxinerama webkit2gtk-4.1 curl
Clone and build
git clone --recursive https://github.com/tucktuckg00se/INTERSECT.git
cd INTERSECT
cmake -B build
cmake --build build --config Release
Build only the VST3
If you don’t need the Standalone or AU outputs, target just the VST3 to cut build time roughly in half:
cmake --build build --config Release --target Intersect_VST3 -j
Run cppcheck before building (recommended for contributors)
cppcheck --enable=warning,performance --suppress=missingInclude src/
Linux: building inside Ubuntu 22.04 Podman (matches release glibc)
Release Linux builds use a pinned Ubuntu 22.04 Podman image so the resulting .vst3 works on any glibc 2.35+ system. Native Arch (or other modern-glibc distro) builds will link against your local glibc and won’t run on the release baseline.
If you want your local build to be glibc-compatible with the release:
podman build -t intersect-ubuntu2204-build -f .containers/Containerfile.ubuntu2204-build .
podman run --rm \
-v "$PWD:$PWD:Z" \
-w "$PWD" \
intersect-ubuntu2204-build \
bash -lc 'cmake -B build -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release --target Intersect_VST3 -j2'
Mount the repo at the same absolute path inside Podman so CMake caches in build/ remain valid.
After the build, sanity-check that the binary doesn’t pull in newer-than-Ubuntu-22.04 glibc symbols:
objdump -T build/Intersect_artefacts/Release/VST3/INTERSECT.vst3/Contents/x86_64-linux/INTERSECT.so | rg 'GLIBC_2\.(4[0-9]|3[6-9])'
The command should print no matches.
ONNX Runtime
The build does not bundle any ONNX Runtime shared library. Only the ORT C++ headers are pulled in at configure time (via CMake FetchContent) so the plugin compiles against the published ORT API. The shared library itself is downloaded at runtime via SET → Stem Separation → ONNX Runtime — see Stem separation setup. This keeps each plugin zip small and lets users pick their GPU (CPU / CUDA / MIGraphX / DirectML / CoreML) without needing a separate build.
Build outputs
- VST3:
build/Intersect_artefacts/Release/VST3/INTERSECT.vst3 - Standalone:
- Windows:
build/Intersect_artefacts/Release/Standalone/INTERSECT.exe - Linux:
build/Intersect_artefacts/Release/Standalone/INTERSECT - macOS:
build/Intersect_artefacts/Release/Standalone/INTERSECT.app
- Windows:
- AU (macOS):
build/Intersect_artefacts/Release/AU/INTERSECT.component
Release workflow (repo maintainers)
Pushing a tag matching v* triggers the GitHub Actions release workflow, which builds and packages four small plugin zips:
- Windows x64
- Linux x64
- macOS arm64
- macOS x64 (no stem separation — ONNX Runtime 1.24 dropped x86_64 macOS)
ONNX Runtime bundles are published separately from the intersect-ort-providers repo and downloaded on demand from the plugin.
Dependencies
- JUCE (git submodule)
- Signalsmith Stretch (MIT)
- Signalsmith Linear (dependency of Signalsmith Stretch)
- Bungee (MPL-2.0)
- ONNX Runtime (MIT) — headers only at build time; shared library downloaded on demand
Troubleshooting build errors
- “Missing submodule” / “JUCE not found” / “signalsmith-stretch missing”: You cloned without
--recursive, or new submodules were added since your last pull. Rungit submodule update --init --recursive. - Linux: missing X11/ALSA/WebKit headers: Install the dev packages from the platform setup section above. The package names differ by distro.
- Windows: “Cannot find compiler ‘cl.exe’”: Open a “Developer Command Prompt for VS 2022” before running CMake, or pass
-G "Visual Studio 17 2022"so CMake locates the VS toolchain itself. - macOS:
xcrun: error: invalid active developer path: Runxcode-select --installto install the Command Line Tools. - CMake configure step downloads ONNX Runtime headers slowly: This is a one-time
FetchContentdownload per build directory. Subsequent configures reuse the cached copy. - Build succeeds but the plugin won’t load in your DAW: rebuild after a
cmake --build build --target cleanif you switched compiler versions or changed CMake options between builds.