Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
solverstack
ScalFMM
Commits
26421d22
Commit
26421d22
authored
Jun 20, 2016
by
PRUVOST Florent
Browse files
FindFFTW: improve to find ibm essl
parent
26c7431b
Changes
1
Show whitespace changes
Inline
Side-by-side
CMakeModules/morse/find/FindFFTW.cmake
View file @
26421d22
...
...
@@ -9,6 +9,8 @@
###
#
# - Find FFTW Version 3 include dirs and libraries
# Default configuration will find the real double precision fftw library version
# without THREADS|OMP.
# Use this module by invoking find_package with the form:
# find_package(FFTW
# [REQUIRED] # Fail with error if fftw is not found
...
...
@@ -16,10 +18,10 @@
#
# COMPONENTS can be some of the following:
# - MKL: to detect the FFTW from Intel MKL
# - ESSL: to detect the FFTW from IBM ESSL
# - THREADS: to detect the Threads version of FFTW
# - OMP: to detect the OpenMP version of FFTW
# - SIMPLE: to detect the FFTW simple precision fftw3f
# - DOUBLE: to detect the FFTW double precision fftw3 (default)
# - LONG: to detect the FFTW long double precision fftw3l
# - QUAD: to detect the FFTW quadruple precision fftw3q
#
...
...
@@ -50,7 +52,7 @@
# Copyright 2012-2013 Emmanuel Agullo
# Copyright 2012-2013 Mathieu Faverge
# Copyright 2012 Cedric Castagnede
# Copyright 2013
Florent Pruvost
# Copyright 2013
-2016
Florent Pruvost
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file MORSE-Copyright.txt for details.
...
...
@@ -72,10 +74,10 @@ endif()
# Set the version to find
set
(
FFTW_LOOK_FOR_MKL OFF
)
set
(
FFTW_LOOK_FOR_ESSL OFF
)
set
(
FFTW_LOOK_FOR_THREADS OFF
)
set
(
FFTW_LOOK_FOR_OMP OFF
)
set
(
FFTW_LOOK_FOR_FFTW_SIMPLE OFF
)
set
(
FFTW_LOOK_FOR_FFTW_DOUBLE ON
)
set
(
FFTW_LOOK_FOR_FFTW_LONG OFF
)
set
(
FFTW_LOOK_FOR_FFTW_QUAD OFF
)
...
...
@@ -92,28 +94,18 @@ if( FFTW_FIND_COMPONENTS )
if
(
${
component
}
STREQUAL
"SIMPLE"
)
# means we look for FFTW simple precision (fftw3f)
set
(
FFTW_LOOK_FOR_FFTW_SIMPLE ON
)
set
(
FFTW_LOOK_FOR_FFTW_DOUBLE OFF
)
set
(
FFTW_LOOK_FOR_FFTW_LONG OFF
)
set
(
FFTW_LOOK_FOR_FFTW_QUAD OFF
)
endif
()
if
(
${
component
}
STREQUAL
"DOUBLE"
)
# means we look for FFTW double precision (fftw3)
set
(
FFTW_LOOK_FOR_FFTW_SIMPLE OFF
)
set
(
FFTW_LOOK_FOR_FFTW_DOUBLE ON
)
set
(
FFTW_LOOK_FOR_FFTW_LONG OFF
)
set
(
FFTW_LOOK_FOR_FFTW_QUAD OFF
)
endif
()
if
(
${
component
}
STREQUAL
"LONG"
)
# means we look for FFTW long double precision (fftw3l)
set
(
FFTW_LOOK_FOR_FFTW_SIMPLE OFF
)
set
(
FFTW_LOOK_FOR_FFTW_DOUBLE OFF
)
set
(
FFTW_LOOK_FOR_FFTW_LONG ON
)
set
(
FFTW_LOOK_FOR_FFTW_QUAD OFF
)
endif
()
if
(
${
component
}
STREQUAL
"QUAD"
)
# means we look for FFTW quad precision (fftw3q)
set
(
FFTW_LOOK_FOR_FFTW_SIMPLE OFF
)
set
(
FFTW_LOOK_FOR_FFTW_DOUBLE OFF
)
set
(
FFTW_LOOK_FOR_FFTW_LONG OFF
)
set
(
FFTW_LOOK_FOR_FFTW_QUAD ON
)
endif
()
...
...
@@ -121,18 +113,47 @@ if( FFTW_FIND_COMPONENTS )
# means we look for the Intel MKL version of FFTW
set
(
FFTW_LOOK_FOR_MKL ON
)
if
(
FFTW_LOOK_FOR_FFTW_LONG
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
WARNING
"Looking for FFTW -- long precision functions do not exist in MKL FFTW"
)
endif
()
set
(
FFTW_LOOK_FOR_FFTW_LONG OFF
)
endif
()
if
(
FFTW_LOOK_FOR_FFTW_QUAD
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
WARNING
"Looking for FFTW -- quadruple functions do not exist in MKL FFTW"
)
endif
()
set
(
FFTW_LOOK_FOR_FFTW_QUAD OFF
)
endif
()
endif
()
if
(
${
component
}
STREQUAL
"ESSL"
)
# means we look for the Intel MKL version of FFTW
set
(
FFTW_LOOK_FOR_ESSL ON
)
if
(
FFTW_LOOK_FOR_FFTW_LONG
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
WARNING
"Looking for FFTW -- long precision functions do not exist in FFTW_ESSL"
)
endif
()
set
(
FFTW_LOOK_FOR_FFTW_LONG OFF
)
endif
()
if
(
FFTW_LOOK_FOR_FFTW_QUAD
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
WARNING
"Looking for FFTW -- quadruple functions do not exist in FFTW_ESSL"
)
endif
()
set
(
FFTW_LOOK_FOR_FFTW_QUAD OFF
)
endif
()
if
(
FFTW_LOOK_FOR_OMP
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
WARNING
"Looking for FFTW -- FFTW_ESSL does not use OpenMP"
)
endif
()
set
(
FFTW_LOOK_FOR_OMP OFF
)
endif
()
endif
()
endforeach
()
endif
()
if
(
FFTW_LOOK_FOR_THREADS
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"FFTW looks for threads"
)
endif
()
if
(
FFTW_FIND_REQUIRED AND FFTW_FIND_REQUIRED_THREADS
)
find_package
(
Threads REQUIRED
)
else
()
...
...
@@ -140,23 +161,51 @@ if (FFTW_LOOK_FOR_THREADS)
endif
()
endif
()
if
(
FFTW_LOOK_FOR_OMP
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"FFTW looks for openmp"
)
endif
()
if
(
FFTW_FIND_REQUIRED AND FFTW_FIND_REQUIRED_OMP
)
find_package
(
OpenMP REQUIRED
)
else
()
find_package
(
OpenMP
)
endif
()
endif
()
if
(
FFTW_LOOK_FOR_MKL
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"FFTW looks for threads and Intel MKL"
)
endif
()
if
(
FFTW_LOOK_FOR_THREADS
)
set
(
BLA_VENDOR
"Intel10_64lp"
)
else
()
set
(
BLA_VENDOR
"Intel10_64lp_seq"
)
endif
()
if
(
FFTW_FIND_REQUIRED AND FFTW_FIND_REQUIRED_MKL
)
find_package
(
Threads REQUIRED
)
find_package
(
BLASEXT REQUIRED
)
else
()
find_package
(
Threads
)
find_package
(
BLASEXT
)
endif
()
endif
()
if
(
FFTW_LOOK_FOR_OMP
)
if
(
FFTW_FIND_REQUIRED AND FFTW_FIND_REQUIRED_OMP
)
find_package
(
OpenMP REQUIRED
)
if
(
FFTW_LOOK_FOR_ESSL
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"FFTW looks for IBM ESSL"
)
endif
()
if
(
FFTW_LOOK_FOR_THREADS
)
set
(
BLA_VENDOR
"IBMESSLMT"
)
else
()
find_package
(
OpenMP
)
set
(
BLA_VENDOR
"IBMESSL"
)
endif
()
if
(
FFTW_FIND_REQUIRED AND FFTW_FIND_REQUIRED_ESSL
)
find_package
(
BLASEXT REQUIRED
)
else
()
find_package
(
BLASEXT
)
endif
()
endif
()
set
(
ENV_FFTW_DIR
"$ENV{FFTW_DIR}"
)
set
(
ENV_FFTW_INCDIR
"$ENV{FFTW_INCDIR}"
)
set
(
ENV_FFTW_LIBDIR
"$ENV{FFTW_LIBDIR}"
)
...
...
@@ -165,61 +214,153 @@ if ( FFTW_DIR OR ( FFTW_INCDIR AND FFTW_LIBDIR) OR ENV_FFTW_DIR OR (ENV_FFTW_INC
set
(
FFTW_GIVEN_BY_USER
"TRUE"
)
endif
()
# Optionally use pkg-config to detect include/library dirs (if pkg-config is available)
# -------------------------------------------------------------------------------------
include
(
FindPkgConfig
)
find_package
(
PkgConfig QUIET
)
if
(
PKG_CONFIG_EXECUTABLE AND NOT FFTW_GIVEN_BY_USER
)
if
(
NOT FFTW_LOOK_FOR_MKL AND NOT FFTW_LOOK_FOR_ESSL
)
include
(
FindPkgConfig
)
find_package
(
PkgConfig QUIET
)
if
(
PKG_CONFIG_EXECUTABLE AND NOT FFTW_GIVEN_BY_USER
)
set
(
FFTW_INCLUDE_DIRS
)
set
(
FFTW_LIBRARY_DIRS
)
set
(
FFTW_LIBRARIES
)
if
(
FFTW_LOOK_FOR_FFTW_SIMPLE
)
pkg_search_module
(
FFTW3F fftw3f
)
pkg_search_module
(
FFTW3 fftw3
)
if
(
FFTW3F_FOUND
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"Looking for FFTW3F - found using PkgConfig"
)
endif
()
if
(
FFTW3F_LIBRARIES
)
list
(
APPEND FFTW_LIBRARIES
"
${
FFTW3F_LIBRARIES
}
"
)
endif
()
if
(
FFTW3F_INCLUDE_DIRS
)
list
(
APPEND FFTW_INCLUDE_DIRS
"
${
FFTW3F_INCLUDE_DIRS
}
"
)
else
()
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
WARNING
"FFTW3F_INCLUDE_DIRS is empty using PkgConfig."
"Perhaps the path to fftw3f headers is already present in your"
"CPATH/C(PLUS)_INCLUDE_PATH environment variables."
)
endif
()
endif
()
if
(
FFTW3F_LIBRARY_DIRS
)
list
(
APPEND FFTW_LIBRARY_DIRS
"
${
FFTW3F_LIBRARY_DIRS
}
"
)
endif
()
else
(
FFTW3F_FOUND
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"Looking for FFTW3F - not found using PkgConfig."
"Perhaps you should add the directory containing fftw3f.pc to"
"the PKG_CONFIG_PATH environment variable."
)
endif
()
endif
(
FFTW3F_FOUND
)
elseif
(
FFTW_LOOK_FOR_FFTW_LONG
)
pkg_search_module
(
FFTW3L fftw3l
)
pkg_search_module
(
FFTW3 fftw3
)
if
(
FFTW3L_FOUND
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"Looking for FFTW3L - found using PkgConfig"
)
endif
()
if
(
FFTW3L_LIBRARIES
)
list
(
APPEND FFTW_LIBRARIES
"
${
FFTW3L_LIBRARIES
}
"
)
endif
()
if
(
FFTW3L_INCLUDE_DIRS
)
list
(
APPEND FFTW_INCLUDE_DIRS
"
${
FFTW3L_INCLUDE_DIRS
}
"
)
else
()
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
WARNING
"FFTW3L_INCLUDE_DIRS is empty using PkgConfig."
"Perhaps the path to fftw3l headers is already present in your"
"CPATH/C(PLUS)_INCLUDE_PATH environment variables."
)
endif
()
endif
()
if
(
FFTW3L_LIBRARY_DIRS
)
list
(
APPEND FFTW_LIBRARY_DIRS
"
${
FFTW3L_LIBRARY_DIRS
}
"
)
endif
()
else
(
FFTW3L_FOUND
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"Looking for FFTW3L - not found using PkgConfig."
"Perhaps you should add the directory containing fftw3l.pc to"
"the PKG_CONFIG_PATH environment variable."
)
endif
()
endif
(
FFTW3L_FOUND
)
elseif
(
FFTW_LOOK_FOR_FFTW_QUAD
)
pkg_search_module
(
FFTW3Q fftw3q
)
pkg_search_module
(
FFTW3 fftw3
)
if
(
FFTW3Q_FOUND
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"Looking for FFTW3Q - found using PkgConfig"
)
endif
()
if
(
FFTW3Q_LIBRARIES
)
list
(
APPEND FFTW_LIBRARIES
"
${
FFTW3Q_LIBRARIES
}
"
)
endif
()
if
(
FFTW3Q_INCLUDE_DIRS
)
list
(
APPEND FFTW_INCLUDE_DIRS
"
${
FFTW3Q_INCLUDE_DIRS
}
"
)
else
()
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
WARNING
"FFTW3Q_INCLUDE_DIRS is empty using PkgConfig."
"Perhaps the path to fftw3q headers is already present in your"
"CPATH/C(PLUS)_INCLUDE_PATH environment variables."
)
endif
()
endif
()
if
(
FFTW3Q_LIBRARY_DIRS
)
list
(
APPEND FFTW_LIBRARY_DIRS
"
${
FFTW3Q_LIBRARY_DIRS
}
"
)
endif
()
else
(
FFTW3Q_FOUND
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"Looking for FFTW3Q - not found using PkgConfig."
"Perhaps you should add the directory containing fftw3q.pc to"
"the PKG_CONFIG_PATH environment variable."
)
endif
()
endif
(
FFTW3Q_FOUND
)
else
()
pkg_search_module
(
FFTW3 fftw3
)
endif
()
if
(
FFTW3_FOUND
)
if
(
NOT FFTW_FIND_QUIETLY
)
if
(
FFTW_FOUND AND FFTW_LIBRARIES
)
message
(
STATUS
"Looking for FFTW - found using PkgConfig"
)
#
if
(NOT FFTW_INCLUDE_DIR
S)
# message("${Magenta}FFTW_INCLUDE_DIRS is empty using PkgConfig."
# "Perhaps the path to hwloc headers is already present in your"
# "C(PLUS)_INCLUDE_PATH environment variable.${ColourReset}"
)
#endif(
)
message
(
STATUS
"Looking for FFTW3 - found using PkgConfig"
)
endif
(
)
if
(
FFTW3_LIBRARIE
S
)
list
(
APPEND FFTW_LIBRARIES
"
${
FFTW3_LIBRARIES
}
"
)
endif
()
if
(
FFTW3_INCLUDE_DIRS
)
list
(
APPEND FFTW_INCLUDE_DIRS
"
${
FFTW3_INCLUDE_DIRS
}
"
)
else
()
message
(
"
${
Magenta
}
Looking for FFTW - not found using PkgConfig."
"Perhaps you should add the directory containing fftw3.pc to"
"the PKG_CONFIG_PATH environment variable.
${
ColourReset
}
"
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
WARNING
"FFTW3_INCLUDE_DIRS is empty using PkgConfig."
"Perhaps the path to fftw3 headers is already present in your"
"CPATH/C(PLUS)_INCLUDE_PATH environment variables."
)
endif
()
endif
()
if
(
FFTW3_LIBRARY_DIRS
)
list
(
APPEND FFTW_LIBRARY_DIRS
"
${
FFTW3_LIBRARY_DIRS
}
"
)
endif
()
else
(
FFTW3_FOUND
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"Looking for FFTW3 - not found using PkgConfig."
"Perhaps you should add the directory containing fftw3.pc to"
"the PKG_CONFIG_PATH environment variable."
)
endif
()
endif
(
FFTW3_FOUND
)
set
(
FFTW_INCLUDE_DIRS_DEP
"
${
FFTW_INCLUDE_DIRS
}
"
)
set
(
FFTW_LIBRARY_DIRS_DEP
"
${
FFTW_LIBRARY_DIRS
}
"
)
set
(
FFTW_LIBRARIES_DEP
)
if
(
FFTW3Q_LIBRARIES
)
list
(
APPEND FFTW_LIBRARIES_DEP
"
${
FFTW3Q_LIBRARIES
}
"
)
endif
()
if
(
FFTW3L_LIBRARIES
)
list
(
APPEND FFTW_LIBRARIES_DEP
"
${
FFTW3L_LIBRARIES
}
"
)
endif
()
if
(
FFTW3F_LIBRARIES
)
list
(
APPEND FFTW_LIBRARIES_DEP
"
${
FFTW3F_LIBRARIES
}
"
)
endif
()
if
(
FFTW3_LIBRARIES
)
list
(
APPEND FFTW_LIBRARIES_DEP
"
${
FFTW3_LIBRARIES
}
"
)
endif
()
set
(
FFTW_LIBRARIES_DEP
"
${
FFTW_LIBRARIES
}
"
)
if
(
FFTW_LIBRARIES
)
set
(
FFTW_WORKS TRUE
)
endif
()
endif
(
PKG_CONFIG_EXECUTABLE AND NOT FFTW_GIVEN_BY_USER
)
endif
(
PKG_CONFIG_EXECUTABLE AND NOT FFTW_GIVEN_BY_USER
)
endif
(
NOT FFTW_LOOK_FOR_MKL AND NOT FFTW_LOOK_FOR_ESSL
)
if
(
(
NOT PKG_CONFIG_EXECUTABLE
)
OR
(
PKG_CONFIG_EXECUTABLE AND NOT FFTW_FOUND
)
OR
(
FFTW_GIVEN_BY_USER
)
)
if
(
(
NOT PKG_CONFIG_EXECUTABLE
)
OR
(
PKG_CONFIG_EXECUTABLE AND NOT FFTW_FOUND
)
OR
FFTW_GIVEN_BY_USER OR
FFTW_LOOK_FOR_MKL OR
FFTW_LOOK_FOR_ESSL
)
# Looking for include
# -------------------
...
...
@@ -262,39 +403,45 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FFTW_FOUND) OR
# set paths where to look for
set
(
PATH_TO_LOOK_FOR
"
${
_inc_env
}
"
)
if
(
FFTW_LOOK_FOR_ESSL
)
set
(
FFTW3_HEADER_TO_FIND
"fftw3_essl.h"
)
else
()
set
(
FFTW3_HEADER_TO_FIND
"fftw3.h"
)
endif
()
# Try to find the fftw header in the given paths
# -------------------------------------------------
# call cmake macro to find the header path
if
(
FFTW_INCDIR
)
set
(
FFTW_
fftw3.h_DIRS
"FFTW_fftw3.h
_DIRS-NOTFOUND"
)
find_path
(
FFTW_
fftw3.h
_DIRS
NAMES
fftw3.h
set
(
FFTW_
${
FFTW3_HEADER_TO_FIND
}
_DIRS
"FFTW_
${
FFTW3_HEADER_TO_FIND
}
_DIRS-NOTFOUND"
)
find_path
(
FFTW_
${
FFTW3_HEADER_TO_FIND
}
_DIRS
NAMES
${
FFTW3_HEADER_TO_FIND
}
HINTS
${
FFTW_INCDIR
}
)
else
()
if
(
FFTW_DIR
)
set
(
FFTW_
fftw3.h_DIRS
"FFTW_fftw3.h
_DIRS-NOTFOUND"
)
find_path
(
FFTW_
fftw3.h
_DIRS
NAMES
fftw3.h
set
(
FFTW_
${
FFTW3_HEADER_TO_FIND
}
_DIRS
"FFTW_
${
FFTW3_HEADER_TO_FIND
}
_DIRS-NOTFOUND"
)
find_path
(
FFTW_
${
FFTW3_HEADER_TO_FIND
}
_DIRS
NAMES
${
FFTW3_HEADER_TO_FIND
}
HINTS
${
FFTW_DIR
}
PATH_SUFFIXES
"include"
"include/fftw"
)
else
()
set
(
FFTW_
fftw3.h_DIRS
"FFTW_fftw3.h
_DIRS-NOTFOUND"
)
find_path
(
FFTW_
fftw3.h
_DIRS
NAMES
fftw3.h
set
(
FFTW_
${
FFTW3_HEADER_TO_FIND
}
_DIRS
"FFTW_
${
FFTW3_HEADER_TO_FIND
}
_DIRS-NOTFOUND"
)
find_path
(
FFTW_
${
FFTW3_HEADER_TO_FIND
}
_DIRS
NAMES
${
FFTW3_HEADER_TO_FIND
}
HINTS
${
PATH_TO_LOOK_FOR
}
PATH_SUFFIXES
"fftw"
)
endif
()
endif
()
mark_as_advanced
(
FFTW_
fftw3.h
_DIRS
)
mark_as_advanced
(
FFTW_
${
FFTW3_HEADER_TO_FIND
}
_DIRS
)
# Add path to cmake variable
# ------------------------------------
if
(
FFTW_
fftw3.h
_DIRS
)
set
(
FFTW_INCLUDE_DIRS
"
${
FFTW_
fftw3.h
_DIRS
}
"
)
if
(
FFTW_
${
FFTW3_HEADER_TO_FIND
}
_DIRS
)
set
(
FFTW_INCLUDE_DIRS
"
${
FFTW_
${
FFTW3_HEADER_TO_FIND
}
_DIRS
}
"
)
else
()
set
(
FFTW_INCLUDE_DIRS
"FFTW_INCLUDE_DIRS-NOTFOUND"
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"Looking for FFTW --
fftw3.h
not found"
)
message
(
STATUS
"Looking for FFTW --
${
FFTW3_HEADER_TO_FIND
}
not found"
)
endif
()
endif
()
...
...
@@ -350,52 +497,21 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FFTW_FOUND) OR
if
(
FFTW_LOOK_FOR_FFTW_SIMPLE
)
set
(
FFTW_PREC
"f"
)
set
(
FFTW_PREC_TESTFUNC
"s"
)
elseif
(
FFTW_LOOK_FOR_FFTW_DOUBLE
)
set
(
FFTW_PREC
""
)
set
(
FFTW_PREC_TESTFUNC
"d"
)
elseif
(
FFTW_LOOK_FOR_FFTW_LONG
)
set
(
FFTW_PREC
"l"
)
set
(
FFTW_PREC_TESTFUNC
"l"
)
elseif
(
FFTW_LOOK_FOR_FFTW_QUAD
)
set
(
FFTW_PREC
"q"
)
set
(
FFTW_PREC_TESTFUNC
"q"
)
endif
()
if
(
FFTW_LOOK_FOR_MKL
)
set
(
FFTW_libs_to_find
"mkl_intel_lp64;mkl_sequential;mkl_core"
)
# Try to find the MKL fftw lib in the given paths
# -----------------------------------------------
# call cmake macro to find the lib path
if
(
FFTW_LIBDIR
)
foreach
(
fftw_lib
${
FFTW_libs_to_find
}
)
set
(
FFTW_
${
fftw_lib
}
_LIBRARY
"FFTW_
${
fftw_lib
}
_LIBRARY-NOTFOUND"
)
find_library
(
FFTW_
${
fftw_lib
}
_LIBRARY
NAMES
${
fftw_lib
}
HINTS
${
FFTW_LIBDIR
}
)
endforeach
()
else
()
if
(
FFTW_DIR
)
foreach
(
fftw_lib
${
FFTW_libs_to_find
}
)
set
(
FFTW_
${
fftw_lib
}
_LIBRARY
"FFTW_
${
fftw_lib
}
_LIBRARY-NOTFOUND"
)
find_library
(
FFTW_
${
fftw_lib
}
_LIBRARY
NAMES
${
fftw_lib
}
HINTS
${
FFTW_DIR
}
PATH_SUFFIXES lib lib32 lib64
)
endforeach
()
else
()
foreach
(
fftw_lib
${
FFTW_libs_to_find
}
)
set
(
FFTW_
${
fftw_lib
}
_LIBRARY
"FFTW_
${
fftw_lib
}
_LIBRARY-NOTFOUND"
)
find_library
(
FFTW_
${
fftw_lib
}
_LIBRARY
NAMES
${
fftw_lib
}
HINTS
${
PATH_TO_LOOK_FOR
}
)
endforeach
()
endif
()
set
(
FFTW_PREC
""
)
set
(
FFTW_PREC_TESTFUNC
"d"
)
endif
()
else
(
FFTW_LOOK_FOR_MKL
)
set
(
FFTW_LIBRARIES
""
)
set
(
FFTW_LIBRARY_DIRS
""
)
if
(
NOT FFTW_LOOK_FOR_MKL
)
if
(
FFTW_LOOK_FOR_THREADS
)
set
(
FFTW_libs_to_find
"fftw3
${
FFTW_PREC
}
_threads;fftw3
${
FFTW_PREC
}
;fftw3"
)
...
...
@@ -404,6 +520,15 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FFTW_FOUND) OR
else
()
set
(
FFTW_libs_to_find
"fftw3
${
FFTW_PREC
}
;fftw3"
)
endif
()
if
(
FFTW_LOOK_FOR_FFTW_QUAD
)
if
(
NOT FFTW_LOOK_FOR_MKL AND NOT FFTW_LOOK_FOR_ESSL
)
list
(
APPEND FFTW_libs_to_find
"quadmath"
)
endif
()
endif
()
if
(
FFTW_LOOK_FOR_ESSL
)
set
(
FFTW_libs_to_find
"fftw3_essl"
)
endif
()
# Try to find the fftw lib in the given paths
# ----------------------------------------------
...
...
@@ -435,12 +560,8 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FFTW_FOUND) OR
endif
()
endif
()
endif
(
FFTW_LOOK_FOR_MKL
)
# If found, add path to cmake variable
# ------------------------------------
set
(
FFTW_LIBRARIES
""
)
set
(
FFTW_LIBRARY_DIRS
""
)
foreach
(
fftw_lib
${
FFTW_libs_to_find
}
)
if
(
FFTW_
${
fftw_lib
}
_LIBRARY
)
...
...
@@ -458,9 +579,104 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FFTW_FOUND) OR
endforeach
()
# check if one lib is NOTFOUND
foreach
(
lib
${
FFTW_LIBRARIES
}
)
if
(
NOT lib
)
set
(
FFTW_LIBRARIES
"FFTW_LIBRARIES-NOTFOUND"
)
endif
()
endforeach
()
endif
(
NOT FFTW_LOOK_FOR_MKL
)
if
(
FFTW_LOOK_FOR_MKL OR FFTW_LOOK_FOR_ESSL
)
# FFTW relies on blas libs
if
(
FFTW_LOOK_FOR_THREADS
)
if
(
FFTW_LOOK_FOR_MKL
)
if
(
BLAS_PAR_LIBRARIES
)
list
(
APPEND FFTW_LIBRARIES
"
${
BLAS_PAR_LIBRARIES
}
"
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"Multithreaded FFTW has been found:
${
FFTW_LIBRARIES
}
"
)
endif
()
else
()
if
(
NOT FFTW_FIND_QUIETLY
)
if
(
FFTW_FIND_REQUIRED AND FFTW_FIND_REQUIRED_MKL
)
message
(
FATAL_ERROR
"FFTW is required but not found."
)
else
()
message
(
STATUS
"Multithreaded FFTW not found."
)
endif
()
endif
()
endif
(
BLAS_PAR_LIBRARIES
)
elseif
(
FFTW_LOOK_FOR_ESSL
)
if
(
FFTW_LIBRARIES AND BLAS_PAR_LIBRARIES
)
list
(
APPEND FFTW_LIBRARIES
"
${
BLAS_PAR_LIBRARIES
}
"
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"Multithreaded FFTW has been found:
${
FFTW_LIBRARIES
}
"
)
endif
()
else
()
if
(
NOT FFTW_FIND_QUIETLY
)
if
(
FFTW_FIND_REQUIRED AND FFTW_FIND_REQUIRED_MKL
)
message
(
FATAL_ERROR
"FFTW is required but not found."
)
else
()
message
(
STATUS
"Multithreaded FFTW not found."
)
endif
()
endif
()
endif
(
FFTW_LIBRARIES AND BLAS_PAR_LIBRARIES
)
endif
()
else
(
FFTW_LOOK_FOR_THREADS
)
if
(
FFTW_LOOK_FOR_MKL
)
if
(
BLAS_SEQ_LIBRARIES
)
list
(
APPEND FFTW_LIBRARIES
"
${
BLAS_SEQ_LIBRARIES
}
"
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"FFTW has been found:
${
FFTW_LIBRARIES
}
"
)
endif
()
else
()
if
(
NOT FFTW_FIND_QUIETLY
)
if
(
FFTW_FIND_REQUIRED AND FFTW_FIND_REQUIRED_MKL
)
message
(
FATAL_ERROR
"FFTW is required but not found."
)
else
()
message
(
STATUS
"FFTW not found."
)
endif
()
endif
()
endif
(
BLAS_SEQ_LIBRARIES
)
elseif
(
FFTW_LOOK_FOR_ESSL
)
if
(
FFTW_LIBRARIES AND BLAS_SEQ_LIBRARIES
)
list
(
APPEND FFTW_LIBRARIES
"
${
BLAS_SEQ_LIBRARIES
}
"
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"FFTW has been found:
${
FFTW_LIBRARIES
}
"
)
endif
()
else
()
if
(
NOT FFTW_FIND_QUIETLY
)
if
(
FFTW_FIND_REQUIRED AND FFTW_FIND_REQUIRED_MKL
)
message
(
FATAL_ERROR
"FFTW is required but not found."
)
else
()
message
(
STATUS
"FFTW not found."
)
endif
()
endif
()
endif
(
FFTW_LIBRARIES AND BLAS_SEQ_LIBRARIES
)
endif
()
endif
(
FFTW_LOOK_FOR_THREADS
)
if
(
BLAS_LIBRARY_DIRS
)
list
(
APPEND FFTW_LIBRARY_DIRS
"
${
BLAS_LIBRARY_DIRS
}
"
)
else
()
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
WARNING
"FFTW_LIBRARY_DIRS may not be complete because BLAS_LIBRARY_DIRS is empty."
)
endif
()
endif
()
endif
(
FFTW_LOOK_FOR_MKL OR FFTW_LOOK_FOR_ESSL
)
list
(
REMOVE_DUPLICATES FFTW_INCLUDE_DIRS
)
list
(
REMOVE_DUPLICATES FFTW_LIBRARY_DIRS
)
# check if one lib is NOTFOUND
foreach
(
lib
${
FFTW_LIBRARIES
}
)
if
(
NOT lib
)
set
(
FFTW_LIBRARIES
"FFTW_LIBRARIES-NOTFOUND"
)
endif
()
endforeach
()
# check a function to validate the find
if
(
FFTW_LIBRARIES
)
...
...
@@ -484,15 +700,15 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FFTW_FOUND) OR
endif
()
# OMP
if
(
FFTW_LOOK_FOR_OMP
)
if
(
CMAKE_C_COMPILER_ID STREQUAL
"GNU
"
)
# either gomp ...
#set(REQUIRED_FLAGS "-fopenmp")
#
list(APPEND REQUIRED_LIBS "-lgomp")
# or iomp5
list
(
APPEND REQUIRED_LIBS
"-liomp5"
)
elseif
(
CMAKE_C_COMPILER_ID STREQUAL
"Intel"
)
list
(
APPEND REQUIRED_LIBS
"-liomp5"
)
endif
()
set
(
REQUIRED_FLAGS
"-fopenmp
"
)
#if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
# # either gomp ...