@@ -25,6 +25,7 @@ option (ENABLE_SSE "Compile with SSE instruction set support" OFF)
2525option (ENABLE_SSE2 "Compile with SSE2 instruction set support" OFF )
2626option (ENABLE_AVX "Compile with AVX instruction set support" OFF )
2727option (ENABLE_AVX2 "Compile with AVX2 instruction set support" OFF )
28+ option (ENABLE_NEON "Compile with NEON instruction set support" OFF )
2829
2930option (DISABLE_FORTRAN "Disable Fortran wrapper routines" OFF )
3031
@@ -192,9 +193,20 @@ if (ENABLE_AVX2)
192193 endforeach ()
193194endif ()
194195
196+ if (ENABLE_NEON)
197+ if (ENABLE_LONG_DOUBLE)
198+ message (FATAL_ERROR "NEON only works in single or double precision, please disable long double support" )
199+ endif ()
200+ if (ENABLE_QUAD_PRECISION)
201+ message (FATAL_ERROR "NEON only works in single or double precision, please disable quad precision support" )
202+ endif ()
203+ set (HAVE_NEON TRUE )
204+ endif ()
205+
195206if (HAVE_SSE2 OR HAVE_AVX)
196207 set (HAVE_SIMD TRUE )
197208endif ()
209+
198210file (GLOB fftw_api_SOURCE api/*.c api/*.h)
199211file (GLOB fftw_dft_SOURCE dft/*.c dft/*.h)
200212file (GLOB fftw_dft_scalar_SOURCE dft/scalar/*.c dft/scalar/*.h)
@@ -204,6 +216,7 @@ file(GLOB fftw_dft_simd_SOURCE dft/simd/*.c dft/simd
204216file (GLOB fftw_dft_simd_sse2_SOURCE dft/simd/sse2/*.c dft/simd/sse2/*.h)
205217file (GLOB fftw_dft_simd_avx_SOURCE dft/simd/avx/*.c dft/simd/avx/*.h)
206218file (GLOB fftw_dft_simd_avx2_SOURCE dft/simd/avx2/*.c dft/simd/avx2/*.h dft/simd/avx2-128/*.c dft/simd/avx2-128/*.h)
219+ file (GLOB fftw_dft_simd_neon_SOURCE dft/simd/neon/*.c dft/simd/neon/*.h)
207220file (GLOB fftw_kernel_SOURCE kernel/*.c kernel/*.h)
208221file (GLOB fftw_rdft_SOURCE rdft/*.c rdft/*.h)
209222file (GLOB fftw_rdft_scalar_SOURCE rdft/scalar/*.c rdft/scalar/*.h)
@@ -219,6 +232,7 @@ file(GLOB fftw_rdft_simd_SOURCE rdft/simd/*.c rdft/sim
219232file (GLOB fftw_rdft_simd_sse2_SOURCE rdft/simd/sse2/*.c rdft/simd/sse2/*.h)
220233file (GLOB fftw_rdft_simd_avx_SOURCE rdft/simd/avx/*.c rdft/simd/avx/*.h)
221234file (GLOB fftw_rdft_simd_avx2_SOURCE rdft/simd/avx2/*.c rdft/simd/avx2/*.h rdft/simd/avx2-128/*.c rdft/simd/avx2-128/*.h)
235+ file (GLOB fftw_rdft_simd_neon_SOURCE rdft/simd/neon/*.c rdft/simd/neon/*.h)
222236
223237file (GLOB fftw_reodft_SOURCE reodft/*.c reodft/*.h)
224238file (GLOB fftw_simd_support_SOURCE simd-support/*.c simd-support/*.h)
@@ -279,6 +293,10 @@ if (HAVE_AVX2)
279293 list (APPEND SOURCEFILES ${fftw_dft_simd_avx2_SOURCE} ${fftw_rdft_simd_avx2_SOURCE} )
280294endif ()
281295
296+ if (HAVE_NEON)
297+ list (APPEND SOURCEFILES ${fftw_dft_simd_neon_SOURCE} ${fftw_rdft_simd_neon_SOURCE} )
298+ endif ()
299+
282300set (FFTW_VERSION 3.3.10)
283301
284302set (PREC_SUFFIX)
@@ -358,9 +376,9 @@ endif ()
358376foreach (subtarget ${subtargets} )
359377 set_target_properties (${subtarget} PROPERTIES SOVERSION 3.6.9 VERSION 3)
360378 install (TARGETS ${subtarget}
361- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
362- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
363- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} )
379+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
380+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
381+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} )
364382endforeach ()
365383install (TARGETS ${fftw3_lib}
366384 EXPORT FFTW3LibraryDepends
@@ -381,7 +399,6 @@ if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/api/fftw3.f03.in)
381399endif ()
382400
383401if (BUILD_TESTS)
384-
385402 add_executable (bench ${fftw_libbench2_SOURCE} tests/bench.c tests/hook.c tests/fftw-bench.c)
386403
387404 if (ENABLE_THREADS AND NOT WITH_COMBINED_THREADS)
@@ -390,18 +407,15 @@ if (BUILD_TESTS)
390407 target_link_libraries (bench ${fftw3_lib} )
391408 endif ()
392409
393-
394410 enable_testing ()
395411
396412 if (Threads_FOUND)
397-
398413 macro (fftw_add_test problem)
399414 add_test (NAME ${problem} COMMAND bench -s ${problem} )
400415 endmacro ()
401416
402417 fftw_add_test (32x64)
403418 fftw_add_test (ib256)
404-
405419 endif ()
406420endif ()
407421
@@ -413,22 +427,22 @@ set (includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
413427set (VERSION ${FFTW_VERSION} )
414428configure_file (fftw.pc.in fftw3${PREC_SUFFIX} .pc @ONLY)
415429install (FILES
416- ${CMAKE_CURRENT_BINARY_DIR} /fftw3${PREC_SUFFIX} .pc
417- DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig
418- COMPONENT Development)
430+ ${CMAKE_CURRENT_BINARY_DIR} /fftw3${PREC_SUFFIX} .pc
431+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig
432+ COMPONENT Development)
419433
420434# cmake file
421435set (FFTW3_LIBRARIES "FFTW3::${fftw3_lib} " )
422436configure_file (FFTW3Config.cmake.in FFTW3${PREC_SUFFIX} Config.cmake @ONLY)
423437configure_file (FFTW3ConfigVersion.cmake.in FFTW3${PREC_SUFFIX} ConfigVersion.cmake @ONLY)
424438install (FILES
425- ${CMAKE_CURRENT_BINARY_DIR} /FFTW3${PREC_SUFFIX} Config.cmake
426- ${CMAKE_CURRENT_BINARY_DIR} /FFTW3${PREC_SUFFIX} ConfigVersion.cmake
427- DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/fftw3${PREC_SUFFIX}
428- COMPONENT Development)
439+ ${CMAKE_CURRENT_BINARY_DIR} /FFTW3${PREC_SUFFIX} Config.cmake
440+ ${CMAKE_CURRENT_BINARY_DIR} /FFTW3${PREC_SUFFIX} ConfigVersion.cmake
441+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/fftw3${PREC_SUFFIX}
442+ COMPONENT Development)
429443
430444export (TARGETS ${fftw3_lib} NAMESPACE FFTW3:: FILE ${PROJECT_BINARY_DIR} /FFTW3LibraryDepends.cmake)
431445install (EXPORT FFTW3LibraryDepends
432- NAMESPACE FFTW3::
433- DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/fftw3${PREC_SUFFIX}
434- COMPONENT Development)
446+ NAMESPACE FFTW3::
447+ DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/fftw3${PREC_SUFFIX}
448+ COMPONENT Development)
0 commit comments