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 f65a229ee91b37a5fcc56b5a929b647afd862fb6
parent 86b91e316bf09206326c304f1701255a68cfaa02
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date:   Thu, 14 Jul 2022 19:33:10 +0100

Prefix CMake variables with KFR_

Diffstat:
MCMakeLists.txt | 80+++++++++++++++++++++++++++++++++++++++----------------------------------------
Mexamples/CMakeLists.txt | 4++--
Mtests/CMakeLists.txt | 45++++++++++++++++++++-------------------------
3 files changed, 61 insertions(+), 68 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt @@ -46,36 +46,38 @@ endif () # Include autogenerated list of source files include(sources.cmake) -option(ENABLE_TESTS "Enable tests and examples" OFF) +option(KFR_ENABLE_TESTS "Enable KFR tests" OFF) +option(KFR_ENABLE_EXAMPLES "Enable KFR examples" OFF) +option(KFR_ENABLE_TOOLS "Enable KFR tools" OFF) if (CLANG) - option(ENABLE_DFT "Enable DFT and related algorithms." ON) - option(ENABLE_DFT_NP "Enable Non-power of 2 DFT" ON) + option(KFR_ENABLE_DFT "Enable DFT and related algorithms." ON) + option(KFR_ENABLE_DFT_NP "Enable Non-power of 2 DFT" ON) if (X86) option( - ENABLE_DFT_MULTIARCH + KFR_ENABLE_DFT_MULTIARCH "Build DFT static libraries for various architectures. Requires Clang" OFF) endif () else () - option(ENABLE_DFT "Enable DFT and related algorithms." OFF) - option(ENABLE_DFT_NP "Enable Non-power of 2 DFT" OFF) + option(KFR_ENABLE_DFT "Enable DFT and related algorithms." OFF) + option(KFR_ENABLE_DFT_NP "Enable Non-power of 2 DFT" OFF) endif () -option(ENABLE_ASMTEST "Enable writing disassembly" OFF) -option(REGENERATE_TESTS "Regenerate auto tests" OFF) -option(DISABLE_CLANG_EXTENSIONS "Disable Clang vector extensions" OFF) +option(KFR_ENABLE_ASMTEST "Enable writing disassembly" OFF) +option(KFR_REGENERATE_TESTS "Regenerate auto tests" OFF) +option(KFR_DISABLE_CLANG_EXTENSIONS "Disable Clang vector extensions" OFF) option(KFR_EXTENDED_TESTS "Extended tests (up to hour)" OFF) -option(SKIP_TESTS "Skip tests (only build)" OFF) +option(KFR_SKIP_TESTS "Skip tests (only build)" OFF) option(KFR_STD_COMPLEX "Use std::complex instead of custom complex type" OFF) -mark_as_advanced(ENABLE_ASMTEST) -mark_as_advanced(REGENERATE_TESTS) -mark_as_advanced(DISABLE_CLANG_EXTENSIONS) +option(KFR_ENABLE_CAPI_BUILD "Enable KFR C API building" OFF) +mark_as_advanced(KFR_ENABLE_ASMTEST) +mark_as_advanced(KFR_REGENERATE_TESTS) +mark_as_advanced(KFR_DISABLE_CLANG_EXTENSIONS) -if (NOT CPU_ARCH) - set(CPU_ARCH detect) +if (NOT KFR_ARCH) + set(KFR_ARCH detect) endif () -if (CPU_ARCH STREQUAL "detect" AND X86) - message(STATUS "Detecting native cpu...") +if (KFR_ARCH STREQUAL "detect" AND X86) try_run( RUN_RESULT COMPILE_RESULT "${CMAKE_CURRENT_BINARY_DIR}/tmpdir" ${CMAKE_CURRENT_SOURCE_DIR}/cmake/detect_cpu.cpp @@ -86,8 +88,8 @@ if (CPU_ARCH STREQUAL "detect" AND X86) COMPILE_OUTPUT_VARIABLE COMPILE_OUT RUN_OUTPUT_VARIABLE RUN_OUT) if (COMPILE_RESULT AND RUN_RESULT EQUAL 0) - message(STATUS DETECTED_CPU = ${RUN_OUT}) - set(CPU_ARCH + message(STATUS "Default CPU architecture for KFR is ${RUN_OUT} (set KFR_ARCH to override)") + set(KFR_ARCH ${RUN_OUT} CACHE STRING "Detected CPU" FORCE) else () @@ -96,12 +98,14 @@ if (CPU_ARCH STREQUAL "detect" AND X86) message(STATUS COMPILE_OUT = ${COMPILE_OUT}) message(STATUS RUN_OUT = ${RUN_OUT}) endif () +else () + message(STATUS "Default CPU architecture for KFR is ${KFR_ARCH} (set by cmake variable)") endif () include(cmake/target_set_arch.cmake) add_library(use_arch INTERFACE) -target_set_arch(use_arch INTERFACE ${CPU_ARCH}) +target_set_arch(use_arch INTERFACE ${KFR_ARCH}) if (WIN32) add_definitions(-D_CRT_SECURE_NO_WARNINGS) @@ -145,7 +149,7 @@ if (MSVC) else () target_link_libraries(kfr INTERFACE ${STD_LIB} ${PTHREAD_LIB} m) endif () -if (DISABLE_CLANG_EXTENSIONS) +if (KFR_DISABLE_CLANG_EXTENSIONS) target_compile_definitions(kfr INTERFACE -DCMT_DISABLE_CLANG_EXT) endif () if (KFR_STD_COMPLEX) @@ -158,15 +162,13 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") target_compile_options(kfr INTERFACE -Wno-c++1z-extensions -Wno-psabi) endif () -if (NOT ENABLE_DFT) +if (NOT KFR_ENABLE_DFT) target_compile_definitions(kfr INTERFACE -DKFR_NO_DFT) endif () if (KFR_EXTENDED_TESTS) target_compile_definitions(kfr INTERFACE -DKFR_EXTENDED_TESTS) endif () -message(STATUS CPU_ARCH=${CPU_ARCH}) - if (X86) add_executable(detect_cpu ${CMAKE_CURRENT_SOURCE_DIR}/cmake/detect_cpu.cpp) target_link_libraries(detect_cpu PRIVATE kfr) @@ -182,11 +184,11 @@ function (add_arch_library NAME ARCH SRCS DEFS) target_compile_options(${NAME}_${ARCH} PRIVATE -flto) endfunction () -if (ENABLE_DFT) +if (KFR_ENABLE_DFT) set(KFR_DFT_DEFS "${CLANG_ARG_PREFIX}-ffp-contract=fast") - if (ENABLE_DFT_MULTIARCH) + if (KFR_ENABLE_DFT_MULTIARCH) add_library(kfr_dft INTERFACE) add_library(kfr_dft_all INTERFACE) target_link_libraries(kfr_dft INTERFACE kfr kfr_dft_all) @@ -210,7 +212,7 @@ if (ENABLE_DFT) add_library(kfr_dft ${KFR_DFT_SRC}) target_link_libraries(kfr_dft kfr use_arch) target_compile_options(kfr_dft PRIVATE "${KFR_DFT_DEFS}") - if (ENABLE_DFT_NP) + if (KFR_ENABLE_DFT_NP) target_compile_definitions(kfr_dft PUBLIC -DKFR_DFT_NPo2) else () target_compile_definitions(kfr_dft PUBLIC -DKFR_DFT_NO_NPo2) @@ -218,14 +220,18 @@ if (ENABLE_DFT) endif () - if (ENABLE_CAPI_BUILD) + if (KFR_ENABLE_CAPI_BUILD) add_subdirectory(capi) endif () endif () -if (ENABLE_TESTS) +if (KFR_ENABLE_EXAMPLES) add_subdirectory(examples) +endif () +if (KFR_ENABLE_TESTS) add_subdirectory(tests) +endif () +if (KFR_ENABLE_TOOLS) add_subdirectory(tools) endif () @@ -239,7 +245,7 @@ install( LIBRARY DESTINATION lib RUNTIME DESTINATION bin) -if (ENABLE_CAPI_BUILD) +if (KFR_ENABLE_DFT AND KFR_ENABLE_CAPI_BUILD) install( TARGETS kfr_capi ARCHIVE DESTINATION lib @@ -258,7 +264,7 @@ function(append_defines_from target) endfunction() append_defines_from(kfr) -if (ENABLE_DFT) +if (KFR_ENABLE_DFT) append_defines_from(kfr_dft) endif () append_defines_from(kfr_io) @@ -269,8 +275,8 @@ set(kfr_defines "#define ${kfr_defines}\n") file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/kfr_config.h "${kfr_defines}") -if (ENABLE_DFT) - if (ENABLE_DFT_MULTIARCH) +if (KFR_ENABLE_DFT) + if (KFR_ENABLE_DFT_MULTIARCH) install( TARGETS kfr_dft_sse2 kfr_dft_sse41 kfr_dft_avx kfr_dft_avx2 kfr_dft_avx512 @@ -306,11 +312,3 @@ if (NOT TARGET uninstall) COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake) endif () - -if (DEBUG_CMAKE) - get_cmake_property(_variableNames VARIABLES) - list(SORT _variableNames) - foreach (_variableName ${_variableNames}) - message(STATUS "${_variableName}=${${_variableName}}") - endforeach () -endif () diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt @@ -34,7 +34,7 @@ target_link_libraries(window kfr use_arch) add_executable(fir fir.cpp) target_link_libraries(fir kfr use_arch) -if (ENABLE_DFT) +if (KFR_ENABLE_DFT) target_link_libraries(fir kfr_dft use_arch) target_compile_definitions(fir PRIVATE -DHAVE_DFT) endif () @@ -42,7 +42,7 @@ endif () add_executable(sample_rate_conversion sample_rate_conversion.cpp) target_link_libraries(sample_rate_conversion kfr kfr_io use_arch) -if (ENABLE_DFT) +if (KFR_ENABLE_DFT) add_executable(dft dft.cpp) target_link_libraries(dft kfr kfr_dft use_arch) add_executable(ccv ccv.cpp) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt @@ -24,15 +24,15 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-fdiagnostics-absolute-paths) endif () -option(ENABLE_COVERAGE "Enable coverage reporting" OFF) +option(KFR_ENABLE_COVERAGE "Enable coverage reporting" OFF) -if (ENABLE_COVERAGE) +if (KFR_ENABLE_COVERAGE) if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-fprofile-instr-generate -fcoverage-mapping) endif () endif () -if (ENABLE_DFT) +if (KFR_ENABLE_DFT) add_definitions(-DHAVE_DFT) endif () @@ -52,14 +52,14 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_BINARY_DIR}/bin) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/tests/cmake/") -if (ENABLE_CAPI_BUILD) +if (KFR_ENABLE_CAPI_BUILD) add_executable(capi_test capi_test.cpp) target_include_directories(capi_test PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../include) target_link_libraries(capi_test PUBLIC kfr_capi) endif () -if (ENABLE_ASMTEST) +if (KFR_ENABLE_ASMTEST) add_executable(asm_test asm_test.cpp) target_link_libraries(asm_test kfr) target_set_arch(asm_test PRIVATE avx2) @@ -108,7 +108,7 @@ set(ALL_TESTS_CPP io_test.cpp ${KFR_UNITTEST_SRC}) -if (ENABLE_DFT) +if (KFR_ENABLE_DFT) list(APPEND ALL_TESTS_CPP dft_test.cpp) add_executable(dft_test dft_test.cpp) @@ -118,13 +118,12 @@ find_package(MPFR) find_package(GMP) if (MPFR_FOUND AND GMP_FOUND) - message(STATUS "MPFR is found") add_executable(generate_data generate_data.cpp) target_link_libraries(generate_data kfr) target_include_directories(generate_data PRIVATE ${MPFR_INCLUDE_DIR} ${GMP_INCLUDE_DIR}) target_link_libraries(generate_data ${MPFR_LIBRARIES} ${GMP_LIBRARIES}) - if (REGENERATE_TESTS) + if (KFR_REGENERATE_TESTS) add_custom_command( TARGET generate_data POST_BUILD @@ -137,7 +136,7 @@ endif () add_executable(all_tests all_tests.cpp ${ALL_TESTS_CPP}) target_compile_definitions(all_tests PRIVATE KFR_NO_MAIN) target_link_libraries(all_tests kfr use_arch) -if (ENABLE_DFT) +if (KFR_ENABLE_DFT) target_link_libraries(all_tests kfr_dft) target_link_libraries(dft_test kfr_dft) endif () @@ -152,7 +151,7 @@ function (add_x86_test ARCH) add_executable(all_tests_${NAME} all_tests.cpp ${ALL_TESTS_CPP} ${KFR_IO_SRC}) - if (ENABLE_DFT) + if (KFR_ENABLE_DFT) target_sources(all_tests_${NAME} PRIVATE ${KFR_DFT_SRC}) endif () target_link_libraries(all_tests_${NAME} kfr) @@ -160,10 +159,10 @@ function (add_x86_test ARCH) target_compile_definitions(all_tests_${NAME} PRIVATE KFR_NO_MAIN) target_compile_definitions(all_tests_${NAME} PUBLIC KFR_ENABLE_FLAC=1) - if (ARCH_TESTS_MULTI) + if (KFR_ARCH_TESTS_MULTI) add_library(all_tests_multiarch_${NAME} STATIC ${ALL_TESTS_MERGED_CPP} ${KFR_IO_SRC}) - if (ENABLE_DFT) + if (KFR_ENABLE_DFT) target_sources(all_tests_multiarch_${NAME} PRIVATE ${KFR_DFT_SRC}) endif () target_link_libraries(all_tests_multiarch_${NAME} kfr) @@ -176,9 +175,7 @@ function (add_x86_test ARCH) endfunction () -message(STATUS "ARCH_TESTS = ${ARCH_TESTS}") - -if (ARCH_TESTS AND ARCH_TESTS STREQUAL "ON") +if (KFR_ARCH_TESTS AND KFR_ARCH_TESTS STREQUAL "ON") set(ARCH_LIST generic sse2 @@ -188,22 +185,20 @@ if (ARCH_TESTS AND ARCH_TESTS STREQUAL "ON") avx2 avx512) else () - string(REPLACE "," ";" ARCH_LIST "${ARCH_TESTS}") + string(REPLACE "," ";" ARCH_LIST "${KFR_ARCH_TESTS}") endif () if (MSVC AND NOT CLANG) list(REMOVE_ITEM ARCH_LIST generic) endif () -message(STATUS "Testing for ${ARCH_LIST}") - -if (ARCH_TESTS) +if (KFR_ARCH_TESTS) - foreach (A IN LISTS ARCH_LIST) + foreach (A IN LISTS KFR_ARCH_LIST) add_x86_test(${A}) endforeach () - if (ARCH_TESTS_MULTI) + if (KFR_ARCH_TESTS_MULTI) add_executable(all_tests_multiarch all_tests.cpp) target_compile_definitions(all_tests_multiarch PRIVATE KFR_MULTI_ARCH) foreach (A IN LISTS ARCH_LIST) @@ -236,20 +231,20 @@ set(SDE_ARCH_avx -snb) set(SDE_ARCH_avx2 -hsw) set(SDE_ARCH_avx512 -skx) -if (NOT SKIP_TESTS) +if (NOT KFR_SKIP_TESTS) enable_testing() if (X86) add_test(NAME multiarch COMMAND ${EMULATOR} ${PROJECT_BINARY_DIR}/bin/multiarch) - if (ENABLE_CAPI_BUILD) + if (KFR_ENABLE_CAPI_BUILD) add_test(NAME capi_test COMMAND ${EMULATOR} ${PROJECT_BINARY_DIR}/bin/capi_test) endif () endif () - if (ARCH_TESTS) + if (KFR_ARCH_TESTS) foreach (A IN LISTS ARCH_LIST) if (USE_SDE) add_test(NAME all_tests_${A} @@ -263,7 +258,7 @@ if (NOT SKIP_TESTS) endforeach () endif () if (USE_SDE) - add_test(NAME all_tests COMMAND ${SDE} ${SDE_ARCH_${CPU_ARCH}} -chip_check_exe_only + add_test(NAME all_tests COMMAND ${SDE} ${SDE_ARCH_${KFR_ARCH}} -chip_check_exe_only -- ${PROJECT_BINARY_DIR}/bin/all_tests) add_test(NAME all_tests_on_avx512 COMMAND ${SDE} ${SDE_ARCH_avx512} -chip_check_exe_only -- ${PROJECT_BINARY_DIR}/bin/all_tests)