Mentions légales du service
Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
ScalFMM
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
solverstack
ScalFMM
Commits
26421d22
Commit
26421d22
authored
9 years ago
by
PRUVOST Florent
Browse files
Options
Downloads
Patches
Plain Diff
FindFFTW: improve to find ibm essl
parent
26c7431b
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
CMakeModules/morse/find/FindFFTW.cmake
+391
-166
391 additions, 166 deletions
CMakeModules/morse/find/FindFFTW.cmake
with
391 additions
and
166 deletions
CMakeModules/morse/find/FindFFTW.cmake
+
391
−
166
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,22 +161,50 @@ 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}"
)
...
...
@@ -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)
# -------------------------------------------------------------------------------------
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
()
pkg_search_module
(
FFTW3 fftw3
)
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
)
if
(
FFTW_FOUND AND FFTW_LIBRARIES
)
message
(
STATUS
"Looking for FFTW - found using PkgConfig"
)
#if(NOT FFTW_INCLUDE_DIRS)
# 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 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
()
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
}
"
)
pkg_search_module
(
FFTW3 fftw3
)
endif
()
if
(
FFTW3_FOUND
)
if
(
NOT FFTW_FIND_QUIETLY
)
message
(
STATUS
"Looking for FFTW3 - found using PkgConfig"
)
endif
()
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
}
"
)
if
(
FFTW3_LIBRARIES
)
list
(
APPEND FFTW_LIBRARIES
"
${
FFTW3_LIBRARIES
}
"
)
endif
()
if
(
FFTW3L_LIBRARIES
)
list
(
APPEND FFTW_LIBRARIES_DEP
"
${
FFTW3L_LIBRARIES
}
"
)
if
(
FFTW3_INCLUDE_DIRS
)
list
(
APPEND FFTW_INCLUDE_DIRS
"
${
FFTW3_INCLUDE_DIRS
}
"
)
else
()
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
()
if
(
FFTW3F_LIBRARIES
)
list
(
APPEND FFTW_LIBRARIES_DEP
"
${
FFTW3F_LIBRARIES
}
"
)
endif
()
if
(
FFTW3_LIBRAR
IES
)
list
(
APPEND FFTW_LIBRAR
IES_DEP
"
${
FFTW3_LIBRAR
IE
S
}
"
)
if
(
FFTW3_LIBRAR
Y_DIRS
)
list
(
APPEND FFTW_LIBRAR
Y_DIRS
"
${
FFTW3_LIBRAR
Y_DIR
S
}
"
)
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
"
${
FFTW_LIBRARIES
}
"
)
if
(
FFTW_LIBRARIES
)
set
(
FFTW_WORKS TRUE
)
endif
()
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")
set
(
REQUIRED_FLAGS
"-fopenmp
"
)
#if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
# # either gomp ...
# 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
()
#
# or iomp5
#
list(APPEND REQUIRED_LIBS "-liomp5")
#
elseif (CMAKE_C_COMPILER_ID STREQUAL "Intel")
#
list(APPEND REQUIRED_LIBS "-liomp5")
#
endif()
endif
()
# MKL
if
(
FFTW_LOOK_FOR_MKL
)
...
...
@@ -521,7 +737,11 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FFTW_FOUND) OR
# test link
unset
(
FFTW_WORKS CACHE
)
include
(
CheckFunctionExists
)
if
(
FFTW_LOOK_FOR_ESSL
)
check_function_exists
(
${
FFTW_PREC_TESTFUNC
}
fftw_execute FFTW_WORKS
)
else
()
check_function_exists
(
${
FFTW_PREC_TESTFUNC
}
fftw_execute_ FFTW_WORKS
)
endif
()
mark_as_advanced
(
FFTW_WORKS
)
if
(
FFTW_WORKS
)
...
...
@@ -550,7 +770,12 @@ if( (NOT PKG_CONFIG_EXECUTABLE) OR (PKG_CONFIG_EXECUTABLE AND NOT FFTW_FOUND) OR
set
(
CMAKE_REQUIRED_LIBRARIES
)
endif
(
FFTW_LIBRARIES
)
endif
(
(
NOT PKG_CONFIG_EXECUTABLE
)
OR
(
PKG_CONFIG_EXECUTABLE AND NOT FFTW_FOUND
)
OR
(
FFTW_GIVEN_BY_USER
)
)
endif
(
(
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
)
if
(
FFTW_LIBRARIES
)
list
(
GET FFTW_LIBRARIES 0 first_lib
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment