mirror of
https://github.com/cosmo-sims/monofonIC.git
synced 2024-09-19 17:03:45 +02:00
changed to more flexible FindFFTW3.cmake script.
This commit is contained in:
parent
9c4c31ba53
commit
519f3afe6b
2 changed files with 243 additions and 132 deletions
|
@ -32,6 +32,10 @@ if(OPENMP_FOUND)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
########################################################################################################################
|
||||||
|
# Pthreads
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
########################################################################################################################
|
########################################################################################################################
|
||||||
# mpi support
|
# mpi support
|
||||||
option(ENABLE_MPI "Enable MPI support" ON)
|
option(ENABLE_MPI "Enable MPI support" ON)
|
||||||
|
@ -47,7 +51,7 @@ endif(ENABLE_MPI)
|
||||||
|
|
||||||
# FFTW
|
# FFTW
|
||||||
cmake_policy(SET CMP0074 NEW)
|
cmake_policy(SET CMP0074 NEW)
|
||||||
find_package(FFTW3 REQUIRED)
|
find_package(FFTW3 COMPONENTS SINGLE DOUBLE OPENMP THREADS MPI)
|
||||||
|
|
||||||
# GSL
|
# GSL
|
||||||
find_package(GSL REQUIRED)
|
find_package(GSL REQUIRED)
|
||||||
|
@ -80,20 +84,21 @@ set_target_properties(${PRGNAME} PROPERTIES CXX_STANDARD 14)
|
||||||
|
|
||||||
# mpi flags
|
# mpi flags
|
||||||
if(MPI_CXX_FOUND)
|
if(MPI_CXX_FOUND)
|
||||||
if(FFTW_MPI_FOUND)
|
if(FFTW3_DOUBLE_MPI_FOUND)
|
||||||
target_link_libraries(${PRGNAME} ${FFTW_MPI_LIBRARIES})
|
target_link_libraries(${PRGNAME} ${FFTW3_DOUBLE_MPI_LIBRARY})
|
||||||
|
target_include_directories(${PRGNAME} PRIVATE ${FFTW3_INCLUDE_DIR_PARALLEL})
|
||||||
target_compile_options(${PRGNAME} PRIVATE "-DUSE_FFTW_MPI")
|
target_compile_options(${PRGNAME} PRIVATE "-DUSE_FFTW_MPI")
|
||||||
endif(FFTW_MPI_FOUND)
|
endif(FFTW3_DOUBLE_MPI_FOUND)
|
||||||
|
|
||||||
target_include_directories(${PRGNAME} PRIVATE ${MPI_CXX_INCLUDE_PATH})
|
target_include_directories(${PRGNAME} PRIVATE ${MPI_CXX_INCLUDE_PATH})
|
||||||
target_compile_options(${PRGNAME} PRIVATE "-DUSE_MPI")
|
target_compile_options(${PRGNAME} PRIVATE "-DUSE_MPI")
|
||||||
target_link_libraries(${PRGNAME} ${MPI_LIBRARIES})
|
target_link_libraries(${PRGNAME} ${MPI_LIBRARIES})
|
||||||
endif(MPI_CXX_FOUND)
|
endif(MPI_CXX_FOUND)
|
||||||
|
|
||||||
if(FFTW_THREADS_FOUND)
|
if(FFTW3_DOUBLE_THREADS_FOUND)
|
||||||
target_link_libraries(${PRGNAME} ${FFTW_THREADS_LIBRARIES})
|
target_link_libraries(${PRGNAME} ${FFTW3_DOUBLE_THREADS_LIBRARY})
|
||||||
target_compile_options(${PRGNAME} PRIVATE "-DUSE_FFTW_THREADS")
|
target_compile_options(${PRGNAME} PRIVATE "-DUSE_FFTW_THREADS")
|
||||||
endif(FFTW_THREADS_FOUND)
|
endif(FFTW3_DOUBLE_THREADS_FOUND)
|
||||||
|
|
||||||
if(HDF5_FOUND)
|
if(HDF5_FOUND)
|
||||||
# target_link_libraries(${PRGNAME} ${HDF5_C_LIBRARY_DIRS})
|
# target_link_libraries(${PRGNAME} ${HDF5_C_LIBRARY_DIRS})
|
||||||
|
@ -102,8 +107,8 @@ if(HDF5_FOUND)
|
||||||
target_compile_options(${PRGNAME} PRIVATE "-DUSE_HDF5")
|
target_compile_options(${PRGNAME} PRIVATE "-DUSE_HDF5")
|
||||||
endif(HDF5_FOUND)
|
endif(HDF5_FOUND)
|
||||||
|
|
||||||
target_link_libraries(${PRGNAME} ${FFTW_LIBRARIES})
|
target_link_libraries(${PRGNAME} ${FFTW3_LIBRARIES})
|
||||||
target_include_directories(${PRGNAME} PRIVATE ${FFTW_INCLUDE_DIR})
|
target_include_directories(${PRGNAME} PRIVATE ${FFTW3_INCLUDE_DIRS})
|
||||||
|
|
||||||
target_link_libraries(${PRGNAME} ${GSL_LIBRARIES})
|
target_link_libraries(${PRGNAME} ${GSL_LIBRARIES})
|
||||||
target_include_directories(${PRGNAME} PRIVATE ${GSL_INCLUDE_DIR})
|
target_include_directories(${PRGNAME} PRIVATE ${GSL_INCLUDE_DIR})
|
||||||
|
|
352
FindFFTW3.cmake
352
FindFFTW3.cmake
|
@ -1,126 +1,232 @@
|
||||||
# - Find FFTW
|
# - Try to find FFTW
|
||||||
# Find the native FFTW includes and library
|
#
|
||||||
# This module defines
|
# By default, it will look only for the serial libraries with single, double,
|
||||||
# FFTW_INCLUDE_DIR, where to find fftw3.h, etc.
|
# and long double precision. Any combination of precision (SINGLE, DOUBLE,
|
||||||
# FFTW_LIBRARIES, the libraries needed to use FFTW.
|
# LONGDOUBLE) and library type (SERIAL, [THREADS|OPENMP], MPI) is possible by
|
||||||
# FFTW_FOUND, If false, do not try to use FFTW.
|
# using the COMPONENTS keyword. For example,
|
||||||
# also defined, but not for general use are
|
#
|
||||||
# FFTW_LIBRARY, where to find the FFTW library.
|
# find_package(FFTW3 COMPONENTS SINGLE DOUBLE OPENMP MPI)
|
||||||
|
#
|
||||||
|
# Once done this will define
|
||||||
|
# FFTW3_FOUND - System has FFTW3
|
||||||
|
# FFTW3_INCLUDE_DIRS - The FFTW3 include directories
|
||||||
|
# FFTW3_LIBRARIES - The libraries needed to use FFTW3
|
||||||
|
# FFTW3_DEFINITIONS - Compiler switches required for using FFTW3
|
||||||
|
# FFTW3_$KIND_$PARALLEL_FOUND- Set if FFTW3 exists in KIND precision format for PARALLEL mode.
|
||||||
|
# where KIND can be: SINGLE, DOUBLE, LONGDOUBLE
|
||||||
|
# and PARALLEL: SERIAL, OPENMP, MPI, THREADS.
|
||||||
|
# FFTW3_$KIND_$PARALLEL_LIBRARY - The libraries needed to use.
|
||||||
|
# FFTW3_INCLUDE_DIR_PARALLEL - The FFTW3 include directories for parallels mode.
|
||||||
|
|
||||||
#UNSET(FFTW_INCLUDE_DIR CACHE)
|
cmake_policy(SET CMP0054 NEW)
|
||||||
#UNSET(FFTW_LIBRARY CACHE)
|
|
||||||
#UNSET(FFTW_THREADS_NAMES CACHE)
|
|
||||||
#UNSET(FFTW_MPI_LIBRARY CACHE)
|
|
||||||
|
|
||||||
FIND_PATH(FFTW_INCLUDE_DIR fftw3.h
|
if(FFTW3_FOUND)
|
||||||
PATHS ${FFTW3_DIR} ENV ${FFTW3_ROOT}
|
return()
|
||||||
PATH_SUFFIXES include
|
endif()
|
||||||
DOC "Directory where the FFTW3 header files are located"
|
|
||||||
NO_DEFAULT_PATH
|
if(FFTW3_INCLUDE_DIR AND FFTW3_LIBRARIES)
|
||||||
|
set(FFTW3_FOUND TRUE)
|
||||||
|
foreach(component ${FFTW3_FIND_COMPONENTS})
|
||||||
|
if("${FFTW3_${component}_LIBRARY}" STREQUAL "")
|
||||||
|
set(FFTW3_${component}_LIBRARY "${FFTW3_LIBRARIES}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
macro(find_specific_libraries KIND PARALLEL)
|
||||||
|
list(APPEND FFTW3_FIND_COMPONENTS ${KIND}_${PARALLEL})
|
||||||
|
if(NOT (${PARALLEL} STREQUAL "SERIAL") AND NOT ${PARALLEL}_FOUND)
|
||||||
|
message(FATAL_ERROR "Please, find ${PARALLEL} libraries before FFTW")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_library(FFTW3_${KIND}_${PARALLEL}_LIBRARY NAMES
|
||||||
|
fftw3${SUFFIX_${KIND}}${SUFFIX_${PARALLEL}}${SUFFIX_FINAL} HINTS ${HINT_DIRS})
|
||||||
|
if(FFTW3_${KIND}_${PARALLEL}_LIBRARY MATCHES fftw3)
|
||||||
|
list(APPEND FFTW3_LIBRARIES ${FFTW3_${KIND}_${PARALLEL}_LIBRARY})
|
||||||
|
set(FFTW3_${KIND}_${PARALLEL}_FOUND TRUE)
|
||||||
|
|
||||||
|
STRING(TOLOWER "${KIND}" kind)
|
||||||
|
STRING(TOLOWER "${PARALLEL}" parallel)
|
||||||
|
if(FFTW3_${kind}_${parallel}_LIBRARY MATCHES "\\.a$")
|
||||||
|
add_library(fftw3::${kind}::${parallel} STATIC IMPORTED GLOBAL)
|
||||||
|
else()
|
||||||
|
add_library(fftw3::${kind}::${parallel} SHARED IMPORTED GLOBAL)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# MPI Has a different included library than the others
|
||||||
|
# FFTW3_INCLUDE_DIR_PARALLEL will change depending of which on is used.
|
||||||
|
set(FFTW3_INCLUDE_DIR_PARALLEL ${FFTW3_INCLUDE_DIR} )
|
||||||
|
if(PARALLEL STREQUAL "MPI")
|
||||||
|
set(FFTW3_INCLUDE_DIR_PARALLEL ${FFTW3_${PARALLEL}_INCLUDE_DIR})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set_target_properties(fftw3::${kind}::${parallel} PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${FFTW3_${KIND}_${PARALLEL}_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${FFTW3_INCLUDE_DIR_PARALLEL}")
|
||||||
|
|
||||||
|
# adding target properties to the different cases
|
||||||
|
## MPI
|
||||||
|
if(PARALLEL STREQUAL "MPI")
|
||||||
|
if(MPI_C_LIBRARIES)
|
||||||
|
set_target_properties(fftw3::${kind}::mpi PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${FFTW3_${KIND}_${PARALLEL}_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${FFTW3_INCLUDE_DIR_PARALLEL}"
|
||||||
|
IMPORTED_LINK_INTERFACE_LIBRARIES ${MPI_C_LIBRARIES})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
## OpenMP
|
||||||
|
if(PARALLEL STREQUAL "OPENMP")
|
||||||
|
if(OPENMP_C_FLAGS)
|
||||||
|
set_target_properties(fftw3::${kind}::${parallel} PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${FFTW3_${KIND}_${PARALLEL}_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${FFTW3_INCLUDE_DIR_PARALLEL}"
|
||||||
|
INTERFACE_COMPILE_OPTIONS "${OPENMP_C_FLAGS}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
## THREADS
|
||||||
|
if(PARALLEL STREQUAL "THREADS")
|
||||||
|
if(CMAKE_THREAD_LIBS_INIT) # TODO: this is not running
|
||||||
|
set_target_properties(fftw3::${kind}::${parallel} PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${FFTW3_${KIND}_${PARALLEL}_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${FFTW3_INCLUDE_DIR_PARALLEL}"
|
||||||
|
INTERFACE_COMPILE_OPTIONS "${CMAKE_THREAD_LIBS_INIT}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(NOT FFTW3_FIND_COMPONENTS)
|
||||||
|
set(FFTW3_FIND_COMPONENTS SINGLE DOUBLE LONGDOUBLE SERIAL)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(TOUPPER "${FFTW3_FIND_COMPONENTS}" FFTW3_FIND_COMPONENTS)
|
||||||
|
|
||||||
|
list(FIND FFTW3_FIND_COMPONENTS SINGLE LOOK_FOR_SINGLE)
|
||||||
|
list(FIND FFTW3_FIND_COMPONENTS DOUBLE LOOK_FOR_DOUBLE)
|
||||||
|
list(FIND FFTW3_FIND_COMPONENTS LONGDOUBLE LOOK_FOR_LONGDOUBLE)
|
||||||
|
list(FIND FFTW3_FIND_COMPONENTS THREADS LOOK_FOR_THREADS)
|
||||||
|
list(FIND FFTW3_FIND_COMPONENTS OPENMP LOOK_FOR_OPENMP)
|
||||||
|
list(FIND FFTW3_FIND_COMPONENTS MPI LOOK_FOR_MPI)
|
||||||
|
list(FIND FFTW3_FIND_COMPONENTS SERIAL LOOK_FOR_SERIAL)
|
||||||
|
|
||||||
|
# FIXME - This may fail in computers wihtout serial
|
||||||
|
# Default serial to obtain version number
|
||||||
|
set(LOOK_FOR_SERIAL 1)
|
||||||
|
|
||||||
|
# set serial as default if none parallel component has been set
|
||||||
|
if((LOOK_FOR_THREADS LESS 0) AND (LOOK_FOR_MPI LESS 0) AND
|
||||||
|
(LOOK_FOR_OPENMP LESS 0))
|
||||||
|
set(LOOK_FOR_SERIAL 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(MPI_C_FOUND)
|
||||||
|
set(MPI_FOUND ${MPI_C_FOUND})
|
||||||
|
endif()
|
||||||
|
unset(FFTW3_FIND_COMPONENTS)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
set(HINT_DIRS ${FFTW3_DIRECTORY} $ENV{FFTW3_DIRECTORY})
|
||||||
|
else()
|
||||||
|
find_package(PkgConfig)
|
||||||
|
if(PKG_CONFIG_FOUND)
|
||||||
|
pkg_check_modules(PC_FFTW QUIET fftw3)
|
||||||
|
set(FFTW3_DEFINITIONS ${PC_FFTW3_CFLAGS_OTHER})
|
||||||
|
endif()
|
||||||
|
set(HINT_DIRS ${PC_FFTW3_INCLUDEDIR} ${PC_FFTW3_INCLUDE_DIRS}
|
||||||
|
${FFTW3_INCLUDE_DIR} $ENV{FFTW3_INCLUDE_DIR} )
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_path(FFTW3_INCLUDE_DIR NAMES fftw3.h HINTS ${HINT_DIRS})
|
||||||
|
if (LOOK_FOR_MPI) # Probably is going to be the same as fftw3.h
|
||||||
|
find_path(FFTW3_MPI_INCLUDE_DIR NAMES fftw3-mpi.h HINTS ${HINT_DIRS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
function(find_version OUTVAR LIBRARY SUFFIX)
|
||||||
|
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/fftw${SUFFIX}/main.c
|
||||||
|
# TODO: do we need to add include for mpi headers?
|
||||||
|
"#include <fftw3.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
int main(int nargs, char const *argv[]) {
|
||||||
|
printf(\"%s\", fftw${SUFFIX}_version);
|
||||||
|
return 0;
|
||||||
|
}"
|
||||||
|
)
|
||||||
|
if(NOT CMAKE_CROSSCOMPILING)
|
||||||
|
try_run(RUN_RESULT COMPILE_RESULT
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/fftw${SUFFIX}/"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/fftw${SUFFIX}/main.c"
|
||||||
|
CMAKE_FLAGS
|
||||||
|
-DLINK_LIBRARIES=${LIBRARY}
|
||||||
|
-DINCLUDE_DIRECTORIES=${FFTW3_INCLUDE_DIR}
|
||||||
|
RUN_OUTPUT_VARIABLE OUTPUT
|
||||||
|
COMPILE_OUTPUT_VARIABLE COUTPUT
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
if(RUN_RESULT EQUAL 0)
|
||||||
|
string(REGEX REPLACE
|
||||||
|
".*([0-9]+\\.[0-9]+\\.[0-9]+).*"
|
||||||
|
"\\1" VERSION_STRING "${OUTPUT}"
|
||||||
|
)
|
||||||
|
set(${OUTVAR} ${VERSION_STRING} PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
set(SUFFIX_DOUBLE "")
|
||||||
|
set(SUFFIX_SINGLE "f")
|
||||||
|
set(SUFFIX_LONGDOUBLE "l")
|
||||||
|
set(SUFFIX_SERIAL "")
|
||||||
|
set(SUFFIX_OPENMP "_omp")
|
||||||
|
set(SUFFIX_MPI "_mpi")
|
||||||
|
set(SUFFIX_THREADS "_threads")
|
||||||
|
set(SUFFIX_FINAL "")
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
set(SUFFIX_FINAL "-3")
|
||||||
|
else()
|
||||||
|
set(HINT_DIRS ${PC_FFTW3_LIBDIR} ${PC_FFTW3_LIBRARY_DIRS}
|
||||||
|
$ENV{FFTW3_LIBRARY_DIR} ${FFTW3_LIBRARY_DIR} )
|
||||||
|
endif(WIN32)
|
||||||
|
|
||||||
|
unset(FFTW3_LIBRARIES)
|
||||||
|
set(FFTW3_INCLUDE_DIRS ${FFTW3_INCLUDE_DIR} ) # TODO what's for?
|
||||||
|
set(FFTW3_FLAGS_C "")
|
||||||
|
foreach(KIND SINGLE DOUBLE LONGDOUBLE)
|
||||||
|
if(LOOK_FOR_${KIND} LESS 0)
|
||||||
|
continue()
|
||||||
|
endif()
|
||||||
|
foreach(PARALLEL SERIAL MPI OPENMP THREADS)
|
||||||
|
if(LOOK_FOR_${PARALLEL} LESS 0)
|
||||||
|
continue()
|
||||||
|
endif()
|
||||||
|
find_specific_libraries(${KIND} ${PARALLEL})
|
||||||
|
endforeach()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
if(FFTW3_INCLUDE_DIR)
|
||||||
|
list(GET FFTW3_FIND_COMPONENTS 0 smallerrun)
|
||||||
|
string(REPLACE "_" ";" RUNLIST ${smallerrun})
|
||||||
|
list(GET RUNLIST 0 KIND)
|
||||||
|
list(GET RUNLIST 1 PARALLEL)
|
||||||
|
unset(smallerrun)
|
||||||
|
unset(RUNLIST)
|
||||||
|
# suffix is quoted so it pass empty in the case of double as it's empty
|
||||||
|
find_version(FFTW3_VERSION_STRING ${FFTW3_${KIND}_${PARALLEL}_LIBRARY}
|
||||||
|
"${SUFFIX_${KIND}}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# FIXME: fails if use REQUIRED.
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
# handle the QUIETLY and REQUIRED arguments and set FFTW3_FOUND to TRUE
|
||||||
|
# if all listed variables are TRUE
|
||||||
|
find_package_handle_standard_args(FFTW3
|
||||||
|
REQUIRED_VARS FFTW3_LIBRARIES FFTW3_INCLUDE_DIR
|
||||||
|
VERSION_VAR FFTW3_VERSION_STRING
|
||||||
|
HANDLE_COMPONENTS
|
||||||
)
|
)
|
||||||
|
|
||||||
SET(FFTW_NAMES ${FFTW_NAMES} fftw3 fftw3-3)
|
|
||||||
find_library(FFTW_LIBRARY
|
|
||||||
NAMES ${FFTW_NAMES}
|
|
||||||
PATHS ${FFTW3_DIR}
|
|
||||||
PATH_SUFFIXES lib
|
|
||||||
DOC "Directory where the FFTW3 library is located"
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
)
|
|
||||||
|
|
||||||
SET(FFTW_THREADS_NAMES ${FFTW_THREADS_NAMES} fftw3_threads fftw3-3_threads)
|
|
||||||
find_library(FFTW_THREADS_LIBRARY
|
|
||||||
NAMES ${FFTW_THREADS_NAMES}
|
|
||||||
PATHS ${FFTW3_DIR}
|
|
||||||
PATH_SUFFIXES lib
|
|
||||||
DOC "Directory where the FFTW3-threads library is located"
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
)
|
|
||||||
|
|
||||||
SET(FFTW_MPI_NAMES ${FFTW_MPI_NAMES} fftw3_mpi fftw3-3_mpi)
|
|
||||||
find_library(FFTW_MPI_LIBRARY
|
|
||||||
NAMES ${FFTW_MPI_NAMES}
|
|
||||||
PATHS ${FFTW3_DIR}
|
|
||||||
PATH_SUFFIXES lib
|
|
||||||
DOC "Directory where the FFTW3-MPI library is located"
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
)
|
|
||||||
|
|
||||||
FIND_PATH(FFTW_INCLUDE_DIR fftw3.h
|
|
||||||
${FFTW3_DIR} ${FFTW3_DIR}/include ${FFTW3_DIR}/lib )# /usr/local/include /usr/include /opt/local/lib )
|
|
||||||
|
|
||||||
FIND_LIBRARY(FFTW_LIBRARY
|
|
||||||
NAMES ${FFTW_NAMES}
|
|
||||||
PATHS ${FFTW3_DIR} ${FFTW3_DIR}/include ${FFTW3_DIR}/lib )#/usr/lib /usr/local/lib /opt/locala/lib )
|
|
||||||
|
|
||||||
# Find threads part of FFTW
|
|
||||||
FIND_LIBRARY(FFTW_THREADS_LIBRARY
|
|
||||||
NAMES ${FFTW_THREADS_NAMES}
|
|
||||||
PATHS ${FFTW3_DIR} ${FFTW3_DIR}/include ${FFTW3_DIR}/lib )#/usr/lib /usr/local/lib /opt/local/lib )
|
|
||||||
|
|
||||||
# Find MPI part of FFTW
|
|
||||||
FIND_LIBRARY(FFTW_MPI_LIBRARY
|
|
||||||
NAMES ${FFTW_MPI_NAMES}
|
|
||||||
PATHS ${FFTW3_DIR} ${FFTW3_DIR}/include ${FFTW3_DIR}/lib )#/usr/lib /usr/local/lib /opt/local/lib )
|
|
||||||
|
|
||||||
IF (FFTW_THREADS_LIBRARY AND FFTW_INCLUDE_DIR)
|
|
||||||
SET(FFTW_THREADS_LIBRARIES ${FFTW_THREADS_LIBRARY})
|
|
||||||
SET(FFTW_THREADS_FOUND "YES")
|
|
||||||
ELSE (FFTW_THREADS_LIBRARY AND FFTW_INCLUDE_DIR)
|
|
||||||
SET(FFTW_THREADS_FOUND "NO")
|
|
||||||
ENDIF (FFTW_THREADS_LIBRARY AND FFTW_INCLUDE_DIR)
|
|
||||||
|
|
||||||
|
|
||||||
IF (FFTW_THREADS_FOUND)
|
|
||||||
IF (NOT FFTW_THREADS_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Found FFTW threads: ${FFTW_THREADS_LIBRARIES}")
|
|
||||||
ENDIF (NOT FFTW_THREADS_FIND_QUIETLY)
|
|
||||||
ELSE (FFTW_THREADS_FOUND)
|
|
||||||
IF (FFTW_THREADS_FIND_REQUIRED)
|
|
||||||
MESSAGE(FATAL_ERROR "Could not find FFTW threads library")
|
|
||||||
ENDIF (FFTW_THREADS_FIND_REQUIRED)
|
|
||||||
ENDIF (FFTW_THREADS_FOUND)
|
|
||||||
|
|
||||||
|
|
||||||
IF (FFTW_MPI_LIBRARY AND FFTW_INCLUDE_DIR)
|
|
||||||
SET(FFTW_MPI_LIBRARIES ${FFTW_MPI_LIBRARY})
|
|
||||||
SET(FFTW_MPI_FOUND "YES")
|
|
||||||
ELSE (FFTW_MPI_LIBRARY AND FFTW_INCLUDE_DIR)
|
|
||||||
SET(FFTW_MPI_FOUND "NO")
|
|
||||||
ENDIF (FFTW_MPI_LIBRARY AND FFTW_INCLUDE_DIR)
|
|
||||||
|
|
||||||
|
|
||||||
IF (FFTW_MPI_FOUND)
|
|
||||||
IF (NOT FFTW_MPI_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Found FFTW MPI: ${FFTW_MPI_LIBRARIES}")
|
|
||||||
ENDIF (NOT FFTW_MPI_FIND_QUIETLY)
|
|
||||||
ELSE (FFTW_MPI_FOUND)
|
|
||||||
IF (FFTW_MPI_FIND_REQUIRED)
|
|
||||||
MESSAGE(FATAL_ERROR "Could not find FFTW MPI library")
|
|
||||||
ENDIF (FFTW_MPI_FIND_REQUIRED)
|
|
||||||
ENDIF (FFTW_MPI_FOUND)
|
|
||||||
|
|
||||||
|
|
||||||
IF (FFTW_LIBRARY AND FFTW_INCLUDE_DIR)
|
|
||||||
SET(FFTW_LIBRARIES ${FFTW_LIBRARY})
|
|
||||||
SET(FFTW_FOUND "YES")
|
|
||||||
ELSE (FFTW_LIBRARY AND FFTW_INCLUDE_DIR)
|
|
||||||
SET(FFTW_FOUND "NO")
|
|
||||||
ENDIF (FFTW_LIBRARY AND FFTW_INCLUDE_DIR)
|
|
||||||
|
|
||||||
|
|
||||||
IF (FFTW_FOUND)
|
|
||||||
IF (NOT FFTW_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Found FFTW: ${FFTW_LIBRARIES}")
|
|
||||||
ENDIF (NOT FFTW_FIND_QUIETLY)
|
|
||||||
ELSE (FFTW_FOUND)
|
|
||||||
IF (FFTW_FIND_REQUIRED)
|
|
||||||
MESSAGE(FATAL_ERROR "Could not find FFTW library")
|
|
||||||
ENDIF (FFTW_FIND_REQUIRED)
|
|
||||||
ENDIF (FFTW_FOUND)
|
|
||||||
|
|
||||||
SET (ON_UNIX ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR
|
|
||||||
${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
|
|
||||||
IF (${ON_UNIX})
|
|
||||||
SET (FFTW_EXECUTABLE_LIBRARIES fftw3f fftw3f_threads)
|
|
||||||
ENDIF (${ON_UNIX})
|
|
||||||
|
|
Loading…
Reference in a new issue