cmake_minimum_required(VERSION 3.25) project(sonus VERSION 0.1.0 LANGUAGES CXX) include(GNUInstallDirs) include(CMakePackageConfigHelpers) include(CTest) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) find_package(modulus CONFIG REQUIRED) find_package(miniaudio CONFIG REQUIRED) set(SONUS_MINIAUDIO_TARGET "") if(TARGET miniaudio::miniaudio) set(SONUS_MINIAUDIO_TARGET miniaudio::miniaudio) elseif(TARGET miniaudio) set(SONUS_MINIAUDIO_TARGET miniaudio) endif() if(NOT SONUS_MINIAUDIO_TARGET) message(FATAL_ERROR "miniaudio package did not define a supported CMake target") endif() add_library(sonus src/config.cpp src/metronome.cpp src/detail/errors.cpp src/engine.cpp src/transport.cpp src/sequence.cpp ) target_include_directories(sonus PUBLIC $ $ ) target_compile_features(sonus PUBLIC cxx_std_23) target_include_directories(sonus PRIVATE $> ) target_link_libraries(sonus PUBLIC modulus::modulus ) if(CMAKE_SYSTEM_NAME STREQUAL "Linux") target_link_libraries(sonus PUBLIC dl m pthread ) endif() add_library(sonus::sonus ALIAS sonus) if(BUILD_TESTING) add_subdirectory(tests) endif() install(TARGETS sonus EXPORT sonus_targets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(EXPORT sonus_targets NAMESPACE sonus:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/sonus ) configure_package_config_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/sonus_config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/sonusConfig.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/sonus ) write_basic_package_version_file( ${CMAKE_CURRENT_BINARY_DIR}/sonusConfigVersion.cmake VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/sonusConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/sonusConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/sonus )