JUCE SDK integration.
This commit is contained in:
parent
8e09f58944
commit
adcbcdfd5e
16 changed files with 1057 additions and 0 deletions
64
examples/juce/CMakeLists.txt
Normal file
64
examples/juce/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
cmake_minimum_required(VERSION 3.25)
|
||||
project(xtc_juce_examples VERSION 0.1.0 LANGUAGES C CXX)
|
||||
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)
|
||||
find_program(XTC_MAKE_EXECUTABLE NAMES gmake make REQUIRED)
|
||||
get_filename_component(XTC_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../.." ABSOLUTE)
|
||||
set(XTC_CORE_BUILD "${CMAKE_CURRENT_BINARY_DIR}/c-core")
|
||||
add_custom_target(xtc-juce-core
|
||||
COMMAND "${XTC_MAKE_EXECUTABLE}" -C "${XTC_ROOT}"
|
||||
"BUILD_DIR=${XTC_CORE_BUILD}" "CC=${CMAKE_C_COMPILER}"
|
||||
"CFLAGS=-O2 -g -fPIC -std=c99 -Wall -Wextra -Wpedantic -Wconversion -Wshadow -Iinclude"
|
||||
PKG_CONFIG=false FLTK_CONFIG=false "${XTC_CORE_BUILD}/libxtc.a"
|
||||
BYPRODUCTS "${XTC_CORE_BUILD}/libxtc.a"
|
||||
VERBATIM USES_TERMINAL)
|
||||
add_library(xtc-juce-c-core STATIC IMPORTED)
|
||||
set_target_properties(xtc-juce-c-core PROPERTIES
|
||||
IMPORTED_LOCATION "${XTC_CORE_BUILD}/libxtc.a"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${XTC_ROOT}/include")
|
||||
add_dependencies(xtc-juce-c-core xtc-juce-core)
|
||||
|
||||
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)
|
||||
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-juce-c-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-juce-c-core)
|
||||
enable_testing()
|
||||
add_test(NAME xtc-juce-processor COMMAND xtc-juce-render --self-test)
|
||||
|
||||
add_test(NAME xtc-juce-vst3 COMMAND xtc-juce-render --host-check "$<TARGET_FILE_DIR:XtcJuceSynth_VST3>/../..")
|
||||
Loading…
Add table
Add a link
Reference in a new issue