cmake_minimum_required(VERSION 3.15) set (TARGET_NAME TestRunner) set(HAS_RUBBERBAND 0) if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../modules/3rd_party/rubberband/") message(STATUS "Found rubberband, enabling") set(HAS_RUBBERBAND 1) endif() if (DEFINED PROJECT_NAME) message ("Adding ${TARGET_NAME} to the ${PROJECT_NAME} project") else() file(READ ../../VERSION.md CURRENT_VERSION) project(${TARGET_NAME} VERSION ${CURRENT_VERSION}) add_subdirectory(../../modules/juce ./cmake_build_juce) add_subdirectory(../../modules ./cmake_build_tracktion) endif() # If we are using MSVC we want static runtime linkage if (MSVC) set (CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") endif() # If we are compiling for macOS we want to target OS versions down to 10.13 if (APPLE) set (CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE INTERNAL "") endif() # Adds all the module sources so they appear correctly in the IDE set_property(GLOBAL PROPERTY USE_FOLDERS YES) option(JUCE_ENABLE_MODULE_SOURCE_GROUPS "Enable Module Source Groups" ON) if (DEFINED ENV{VST2_SDK_DIR}) MESSAGE(STATUS "Building with VST2 SDK: $ENV{VST2_SDK_DIR}") juce_set_vst2_sdk_path($ENV{VST2_SDK_DIR}) else() MESSAGE(STATUS "Not building with VST2") endif() juce_add_console_app(${TARGET_NAME}) juce_generate_juce_header(${TARGET_NAME}) target_compile_features(${TARGET_NAME} PRIVATE cxx_std_20) set_target_properties(${TARGET_NAME} PROPERTIES C_VISIBILITY_PRESET hidden CXX_VISIBILITY_PRESET hidden) set(SourceFiles ${TARGET_NAME}.cpp ${TARGET_NAME}.h) target_sources(${TARGET_NAME} PRIVATE ${SourceFiles}) source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX Source FILES ${SourceFiles}) include("${CMAKE_CURRENT_SOURCE_DIR}/../../tests/utils.cmake") addModuleSourceTarget() if (DEFINED ENV{VST2_SDK_DIR}) target_compile_definitions(${TARGET_NAME} PRIVATE JUCE_PLUGINHOST_VST=1) endif() if (HAS_RUBBERBAND) target_include_directories(${TARGET_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../modules/3rd_party") endif() target_compile_definitions(${TARGET_NAME} PRIVATE JUCE_PLUGINHOST_AU=1 JUCE_PLUGINHOST_LADSPA=1 JUCE_PLUGINHOST_VST3=1 JUCE_USE_CURL=0 JUCE_WEB_BROWSER=0 JUCE_STRICT_REFCOUNTEDPOINTER=1 JUCE_MODAL_LOOPS_PERMITTED=1 TRACKTION_ENABLE_TIMESTRETCH_SOUNDTOUCH=1 TRACKTION_UNIT_TESTS=1 TRACKTION_LOG_DEVICES=0 TRACKTION_ENABLE_TIMESTRETCH_RUBBERBAND=${HAS_RUBBERBAND} TRACKTION_BUILD_RUBBERBAND=${HAS_RUBBERBAND}) target_link_libraries(${TARGET_NAME} PRIVATE tracktion::tracktion_core tracktion::tracktion_engine tracktion::tracktion_graph juce::juce_audio_devices juce::juce_audio_processors juce::juce_audio_utils juce::juce_recommended_warning_flags) # Compile with werror in release builds if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") target_compile_options(${TARGET_NAME} PRIVATE "$<$:-Werror>") elseif (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") target_compile_options(${TARGET_NAME} PRIVATE "/W4") target_compile_options(${TARGET_NAME} PRIVATE "$<$:/WX>") endif() if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") target_compile_options(${TARGET_NAME} PRIVATE "-fno-aligned-allocation") target_compile_definitions(${TARGET_NAME} PRIVATE $,_LIBCPP_ENABLE_ASSERTIONS=1,_LIBCPP_ENABLE_HARDENED_MODE=1>) endif() if (CMAKE_CXX_COMPILER_ID MATCHES "GNU") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-pragmas") endif() if(CMAKE_SYSTEM_NAME STREQUAL "Linux") target_link_libraries(${TARGET_NAME} PRIVATE "-latomic") if (NOT ${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "aarch64") target_link_options(${TARGET_NAME} PRIVATE "-m64") endif() endif() add_test(NAME ${TARGET_NAME} COMMAND ${TARGET_NAME})