xref: /aosp_15_r20/external/pffft/CMakeLists.txt (revision 3f1979aa0d7ad34fcf3763de7b7b8f8cd67e5bdd)
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