kfr

Fast, modern C++ DSP framework, FFT, Sample Rate Conversion, FIR/IIR/Biquad Filters (SSE, AVX, AVX-512, ARM NEON)
Log | Files | Refs | README

commit b5467ed91faa676b418f8861f6981623058fac6d
parent 02659610b76cb9b090090dad3affa1507bfd0ea8
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date:   Thu, 14 Dec 2023 07:14:20 +0000

CMake config generation

Diffstat:
MCMakeLists.txt | 52+++++++++++++++++++++++++++++++++++++++++-----------
Mcmake/add_kfr_library.cmake | 10+++++++++-
Acmake/config.cmake.in | 3+++
Msrc/capi/CMakeLists.txt | 4+++-
Msrc/dft/CMakeLists.txt | 3++-
Msrc/dsp/CMakeLists.txt | 3++-
Msrc/io/CMakeLists.txt | 1+
7 files changed, 61 insertions(+), 15 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt @@ -85,13 +85,15 @@ if (KFR_WITH_CLANG) message(STATUS "Clang ${CLANG_VERSION} is set up successfully") endif () -project(kfr CXX) - -file(STRINGS include/kfr/kfr.h KFR_VERSION +file(STRINGS ${CMAKE_CURRENT_LIST_DIR}/include/kfr/kfr.h KFR_VERSION REGEX "#define KFR_VERSION_(MINOR|MAJOR|PATCH)") string(REGEX MATCHALL "[0-9]+" KFR_VERSION_MATCH ${KFR_VERSION}) string(REPLACE ";" "." KFR_VERSION "${KFR_VERSION_MATCH}") -message("KFR_VERSION = ${KFR_VERSION}") + +project( + kfr + VERSION ${KFR_VERSION} + LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -293,15 +295,17 @@ endif () # KFR library add_library(kfr INTERFACE) -target_sources(kfr INTERFACE ${KFR_SRC}) -target_include_directories(kfr INTERFACE include) +# target_sources(kfr INTERFACE ${KFR_SRC}) +target_include_directories( + kfr INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> + $<INSTALL_INTERFACE:include>) target_compile_options(kfr INTERFACE "$<$<CONFIG:DEBUG>:-DKFR_DEBUG>") if (APPLE) target_compile_options(kfr INTERFACE -faligned-allocation) endif () if (MSVC) - target_compile_options(kfr INTERFACE -bigobj -EHsc) + target_compile_options(kfr INTERFACE -bigobj) else () target_link_libraries(kfr INTERFACE ${STD_LIB} ${PTHREAD_LIB} m) endif () @@ -312,14 +316,14 @@ if (KFR_STD_COMPLEX) target_compile_definitions(kfr INTERFACE -DKFR_STD_COMPLEX) endif () if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - target_compile_options(kfr INTERFACE -Wno-ignored-qualifiers -Wno-psabi) + add_compile_options(-Wno-ignored-qualifiers -Wno-psabi) endif () if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - target_compile_options(kfr INTERFACE -Wno-c++1z-extensions -Wno-psabi - -Wno-unknown-warning-option) + add_compile_options(-Wno-c++1z-extensions -Wno-psabi + -Wno-unknown-warning-option) endif () if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - target_compile_options(kfr INTERFACE /wd4141) + add_compile_options(/wd4141) endif () if (NOT KFR_ENABLE_DFT) @@ -391,3 +395,29 @@ if (NOT TARGET uninstall) COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake) endif () + +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) + +set(KFR_INSTALL_CMAKEDIR + "${CMAKE_INSTALL_LIBDIR}/cmake/kfr" + CACHE STRING "Path to KFR CMake files") + +configure_package_config_file( + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/KFRConfig.cmake" + INSTALL_DESTINATION "lib/cmake/kfr" + NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO) + +install(TARGETS kfr EXPORT kfr_export) + +install( + EXPORT kfr_export + DESTINATION "${KFR_INSTALL_CMAKEDIR}" + FILE KFRConfig.cmake) + +# write_basic_package_version_file( KFRConfigVersion.cmake VERSION +# ${KFR_VERSION} COMPATIBILITY SameMajorVersion) + +# install(FILES "${CMAKE_CURRENT_BINARY_DIR}/KFRConfigVersion.cmake" DESTINATION +# "${KFR_INSTALL_CMAKEDIR}" ) diff --git a/cmake/add_kfr_library.cmake b/cmake/add_kfr_library.cmake @@ -3,7 +3,8 @@ function (add_kfr_library) cmake_parse_arguments(LIB "MULTIARCH" "NAME" "SOURCES;LIBRARIES;DEFINITIONS;OPTIONS" ${ARGN}) - set(${LIB_NAME}_LIBS PARENT_SCOPE) + set(${LIB_NAME}_LIBS) + set(${LIB_NAME}_TARGETS) if (KFR_ENABLE_MULTIARCH AND LIB_MULTIARCH) add_library(${LIB_NAME} INTERFACE) foreach (ARCH IN LISTS KFR_ARCHS) @@ -14,6 +15,7 @@ function (add_kfr_library) target_compile_definitions(${LIB_NAME}_${ARCH} PRIVATE CMT_MULTI_ENABLED_${ENABLED_ARCH_UPPER}=1) endforeach() list(APPEND ${LIB_NAME}_LIBS ${LIB_NAME}_${ARCH}) + list(APPEND ${LIB_NAME}_TARGETS ${LIB_NAME}_${ARCH}) target_link_libraries(${LIB_NAME} INTERFACE ${LIB_NAME}_${ARCH}) target_set_arch(${LIB_NAME}_${ARCH} PRIVATE ${ARCH}) endforeach () @@ -21,9 +23,12 @@ function (add_kfr_library) target_compile_definitions(${LIB_NAME}_${BASE_ARCH} PRIVATE CMT_BASE_ARCH=1) link_as_whole(${LIB_NAME} INTERFACE ${LIB_NAME}_${BASE_ARCH}) + + list(APPEND ${LIB_NAME}_TARGETS ${LIB_NAME}) else () add_library(${LIB_NAME} STATIC ${LIB_SOURCES}) list(APPEND ${LIB_NAME}_LIBS ${LIB_NAME}) + list(APPEND ${LIB_NAME}_TARGETS ${LIB_NAME}) target_set_arch(${LIB_NAME} PRIVATE ${KFR_ARCH}) endif () @@ -34,4 +39,7 @@ function (add_kfr_library) target_compile_options(${LIB} PRIVATE ${LIB_OPTIONS}) endforeach () + set(${LIB_NAME}_LIBS ${${LIB_NAME}_LIBS} PARENT_SCOPE) + set(${LIB_NAME}_TARGETS ${${LIB_NAME}_TARGETS} PARENT_SCOPE) + endfunction () diff --git a/cmake/config.cmake.in b/cmake/config.cmake.in @@ -0,0 +1,3 @@ +@PACKAGE_INIT@ + + diff --git a/src/capi/CMakeLists.txt b/src/capi/CMakeLists.txt @@ -49,8 +49,10 @@ if (KFR_INSTALL_LIBRARIES) if (KFR_ENABLE_CAPI_BUILD) install( TARGETS kfr_capi + EXPORT kfr_export ARCHIVE DESTINATION lib LIBRARY DESTINATION lib - RUNTIME DESTINATION bin) + RUNTIME DESTINATION bin + ) endif () endif () diff --git a/src/dft/CMakeLists.txt b/src/dft/CMakeLists.txt @@ -17,7 +17,8 @@ endforeach () if (KFR_INSTALL_LIBRARIES) install( - TARGETS ${kfr_dft_LIBS} + TARGETS ${kfr_dft_TARGETS} + EXPORT kfr_export ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin) diff --git a/src/dsp/CMakeLists.txt b/src/dsp/CMakeLists.txt @@ -4,7 +4,8 @@ add_kfr_library(NAME kfr_dsp MULTIARCH SOURCES ${KFR_DSP_SRC}) if (KFR_INSTALL_LIBRARIES) install( - TARGETS ${kfr_dsp_LIBS} + TARGETS ${kfr_dsp_TARGETS} + EXPORT kfr_export ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin) diff --git a/src/io/CMakeLists.txt b/src/io/CMakeLists.txt @@ -5,6 +5,7 @@ add_kfr_library(NAME kfr_io SOURCES ${KFR_IO_SRC}) if (KFR_INSTALL_LIBRARIES) install( TARGETS kfr_io + EXPORT kfr_export ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin)