diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f38049208e1f58cf9a821ac36b1fd5eb657d6c7..dc97140d17d8858eab25d09fe15c4442128f73a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,7 +39,7 @@ option(WITH_SCALES "compile/create scales lib and link it with HySoP. Default = option(WITH_PARALLEL_COMPRESSED_HDF5 "Try to enable parallel compressed hdf5 interface. Default = ON." ON) option(WITH_FFTW "Link with fftw library (required for some HySoP solvers), default = ON" ON) option(WITH_EXTRAS "Link with some extra fortran libraries (like arnoldi solver), default = OFF" OFF) -option(WITH_GPU "Use of GPU (required for some HySoP solvers), default = ON" ON) +option(WITH_OPENCL "Use of GPU (required for some HySoP solvers), default = ON" ON) option(WITH_MAIN_FORTRAN "Create an executable (test purpose) from fortran sources in src/main, linked with libhysop, default = OFF" OFF) option(WITH_MAIN_CXX "Create an executable (test purpose) from cxx sources in src/hysop++/main, linked with libhysop, default = OFF" OFF) option(PROFILE "Enable profiling mode for HySoP. Can also be enabled with HYSOP_PROFILE environment variable. Default = OFF" OFF) @@ -187,9 +187,8 @@ endif() # --- FFTW --- if(WITH_FFTW) - set(FIND_FFTW_VERBOSE OFF) - set(FIND_FFTW_DEBUG OFF) - set(FIND_FFTW_SHARED_ONLY ON) + set(FIND_FFTW_VERBOSE CACHE BOOL OFF) + set(FIND_FFTW_DEBUG CACHE BOOL OFF) compile_with(FFTW REQUIRED COMPONENTS Fftw3f Fftw3d Fftw3f-mpi Fftw3d-mpi @@ -249,7 +248,7 @@ else() endif() # ========= Check which opencl devices are available on the system ========= -if(WITH_GPU) +if(WITH_OPENCL) execute_process( COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/opencl_explore.py "EXPLORE") execute_process( @@ -645,15 +644,15 @@ if(VERBOSE_MODE) message(STATUS " Project uses MPI : ${USE_MPI}") message(STATUS " Project uses Scales : ${WITH_SCALES}") message(STATUS " Project uses FFTW : ${WITH_FFTW}") - message(STATUS " Project uses GPU : ${WITH_GPU}") - message(STATUS " Project uses parallel hdf5 interface : ${H5PY_PARALLEL_COMPRESSION_ENABLED}") + message(STATUS " Project uses OpenCL : ${WITH_OPENCL}") + message(STATUS " Project uses parallel HDF5 interface : ${H5PY_PARALLEL_COMPRESSION_ENABLED}") message(STATUS " ${PROJECT_NAME} profile mode : ${PROFILE}") message(STATUS " ${PROJECT_NAME} debug mode : ${DEBUG}") message(STATUS " Enable -OO run? : ${OPTIM}") if(DOUBLEPREC) message(STATUS " Default real numbers precision : double.") else() - message(STATUS " Default real numbers precision : simple.") + message(STATUS " Default real numbers precision : single.") endif() message(STATUS "====================== ======= ======================") message(STATUS " ") diff --git a/cmake/FindFFTW.cmake b/cmake/FindFFTW.cmake index badd224e19a624065bc60607bef28593ef54acd0..b77e3f331202295e8a48ad4e5463e0edba677222 100644 --- a/cmake/FindFFTW.cmake +++ b/cmake/FindFFTW.cmake @@ -65,7 +65,7 @@ # Set ${FIND_FFTW_DEBUG} to ON before find_package call to enable debug mode # # Written by F. Pérignon, nov/2009 -# Updated by J-B. Keck, feb/2016 +# Updated by J-B. Keck, feb/2016, march/2020 # inspired from http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries find_package(PkgConfig) @@ -86,14 +86,18 @@ list(APPEND FFTW_COMPILE_FLAGS "") # -- rename library to match shared or static constraints #Check whether to search static or dynamic libs -set( CMAKE_FIND_LIBRARY_SUFFIXES_SAV ${CMAKE_FIND_LIBRARY_SUFFIXES} ) +set( CMAKE_FIND_LIBRARY_SUFFIXES_SAVE ${CMAKE_FIND_LIBRARY_SUFFIXES} ) -if( ${FFTW_USE_STATIC_LIBS} ) - set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX} ) -else() +if( ${FIND_FFTW_SHARED_ONLY} ) set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX} ) +elseif( ${FIND_FFTW_STATIC_ONLY} ) + set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX} ) endif() +# -- always look for base fftw3 library +# (it contains common functions for all fftw libraries) +list(APPEND FFTW_FIND_COMPONENTS "fftw3d") + foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) string(REPLACE "-" "_" fftw_comp_no_dash "${fftw_comp}") string(TOLOWER ${fftw_comp_no_dash} component) @@ -112,8 +116,6 @@ foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) # -- find library name given the component name string(REPLACE "fftw3d" "fftw3" library "${component}") - set(library "lib${library}${CMAKE_FIND_LIBRARY_SUFFIXES}") - if(FIND_FFTW_DEBUG) message("\tFFTW::${fftw_comp}:${COMPONENT}:${component}, LIB=${library} HEADER=${header}") endif() @@ -131,7 +133,7 @@ foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) find_path( ${COMPONENT}_INCLUDE_DIR NAMES ${header} - PATHS ${fftw_DIR} + PATHS ${FFTW_DIR} PATHS ${${COMPONENT}_PKGCONF_INCLUDE_DIRS} PATH_SUFFIXES include NO_DEFAULT_PATH @@ -160,7 +162,7 @@ foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) find_library( ${COMPONENT}_LIBRARY NAMES ${library} - PATHS ${fftw_DIR} + PATHS ${FFTW_DIR} PATHS ${${COMPONENT}_INCLUDE_DIR}/.. PATHS ${${COMPONENT}_PKGCONF_LIBRARY_DIRS}} PATH_SUFFIXES lib @@ -184,7 +186,6 @@ foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) set(LIBRARY_DIR_FOUND FALSE) else() get_filename_component(${COMPONENT}_LIBRARY_DIR "${${COMPONENT}_LIBRARY}" DIRECTORY) - #set(${COMPONENT}_LIBRARY "${library}") set(LIBRARY_DIR_FOUND TRUE) endif() @@ -223,11 +224,15 @@ foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) list(APPEND ${COMPONENT}_LIBRARIES ${${COMPONENT}_LIBRARY}) list(APPEND ${COMPONENT}_DEFINES "-DFFTW_HAS_${COMPONENT}") - list(APPEND FFTW_INCLUDE_DIRS ${${COMPONENT}_INCLUDE_DIRS}) - list(APPEND FFTW_LIBRARY_DIRS ${${COMPONENT}_LIBRARY_DIRS}) - list(APPEND FFTW_LIBRARIES ${${COMPONENT}_LIBRARIES}) - list(APPEND FFTW_DEFINES ${${COMPONENT}_DEFINES}) - list(APPEND FFTW_COMPILE_FLAGS ${${COMPONENT}_COMPILE_FLAGS}) + if ( "${COMPONENT}" STREQUAL "FFTW3D" ) + # will be added last (link order) + else() + list(APPEND FFTW_INCLUDE_DIRS ${${COMPONENT}_INCLUDE_DIRS}) + list(APPEND FFTW_LIBRARY_DIRS ${${COMPONENT}_LIBRARY_DIRS}) + list(APPEND FFTW_LIBRARIES ${${COMPONENT}_LIBRARIES}) + list(APPEND FFTW_DEFINES ${${COMPONENT}_DEFINES}) + list(APPEND FFTW_COMPILE_FLAGS ${${COMPONENT}_COMPILE_FLAGS}) + endif() if(FIND_FFTW_VERBOSE) message("\tFound FFTW::${fftw_comp} with parameters '-I${${COMPONENT}_INCLUDE_DIR} -L${${COMPONENT}_LIBRARY_DIR} -l${${COMPONENT}_LIBRARY}'.") @@ -256,12 +261,21 @@ foreach(fftw_comp ${FFTW_FIND_COMPONENTS}) unset(COMPONENT) endforeach() +# Here base FFTW3 library should have been found +# and it is added last for good link order. +list(APPEND FFTW_INCLUDE_DIRS ${FFTW3D_INCLUDE_DIRS}) +list(APPEND FFTW_LIBRARY_DIRS ${FFTW3D_LIBRARY_DIRS}) +list(APPEND FFTW_LIBRARIES ${FFTW3D_LIBRARIES}) +list(APPEND FFTW_DEFINES ${FFTW3D_DEFINES}) +list(APPEND FFTW_COMPILE_FLAGS ${FFTW3D_COMPILE_FLAGS}) + list(REMOVE_DUPLICATES FFTW_INCLUDE_DIRS) list(REMOVE_DUPLICATES FFTW_LIBRARY_DIRS) list(REMOVE_DUPLICATES FFTW_LIBRARIES) list(REMOVE_DUPLICATES FFTW_DEFINES) list(REMOVE_DUPLICATES FFTW_COMPILE_FLAGS) -set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV} ) + +set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAVE} ) # -- check required variables, version and set FFTW_FOUND to TRUE if ok find_package_handle_standard_args(FFTW FOUND_VAR FFTW_FOUND diff --git a/setup.py.in b/setup.py.in index 1b5557ca5d7cd83483901459c3dd08a5f175aeca..0c61ea8347546f7c1e8e65ff5c3cf2e43354aa3b 100644 --- a/setup.py.in +++ b/setup.py.in @@ -238,11 +238,11 @@ def create_swig_extension(name, inc_dirs, src_dirs=None, sources=None): # ------------ Set list of packages required to build the module ------------- # List of modules (directories) to be included with_test = "@WITH_TESTS@" is "ON" -with_gpu = "@WITH_GPU@" is "ON" +with_opencl = "@WITH_OPENCL@" is "ON" exclude=[] if not with_test: exclude.append('*tests*') -if not with_gpu: +if not with_opencl: exclude.append('*opencl*') packages = find_packages(exclude=exclude, where="@CMAKE_SOURCE_DIR@")