Skip to content

Commit 632233e

Browse files
committed
CMake: Added ARM Neon support
1 parent 31e3451 commit 632233e

File tree

2 files changed

+32
-18
lines changed

2 files changed

+32
-18
lines changed

CMakeLists.txt

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ option (ENABLE_SSE "Compile with SSE instruction set support" OFF)
2525
option (ENABLE_SSE2 "Compile with SSE2 instruction set support" OFF)
2626
option (ENABLE_AVX "Compile with AVX instruction set support" OFF)
2727
option (ENABLE_AVX2 "Compile with AVX2 instruction set support" OFF)
28+
option (ENABLE_NEON "Compile with NEON instruction set support" OFF)
2829

2930
option (DISABLE_FORTRAN "Disable Fortran wrapper routines" OFF)
3031

@@ -192,9 +193,20 @@ if (ENABLE_AVX2)
192193
endforeach ()
193194
endif ()
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+
195206
if (HAVE_SSE2 OR HAVE_AVX)
196207
set (HAVE_SIMD TRUE)
197208
endif ()
209+
198210
file(GLOB fftw_api_SOURCE api/*.c api/*.h)
199211
file(GLOB fftw_dft_SOURCE dft/*.c dft/*.h)
200212
file(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
204216
file(GLOB fftw_dft_simd_sse2_SOURCE dft/simd/sse2/*.c dft/simd/sse2/*.h)
205217
file(GLOB fftw_dft_simd_avx_SOURCE dft/simd/avx/*.c dft/simd/avx/*.h)
206218
file(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)
207220
file(GLOB fftw_kernel_SOURCE kernel/*.c kernel/*.h)
208221
file(GLOB fftw_rdft_SOURCE rdft/*.c rdft/*.h)
209222
file(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
219232
file(GLOB fftw_rdft_simd_sse2_SOURCE rdft/simd/sse2/*.c rdft/simd/sse2/*.h)
220233
file(GLOB fftw_rdft_simd_avx_SOURCE rdft/simd/avx/*.c rdft/simd/avx/*.h)
221234
file(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

223237
file(GLOB fftw_reodft_SOURCE reodft/*.c reodft/*.h)
224238
file(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})
280294
endif ()
281295

296+
if (HAVE_NEON)
297+
list (APPEND SOURCEFILES ${fftw_dft_simd_neon_SOURCE} ${fftw_rdft_simd_neon_SOURCE})
298+
endif ()
299+
282300
set (FFTW_VERSION 3.3.10)
283301

284302
set (PREC_SUFFIX)
@@ -358,9 +376,9 @@ endif ()
358376
foreach(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})
364382
endforeach ()
365383
install(TARGETS ${fftw3_lib}
366384
EXPORT FFTW3LibraryDepends
@@ -381,7 +399,6 @@ if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/api/fftw3.f03.in)
381399
endif ()
382400

383401
if (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 ()
406420
endif ()
407421

@@ -413,22 +427,22 @@ set (includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
413427
set (VERSION ${FFTW_VERSION})
414428
configure_file (fftw.pc.in fftw3${PREC_SUFFIX}.pc @ONLY)
415429
install (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
421435
set (FFTW3_LIBRARIES "FFTW3::${fftw3_lib}")
422436
configure_file (FFTW3Config.cmake.in FFTW3${PREC_SUFFIX}Config.cmake @ONLY)
423437
configure_file (FFTW3ConfigVersion.cmake.in FFTW3${PREC_SUFFIX}ConfigVersion.cmake @ONLY)
424438
install (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

430444
export (TARGETS ${fftw3_lib} NAMESPACE FFTW3:: FILE ${PROJECT_BINARY_DIR}/FFTW3LibraryDepends.cmake)
431445
install(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)

cmake.config.h.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@
200200
/* #undef HAVE_MPI */
201201

202202
/* Define to enable ARM NEON optimizations. */
203-
/* #undef HAVE_NEON */
203+
#cmakedefine HAVE_NEON 1
204204

205205
/* Define if OpenMP is enabled */
206206
#cmakedefine HAVE_OPENMP

0 commit comments

Comments
 (0)