67215509cb
Params ride the one parameter set; payload v8 -> v9, off by default. Deck composition moves to a pure deck_groups module in pitch -> filter -> amp order.
107 lines
5.9 KiB
CMake
107 lines
5.9 KiB
CMake
# ReaSampler 9000 — the second build artifact: a Windows-only VST3 instrument the user
|
|
# instantiates on an instrument track. Additive; the extension builds unchanged.
|
|
#
|
|
# The nested vst3sdk slice (pluginterfaces / base / public.sdk) is a one-time submodule
|
|
# step documented in CLAUDE.md. When it is absent — a fresh clone that ran only the
|
|
# top-level init — skip this module rather than fail configure on missing sources: the pure
|
|
# libraries and their CTest targets still build and test without the SDK. Probe one
|
|
# representative source file.
|
|
if(WIN32 AND EXISTS "${VST3_SDK}/public.sdk/source/main/pluginfactory.cpp")
|
|
|
|
# The bounded slice of the Steinberg VST3 SDK this instrument needs. Enumerated rather
|
|
# than add_subdirectory of the whole SDK to keep the build hermetic and lean: no VSTGUI,
|
|
# no examples, no SDK-global CMake helpers or install machinery. The submodule is pinned
|
|
# to tag v3.7.9_build_61, so the list is fixed — re-verify this set if the tag is bumped.
|
|
add_library(vst3_sdk STATIC
|
|
${VST3_SDK}/pluginterfaces/base/funknown.cpp
|
|
${VST3_SDK}/pluginterfaces/base/coreiids.cpp
|
|
${VST3_SDK}/pluginterfaces/base/conststringtable.cpp
|
|
${VST3_SDK}/pluginterfaces/base/ustring.cpp
|
|
${VST3_SDK}/base/source/fobject.cpp
|
|
${VST3_SDK}/base/source/fstring.cpp
|
|
${VST3_SDK}/base/source/fbuffer.cpp
|
|
${VST3_SDK}/base/source/fstreamer.cpp
|
|
${VST3_SDK}/base/source/fdebug.cpp
|
|
${VST3_SDK}/base/source/baseiids.cpp
|
|
${VST3_SDK}/base/source/updatehandler.cpp
|
|
${VST3_SDK}/base/thread/source/flock.cpp
|
|
# vstsinglecomponenteffect.cpp #includes vsteditcontroller.cpp unity-style, so
|
|
# vsteditcontroller.cpp must NOT be listed separately (double definition).
|
|
${VST3_SDK}/public.sdk/source/vst/vstsinglecomponenteffect.cpp
|
|
${VST3_SDK}/public.sdk/source/vst/vstcomponentbase.cpp
|
|
${VST3_SDK}/public.sdk/source/vst/vstbus.cpp
|
|
${VST3_SDK}/public.sdk/source/vst/vstparameters.cpp
|
|
${VST3_SDK}/public.sdk/source/vst/vstinitiids.cpp
|
|
${VST3_SDK}/public.sdk/source/common/pluginview.cpp
|
|
${VST3_SDK}/public.sdk/source/common/commoniids.cpp
|
|
# dllmain.cpp + moduleinit.cpp are NOT here — see the module target below.
|
|
${VST3_SDK}/public.sdk/source/main/pluginfactory.cpp
|
|
)
|
|
target_include_directories(vst3_sdk PUBLIC ${VST3_SDK})
|
|
# The SDK requires exactly one of RELEASE / DEVELOPMENT (fdebug.cpp keys off it).
|
|
target_compile_definitions(vst3_sdk PUBLIC $<IF:$<CONFIG:Debug>,DEVELOPMENT=1,RELEASE=1>)
|
|
|
|
add_library(reasampler_vst MODULE
|
|
vst_entry.cpp
|
|
reasampler_processor.cpp
|
|
processor_state.cpp
|
|
processor_reload.cpp
|
|
# The editor family is split on the Sample face's band axis: session/bridge state,
|
|
# param plumbing plus the shared band-layout resolve, then paint and input in
|
|
# matching sets, plus the two band-independent surfaces and the platform TU.
|
|
editor_session.cpp
|
|
editor_controls.cpp
|
|
editor_paint.cpp
|
|
editor_paint_chrome.cpp
|
|
editor_paint_waveform.cpp
|
|
editor_paint_deck.cpp
|
|
editor_paint_browse.cpp
|
|
editor_paint_curve.cpp
|
|
editor_input.cpp
|
|
editor_input_chrome.cpp
|
|
editor_input_waveform.cpp
|
|
editor_input_deck.cpp
|
|
editor_input_browse.cpp
|
|
editor_input_curve.cpp
|
|
editor_platform.cpp
|
|
reasampler_embed.cpp
|
|
reaper_bridge.cpp
|
|
# draw_kit is compiled into each module rather than being a static library — see root
|
|
# CMakeLists.txt's LICE_SRC comment for why.
|
|
${REASAMPLER_SRC_DIR}/shell/panel/draw_kit.cpp
|
|
# Compiled into the module, NOT into vst3_sdk: their SMTG_EXPORT_SYMBOL functions
|
|
# (InitDll/ExitDll) have no internal referrer, so the linker strips them from a
|
|
# static library. Compiling them here keeps the exports.
|
|
${VST3_SDK}/public.sdk/source/main/dllmain.cpp
|
|
${VST3_SDK}/public.sdk/source/main/moduleinit.cpp
|
|
${LICE_SRC}
|
|
)
|
|
# sample_map's build yields plain SampleData, so it does NOT pull the voice engine —
|
|
# sampler_core is linked directly. app_version's PUBLIC include dir carries the
|
|
# generated version header, so the instrument reads the SAME channel-derived ext-state
|
|
# namespace the extension writes.
|
|
target_link_libraries(reasampler_vst PRIVATE vst3_sdk editor_geometry bridge_marshal
|
|
sampler_core sample_map component_state_io capture_paths embed_strip app_version
|
|
capture_browser keyboard_strip sample_bands sample_chrome
|
|
waveform_view bank_sync browser_scroll param_slider tooltip
|
|
theme component_geometry bank_grid trigger_seam envelope_overlay envelope_edit
|
|
knob_deck deck_groups curve_popup master_gain sample_usage file_bytes)
|
|
# SDK_INC gives the REAPER VST3 interfaces + API header for the bridge; WDL_INC gives
|
|
# LICE for the editor. The VST3 SDK headers arrive via vst3_sdk PUBLIC.
|
|
target_include_directories(reasampler_vst PRIVATE ${REASAMPLER_SRC_DIR} ${SDK_INC} ${WDL_INC})
|
|
|
|
# A .vst3 is a DLL with a .vst3 extension and no lib prefix. OUTPUT_NAME is channel-
|
|
# forked from the one channel decision at the root and must match
|
|
# app_version::vstOutputName(); the two channels install side-by-side, and the
|
|
# per-channel VST3 class UID keeps a saved instance bound to its own channel.
|
|
# LIBRARY_OUTPUT_DIRECTORY / ARCHIVE_OUTPUT_DIRECTORY pin the module to the top of the
|
|
# build tree even though this target is declared in a subdirectory — see src/app/CMakeLists.txt's
|
|
# set_target_properties comment for why both properties are needed.
|
|
set_target_properties(reasampler_vst PROPERTIES
|
|
PREFIX ""
|
|
SUFFIX ".vst3"
|
|
OUTPUT_NAME "${REASAMPLER_VST_OUTPUT_NAME}"
|
|
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}"
|
|
ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
|
|
endif()
|