cmake_minimum_required(VERSION 3.20) project(daw_vst_bridge LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # ── 1. VST3 SDK (Steinberg, vendored as git submodule — NOT in vcpkg) ── if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/vst3sdk/CMakeLists.txt") add_subdirectory(vst3sdk EXCLUDE_FROM_ALL) set(VST3_SDK_TARGET sdk) else() message(WARNING "vst3sdk submodule missing — VST3 host disabled; SF2/SF3/SFZ still build") set(VST3_SDK_TARGET "") endif() # ── 2. FluidSynth + sfizz ── # Windows: vcpkg toolchain (-DCMAKE_TOOLCHAIN_FILE=.../vcpkg.cmake) cung cap # headers/libs; pkg_check_modules khong co san tren MSVC. # Linux/macOS: pkg-config duoc dung (spec goc). if(WIN32) find_path(FLUIDSYNTH_INCLUDE_DIR fluidsynth.h) find_library(FLUIDSYNTH_LIBRARY NAMES fluidsynth libfluidsynth libfluidsynth-3) if(NOT FLUIDSYNTH_INCLUDE_DIR OR NOT FLUIDSYNTH_LIBRARY) message(FATAL_ERROR "fluidsynth not found — cai qua vcpkg: vcpkg install fluidsynth") endif() # sfizz: built from source (native_bridge/sfizz-src, see build/_sfizz.bat) — # the sfizz port is NOT in vcpkg upstream. Fall back to vcpkg if present. set(SFIZZ_SRC_BUILD "${CMAKE_CURRENT_SOURCE_DIR}/sfizz-src/build/library/lib/Release") if(EXISTS "${SFIZZ_SRC_BUILD}/sfizz_static.lib") file(GLOB SFIZZ_SRC_LIBS "${SFIZZ_SRC_BUILD}/*.lib") set(SFIZZ_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/sfizz-src/src") set(SFIZZ_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/sfizz-src/src") set(SFIZZ_LIBRARY ${SFIZZ_SRC_LIBS}) else() find_path(SFIZZ_INCLUDE_DIR sfizz.hpp) find_library(SFIZZ_LIBRARY NAMES sfizz) if(NOT SFIZZ_INCLUDE_DIR OR NOT SFIZZ_LIBRARY) message(FATAL_ERROR "sfizz not found — build native_bridge/sfizz-src first") endif() endif() else() find_package(PkgConfig REQUIRED) pkg_check_modules(FLUIDSYNTH REQUIRED fluidsynth) pkg_check_modules(SFIZZ REQUIRED sfizz) endif() include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/include ${FLUIDSYNTH_INCLUDE_DIR} ${SFIZZ_INCLUDE_DIR} ) add_executable(daw_vst_bridge src/main.cpp src/NativeInstrumentEngine.cpp src/SharedMemoryIPC.cpp src/Vst3Instrument.cpp ) # VST3 SDK hosting: sdk_hosting lacks the platform module loader — module_win32.cpp # is added to the bridge itself (same approach as the audiohost sample). if(VST3_SDK_TARGET) target_compile_definitions(daw_vst_bridge PRIVATE HAVE_VST3SDK=1) target_link_libraries(daw_vst_bridge PRIVATE ${VST3_SDK_TARGET} sdk_hosting) if(WIN32) target_sources(daw_vst_bridge PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/vst3sdk/public.sdk/source/vst/hosting/module_win32.cpp ) endif() endif() if(WIN32) target_link_libraries(daw_vst_bridge PRIVATE ${FLUIDSYNTH_LIBRARY} ${SFIZZ_LIBRARY}) # Required Windows libs target_link_libraries(daw_vst_bridge PRIVATE winmm) else() target_link_libraries(daw_vst_bridge PRIVATE ${FLUIDSYNTH_LIBRARIES} ${SFIZZ_LIBRARIES}) endif() # ── gui_probe: standalone VST3 GUI attach probe (debug tool, not shipped) ── add_executable(gui_probe src/gui_probe.cpp src/NativeInstrumentEngine.cpp src/SharedMemoryIPC.cpp src/Vst3Instrument.cpp ) if(VST3_SDK_TARGET) target_compile_definitions(gui_probe PRIVATE HAVE_VST3SDK=1) target_link_libraries(gui_probe PRIVATE ${VST3_SDK_TARGET} sdk_hosting) if(WIN32) target_sources(gui_probe PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/vst3sdk/public.sdk/source/vst/hosting/module_win32.cpp ) endif() endif() if(WIN32) target_link_libraries(gui_probe PRIVATE ${FLUIDSYNTH_LIBRARY} ${SFIZZ_LIBRARY} winmm) endif()