diff --git a/CMakeLists.txt b/CMakeLists.txt index 04b08f506b621747f83bd4f18387f5f516dd1a1f..ac3fd48459c81c43adfa0b07b32f5b6e058aa51f 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -180,10 +180,10 @@ endif() # --- FFTW --- if(WITH_FFTW) set(FIND_FFTW_VERBOSE VERBOSE_MODE) - set(FIND_FFTW_DEBUG OFF) + set(FIND_FFTW_DEBUG ON) compile_with(FFTW REQUIRED COMPONENTS Fftw3d Fftw3f Fftw3d-mpi Fftw3f-mpi - OPTIONAL_COMPONENTS Fftw3l)# Fftw3q) + OPTIONAL_COMPONENTS Fftw3l Fftw3l-mpi Fftw3q) set(dirlist) foreach(_file ${FFTW_LIBRARIES}) diff --git a/cmake/FindFFTW.cmake b/cmake/FindFFTW.cmake index 74af7a02e5f76c32147de5f9352264695f53097d..ed244493e5ade01e0f708009fa0dd6a48b18b18b 100644 --- a/cmake/FindFFTW.cmake +++ b/cmake/FindFFTW.cmake @@ -89,11 +89,11 @@ foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) # -- find library name given the component name string(REPLACE "fftw3d" "fftw3" library "${component}") - + if(FIND_FFTW_DEBUG) message("\tFFTW::${fftw_comp}:${COMPONENT}:${component}, LIB=${library} HEADER=${header}") endif() - + # -- use pkg-config to get hints about paths pkg_check_modules(${COMPONENT}_PKGCONF ${library} ${header} QUIET) @@ -103,7 +103,7 @@ foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) NAMES ${header} PATHS ${FFTW_INCLUDE_DIRS} NO_DEFAULT_PATH - ) + ) find_path( ${COMPONENT}_INCLUDE_DIR NAMES ${header} @@ -111,13 +111,13 @@ foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) PATHS ${${COMPONENT}_PKGCONF_INCLUDE_DIRS} PATH_SUFFIXES include NO_DEFAULT_PATH - ) + ) # -- search in default locations only if last search failed find_path(${COMPONENT}_INCLUDE_DIR NAMES ${header} - PATHS ENV INCLUDE - ENV PATH - ENV C_INCLUDE_PATH - ENV CXX_INCLUDE_PATH + PATHS ENV INCLUDE + ENV PATH + ENV C_INCLUDE_PATH + ENV CXX_INCLUDE_PATH ) if(${${COMPONENT}_INCLUDE_DIR} STREQUAL "${COMPONENT}_INCLUDE_DIR-NOTFOUND") @@ -128,27 +128,27 @@ foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) # -- find library find_library( - ${COMPONENT}_LIBRARY - NAMES ${library} - PATHS ${FFTW_LIBRARY_DIRS} - NO_DEFAULT_PATH - ) + ${COMPONENT}_LIBRARY + NAMES ${library} + PATHS ${FFTW_LIBRARY_DIRS} + NO_DEFAULT_PATH + ) find_library( - ${COMPONENT}_LIBRARY - NAMES ${library} - PATHS ${fftw_DIR} - PATHS ${${COMPONENT}_INCLUDE_DIR}/.. - PATHS ${${COMPONENT}_PKGCONF_LIBRARY_DIRS}} - PATH_SUFFIXES lib - NO_DEFAULT_PATH - ) + ${COMPONENT}_LIBRARY + NAMES ${library} + PATHS ${fftw_DIR} + PATHS ${${COMPONENT}_INCLUDE_DIR}/.. + PATHS ${${COMPONENT}_PKGCONF_LIBRARY_DIRS}} + PATH_SUFFIXES lib + NO_DEFAULT_PATH + ) # -- default locations find_library(${COMPONENT}_LIBRARY NAMES ${library} PATHS ENV LIBRARY_PATH - ENV LD_LIBRARY_PATH - ENV DYLD_LIBRARY_PATH) - + ENV LD_LIBRARY_PATH + ENV DYLD_LIBRARY_PATH) + # -- if component is required append it to required vars if(FFTW_FIND_REQUIRED_${fftw_comp}) list(APPEND FFTW_REQUIRED_INCLUDE_DIRS ${COMPONENT}_INCLUDE_DIR) @@ -163,28 +163,31 @@ foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) #set(${COMPONENT}_LIBRARY "${library}") set(LIBRARY_DIR_FOUND TRUE) endif() - + # -- find quadmath library if required string(FIND ${component} "fftw3q" FFTWQ_POS) if(FFTWQ_POS EQUAL 0) if(NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(DEPENDENCIES_FOUND FALSE) # -- only gcc supports quadmaths + else() + find_library(QUADMATHLIB + NAMES quadmath + PATHS ENV LIBRARY_PATH + ENV LD_LIBRARY_PATH + ENV DYLD_LIBRARY_PATH) + if(${QUADMATHLIB} STREQUAL "QUADMATHLIB-NOTFOUND") + set(DEPENDENCIES_FOUND FALSE) else() - find_library(QUADMATHLIB - NAMES quadmath - ) - if(QUADMATHLIB_FOUND) - list(APPEND ${COMPONENT}_LIBRARIES ${QUADMATHLIB}) - #list(APPEND ${COMPONENT}_LIBRARIES "quadmath") - list(APPEND ${COMPONENT}_DEFINES "-DHAS_QUADMATHS") - list(APPEND FFTW_COMPILE_FLAGS "-fext-numeric-literals") - set(DEPENDENCIES_FOUND TRUE) - endif() - endif() - else() + list(APPEND ${COMPONENT}_LIBRARIES ${QUADMATHLIB}) + list(APPEND ${COMPONENT}_DEFINES "-DHAS_QUADMATHS") + list(APPEND FFTW_COMPILE_FLAGS "-fext-numeric-literals") + set(DEPENDENCIES_FOUND TRUE) + endif() + endif() + else() set(DEPENDENCIES_FOUND TRUE) endif() - + if(LIBRARY_DIR_FOUND AND INCLUDE_DIR_FOUND AND DEPENDENCIES_FOUND) set(${COMPONENT}_FOUND TRUE) list(APPEND ${COMPONENT}_INCLUDE_DIRS ${${COMPONENT}_INCLUDE_DIR}) @@ -196,7 +199,7 @@ foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) list(APPEND FFTW_LIBRARY_DIRS ${${COMPONENT}_LIBRARY_DIRS}) list(APPEND FFTW_LIBRARIES ${${COMPONENT}_LIBRARIES}) list(APPEND FFTW_DEFINES ${${COMPONENT}_DEFINES}) - + if(FIND_FFTW_VERBOSE) message("\tFound FFTW::${fftw_comp} with parameters '-I${${COMPONENT}_INCLUDE_DIR} -L${${COMPONENT}_LIBRARY_DIR} -l${${COMPONENT}_LIBRARY}'.") endif() @@ -204,7 +207,7 @@ foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) set(${COMPONENT}_FOUND FALSE) if(FFTW_FIND_REQUIRED_${fftw_comp}) if(NOT FFTW_FIND_QUIETLY) - message(FATAL_ERROR "Error: Could not find required component FFTW::${fftw_comp} (${COMPONENT}_INCLUDE_DIR='${${COMPONENT}_INCLUDE_DIR}' and ${COMPONENT}_LIBRARY='${${COMPONENT}_LIBRARY}'.)") + message(FATAL_ERROR "Error: Could not find required component FFTW::${fftw_comp} (${COMPONENT}_INCLUDE_DIR='${${COMPONENT}_INCLUDE_DIR}' and ${COMPONENT}_LIBRARY='${${COMPONENT}_LIBRARIES}'.)") endif() else() if(FIND_FFTW_VERBOSE) @@ -215,7 +218,7 @@ foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) endif() endif() endif() - + unset(FFTWQ_POS) unset(library) unset(header) @@ -229,9 +232,9 @@ list(REMOVE_DUPLICATES FFTW_LIBRARIES) # -- check required variables, version and set FFTW_FOUND to TRUE if ok find_package_handle_standard_args(FFTW FOUND_VAR FFTW_FOUND - REQUIRED_VARS ${FFTW_REQUIRED_LIBRARIES} ${FFTW_REQUIRED_INCLUDE_DIRS} - VERSION_VAR FFTW_VERSION_STRING) - + REQUIRED_VARS ${FFTW_REQUIRED_LIBRARIES} ${FFTW_REQUIRED_INCLUDE_DIRS} + VERSION_VAR FFTW_VERSION_STRING) + if(FIND_FFTW_DEBUG) message(STATUS "FFTW_FOUND='${FFTW_FOUND}'") message(STATUS "FFTW_INCLUDE_DIRS='${FFTW_INCLUDE_DIRS}'") diff --git a/setup.py.in b/setup.py.in index 4f3336ba882f6b1dcad97bd7257a4cce51e80967..fc07171d8e85d9ceec8f272f9b36bd5c306ea6a3 100644 --- a/setup.py.in +++ b/setup.py.in @@ -226,10 +226,8 @@ if enable_fortran is "ON": withfftw = "@WITH_FFTW@" if withfftw is "ON": fortran_src.add('f2py/fftw2py.f90') - fftwdir = '@FFTWLIB@' - #hysoplib.append('fftw3') - #hysoplib.append('fftw3_mpi') - hysop_libdir.append(fftwdir) + fftwdirs = parseCMakeVar('@FFTWLIB@') + hysop_libdir.extend(fftwdirs) else: packages.append('hysop.fakef2py') packages.append('hysop.fakef2py.fftw2py') diff --git a/swig/cpp2hysop.i b/swig/cpp2hysop.i index 4a2ead8af85d718b21d5e6887b9fc72d7953fd8a..7b1e2deb2418189642c7011528076310973abe8a 100644 --- a/swig/cpp2hysop.i +++ b/swig/cpp2hysop.i @@ -3,6 +3,5 @@ %include start.i -%include fftw/fftw.i %include hysop++/hysop++.i diff --git a/swig/fftw/fftw.i b/swig/fftw/fftw.i deleted file mode 100644 index 28ab6fe64ff9d53d0de79c6a0105cb432612354d..0000000000000000000000000000000000000000 --- a/swig/fftw/fftw.i +++ /dev/null @@ -1,7 +0,0 @@ - -// -*- C++ -*- -%{ - #include "fftw.hpp" -%} - -%include "fftw.hpp" diff --git a/swig/hysop++/fft.i b/swig/hysop++/fft.i index accd97cd996f22ff7ade1b15bd695706b91d4ee7..db23284037b7c4a8d636891d75dbaf95c7295b2a 100644 --- a/swig/hysop++/fft.i +++ b/swig/hysop++/fft.i @@ -14,33 +14,35 @@ #if !defined(FFTW_HAS_FFTW3F_THREADS) || !defined(FFTW_HAS_FFTW3F_OMP) %ignore fftwf_init_threads(); %ignore fftwf_plan_with_nthreads(int); + %ignore fftwf_make_planner_thread_safe(); %ignore fftwf_cleanup_threads(); #endif #if !defined(FFTW_HAS_FFTW3D_THREADS) || !defined(FFTW_HAS_FFTW3D_OMP) %ignore fftw_init_threads(); %ignore fftw_plan_with_nthreads(int); + %ignore fftw_make_planner_thread_safe(); %ignore fftw_cleanup_threads(); #endif #if !defined(FFTW_HAS_FFTW3L_THREADS) || !defined(FFTW_HAS_FFTW3L_OMP) %ignore fftwl_init_threads(); %ignore fftwl_plan_with_nthreads(int); + %ignore fftwl_make_planner_thread_safe(); %ignore fftwl_cleanup_threads(); #endif -#ifdef HAS_QUADMATHS - #if !defined(FFTW_HAS_FFTW3Q_THREADS) || !defined(FFTW_HAS_FFTW3Q_OMP) - %ignore fftwq_init_threads(); - %ignore fftwq_plan_with_nthreads(int); - %ignore fftwq_cleanup_threads(); - #endif +#if !defined(FFTW_HAS_FFTW3Q_THREADS) || !defined(FFTW_HAS_FFTW3Q_OMP) + %ignore fftwq_init_threads(); + %ignore fftwq_plan_with_nthreads(int); + %ignore fftwq_make_planner_thread_safe(); + %ignore fftwq_cleanup_threads(); #endif + %rename(is_) fftw_iodim_do_not_use_me::is; %rename(is_) fftw_iodim64_do_not_use_me::is; %include "fftw3.h" - /* fftw3 c++ wrappers */ %include "fft/fftw3.h" %template(Fftw3f) hysop::fft::Fftw3<float>; @@ -48,7 +50,6 @@ %template(Fftw3l) hysop::fft::Fftw3<long double>; %template(Fftw3q) hysop::fft::Fftw3<__float128>; - /* fft transforms */ %ignore hysop::fft::operator<<; %include "fft/transform.h"