1*3f1979aaSAndroid Build Coastguard Workercmake_minimum_required(VERSION 2.8) 2*3f1979aaSAndroid Build Coastguard Workerproject(PRETTY_FAST_FFT) 3*3f1979aaSAndroid Build Coastguard Worker 4*3f1979aaSAndroid Build Coastguard Worker# smaller library size? 5*3f1979aaSAndroid Build Coastguard Workeroption(USE_TYPE_FLOAT "activate single precision 'float'?" ON) 6*3f1979aaSAndroid Build Coastguard Workeroption(USE_TYPE_DOUBLE "activate 'double' precision float?" ON) 7*3f1979aaSAndroid Build Coastguard Worker 8*3f1979aaSAndroid Build Coastguard Worker# architecture/optimization options 9*3f1979aaSAndroid Build Coastguard Workeroption(USE_SIMD "use SIMD (SSE/AVX/NEON/ALTIVEC) CPU features? - " ON) 10*3f1979aaSAndroid Build Coastguard Workeroption(DISABLE_SIMD_AVX "disable AVX CPU features? - " OFF) 11*3f1979aaSAndroid Build Coastguard Workeroption(USE_SIMD_NEON "force using NEON on ARM? (requires USE_SIMD)" OFF) 12*3f1979aaSAndroid Build Coastguard Workeroption(USE_SCALAR_VECT "use 4-element vector scalar operations (if no other SIMD)" ON) 13*3f1979aaSAndroid Build Coastguard Worker 14*3f1979aaSAndroid Build Coastguard Worker# test options 15*3f1979aaSAndroid Build Coastguard Workeroption(USE_BENCH_FFTW "use (system-installed) FFTW3 in fft benchmark?" OFF) 16*3f1979aaSAndroid Build Coastguard Workeroption(USE_BENCH_GREEN "use Green FFT in fft benchmark? - if exists in subdir" ON) 17*3f1979aaSAndroid Build Coastguard Workeroption(USE_BENCH_KISS "use KissFFT in fft benchmark? - if exists in subdir" ON) 18*3f1979aaSAndroid Build Coastguard Workeroption(USE_BENCH_POCKET "use PocketFFT in fft benchmark? - if exists in subdir" ON) 19*3f1979aaSAndroid Build Coastguard Worker 20*3f1979aaSAndroid Build Coastguard Workeroption(USE_DEBUG_ASAN "use GCC's address sanitizer?" OFF) 21*3f1979aaSAndroid Build Coastguard Worker 22*3f1979aaSAndroid Build Coastguard Workeroption(DISABLE_LINK_WITH_M "Disables linking with m library to build with clangCL from MSVC" OFF) 23*3f1979aaSAndroid Build Coastguard Worker 24*3f1979aaSAndroid Build Coastguard Worker# C90 requires the gcc extensions for function attributes like always_inline 25*3f1979aaSAndroid Build Coastguard Worker# C99 provides the function attributes: no gcc extensions required 26*3f1979aaSAndroid Build Coastguard Workerset(CMAKE_C_STANDARD 99) 27*3f1979aaSAndroid Build Coastguard Workerset(CMAKE_C_EXTENSIONS OFF) 28*3f1979aaSAndroid Build Coastguard Worker 29*3f1979aaSAndroid Build Coastguard Workerset(CMAKE_CXX_STANDARD 98) 30*3f1979aaSAndroid Build Coastguard Workerset(CMAKE_CXX_STANDARD_REQUIRED ON) 31*3f1979aaSAndroid Build Coastguard Workerset(CMAKE_CXX_EXTENSIONS OFF) 32*3f1979aaSAndroid Build Coastguard Worker 33*3f1979aaSAndroid Build Coastguard Worker 34*3f1979aaSAndroid Build Coastguard Workerif ( (NOT USE_TYPE_FLOAT) AND (NOT USE_TYPE_DOUBLE) ) 35*3f1979aaSAndroid Build Coastguard Worker message(FATAL_ERROR "activate at least one of USE_TYPE_FLOAT or USE_TYPE_DOUBLE") 36*3f1979aaSAndroid Build Coastguard Workerendif() 37*3f1979aaSAndroid Build Coastguard Worker 38*3f1979aaSAndroid Build Coastguard Worker 39*3f1979aaSAndroid Build Coastguard Workerif (USE_DEBUG_ASAN) 40*3f1979aaSAndroid Build Coastguard Worker set(ASANLIB "asan") 41*3f1979aaSAndroid Build Coastguard Workerelse() 42*3f1979aaSAndroid Build Coastguard Worker set(ASANLIB "") 43*3f1979aaSAndroid Build Coastguard Workerendif() 44*3f1979aaSAndroid Build Coastguard Worker 45*3f1979aaSAndroid Build Coastguard Worker 46*3f1979aaSAndroid Build Coastguard Workerif (USE_BENCH_GREEN) 47*3f1979aaSAndroid Build Coastguard Worker if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/greenffts/CMakeLists.txt") 48*3f1979aaSAndroid Build Coastguard Worker message(STATUS "found subdir greenffts") 49*3f1979aaSAndroid Build Coastguard Worker set(PATH_GREEN "${CMAKE_CURRENT_LIST_DIR}/greenffts") 50*3f1979aaSAndroid Build Coastguard Worker add_subdirectory( "${PATH_GREEN}" ) 51*3f1979aaSAndroid Build Coastguard Worker else() 52*3f1979aaSAndroid Build Coastguard Worker message(WARNING "GreenFFT not found in subdir greenffts") 53*3f1979aaSAndroid Build Coastguard Worker endif() 54*3f1979aaSAndroid Build Coastguard Workerendif() 55*3f1979aaSAndroid Build Coastguard Worker 56*3f1979aaSAndroid Build Coastguard Workerif (USE_BENCH_KISS) 57*3f1979aaSAndroid Build Coastguard Worker # git submodule add https://github.com/hayguen/kissfft.git 58*3f1979aaSAndroid Build Coastguard Worker if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/kissfft/CMakeLists.txt") 59*3f1979aaSAndroid Build Coastguard Worker message(STATUS "found subdir kissfft") 60*3f1979aaSAndroid Build Coastguard Worker set(PATH_KISS "${CMAKE_CURRENT_LIST_DIR}/kissfft") 61*3f1979aaSAndroid Build Coastguard Worker add_subdirectory( "${PATH_KISS}" ) 62*3f1979aaSAndroid Build Coastguard Worker else() 63*3f1979aaSAndroid Build Coastguard Worker message(WARNING "KissFFT not found in subdir kissfft") 64*3f1979aaSAndroid Build Coastguard Worker endif() 65*3f1979aaSAndroid Build Coastguard Workerendif() 66*3f1979aaSAndroid Build Coastguard Worker 67*3f1979aaSAndroid Build Coastguard Workerif (USE_BENCH_POCKET) 68*3f1979aaSAndroid Build Coastguard Worker # git submodule add https://github.com/hayguen/pocketfft.git 69*3f1979aaSAndroid Build Coastguard Worker if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/pocketfft/pocketfft_double.c") 70*3f1979aaSAndroid Build Coastguard Worker message(STATUS "found subdir pocketfft") 71*3f1979aaSAndroid Build Coastguard Worker set(PATH_POCKET "${CMAKE_CURRENT_LIST_DIR}/pocketfft") 72*3f1979aaSAndroid Build Coastguard Worker add_subdirectory( "${PATH_POCKET}" ) 73*3f1979aaSAndroid Build Coastguard Worker else() 74*3f1979aaSAndroid Build Coastguard Worker message(WARNING "PocketFFT not found in subdir pocketfft") 75*3f1979aaSAndroid Build Coastguard Worker endif() 76*3f1979aaSAndroid Build Coastguard Workerendif() 77*3f1979aaSAndroid Build Coastguard Worker 78*3f1979aaSAndroid Build Coastguard Worker 79*3f1979aaSAndroid Build Coastguard Worker######################################################################## 80*3f1979aaSAndroid Build Coastguard Worker# select the release build type by default to get optimization flags 81*3f1979aaSAndroid Build Coastguard Worker######################################################################## 82*3f1979aaSAndroid Build Coastguard Workerif(NOT CMAKE_BUILD_TYPE) 83*3f1979aaSAndroid Build Coastguard Worker set(CMAKE_BUILD_TYPE "Release") 84*3f1979aaSAndroid Build Coastguard Worker message(STATUS "Build type not specified: defaulting to release.") 85*3f1979aaSAndroid Build Coastguard Workerendif(NOT CMAKE_BUILD_TYPE) 86*3f1979aaSAndroid Build Coastguard Worker 87*3f1979aaSAndroid Build Coastguard Workerif ( CMAKE_C_COMPILER_ID MATCHES "MSVC" ) 88*3f1979aaSAndroid Build Coastguard Worker # using Visual Studio C++ 89*3f1979aaSAndroid Build Coastguard Worker message(STATUS "INFO: detected MSVC: will not link math lib m") 90*3f1979aaSAndroid Build Coastguard Worker set(MATHLIB "") 91*3f1979aaSAndroid Build Coastguard Worker 92*3f1979aaSAndroid Build Coastguard Worker add_definitions("/D_CRT_SECURE_NO_WARNINGS") 93*3f1979aaSAndroid Build Coastguard Worker 94*3f1979aaSAndroid Build Coastguard Worker set(MSVC_DISABLED_WARNINGS_LIST 95*3f1979aaSAndroid Build Coastguard Worker "C4996" 96*3f1979aaSAndroid Build Coastguard Worker ) 97*3f1979aaSAndroid Build Coastguard Worker 98*3f1979aaSAndroid Build Coastguard Workerelse() 99*3f1979aaSAndroid Build Coastguard Worker if(DISABLE_LINK_WITH_M) 100*3f1979aaSAndroid Build Coastguard Worker else() 101*3f1979aaSAndroid Build Coastguard Worker message(STATUS "INFO: detected NO MSVC: ${CMAKE_C_COMPILER_ID}: will link math lib m") 102*3f1979aaSAndroid Build Coastguard Worker set(MATHLIB "m") 103*3f1979aaSAndroid Build Coastguard Worker endif() 104*3f1979aaSAndroid Build Coastguard Workerendif() 105*3f1979aaSAndroid Build Coastguard Worker 106*3f1979aaSAndroid Build Coastguard Workerset( SIMD_FLOAT_HDRS simd/pf_float.h simd/pf_sse1_float.h simd/pf_altivec_float.h simd/pf_neon_float.h simd/pf_scalar_float.h ) 107*3f1979aaSAndroid Build Coastguard Workerset( SIMD_DOUBLE_HDRS simd/pf_double.h simd/pf_avx_double.h simd/pf_scalar_double.h ) 108*3f1979aaSAndroid Build Coastguard Worker 109*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_FLOAT) 110*3f1979aaSAndroid Build Coastguard Worker set( FLOAT_SOURCES pffft.c pffft.h ${SIMD_FLOAT_HDRS} ) 111*3f1979aaSAndroid Build Coastguard Workerelse() 112*3f1979aaSAndroid Build Coastguard Worker set( FLOAT_SOURCES ) 113*3f1979aaSAndroid Build Coastguard Workerendif() 114*3f1979aaSAndroid Build Coastguard Worker 115*3f1979aaSAndroid Build Coastguard Worker 116*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_DOUBLE) 117*3f1979aaSAndroid Build Coastguard Worker set( DOUBLE_SOURCES pffft_double.c pffft_double.h ${SIMD_DOUBLE_HDRS} ) 118*3f1979aaSAndroid Build Coastguard Workerelse() 119*3f1979aaSAndroid Build Coastguard Worker set( DOUBLE_SOURCES ) 120*3f1979aaSAndroid Build Coastguard Workerendif() 121*3f1979aaSAndroid Build Coastguard Worker 122*3f1979aaSAndroid Build Coastguard Worker###################################################### 123*3f1979aaSAndroid Build Coastguard Worker 124*3f1979aaSAndroid Build Coastguard Workeradd_library(PFFFT STATIC ${FLOAT_SOURCES} ${DOUBLE_SOURCES} pffft_common.c pffft_priv_impl.h pffft.hpp ) 125*3f1979aaSAndroid Build Coastguard Workertarget_compile_definitions(PFFFT PRIVATE _USE_MATH_DEFINES) 126*3f1979aaSAndroid Build Coastguard Workerif (USE_SCALAR_VECT) 127*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(PFFFT PRIVATE PFFFT_SCALVEC_ENABLED=1) 128*3f1979aaSAndroid Build Coastguard Workerendif() 129*3f1979aaSAndroid Build Coastguard Workerif (USE_DEBUG_ASAN) 130*3f1979aaSAndroid Build Coastguard Worker target_compile_options(PFFFT PRIVATE "-fsanitize=address") 131*3f1979aaSAndroid Build Coastguard Workerendif() 132*3f1979aaSAndroid Build Coastguard Workerif (NOT USE_SIMD) 133*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(PFFFT PRIVATE PFFFT_SIMD_DISABLE=1) 134*3f1979aaSAndroid Build Coastguard Workerendif() 135*3f1979aaSAndroid Build Coastguard Workerif (USE_SIMD AND USE_SIMD_NEON) 136*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(PFFFT PRIVATE PFFFT_ENABLE_NEON=1) 137*3f1979aaSAndroid Build Coastguard Worker target_compile_options(PFFFT PRIVATE "-mfpu=neon") 138*3f1979aaSAndroid Build Coastguard Workerendif() 139*3f1979aaSAndroid Build Coastguard Workerif (USE_SIMD AND USE_TYPE_DOUBLE) 140*3f1979aaSAndroid Build Coastguard Worker if(WIN32) 141*3f1979aaSAndroid Build Coastguard Worker if(DISABLE_SIMD_AVX) 142*3f1979aaSAndroid Build Coastguard Worker set_property(SOURCE pffft_double.c PROPERTY COMPILE_FLAGS "/arch:SSE2") 143*3f1979aaSAndroid Build Coastguard Worker else() 144*3f1979aaSAndroid Build Coastguard Worker set_property(SOURCE pffft_double.c PROPERTY COMPILE_FLAGS "/arch:AVX") 145*3f1979aaSAndroid Build Coastguard Worker endif() 146*3f1979aaSAndroid Build Coastguard Worker else() 147*3f1979aaSAndroid Build Coastguard Worker set_property(SOURCE pffft_double.c PROPERTY COMPILE_FLAGS "-march=native") 148*3f1979aaSAndroid Build Coastguard Worker endif() 149*3f1979aaSAndroid Build Coastguard Worker if(DISABLE_SIMD_AVX) 150*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(PFFFT PRIVATE PFFFT_AVX_DISABLE=1) 151*3f1979aaSAndroid Build Coastguard Worker endif() 152*3f1979aaSAndroid Build Coastguard Workerendif() 153*3f1979aaSAndroid Build Coastguard Workertarget_link_libraries( PFFFT ${MATHLIB} ) 154*3f1979aaSAndroid Build Coastguard Workerset_property(TARGET PFFFT APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES 155*3f1979aaSAndroid Build Coastguard Worker $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> 156*3f1979aaSAndroid Build Coastguard Worker) 157*3f1979aaSAndroid Build Coastguard Worker 158*3f1979aaSAndroid Build Coastguard Worker###################################################### 159*3f1979aaSAndroid Build Coastguard Worker 160*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_FLOAT) 161*3f1979aaSAndroid Build Coastguard Worker 162*3f1979aaSAndroid Build Coastguard Worker add_library(PFDSP STATIC pf_mixer.cpp pf_mixer.h pf_carrier.cpp pf_carrier.h pf_cic.cpp pf_cic.h fmv.h ) 163*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(PFDSP PRIVATE _USE_MATH_DEFINES) 164*3f1979aaSAndroid Build Coastguard Worker if (USE_DEBUG_ASAN) 165*3f1979aaSAndroid Build Coastguard Worker target_compile_options(PFDSP PRIVATE "-fsanitize=address") 166*3f1979aaSAndroid Build Coastguard Worker endif() 167*3f1979aaSAndroid Build Coastguard Worker if (USE_SIMD AND USE_SIMD_NEON) 168*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(PFDSP PRIVATE PFFFT_ENABLE_NEON=1) 169*3f1979aaSAndroid Build Coastguard Worker target_compile_options(PFDSP PRIVATE "-march=armv7-a" "-mfpu=neon") 170*3f1979aaSAndroid Build Coastguard Worker endif() 171*3f1979aaSAndroid Build Coastguard Worker target_link_libraries( PFDSP ${MATHLIB} ) 172*3f1979aaSAndroid Build Coastguard Worker set_property(TARGET PFDSP APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES 173*3f1979aaSAndroid Build Coastguard Worker $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> 174*3f1979aaSAndroid Build Coastguard Worker ) 175*3f1979aaSAndroid Build Coastguard Workerendif() 176*3f1979aaSAndroid Build Coastguard Worker 177*3f1979aaSAndroid Build Coastguard Worker###################################################### 178*3f1979aaSAndroid Build Coastguard Worker 179*3f1979aaSAndroid Build Coastguard Workeradd_library(FFTPACK STATIC fftpack.c fftpack.h) 180*3f1979aaSAndroid Build Coastguard Workertarget_compile_definitions(FFTPACK PRIVATE _USE_MATH_DEFINES) 181*3f1979aaSAndroid Build Coastguard Workertarget_link_libraries( FFTPACK ${MATHLIB} ) 182*3f1979aaSAndroid Build Coastguard Workerset_property(TARGET FFTPACK APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES 183*3f1979aaSAndroid Build Coastguard Worker $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> 184*3f1979aaSAndroid Build Coastguard Worker) 185*3f1979aaSAndroid Build Coastguard Worker 186*3f1979aaSAndroid Build Coastguard Worker###################################################### 187*3f1979aaSAndroid Build Coastguard Worker 188*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_FLOAT) 189*3f1979aaSAndroid Build Coastguard Worker # only 'float' supported in PFFASTCONV 190*3f1979aaSAndroid Build Coastguard Worker add_library(PFFASTCONV STATIC pffastconv.c pffastconv.h pffft.h ) 191*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(PFFASTCONV PRIVATE _USE_MATH_DEFINES) 192*3f1979aaSAndroid Build Coastguard Worker if (USE_DEBUG_ASAN) 193*3f1979aaSAndroid Build Coastguard Worker target_compile_options(PFFASTCONV PRIVATE "-fsanitize=address") 194*3f1979aaSAndroid Build Coastguard Worker endif() 195*3f1979aaSAndroid Build Coastguard Worker target_link_libraries( PFFASTCONV PFFFT ${ASANLIB} ${MATHLIB} ) 196*3f1979aaSAndroid Build Coastguard Worker set_property(TARGET PFFASTCONV APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES 197*3f1979aaSAndroid Build Coastguard Worker $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> 198*3f1979aaSAndroid Build Coastguard Worker ) 199*3f1979aaSAndroid Build Coastguard Workerendif() 200*3f1979aaSAndroid Build Coastguard Worker 201*3f1979aaSAndroid Build Coastguard Worker####################################################### 202*3f1979aaSAndroid Build Coastguard Worker 203*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_FLOAT) 204*3f1979aaSAndroid Build Coastguard Worker add_executable( test_pffft_float test_pffft.c ) 205*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(test_pffft_float PRIVATE _USE_MATH_DEFINES) 206*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(test_pffft_float PRIVATE PFFFT_ENABLE_FLOAT) 207*3f1979aaSAndroid Build Coastguard Worker target_link_libraries( test_pffft_float PFFFT ${ASANLIB} ) 208*3f1979aaSAndroid Build Coastguard Workerendif() 209*3f1979aaSAndroid Build Coastguard Worker 210*3f1979aaSAndroid Build Coastguard Worker###################################################### 211*3f1979aaSAndroid Build Coastguard Worker 212*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_DOUBLE) 213*3f1979aaSAndroid Build Coastguard Worker add_executable( test_pffft_double test_pffft.c ) 214*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(test_pffft_double PRIVATE _USE_MATH_DEFINES) 215*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(test_pffft_double PRIVATE PFFFT_ENABLE_DOUBLE) 216*3f1979aaSAndroid Build Coastguard Worker target_link_libraries( test_pffft_double PFFFT ${ASANLIB} ) 217*3f1979aaSAndroid Build Coastguard Workerendif() 218*3f1979aaSAndroid Build Coastguard Worker 219*3f1979aaSAndroid Build Coastguard Worker###################################################### 220*3f1979aaSAndroid Build Coastguard Worker 221*3f1979aaSAndroid Build Coastguard Workeradd_executable( test_pffft_cpp test_pffft.cpp ) 222*3f1979aaSAndroid Build Coastguard Workertarget_compile_definitions(test_pffft_cpp PRIVATE _USE_MATH_DEFINES) 223*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_FLOAT) 224*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(test_pffft_cpp PRIVATE PFFFT_ENABLE_FLOAT) 225*3f1979aaSAndroid Build Coastguard Workerendif() 226*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_DOUBLE) 227*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(test_pffft_cpp PRIVATE PFFFT_ENABLE_DOUBLE) 228*3f1979aaSAndroid Build Coastguard Workerendif() 229*3f1979aaSAndroid Build Coastguard Workertarget_link_libraries( test_pffft_cpp PFFFT ${ASANLIB} ) 230*3f1979aaSAndroid Build Coastguard Worker 231*3f1979aaSAndroid Build Coastguard Worker###################################################### 232*3f1979aaSAndroid Build Coastguard Worker 233*3f1979aaSAndroid Build Coastguard Workeradd_executable( test_pffft_cpp_11 test_pffft.cpp ) 234*3f1979aaSAndroid Build Coastguard Workertarget_compile_definitions(test_pffft_cpp_11 PRIVATE _USE_MATH_DEFINES) 235*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_FLOAT) 236*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(test_pffft_cpp_11 PRIVATE PFFFT_ENABLE_FLOAT) 237*3f1979aaSAndroid Build Coastguard Workerendif() 238*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_DOUBLE) 239*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(test_pffft_cpp_11 PRIVATE PFFFT_ENABLE_DOUBLE) 240*3f1979aaSAndroid Build Coastguard Workerendif() 241*3f1979aaSAndroid Build Coastguard Workertarget_link_libraries( test_pffft_cpp_11 PFFFT ${ASANLIB} ) 242*3f1979aaSAndroid Build Coastguard Worker 243*3f1979aaSAndroid Build Coastguard Workerset_property(TARGET test_pffft_cpp_11 PROPERTY CXX_STANDARD 11) 244*3f1979aaSAndroid Build Coastguard Workerset_property(TARGET test_pffft_cpp_11 PROPERTY CXX_STANDARD_REQUIRED ON) 245*3f1979aaSAndroid Build Coastguard Worker 246*3f1979aaSAndroid Build Coastguard Worker###################################################### 247*3f1979aaSAndroid Build Coastguard Worker 248*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_FLOAT) 249*3f1979aaSAndroid Build Coastguard Worker add_executable(test_pffastconv test_pffastconv.c 250*3f1979aaSAndroid Build Coastguard Worker ${SIMD_FLOAT_HDRS} ${SIMD_DOUBLE_HDRS} 251*3f1979aaSAndroid Build Coastguard Worker ) 252*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(test_pffastconv PRIVATE _USE_MATH_DEFINES) 253*3f1979aaSAndroid Build Coastguard Worker if (USE_DEBUG_ASAN) 254*3f1979aaSAndroid Build Coastguard Worker target_compile_options(test_pffastconv PRIVATE "-fsanitize=address") 255*3f1979aaSAndroid Build Coastguard Worker endif() 256*3f1979aaSAndroid Build Coastguard Worker if (NOT USE_SIMD) 257*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(test_pffastconv PRIVATE PFFFT_SIMD_DISABLE=1) 258*3f1979aaSAndroid Build Coastguard Worker endif() 259*3f1979aaSAndroid Build Coastguard Worker if (USE_SIMD AND USE_SIMD_NEON) 260*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(test_pffastconv PRIVATE PFFFT_ENABLE_NEON=1) 261*3f1979aaSAndroid Build Coastguard Worker target_compile_options(test_pffastconv PRIVATE "-mfpu=neon") 262*3f1979aaSAndroid Build Coastguard Worker endif() 263*3f1979aaSAndroid Build Coastguard Worker target_link_libraries( test_pffastconv PFFASTCONV ${ASANLIB} ${MATHLIB} ) 264*3f1979aaSAndroid Build Coastguard Workerendif() 265*3f1979aaSAndroid Build Coastguard Worker 266*3f1979aaSAndroid Build Coastguard Worker###################################################### 267*3f1979aaSAndroid Build Coastguard Worker 268*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_FLOAT) 269*3f1979aaSAndroid Build Coastguard Worker add_executable(bench_pffft_float bench_pffft.c pffft.h fftpack.h) 270*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(bench_pffft_float PRIVATE _USE_MATH_DEFINES) 271*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(bench_pffft_float PRIVATE PFFFT_ENABLE_FLOAT) 272*3f1979aaSAndroid Build Coastguard Worker 273*3f1979aaSAndroid Build Coastguard Worker target_link_libraries( bench_pffft_float PFFFT FFTPACK ${ASANLIB} ) 274*3f1979aaSAndroid Build Coastguard Worker 275*3f1979aaSAndroid Build Coastguard Worker if (USE_BENCH_FFTW) 276*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(bench_pffft_float PRIVATE HAVE_FFTW=1) 277*3f1979aaSAndroid Build Coastguard Worker target_link_libraries(bench_pffft_float fftw3f) 278*3f1979aaSAndroid Build Coastguard Worker endif() 279*3f1979aaSAndroid Build Coastguard Worker 280*3f1979aaSAndroid Build Coastguard Worker if (PATH_GREEN AND USE_BENCH_GREEN) 281*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(bench_pffft_float PRIVATE HAVE_GREEN_FFTS=1) 282*3f1979aaSAndroid Build Coastguard Worker target_link_libraries(bench_pffft_float GreenFFT) 283*3f1979aaSAndroid Build Coastguard Worker endif() 284*3f1979aaSAndroid Build Coastguard Worker 285*3f1979aaSAndroid Build Coastguard Worker if (PATH_KISS AND USE_BENCH_KISS) 286*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(bench_pffft_float PRIVATE HAVE_KISS_FFT=1) 287*3f1979aaSAndroid Build Coastguard Worker target_link_libraries(bench_pffft_float KissFFT) 288*3f1979aaSAndroid Build Coastguard Worker endif() 289*3f1979aaSAndroid Build Coastguard Worker 290*3f1979aaSAndroid Build Coastguard Worker if (PATH_POCKET AND USE_BENCH_POCKET) 291*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(bench_pffft_float PRIVATE HAVE_POCKET_FFT=1) 292*3f1979aaSAndroid Build Coastguard Worker target_link_libraries(bench_pffft_float PocketFFT) 293*3f1979aaSAndroid Build Coastguard Worker endif() 294*3f1979aaSAndroid Build Coastguard Worker 295*3f1979aaSAndroid Build Coastguard Workerendif() 296*3f1979aaSAndroid Build Coastguard Worker 297*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_DOUBLE) 298*3f1979aaSAndroid Build Coastguard Worker add_executable(bench_pffft_double bench_pffft.c pffft.h fftpack.h) 299*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(bench_pffft_double PRIVATE _USE_MATH_DEFINES) 300*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(bench_pffft_double PRIVATE PFFFT_ENABLE_DOUBLE) 301*3f1979aaSAndroid Build Coastguard Worker target_link_libraries( bench_pffft_double PFFFT ${ASANLIB} ) 302*3f1979aaSAndroid Build Coastguard Worker 303*3f1979aaSAndroid Build Coastguard Worker if (USE_BENCH_FFTW) 304*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(bench_pffft_double PRIVATE HAVE_FFTW=1) 305*3f1979aaSAndroid Build Coastguard Worker target_link_libraries(bench_pffft_double fftw3) 306*3f1979aaSAndroid Build Coastguard Worker endif() 307*3f1979aaSAndroid Build Coastguard Worker 308*3f1979aaSAndroid Build Coastguard Worker if (PATH_POCKET AND USE_BENCH_POCKET) 309*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(bench_pffft_double PRIVATE HAVE_POCKET_FFT=1) 310*3f1979aaSAndroid Build Coastguard Worker target_link_libraries(bench_pffft_double PocketFFT) 311*3f1979aaSAndroid Build Coastguard Worker endif() 312*3f1979aaSAndroid Build Coastguard Workerendif() 313*3f1979aaSAndroid Build Coastguard Worker 314*3f1979aaSAndroid Build Coastguard Worker###################################################### 315*3f1979aaSAndroid Build Coastguard Worker 316*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_FLOAT) 317*3f1979aaSAndroid Build Coastguard Worker add_executable(bench_pf_mixer_float bench_mixers.c) 318*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(bench_pf_mixer_float PRIVATE _USE_MATH_DEFINES) 319*3f1979aaSAndroid Build Coastguard Worker target_compile_definitions(bench_pf_mixer_float PRIVATE PFFFT_ENABLE_FLOAT) 320*3f1979aaSAndroid Build Coastguard Worker 321*3f1979aaSAndroid Build Coastguard Worker target_link_libraries( bench_pf_mixer_float PFDSP ${ASANLIB} ) 322*3f1979aaSAndroid Build Coastguard Worker 323*3f1979aaSAndroid Build Coastguard Workerendif() 324*3f1979aaSAndroid Build Coastguard Worker 325*3f1979aaSAndroid Build Coastguard Worker###################################################### 326*3f1979aaSAndroid Build Coastguard Worker 327*3f1979aaSAndroid Build Coastguard Workerenable_testing() 328*3f1979aaSAndroid Build Coastguard Worker 329*3f1979aaSAndroid Build Coastguard Workerif (USE_TYPE_FLOAT) 330*3f1979aaSAndroid Build Coastguard Worker 331*3f1979aaSAndroid Build Coastguard Worker add_test(NAME bench_pffft_pow2 332*3f1979aaSAndroid Build Coastguard Worker COMMAND "${CMAKE_CURRENT_BINARY_DIR}/bench_pffft_float" 333*3f1979aaSAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 334*3f1979aaSAndroid Build Coastguard Worker ) 335*3f1979aaSAndroid Build Coastguard Worker 336*3f1979aaSAndroid Build Coastguard Worker add_test(NAME bench_pffft_non2 337*3f1979aaSAndroid Build Coastguard Worker COMMAND "${CMAKE_CURRENT_BINARY_DIR}/bench_pffft_float" "--non-pow2" 338*3f1979aaSAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 339*3f1979aaSAndroid Build Coastguard Worker ) 340*3f1979aaSAndroid Build Coastguard Worker 341*3f1979aaSAndroid Build Coastguard Worker add_test(NAME bench_plots 342*3f1979aaSAndroid Build Coastguard Worker COMMAND bash "-c" "${CMAKE_CURRENT_SOURCE_DIR}/plots.sh" 343*3f1979aaSAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 344*3f1979aaSAndroid Build Coastguard Worker ) 345*3f1979aaSAndroid Build Coastguard Worker 346*3f1979aaSAndroid Build Coastguard Worker add_test(NAME test_pfconv_lens_symetric 347*3f1979aaSAndroid Build Coastguard Worker COMMAND "${CMAKE_CURRENT_BINARY_DIR}/test_pffastconv" "--no-bench" "--quick" "--sym" 348*3f1979aaSAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 349*3f1979aaSAndroid Build Coastguard Worker ) 350*3f1979aaSAndroid Build Coastguard Worker 351*3f1979aaSAndroid Build Coastguard Worker add_test(NAME test_pfconv_lens_non_sym 352*3f1979aaSAndroid Build Coastguard Worker COMMAND "${CMAKE_CURRENT_BINARY_DIR}/test_pffastconv" "--no-bench" "--quick" 353*3f1979aaSAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 354*3f1979aaSAndroid Build Coastguard Worker ) 355*3f1979aaSAndroid Build Coastguard Worker 356*3f1979aaSAndroid Build Coastguard Worker add_test(NAME bench_pfconv_symetric 357*3f1979aaSAndroid Build Coastguard Worker COMMAND "${CMAKE_CURRENT_BINARY_DIR}/test_pffastconv" "--no-len" "--sym" 358*3f1979aaSAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 359*3f1979aaSAndroid Build Coastguard Worker ) 360*3f1979aaSAndroid Build Coastguard Worker 361*3f1979aaSAndroid Build Coastguard Worker add_test(NAME bench_pfconv_non_sym 362*3f1979aaSAndroid Build Coastguard Worker COMMAND "${CMAKE_CURRENT_BINARY_DIR}/test_pffastconv" "--no-len" 363*3f1979aaSAndroid Build Coastguard Worker WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} 364*3f1979aaSAndroid Build Coastguard Worker ) 365*3f1979aaSAndroid Build Coastguard Worker 366*3f1979aaSAndroid Build Coastguard Workerendif() 367*3f1979aaSAndroid Build Coastguard Worker 368