xtc/examples/juce/CMakeLists.txt

67 lines
3.4 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

cmake_minimum_required(VERSION 3.25)
project(xtc_juce_examples VERSION 0.1.0 LANGUAGES C CXX)
include(CTest)
set(XTC_JUCE_ROOT "" CACHE PATH "External JUCE source checkout")
if(NOT EXISTS "${XTC_JUCE_ROOT}/modules/juce_audio_utils/juce_audio_utils.h")
message(FATAL_ERROR "Set XTC_JUCE_ROOT to an external JUCE checkout; normal xtc builds do not download JUCE")
endif()
if(NOT UNIX OR APPLE)
message(FATAL_ERROR "The xtc C core bridge is currently qualified on Linux/POSIX only")
endif()
message(STATUS "JUCE is AGPLv3/commercial: review the external SDK LICENSE.md before distributing these binaries")
set(JUCE_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(JUCE_BUILD_EXTRAS OFF CACHE BOOL "" FORCE)
add_subdirectory("${XTC_JUCE_ROOT}" juce-sdk EXCLUDE_FROM_ALL)
get_filename_component(XTC_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../.." ABSOLUTE)
if(NOT TARGET xtc-core)
set(XTC_BUILD_GUI OFF CACHE BOOL "" FORCE)
set(XTC_WITH_JACK OFF CACHE BOOL "" FORCE)
set(XTC_BUILD_JUCE OFF CACHE BOOL "" FORCE)
set(XTC_BUILD_STEINBERG OFF CACHE BOOL "" FORCE)
set(xtc_saved_testing ${BUILD_TESTING})
set(BUILD_TESTING OFF)
add_subdirectory("${XTC_ROOT}" c-core EXCLUDE_FROM_ALL)
set(BUILD_TESTING ${xtc_saved_testing})
endif()
juce_add_plugin(XtcJuceSynth
COMPANY_NAME xtc
BUNDLE_ID org.xtc.juce.synth
PLUGIN_MANUFACTURER_CODE Xtca
PLUGIN_CODE Xjcs
PRODUCT_NAME "xtc JUCE Synth"
IS_SYNTH TRUE
NEEDS_MIDI_INPUT TRUE
NEEDS_MIDI_OUTPUT FALSE
EDITOR_WANTS_KEYBOARD_FOCUS FALSE
COPY_PLUGIN_AFTER_BUILD FALSE
FORMATS VST3 Standalone
NEEDS_WEB_BROWSER FALSE
NEEDS_CURL FALSE)
target_sources(XtcJuceSynth PRIVATE Processor.cpp Editor.cpp PluginEntry.cpp)
# JUCE’s bundled FLAC uses POSIX fileno; its C module sources need GNU extensions.
# The xtc-core target remains strict C99.
set_target_properties(XtcJuceSynth PROPERTIES C_STANDARD 11 C_EXTENSIONS ON)
target_compile_features(XtcJuceSynth PUBLIC cxx_std_17)
target_compile_definitions(XtcJuceSynth PUBLIC
JUCE_WEB_BROWSER=0 JUCE_USE_CURL=0 JUCE_VST3_CAN_REPLACE_VST2=0 JUCE_PLUGINHOST_VST3=1
)
target_include_directories(XtcJuceSynth PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${XTC_ROOT}/include")
target_link_libraries(XtcJuceSynth PRIVATE xtc-core juce::juce_audio_utils juce::juce_dsp
PUBLIC juce::juce_recommended_config_flags juce::juce_recommended_warning_flags)
add_executable(xtc-juce-render Render.cpp)
set_target_properties(xtc-juce-render PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/xtc-juce-render_artefacts/$<CONFIG>")
target_compile_features(xtc-juce-render PRIVATE cxx_std_17)
target_include_directories(xtc-juce-render PRIVATE "${XTC_JUCE_ROOT}/modules")
# Exact float comparisons intentionally check bit-identical C bridge output.
set_source_files_properties(Render.cpp PROPERTIES COMPILE_OPTIONS "-Wno-float-equal")
target_compile_definitions(xtc-juce-render PRIVATE JUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1)
target_link_libraries(xtc-juce-render PRIVATE XtcJuceSynth xtc-core)
if(BUILD_TESTING)
find_program(XTC_XVFB_RUN xvfb-run REQUIRED)
add_test(NAME xtc-juce-processor COMMAND ${XTC_XVFB_RUN} -a $<TARGET_FILE:xtc-juce-render> --self-test)
add_test(NAME xtc-juce-vst3 COMMAND ${XTC_XVFB_RUN} -a $<TARGET_FILE:xtc-juce-render>
--host-check "$<PATH:GET_PARENT_PATH,$<PATH:GET_PARENT_PATH,$<TARGET_FILE_DIR:XtcJuceSynth_VST3>>>")
set_tests_properties(xtc-juce-processor xtc-juce-vst3 PROPERTIES LABELS sdk)
endif()