@@ -17,9 +17,10 @@ option (ENABLE_OPENMP "Use OpenMP for multithreading" OFF)
1717option (ENABLE_THREADS "Use pthread for multithreading" OFF )
1818option (WITH_COMBINED_THREADS "Merge thread library" OFF )
1919
20- option (ENABLE_FLOAT "single-precision" OFF )
21- option (ENABLE_LONG_DOUBLE "long-double precision" OFF )
22- option (ENABLE_QUAD_PRECISION "quadruple-precision" OFF )
20+ option (ENABLE_FLOAT "Build the single precision library" OFF )
21+ option (ENABLE_DOUBLE "Build the double precision library" ON )
22+ option (ENABLE_LONG_DOUBLE "Build the long double precision library" OFF )
23+ option (ENABLE_QUAD_PRECISION "Build the quadruple precision library" OFF )
2324
2425option (ENABLE_SSE "Compile with SSE instruction set support" OFF )
2526option (ENABLE_SSE2 "Compile with SSE2 instruction set support" OFF )
@@ -299,92 +300,132 @@ endif ()
299300
300301set (FFTW_VERSION 3.3.10)
301302
302- set (PREC_SUFFIX)
303- if (ENABLE_FLOAT)
304- set (FFTW_SINGLE TRUE )
305- set (BENCHFFT_SINGLE TRUE )
306- set (PREC_SUFFIX f)
307- endif ()
303+ set (PRECISIONS SINGLE DOUBLE LDOUBLE QUAD)
304+ foreach (PRECISION ${PRECISIONS} )
305+ # Initialize all parameters to false:
306+ foreach (TMPPRECISION ${PRECISIONS} )
307+ set (FFTW_${TMPPRECISION} FALSE )
308+ set (BENCHFFT_${TMPPRECISION} FALSE )
309+ endforeach ()
308310
309- if (ENABLE_LONG_DOUBLE)
310- set (FFTW_LDOUBLE TRUE )
311- set (BENCHFFT_LDOUBLE TRUE )
312- set (PREC_SUFFIX l)
313- endif ()
311+ if ("${PRECISION} " STREQUAL "SINGLE" )
312+ if (NOT "${ENABLE_FLOAT} " )
313+ continue ()
314+ endif ()
315+ set (PREC_SUFFIX f)
316+ elseif ("${PRECISION} " STREQUAL "DOUBLE" )
317+ if (NOT "${ENABLE_DOUBLE} " )
318+ continue ()
319+ endif ()
320+ set (PREC_SUFFIX)
321+ elseif ("${PRECISION} " STREQUAL "LDOUBLE" )
322+ if (NOT "${ENABLE_LONG_DOUBLE} " )
323+ continue ()
324+ endif ()
325+ set (PREC_SUFFIX l)
326+ elseif ("${PRECISION} " STREQUAL "QUAD" )
327+ if (NOT "${ENABLE_QUAD_PRECISION} " )
328+ continue ()
329+ endif ()
330+ set (PREC_SUFFIX q)
331+ endif ()
314332
315- if (ENABLE_QUAD_PRECISION)
316- set (FFTW_QUAD TRUE )
317- set (BENCHFFT_QUAD TRUE )
318- set (PREC_SUFFIX q)
319- endif ()
320- set (fftw3_lib fftw3${PREC_SUFFIX} )
333+ # Enable only one precision per iteration:
334+ set (FFTW_${PRECISION} TRUE )
335+ set (BENCHFFT_${PRECISION} TRUE )
321336
322- configure_file (cmake.config.h.in config.h @ONLY)
323- include_directories (${CMAKE_CURRENT_BINARY_DIR} )
324337
325- if (BUILD_SHARED_LIBS )
326- add_definitions (-DFFTW_DLL)
327- endif ()
328338
329- add_library (${fftw3_lib} ${SOURCEFILES} )
330- target_include_directories (${fftw3_lib} INTERFACE $<INSTALL_INTERFACE:include >)
331- if (MSVC AND NOT (CMAKE_C_COMPILER_ID STREQUAL "Intel" ))
332- target_compile_definitions (${fftw3_lib} PRIVATE /bigobj)
333- endif ()
334- if (HAVE_SSE)
335- target_compile_options (${fftw3_lib} PRIVATE ${SSE_FLAG} )
336- endif ()
337- if (HAVE_SSE2)
338- target_compile_options (${fftw3_lib} PRIVATE ${SSE2_FLAG} )
339- endif ()
340- if (HAVE_AVX)
341- target_compile_options (${fftw3_lib} PRIVATE ${AVX_FLAG} )
342- endif ()
343- if (HAVE_AVX2)
344- target_compile_options (${fftw3_lib} PRIVATE ${AVX2_FLAG} )
345- endif ()
346- if (HAVE_FMA)
347- target_compile_options (${fftw3_lib} PRIVATE ${FMA_FLAG} )
348- endif ()
349- if (HAVE_LIBM)
350- target_link_libraries (${fftw3_lib} m)
351- endif ()
339+ set (fftw3_lib fftw3${PREC_SUFFIX} )
340+ add_library (${fftw3_lib} ${SOURCEFILES} )
341+ list (APPEND FFTW3_LIBRARIES "${fftw3_lib} " )
352342
353- set (subtargets ${fftw3_lib} )
343+ configure_file (cmake.config.h.in "${PRECISION} /config.h" @ONLY)
344+ target_include_directories (${fftw3_lib} PRIVATE "${CMAKE_CURRENT_BINARY_DIR} /${PRECISION} " )
354345
355- if (Threads_FOUND)
356- if (WITH_COMBINED_THREADS)
357- target_link_libraries (${fftw3_lib} ${CMAKE_THREAD_LIBS_INIT} )
358- else ()
359- add_library (${fftw3_lib} _threads ${fftw_threads_SOURCE} )
360- target_include_directories (${fftw3_lib} _threads INTERFACE $<INSTALL_INTERFACE:include >)
361- target_link_libraries (${fftw3_lib} _threads ${fftw3_lib} )
362- target_link_libraries (${fftw3_lib} _threads ${CMAKE_THREAD_LIBS_INIT} )
363- list (APPEND subtargets ${fftw3_lib} _threads)
346+ target_include_directories (${fftw3_lib} INTERFACE $<INSTALL_INTERFACE:include >)
347+
348+ if (BUILD_SHARED_LIBS )
349+ target_compile_definitions (${fftw3_lib} PRIVATE -DFFTW_DLL)
364350 endif ()
365- endif ()
366351
367- if (OPENMP_FOUND)
368- add_library (${fftw3_lib} _omp ${fftw_omp_SOURCE} )
369- target_include_directories (${fftw3_lib} _omp INTERFACE $<INSTALL_INTERFACE:include >)
370- target_link_libraries (${fftw3_lib} _omp ${fftw3_lib} )
371- target_link_libraries (${fftw3_lib} _omp ${CMAKE_THREAD_LIBS_INIT} )
372- list (APPEND subtargets ${fftw3_lib} _omp)
373- target_compile_options (${fftw3_lib} _omp PRIVATE ${OpenMP_C_FLAGS} )
374- endif ()
352+ if (MSVC AND NOT (CMAKE_C_COMPILER_ID STREQUAL "Intel" ))
353+ target_compile_definitions (${fftw3_lib} PRIVATE /bigobj)
354+ endif ()
355+ if (HAVE_SSE)
356+ target_compile_options (${fftw3_lib} PRIVATE ${SSE_FLAG} )
357+ endif ()
358+ if (HAVE_SSE2)
359+ target_compile_options (${fftw3_lib} PRIVATE ${SSE2_FLAG} )
360+ endif ()
361+ if (HAVE_AVX)
362+ target_compile_options (${fftw3_lib} PRIVATE ${AVX_FLAG} )
363+ endif ()
364+ if (HAVE_AVX2)
365+ target_compile_options (${fftw3_lib} PRIVATE ${AVX2_FLAG} )
366+ endif ()
367+ if (HAVE_FMA)
368+ target_compile_options (${fftw3_lib} PRIVATE ${FMA_FLAG} )
369+ endif ()
370+ if (HAVE_LIBM)
371+ target_link_libraries (${fftw3_lib} m)
372+ endif ()
373+
374+ set (subtargets ${fftw3_lib} )
375+
376+ if (Threads_FOUND)
377+ if (WITH_COMBINED_THREADS)
378+ target_link_libraries (${fftw3_lib} ${CMAKE_THREAD_LIBS_INIT} )
379+ else ()
380+ add_library (${fftw3_lib} _threads ${fftw_threads_SOURCE} )
381+ target_include_directories (${fftw3_lib} _threads PRIVATE "${CMAKE_CURRENT_BINARY_DIR} /${PRECISION} " )
382+ target_include_directories (${fftw3_lib} _threads INTERFACE $<INSTALL_INTERFACE:include >)
383+ target_link_libraries (${fftw3_lib} _threads ${fftw3_lib} )
384+ target_link_libraries (${fftw3_lib} _threads ${CMAKE_THREAD_LIBS_INIT} )
385+ list (APPEND subtargets ${fftw3_lib} _threads)
386+ endif ()
387+ endif ()
388+
389+ if (OPENMP_FOUND)
390+ add_library (${fftw3_lib} _omp ${fftw_omp_SOURCE} )
391+ target_include_directories (${fftw3_lib} _omp PRIVATE "${CMAKE_CURRENT_BINARY_DIR} /${PRECISION} " )
392+ target_include_directories (${fftw3_lib} _omp INTERFACE $<INSTALL_INTERFACE:include >)
393+ target_link_libraries (${fftw3_lib} _omp ${fftw3_lib} )
394+ target_link_libraries (${fftw3_lib} _omp ${CMAKE_THREAD_LIBS_INIT} )
395+ list (APPEND subtargets ${fftw3_lib} _omp)
396+ target_compile_options (${fftw3_lib} _omp PRIVATE ${OpenMP_C_FLAGS} )
397+ endif ()
398+
399+ foreach (subtarget ${subtargets} )
400+ set_target_properties (${subtarget} PROPERTIES SOVERSION 3.6.9 VERSION 3)
401+ install (TARGETS ${subtarget}
402+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
403+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
404+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} )
405+ endforeach ()
406+
407+ if (BUILD_TESTS)
408+ add_executable (bench${PREC_SUFFIX} ${fftw_libbench2_SOURCE} tests/bench.c tests/hook.c tests/fftw-bench.c)
409+ target_include_directories (bench${PREC_SUFFIX} PRIVATE "${CMAKE_CURRENT_BINARY_DIR} /${PRECISION} " )
410+
411+ if (ENABLE_THREADS AND NOT WITH_COMBINED_THREADS)
412+ target_link_libraries (bench${PREC_SUFFIX} ${fftw3_lib} _threads)
413+ else ()
414+ target_link_libraries (bench${PREC_SUFFIX} ${fftw3_lib} )
415+ endif ()
375416
376- foreach (subtarget ${subtargets} )
377- set_target_properties (${subtarget} PROPERTIES SOVERSION 3.6.9 VERSION 3)
378- install (TARGETS ${subtarget}
379- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
380- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
381- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} )
417+ enable_testing ()
418+
419+ if (Threads_FOUND)
420+ macro (fftw_add_test problem)
421+ add_test (NAME ${problem}${PREC_SUFFIX} COMMAND bench${PREC_SUFFIX} -s ${problem} )
422+ endmacro ()
423+
424+ fftw_add_test (32x64)
425+ fftw_add_test (ib256)
426+ endif ()
427+ endif ()
382428endforeach ()
383- install (TARGETS ${fftw3_lib}
384- EXPORT FFTW3LibraryDepends
385- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
386- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
387- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} )
388429
389430install (FILES api/fftw3.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
390431if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR} /api/fftw3.f)
@@ -398,26 +439,11 @@ if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/api/fftw3.f03.in)
398439 install (FILES ${CMAKE_CURRENT_BINARY_DIR} /fftw3.f03 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
399440endif ()
400441
401- if (BUILD_TESTS)
402- add_executable (bench ${fftw_libbench2_SOURCE} tests/bench.c tests/hook.c tests/fftw-bench.c)
403-
404- if (ENABLE_THREADS AND NOT WITH_COMBINED_THREADS)
405- target_link_libraries (bench ${fftw3_lib} _threads)
406- else ()
407- target_link_libraries (bench ${fftw3_lib} )
408- endif ()
409-
410- enable_testing ()
411-
412- if (Threads_FOUND)
413- macro (fftw_add_test problem)
414- add_test (NAME ${problem} COMMAND bench -s ${problem} )
415- endmacro ()
416-
417- fftw_add_test (32x64)
418- fftw_add_test (ib256)
419- endif ()
420- endif ()
442+ install (TARGETS ${FFTW3_LIBRARIES}
443+ EXPORT FFTW3LibraryDepends
444+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
445+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
446+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} )
421447
422448# pkgconfig file
423449set (prefix ${CMAKE_INSTALL_PREFIX} )
@@ -431,18 +457,19 @@ install (FILES
431457 DESTINATION ${CMAKE_INSTALL_LIBDIR} /pkgconfig
432458 COMPONENT Development)
433459
434- # cmake file
435- set (FFTW3_LIBRARIES "FFTW3::${fftw3_lib} " )
436- configure_file (FFTW3Config.cmake.in FFTW3${PREC_SUFFIX} Config.cmake @ONLY)
437- configure_file (FFTW3ConfigVersion.cmake.in FFTW3${PREC_SUFFIX} ConfigVersion.cmake @ONLY)
460+ # cmake configuration file
461+ configure_file (FFTW3Config.cmake.in FFTW3Config.cmake @ONLY)
462+ configure_file (FFTW3ConfigVersion.cmake.in FFTW3ConfigVersion.cmake @ONLY)
438463install (FILES
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}
464+ " ${CMAKE_CURRENT_BINARY_DIR} /FFTW3Config .cmake"
465+ " ${CMAKE_CURRENT_BINARY_DIR} /FFTW3ConfigVersion .cmake"
466+ DESTINATION " ${CMAKE_INSTALL_LIBDIR} /cmake/fftw3"
442467 COMPONENT Development)
443468
444- export (TARGETS ${fftw3_lib} NAMESPACE FFTW3:: FILE ${PROJECT_BINARY_DIR} /FFTW3LibraryDepends.cmake)
469+ export (TARGETS ${FFTW3_LIBRARIES}
470+ NAMESPACE FFTW3::
471+ FILE "${PROJECT_BINARY_DIR} /FFTW3LibraryDepends.cmake" )
445472install (EXPORT FFTW3LibraryDepends
446473 NAMESPACE FFTW3::
447- DESTINATION ${CMAKE_INSTALL_LIBDIR} /cmake/fftw3${PREC_SUFFIX}
474+ DESTINATION " ${CMAKE_INSTALL_LIBDIR} /cmake/fftw3"
448475 COMPONENT Development)
0 commit comments