diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..9a60f962 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,7 @@ +# Copyright (c) 2023-2025 Wavelet Lab +# SPDX-License-Identifier: MIT + +cmake_minimum_required(VERSION 3.8) +project(usdr-world C) + +add_subdirectory(src) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 86d6008c..954fff70 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2023-2024 Wavelet Lab +# Copyright (c) 2023-2025 Wavelet Lab # SPDX-License-Identifier: MIT cmake_minimum_required(VERSION 3.8) @@ -79,6 +79,30 @@ endif(ENABLE_DMONITOR) include(FeatureSummary) +include(CMakePackageConfigHelpers) + +# Generate and install CMake package config files so consumers can use find_package(usdr) +set(CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/usdr") + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/usdrConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/usdrConfig.cmake" + INSTALL_DESTINATION "${CONFIG_INSTALL_DIR}" + # Note: avoid newer keywords for broader CMake compatibility +) + +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/usdrConfigVersion.cmake" + VERSION ${USDR_VERSION} + COMPATIBILITY AnyNewerVersion +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/usdrConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/usdrConfigVersion.cmake" + DESTINATION "${CONFIG_INSTALL_DIR}" +) + message(STATUS "") message(STATUS "######################################################") message(STATUS "## ${PROJECT_NAME} enabled features") diff --git a/src/cmake/usdrConfig.cmake.in b/src/cmake/usdrConfig.cmake.in new file mode 100644 index 00000000..e5211135 --- /dev/null +++ b/src/cmake/usdrConfig.cmake.in @@ -0,0 +1,10 @@ +@PACKAGE_INIT@ + +get_filename_component(_USDR_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_USDR_PREFIX_DIR "${_USDR_CMAKE_DIR}/../.." ABSOLUTE) + +set(usdr_INCLUDE_DIR "${_USDR_PREFIX_DIR}/include/usdr") +set(usdr_LIB_DIR "${_USDR_PREFIX_DIR}/${CMAKE_INSTALL_LIBDIR}") +set(usdr_VERSION "@USDR_VERSION@") + +include("${_USDR_CMAKE_DIR}/usdrTargets.cmake") diff --git a/src/cmake/usdrConfigVersion.cmake b/src/cmake/usdrConfigVersion.cmake new file mode 100644 index 00000000..21235d00 --- /dev/null +++ b/src/cmake/usdrConfigVersion.cmake @@ -0,0 +1,11 @@ +set(PACKAGE_VERSION "@USDR_VERSION@") + +if(PACKAGE_VERSION AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPAT FALSE) +else() + set(PACKAGE_VERSION_COMPAT TRUE) +endif() + +if(NOT PACKAGE_VERSION_COMPAT) + message(FATAL_ERROR "The installed usdr version (${PACKAGE_VERSION}) does not satisfy requested version ${PACKAGE_FIND_VERSION}.") +endif() diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 2c3ab942..c1f42f4f 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2023-2024 Wavelet Lab +# Copyright (c) 2023-2025 Wavelet Lab # SPDX-License-Identifier: MIT cmake_minimum_required(VERSION 3.8) @@ -32,11 +32,36 @@ include_directories(${USDR_INCLUDE_DIRS}) add_library(usdr ${USDR_LIBRARY_FILES}) -target_link_libraries(usdr dl pthread rt ${USDR_LINK_FILES} usdr-dsp) +target_link_libraries(usdr PUBLIC dl pthread rt ${USDR_LINK_FILES} usdr-dsp) add_dependencies(usdr ${USDR_DEPEND_TARGETS}) target_compile_options(usdr PRIVATE "-Wall" "-Werror=implicit-function-declaration") +# Public include directories (for build and install) +target_include_directories(usdr + PUBLIC + $ + $ +) + set_target_properties(usdr PROPERTIES SOVERSION ${USDR_ABI_VERSION}) set_target_properties(usdr PROPERTIES VERSION ${USDR_LIBVER}) -install(TARGETS usdr LIBRARY) +install(TARGETS usdr + EXPORT usdrTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +# Install public headers (install all .h files from the lib tree) +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/usdr + FILES_MATCHING PATTERN "*.h" PATTERN "*.yaml" +) + +# Export targets for use by find_package +install(EXPORT usdrTargets + FILE usdrTargets.cmake + NAMESPACE usdr:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/usdr +) diff --git a/src/lib/xdsp/CMakeLists.txt b/src/lib/xdsp/CMakeLists.txt index 300b1977..3e8d0fc7 100644 --- a/src/lib/xdsp/CMakeLists.txt +++ b/src/lib/xdsp/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2023-2024 Wavelet Lab +# Copyright (c) 2023-2025 Wavelet Lab # SPDX-License-Identifier: MIT # Populate a CMake variable with the sources @@ -86,9 +86,14 @@ else() endif() add_library(usdr-dsp ${xdsplib_SRCS}) - target_link_libraries(usdr-dsp m pthread) + target_link_libraries(usdr-dsp PUBLIC m pthread) target_compile_options(usdr-dsp PRIVATE "-Wall" "-Werror=implicit-function-declaration") - install(TARGETS usdr-dsp LIBRARY) + install(TARGETS usdr-dsp + EXPORT usdrTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) set_target_properties(usdr-dsp PROPERTIES SOVERSION ${USDR_ABI_VERSION}) set_target_properties(usdr-dsp PROPERTIES VERSION ${USDR_LIBVER})