this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Overhaul CMake makefiles

* Minimum CMake version lowered to 3.6 (tested on 3.6.1)
* Refactored CMake configuration options

Signed-off-by: Vasyl Gello <vasek.gello@gmail.com>

+366 -110
+310 -86
CMakeLists.txt
··· 1 + # Directory for easier includes 2 + # Anywhere you see include(...) you can check <root>/cmake for that file 3 + set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) 4 + 5 + # 6 + # Extract version from Makefile 7 + # 8 + 1 9 file(READ Makefile _MAKEFILE_CONTENTS) 2 - string(REGEX MATCH "KFVER=([0-9]+)\n" KFVER_MATCH "${_MAKEFILE_CONTENTS}") 3 - if(NOT KFVER_MATCH) 4 - message(FATAL_ERROR "Cannot extract version from Makefile") 10 + 11 + string(REGEX MATCH "KFVER_MAJOR = ([0-9]+)\n" KFVER_MAJOR_MATCH "${_MAKEFILE_CONTENTS}") 12 + if(NOT KFVER_MAJOR_MATCH) 13 + message(FATAL_ERROR "Cannot extract major (ABI) version from Makefile") 14 + endif() 15 + set(KFVER_MAJOR "${CMAKE_MATCH_1}") 16 + 17 + string(REGEX MATCH "KFVER_MINOR = ([0-9]+)\n" KFVER_MINOR_MATCH "${_MAKEFILE_CONTENTS}") 18 + if(NOT KFVER_MINOR_MATCH) 19 + message(FATAL_ERROR "Cannot extract minor version from Makefile") 5 20 endif() 6 - set(MAKEFILE_EXTRACTED_VERSION "${CMAKE_MATCH_1}") 21 + set(KFVER_MINOR "${CMAKE_MATCH_1}") 7 22 8 - cmake_minimum_required(VERSION 3.13) 23 + string(REGEX MATCH "KFVER_PATCH = ([0-9]+)\n" KFVER_PATCH_MATCH "${_MAKEFILE_CONTENTS}") 24 + if(NOT KFVER_PATCH_MATCH) 25 + message(FATAL_ERROR "Cannot extract patch version from Makefile") 26 + endif() 27 + set(KFVER_PATCH "${CMAKE_MATCH_1}") 28 + 29 + set(MAKEFILE_EXTRACTED_VERSION "${KFVER_MAJOR}.${KFVER_MINOR}.${KFVER_PATCH}") 30 + 31 + # 32 + # Declare CMake project 33 + # 34 + 35 + cmake_minimum_required(VERSION 3.6) 9 36 project(kissfft VERSION "${MAKEFILE_EXTRACTED_VERSION}") 10 37 11 - option(KISSFFT_SIMD "Build kissfft with SIMD" OFF) 12 - option(KISSFFT_FLOAT "Build kissfft with float type" ON) 13 - option(KISSFFT_OPENMP "Build kissfft with openmp" OFF) 14 - option(KISSFFT_TOOLS "Build kissfft tools" ON) 15 - option(KISSFFT_TEST "Build and enable kissfft tests" ON) 16 - option(KISSFFT_INSTALL "Enable kissfft install" ON) 38 + # 39 + # CMake configuration options 40 + # 41 + 42 + # Principal datatype: double, float (default), int16_t, int32_t, simd 43 + 44 + set(KISSFFT_DATATYPE "float" CACHE STRING "Principal datatype of kissfft: double, float (default), int16_t, int32_t, simd") 45 + 46 + # Additional options 47 + 48 + option(KISSFFT_OPENMP "Build kissfft with OpenMP support" OFF) 49 + option(KISSFFT_PKGCONFIG "Build pkg-config files" ON) 50 + option(KISSFFT_STATIC "Build kissfft as static (ON) or shared library (OFF)" OFF) 51 + option(KISSFFT_TEST "Build kissfft tests" ON) 52 + option(KISSFFT_TOOLS "Build kissfft command-line tools" ON) 53 + option(KISSFFT_USE_ALLOCA "Use alloca instead of malloc" OFF) 54 + 55 + # 56 + # Validate datatype 57 + # 58 + 59 + if (NOT KISSFFT_DATATYPE MATCHES "^double$" AND 60 + NOT KISSFFT_DATATYPE MATCHES "^float$" AND 61 + NOT KISSFFT_DATATYPE MATCHES "^int16_t$" AND 62 + NOT KISSFFT_DATATYPE MATCHES "^int32_t$" AND 63 + NOT KISSFFT_DATATYPE MATCHES "^simd$") 64 + message(FATAL_ERROR "Incorrect value of KISSFFT_DATATYPE! It can be one of: double, float, int16_t, int32_t, simd") 65 + endif() 66 + 67 + # 68 + # Print principal datatype 69 + # 70 + 71 + message(STATUS "Building KissFFT with datatype: ${KISSFFT_DATATYPE}") 72 + set(KISSFFT_OUTPUT_NAME "kissfft-${KISSFFT_DATATYPE}") 73 + 74 + # 75 + # Validate KISSFFT_STATIC 76 + # 17 77 18 - if (KISSFFT_INSTALL) 19 - include(GNUInstallDirs) 78 + if (BUILD_SHARED_LIBS AND KISSFFT_STATIC) 79 + message(FATAL_ERROR "Conflicting CMake configuration: -DBUILD_SHARED_LIBS=ON and -DKISSFFT_STATIC=ON") 20 80 endif() 21 81 82 + # 83 + # Enable BUILD_SHARED_LIBS for shared library build before 84 + # kissfft library is declared 85 + # 86 + 87 + if (NOT KISSFFT_STATIC) 88 + set(BUILD_SHARED_LIBS ON) 89 + message(STATUS "Building shared library") 90 + else() 91 + message(STATUS "Building static library") 92 + endif() 93 + 94 + # 95 + # Detect C compiler and pass appropriate flags 96 + # 97 + 22 98 if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang|AppleClang") 23 99 add_compile_options(-ffast-math -fomit-frame-pointer 24 100 -W -Wall -Wcast-align -Wcast-qual -Wshadow -Wwrite-strings 25 101 "$<$<COMPILE_LANGUAGE:C>:-Wstrict-prototypes;-Wmissing-prototypes;-Wnested-externs;-Wbad-function-cast>") 26 102 endif() 27 103 28 - set(KISSFFT_FIXED_WIDTH_VALID 16 32) 29 - set(KISSFFT_FIXED_WIDTH "16" CACHE STRING "Width of kissfft fixed integer (16/32)") 30 - set_property(CACHE KISSFFT_FIXED_WIDTH PROPERTY STRINGS ${KISSFFT_FIXED_WIDTH_VALID}) 31 - if(NOT KISSFFT_FIXED_WIDTH IN_LIST KISSFFT_FIXED_WIDTH_VALID) 32 - message(FATAL_ERROR "KISSFFT_FIXED_WIDTH must be 16 or 32") 104 + # 105 + # Add GNUInstallDirs for GNU infrastructure before target)include_directories 106 + # 107 + 108 + if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$" AND NOT CMAKE_CROSSCOMPILING) 109 + include(GNUInstallDirs) 33 110 endif() 34 111 35 - set(KISSFFT_FLOAT_TYPE_VALID float double) 36 - set(KISSFFT_FLOAT_TYPE "float" CACHE STRING "Floating type of kissfft (float/double)") 37 - set_property(CACHE KISSFFT_FLOAT_TYPE PROPERTY STRINGS ${KISSFFT_FLOAT_TYPE_VALID}) 38 - if(NOT KISSFFT_FLOAT_TYPE IN_LIST KISSFFT_FLOAT_TYPE_VALID) 39 - message(FATAL_ERROR "KISSFFT_FLOAT_TYPE must be float or double") 40 - endif() 112 + # 113 + # Declare PKGINCLUDEDIR for kissfft include path 114 + # 115 + 116 + set(PKGINCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}/kissfft") 117 + message(STATUS "PKGINCLUDEDIR is ${PKGINCLUDEDIR}") 118 + 119 + # 120 + # Declare kissfft library ( libkissfft.a / libkissfft-${KISSFFT_DATATYPE}.so.${MAKEFILE_EXTRACTED_VERSION} ) 121 + # 41 122 42 123 add_library(kissfft 43 124 kiss_fft.c 44 - tools/kfc.c 45 - tools/kiss_fftnd.c 46 - tools/kiss_fftndr.c 47 - tools/kiss_fftr.c) 125 + kfc.c 126 + kiss_fftnd.c 127 + kiss_fftndr.c 128 + kiss_fftr.c) 48 129 49 130 target_include_directories(kissfft PUBLIC 50 131 $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}> 51 - $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>) 132 + $<INSTALL_INTERFACE:${PKGINCLUDEDIR}>) 133 + 134 + # 135 + # Set compile definitions based on datatype and additional support flags 136 + # 52 137 53 138 set(KISSFFT_COMPILE_DEFINITIONS) 54 - if(KISSFFT_SIMD) 55 - list(APPEND KISSFFT_COMPILE_DEFINITIONS USE_SIMD) 56 - set(KISSFFT_DATATYPE "simd") 139 + 140 + # 141 + # double / float 142 + # 143 + 144 + if(KISSFFT_DATATYPE MATCHES "^float$" OR KISSFFT_DATATYPE MATCHES "^double$") 145 + list(APPEND KISSFFT_COMPILE_DEFINITIONS kiss_fft_scalar=${KISSFFT_DATATYPE}) 57 146 else() 58 - if(KISSFFT_FLOAT) 59 - list(APPEND KISSFFT_COMPILE_DEFINITIONS kiss_fft_scalar=${KISSFFT_FLOAT_TYPE}) 60 - set(KISSFFT_DATATYPE "${KISSFFT_FLOAT_TYPE}") 147 + 148 + # 149 + # int16_t 150 + # 151 + 152 + if(KISSFFT_DATATYPE MATCHES "^int16_t$") 153 + list(APPEND KISSFFT_COMPILE_DEFINITIONS FIXED_POINT=16) 61 154 else() 62 - list(APPEND KISSFFT_COMPILE_DEFINITIONS KISSFFT_FIXED_POINT=${KISSFFT_FIXED_WIDTH}) 63 - set(KISSFFT_DATATYPE "int${KISSFFT_FIXED_WIDTH}") 155 + 156 + # 157 + # int32_t 158 + # 159 + 160 + if(KISSFFT_DATATYPE MATCHES "^int32_t$") 161 + list(APPEND KISSFFT_COMPILE_DEFINITIONS FIXED_POINT=32) 162 + else() 163 + 164 + # 165 + # simd 166 + # 167 + 168 + if(KISSFFT_DATATYPE MATCHES "^simd$") 169 + list(APPEND KISSFFT_COMPILE_DEFINITIONS USE_SIMD) 170 + if (NOT MSVC) 171 + target_compile_options(kissfft PRIVATE -msse) 172 + else() 173 + target_compile_options(kissfft PRIVATE "/arch:SSE") 174 + endif() 175 + endif() 176 + endif() 64 177 endif() 65 178 endif() 179 + 180 + # 181 + # OpenMP support 182 + # 183 + 66 184 if(KISSFFT_OPENMP) 67 185 if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang|AppleClang") 68 - target_compile_options(kissfft PRIVATE -fopenmp) 69 - target_link_options(kissfft PUBLIC -fopenmp) 186 + if (NOT MSVC) 187 + target_compile_options(kissfft PRIVATE -fopenmp) 188 + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") 189 + target_link_libraries(kissfft PRIVATE "-fopenmp") 190 + else() 191 + target_link_options(kissfft PRIVATE -fopenmp) 192 + endif() 193 + else() 194 + target_compile_options(kissfft PRIVATE "/openmp") 195 + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") 196 + target_link_libraries(kissfft PRIVATE "/openmp") 197 + else() 198 + target_link_options(kissfft PRIVATE "/openmp") 199 + endif() 200 + endif() 201 + set(KISSFFT_EXPORT_SUFFIX "-openmp") 202 + set(KISSFFT_OUTPUT_NAME "kissfft-${KISSFFT_DATATYPE}-openmp") 70 203 else() 71 - message(FATAL_ERROR "Don't know how to enable openmp for this compiler") 204 + message(FATAL_ERROR "Don't know how to enable OpenMP for this compiler") 72 205 endif() 73 206 endif() 74 - message(STATUS "Building KissFFT with datatype=${KISSFFT_DATATYPE}") 75 207 76 - if(BUILD_SHARED_LIBS) 208 + # 209 + # Shared / static library 210 + # 211 + 212 + if(NOT KISSFFT_STATIC) 77 213 list(APPEND KISSFFT_COMPILE_DEFINITIONS KISS_FFT_SHARED) 78 214 set_target_properties(kissfft PROPERTIES 79 215 C_VISIBILITY_PRESET hidden) 80 - set(KISSFFT_EXPORT_SUFFIX "-shared") 216 + set(KISSFFT_EXPORT_SUFFIX "${KISSFFT_EXPORT_SUFFIX}-shared") 81 217 else() 82 - set(KISSFFT_EXPORT_SUFFIX "-static") 218 + set(KISSFFT_EXPORT_SUFFIX "${KISSFFT_EXPORT_SUFFIX}-static") 83 219 endif() 220 + 221 + # 222 + # Alloca support 223 + # 224 + 225 + if(KISSFFT_USE_ALLOCA) 226 + list(APPEND KISSFFT_COMPILE_DEFINITIONS KISS_FFT_USE_ALLOCA) 227 + endif() 228 + 229 + # Set library name, version, soversion and aliases 230 + 84 231 target_compile_definitions(kissfft PUBLIC ${KISSFFT_COMPILE_DEFINITIONS}) 85 - set(KISSFFT_OUTPUT_NAME "kissfft_${KISSFFT_DATATYPE}") 86 232 set_target_properties(kissfft PROPERTIES 87 233 OUTPUT_NAME "${KISSFFT_OUTPUT_NAME}" 88 234 DEFINE_SYMBOL KISS_FFT_BUILD 89 - EXPORT_NAME "kissfft-${KISSFFT_DATATYPE}" 90 - VERSION ${PROJECT_VERSION}) 235 + EXPORT_NAME "${KISSFFT_OUTPUT_NAME}" 236 + VERSION ${PROJECT_VERSION} 237 + SOVERSION ${KFVER_MAJOR}) 91 238 add_library(kissfft::kissfft ALIAS kissfft) 92 - add_library(kissfft::kissff-${KISSFFT_DATATYPE} ALIAS kissfft) 93 - if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 239 + add_library(kissfft::kissfft-${KISSFFT_DATATYPE} ALIAS kissfft) 240 + 241 + # 242 + # Build with libm (-lm) on Linux and kFreeBSD 243 + # 244 + 245 + if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$" AND NOT CMAKE_CROSSCOMPILING) 94 246 target_link_libraries(kissfft PRIVATE m) 95 247 endif() 96 248 249 + # 250 + # Define a helper function to define executable file 251 + # 252 + 97 253 function(add_kissfft_executable NAME) 98 254 add_executable(${NAME} ${ARGN}) 99 255 target_link_libraries(${NAME} PRIVATE kissfft::kissfft) 100 - if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 256 + 257 + # 258 + # Build with libm (-lm) on Linux and kFreeBSD 259 + # 260 + 261 + if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$" AND NOT CMAKE_CROSSCOMPILING) 101 262 target_link_libraries(${NAME} PRIVATE m) 102 263 endif() 103 - set_target_properties(${NAME} PROPERTIES 104 - OUTPUT_NAME "${NAME}_${KISSFFT_DATATYPE}") 264 + 265 + if (NOT KISSFFT_OPENMP) 266 + set_target_properties(${NAME} PROPERTIES 267 + OUTPUT_NAME "${NAME}-${KISSFFT_DATATYPE}") 268 + else() 269 + if (NOT MSVC) 270 + target_compile_options(${NAME} PRIVATE -fopenmp) 271 + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") 272 + target_link_libraries(${NAME} PRIVATE "-fopenmp") 273 + else() 274 + target_link_options(${NAME} PRIVATE -fopenmp) 275 + endif() 276 + else() 277 + target_compile_options(${NAME} PRIVATE "/openmp") 278 + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") 279 + target_link_libraries(${NAME} PRIVATE "/openmp") 280 + else() 281 + target_link_options(${NAME} PRIVATE "/openmp") 282 + endif() 283 + endif() 284 + set_target_properties(${NAME} PROPERTIES 285 + OUTPUT_NAME "${NAME}-${KISSFFT_DATATYPE}-openmp") 286 + endif() 105 287 endfunction() 106 288 107 - if(KISSFFT_TOOLS) 108 - add_subdirectory(tools) 109 - endif() 289 + # 290 + # Perform installation of kissfft library and development files 291 + # 110 292 111 - if(KISSFFT_TEST) 112 - enable_testing() 113 - add_subdirectory(test) 114 - endif() 293 + install(TARGETS kissfft EXPORT kissfft 294 + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" 295 + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" 296 + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") 115 297 116 - if (KISSFFT_INSTALL) 117 - install(TARGETS kissfft EXPORT kissfft 118 - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" 119 - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" 120 - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") 121 - install(FILES kiss_fft.h 122 - kissfft.hh 123 - tools/kfc.h 124 - tools/kiss_fftnd.h 125 - tools/kiss_fftndr.h 126 - tools/kiss_fftr.h 127 - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") 298 + install(FILES kiss_fft.h 299 + kissfft.hh 300 + kissfft_i32.hh 301 + kfc.h 302 + kiss_fftnd.h 303 + kiss_fftndr.h 304 + kiss_fftr.h 305 + DESTINATION "${PKGINCLUDEDIR}") 128 306 129 - set(KISSFFT_INSTALL_CMAKE "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" CACHE FILEPATH "Install destination of kissfft cmake modules") 130 - mark_as_advanced(KISSFFT_INSTALL_CMAKE) 307 + set(KISSFFT_INSTALL_CMAKE "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" 308 + CACHE FILEPATH "Install destination of kissfft cmake modules") 309 + mark_as_advanced(KISSFFT_INSTALL_CMAKE) 131 310 132 - install(EXPORT kissfft DESTINATION "${KISSFFT_INSTALL_CMAKE}" 311 + install(EXPORT kissfft DESTINATION "${KISSFFT_INSTALL_CMAKE}" 133 312 NAMESPACE "kissfft::" 134 313 FILE "${PROJECT_NAME}-${KISSFFT_DATATYPE}${KISSFFT_EXPORT_SUFFIX}-targets.cmake") 135 - include(CMakePackageConfigHelpers) 136 - configure_package_config_file(kissfft-config.cmake.in kissfft-config.cmake 137 - INSTALL_DESTINATION "${KISSFFT_INSTALL_CMAKE}") 138 - write_basic_package_version_file(kissfft-config-version.cmake COMPATIBILITY AnyNewerVersion) 139 - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kissfft-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/kissfft-config-version.cmake" 314 + include(CMakePackageConfigHelpers) 315 + configure_package_config_file(kissfft-config.cmake.in kissfft-config.cmake 316 + INSTALL_DESTINATION "${KISSFFT_INSTALL_CMAKE}") 317 + write_basic_package_version_file(kissfft-config-version.cmake COMPATIBILITY AnyNewerVersion) 318 + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kissfft-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/kissfft-config-version.cmake" 140 319 DESTINATION "${KISSFFT_INSTALL_CMAKE}") 141 320 142 - set(PKG_KISSFFT_DEFS) 143 - foreach(_def ${KISSFFT_COMPILE_DEFINITIONS}) 144 - set(PKG_KISSFFT_DEFS "${PKG_KISSFFT_DEFS} -D${_def}") 145 - endforeach() 146 - configure_file(kissfft.pc.in "kissfft-${KISSFFT_DATATYPE}.pc" @ONLY) 147 - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kissfft-${KISSFFT_DATATYPE}.pc" 148 - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") 321 + set(PKG_KISSFFT_DEFS) 322 + foreach(_def ${KISSFFT_COMPILE_DEFINITIONS}) 323 + set(PKG_KISSFFT_DEFS "${PKG_KISSFFT_DEFS} -D${_def}") 324 + endforeach() 325 + if (KISSFFT_PKGCONFIG) 326 + include(JoinPaths) 327 + set(PKGCONFIG_KISSFFT_PKGINCLUDEDIR "\${includedir}/kissfft") 328 + set(PKGCONFIG_KISSFFT_PREFIX "${CMAKE_INSTALL_PREFIX}") 329 + set(PKGCONFIG_KISSFFT_VERSION "${kissfft_VERSION}") 330 + join_paths(PKGCONFIG_KISSFFT_LIBDIR "\${prefix}" "${CMAKE_INSTALL_LIBDIR}") 331 + join_paths(PKGCONFIG_KISSFFT_INCLUDEDIR "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") 332 + if(KISSFFT_DATATYPE MATCHES "^simd$") 333 + list(APPEND KISSFFT_COMPILE_DEFINITIONS USE_SIMD) 334 + if (NOT MSVC) 335 + set(PKG_KISSFFT_DEFS "${PKG_KISSFFT_DEFS} -msse") 336 + else() 337 + set(PKG_KISSFFT_DEFS "${PKG_KISSFFT_DEFS} /ARCH:SSE") 338 + endif() 339 + endif() 340 + if (NOT KISSFFT_OPENMP) 341 + configure_file(kissfft.pc.in "kissfft-${KISSFFT_DATATYPE}.pc" @ONLY) 342 + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kissfft-${KISSFFT_DATATYPE}.pc" 343 + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") 344 + else() 345 + if (NOT MSVC) 346 + set(PKG_OPENMP "-fopenmp") 347 + set(PKG_KISSFFT_DEFS "${PKG_KISSFFT_DEFS} -fopenmp") 348 + else() 349 + set(PKG_KISSFFT_DEFS "${PKG_KISSFFT_DEFS} /openmp") 350 + set(PKG_OPENMP "/openmp") 351 + endif() 352 + configure_file(kissfft.pc.in "kissfft-${KISSFFT_DATATYPE}-openmp.pc" @ONLY) 353 + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kissfft-${KISSFFT_DATATYPE}-openmp.pc" 354 + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") 355 + endif() 356 + endif() 357 + 358 + # 359 + # Build and install tools if requested by user 360 + # 361 + 362 + if(KISSFFT_TOOLS) 363 + add_subdirectory(tools) 364 + endif() 365 + 366 + # 367 + # Build and run tests if requested by user 368 + # 369 + 370 + if(KISSFFT_TEST) 371 + enable_testing() 372 + add_subdirectory(test) 149 373 endif()
+23
cmake/JoinPaths.cmake
··· 1 + # This module provides function for joining paths 2 + # known from most languages 3 + # 4 + # SPDX-License-Identifier: (MIT OR CC0-1.0) 5 + # Copyright 2020 Jan Tojnar 6 + # https://github.com/jtojnar/cmake-snips 7 + # 8 + # Modelled after Python’s os.path.join 9 + # https://docs.python.org/3.7/library/os.path.html#os.path.join 10 + # Windows not supported 11 + function(join_paths joined_path first_path_segment) 12 + set(temp_path "${first_path_segment}") 13 + foreach(current_segment IN LISTS ARGN) 14 + if(NOT ("${current_segment}" STREQUAL "")) 15 + if(IS_ABSOLUTE "${current_segment}") 16 + set(temp_path "${current_segment}") 17 + else() 18 + set(temp_path "${temp_path}/${current_segment}") 19 + endif() 20 + endif() 21 + endforeach() 22 + set(${joined_path} "${temp_path}" PARENT_SCOPE) 23 + endfunction()
+29 -15
test/CMakeLists.txt
··· 1 - add_library(kissfft_help_library OBJECT 2 - pstats.c 3 - ../tools/kfc.c 4 - ../tools/kiss_fftnd.c 5 - ../tools/kiss_fftr.c 6 - ../tools/kiss_fftndr.c 7 - ) 8 - target_link_libraries(kissfft_help_library PRIVATE kissfft::kissfft) 9 - target_include_directories(kissfft_help_library PRIVATE ../tools) 10 - 11 1 function(add_kissfft_test_executable NAME) 12 - add_kissfft_executable(${NAME} ${ARGN} $<TARGET_OBJECTS:kissfft_help_library>) 13 - target_include_directories(${NAME} PRIVATE ../tools) 2 + add_kissfft_executable(${NAME} ${ARGN}) 3 + target_include_directories(${NAME} PRIVATE ..) 4 + 14 5 add_test(NAME ${NAME} COMMAND ${NAME}) 15 6 set_tests_properties(${NAME} PROPERTIES TIMEOUT 3600) 16 7 endfunction() 17 8 18 9 set(KISSFFT_TEST_NUMFFTS 10000) 19 10 20 - add_kissfft_test_executable(bm_kiss benchkiss.c) 11 + # 12 + # Add tools-independent fastfilt_* (../tools/fft_*) executable without adding a test 13 + # 14 + 15 + add_kissfft_executable(fastfilt ../tools/fftutil.c) 16 + target_include_directories(fastfilt PRIVATE ..) 17 + 18 + # 19 + # Add test executables and define tests 20 + # 21 + 22 + add_kissfft_test_executable(bm_kiss benchkiss.c pstats.c) 21 23 # add_test(NAME benchmar COMMAND ${NAME}) 22 24 # set_tests_properties(${NAME} PROPERTIES TIMEOUT 3600) 23 25 ··· 28 30 set(fftw3_pkg fftw3) 29 31 endif() 30 32 pkg_check_modules(fftw3 REQUIRED IMPORTED_TARGET ${fftw3_pkg}) 31 - add_kissfft_test_executable(bm_fftw benchfftw.c) 33 + add_kissfft_test_executable(bm_fftw benchfftw.c pstats.c) 32 34 target_link_libraries(bm_fftw PRIVATE PkgConfig::fftw3) 33 35 34 36 add_kissfft_test_executable(st twotonetest.c) ··· 41 43 42 44 add_kissfft_test_executable(testcpp testcpp.cc) 43 45 46 + if(KISSFFT_DATATYPE MATCHES "^simd$") 47 + add_kissfft_test_executable(tsimd test_simd.c) 48 + target_compile_definitions(tsimd PRIVATE USE_SIMD) 49 + if (NOT MSVC) 50 + target_compile_options(kissfft PRIVATE -msse) 51 + else() 52 + target_compile_options(kissfft PRIVATE "/arch:SSE") 53 + endif() 54 + endif() 55 + 44 56 find_package(PythonInterp REQUIRED) 45 57 add_test(NAME testkiss.py COMMAND "${PYTHON_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/testkiss.py") 58 + list(APPEND TESTKISS_PY_ENV "KISSFFT_DATATYPE=${KISSFFT_DATATYPE}") 59 + list(APPEND TESTKISS_PY_ENV "KISSFFT_OPENMP=${KISSFFT_OPENMP}") 46 60 set_tests_properties(testkiss.py PROPERTIES 47 61 TIMEOUT 3600 48 - ENVIRONMENT "DATATYPE=${KISSFFT_DATATYPE}" 62 + ENVIRONMENT "${TESTKISS_PY_ENV}" 49 63 WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
+4 -9
tools/CMakeLists.txt
··· 6 6 7 7 add_kissfft_executable(fft fftutil.c) 8 8 9 - 10 - if (KISSFFT_INSTALL) 11 - install(TARGETS fastconv fastconvr fft 9 + install(TARGETS fastconv fastconvr fft 12 10 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 13 11 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 14 12 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 15 - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) 16 - endif() 13 + PUBLIC_HEADER DESTINATION ${PKGINCLUDEDIR}) 17 14 18 15 # psdpng does not build with "simd" datatype 19 16 if(NOT KISSFFT_DATATYPE MATCHES "simd") ··· 21 18 pkg_check_modules(libpng REQUIRED IMPORTED_TARGET libpng) 22 19 add_kissfft_executable(psdpng psdpng.c) 23 20 target_link_libraries(psdpng PRIVATE PkgConfig::libpng) 24 - if (KISSFFT_INSTALL) 25 - install(TARGETS psdpng 21 + install(TARGETS psdpng 26 22 ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} 27 23 LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 28 24 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} 29 - PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) 30 - endif() 25 + PUBLIC_HEADER DESTINATION ${PKGINCLUDEDIR}) 31 26 endif() 32 27 33 28 #FIXME: dumphdr.c is not available