cmake_minimum_required(VERSION 4.0) project(sonobulus LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) # get dependencies include(FetchContent) set(RTAUDIO_BUILD_TESTING OFF CACHE BOOL "" FORCE) set(RTMIDI_BUILD_TESTING OFF CACHE BOOL "" FORCE) set(BUILD_TESTING OFF CACHE BOOL "" FORCE) set(RTAUDIO_TARGETNAME_UNINSTALL rtaudio-uninstall CACHE STRING "" FORCE) set(RTMIDI_TARGETNAME_UNINSTALL rtmidi-uninstall CACHE STRING "" FORCE) FetchContent_Declare( rtaudio GIT_REPOSITORY https://github.com/thestk/rtaudio.git GIT_TAG 6.0.1 ) FetchContent_Declare( rtmidi GIT_REPOSITORY https://github.com/thestk/rtmidi.git GIT_TAG 6.0.0 ) FetchContent_Declare( libconfig GIT_REPOSITORY https://github.com/hyperrealm/libconfig.git GIT_TAG v1.8.2 ) FetchContent_MakeAvailable(rtaudio) FetchContent_MakeAvailable(rtmidi) FetchContent_MakeAvailable(libconfig) # needs to be preinstalled find_package(Qt6 REQUIRED COMPONENTS Core Quick ) qt_standard_project_setup() add_library(sonobulus_core STATIC src/ConfigService.cpp src/LoggerService.cpp src/TimerComponent.cpp src/synth/AudioEngine.cpp src/synth/KeyboardController.cpp src/synth/MidiController.cpp src/synth/NoteQueue.cpp ) target_link_libraries(sonobulus_core PRIVATE Qt6::Core Qt6::Quick rtaudio rtmidi libconfig++ ) target_include_directories(sonobulus_core PRIVATE ${CMAKE_SOURCE_DIR}/src/ ${rtaudio_SOURCE_DIR} ${rtmidi_SOURCE_DIR} ${libconfig_SOURCE_DIR}/lib ) target_compile_definitions(sonobulus_core PRIVATE BINARY_DIR="${CMAKE_BINARY_DIR}" ) qt_add_executable(sonobulus src/main.cpp ) qt_add_qml_module(sonobulus URI sonobulus VERSION 1.0 QML_FILES ui/Main.qml ) target_include_directories(sonobulus PRIVATE ${rtaudio_SOURCE_DIR} ${rtmidi_SOURCE_DIR} ${libconfig_SOURCE_DIR}/lib ) target_link_libraries(sonobulus PRIVATE sonobulus_core Qt6::Core Qt6::Quick ) install(TARGETS sonobulus) if (WIN32) add_custom_command( TARGET sonobulus POST_BUILD COMMAND powershell -c "${Qt6_DIR}/../../../bin/windeployqt6.exe --qmldir . $" COMMENT "windeployqt..." VERBATIM ) add_custom_command( TARGET sonobulus POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $ $ $ ) endif() # add_subdirectory(src) # add_subdirectory(ui)