cmake_minimum_required(VERSION 3.21) project(qobuz-qt LANGUAGES CXX VERSION 0.1.0) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Optional D-Bus support option(USE_DBUS "Use D-Bus integration" ON) # LTO support option(USE_LTO "Use link time optimization" OFF) if (POLICY CMP0072) cmake_policy(SET CMP0072 NEW) endif () # Find Qt 6 find_package(Qt6 COMPONENTS Core Widgets Network Gui Svg REQUIRED) if (USE_DBUS) find_package(Qt6 OPTIONAL_COMPONENTS DBus QUIET) endif () # ----- Rust backend via corrosion ----- include(FetchContent) FetchContent_Declare( Corrosion GIT_REPOSITORY https://github.com/corrosion-rs/corrosion.git GIT_TAG v0.5 ) FetchContent_MakeAvailable(Corrosion) corrosion_import_crate(MANIFEST_PATH rust/Cargo.toml CRATES qobuz-backend) # Create main executable add_executable(qobuz-qt res.qrc) # Source files add_subdirectory(src) # Include paths target_include_directories(qobuz-qt PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/src" "${CMAKE_CURRENT_SOURCE_DIR}/rust/include" ) # Version / app definitions target_compile_definitions(qobuz-qt PRIVATE APP_VERSION="v${PROJECT_VERSION}") target_compile_definitions(qobuz-qt PRIVATE APP_NAME="${PROJECT_NAME}") # Link Qt + Rust backend target_link_libraries(qobuz-qt PRIVATE Qt6::Core Qt6::Widgets Qt6::Network Qt6::Gui Qt6::Svg qobuz-backend ) # Platform-specific system libs needed by the Rust audio stack (cpal/ALSA) if (UNIX AND NOT APPLE) target_link_libraries(qobuz-qt PRIVATE asound) endif () # Compiler warnings if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_compile_options(qobuz-qt PRIVATE -Wall -Wextra -Wno-unused-parameter) endif () # D-Bus if (Qt6DBus_FOUND) target_compile_definitions(qobuz-qt PRIVATE USE_DBUS) target_link_libraries(qobuz-qt PRIVATE Qt6::DBus) endif () # LTO if (USE_LTO) include(CheckIPOSupported) check_ipo_supported(RESULT ipo_supported OUTPUT ipo_error) if (ipo_supported AND CMAKE_BUILD_TYPE STREQUAL "Release") set_property(TARGET qobuz-qt PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE) endif () endif () # Install if (UNIX) install(FILES res/logo/qobuz-qt.svg DESTINATION share/icons/hicolor/scalable/apps) install(FILES res/app/qobuz-qt.desktop DESTINATION share/applications) install(TARGETS qobuz-qt RUNTIME DESTINATION bin) endif ()