@@ -4,81 +4,89 @@ INCLUDE( CheckCXXSourceCompiles )
4
4
5
5
MESSAGE (STATUS "Looking for Intel MKL libraries" )
6
6
7
- # Extremely Basic Support of common mkl module environment variables
8
- # or -DMKLROOT/-DMKL_HOME instead of preferred -DMKL_ROOT
9
- # Some Linux distributions (Ubuntu >= 18.10) provide MKL
10
- # headers in /usr/include/mkl, define MKL_ROOT but not used for library searching.
11
- if (NOT MKL_ROOT)
12
- # Finding and setting the MKL_INCLUDE_DIRECTORIES
13
- find_path (MKL_INCLUDE_DIRECTORIES "mkl.h"
14
- HINTS ${MKLROOT} ${MKL_HOME} $ENV{MKLROOT} $ENV{MKL_ROOT} $ENV{MKL_HOME}
15
- PATH_SUFFIXES include mkl)
16
- string (REPLACE "/include" "" MKL_ROOT ${MKL_INCLUDE_DIRECTORIES} )
17
- else (NOT MKL_ROOT)
18
- # Finding and setting the MKL_INCLUDE_DIRECTORIES
19
- set (SUFFIXES include )
20
- find_path (MKL_INCLUDE_DIRECTORIES "mkl.h" HINTS ${MKL_ROOT}
21
- PATH_SUFFIXES ${SUFFIXES} )
22
- if (NOT MKL_INCLUDE_DIRECTORIES)
7
+ IF (DEFINED MKL_ROOT)
8
+ # Finding and setting the MKL_INCLUDE_DIRECTORIES based on explicit MKL_ROOT
9
+ SET (SUFFIXES include )
10
+ FIND_PATH (MKL_INCLUDE_DIRECTORIES "mkl.h" HINTS ${MKL_ROOT}
11
+ PATH_SUFFIXES ${SUFFIXES} NO_CMAKE_SYSTEM_PATH)
12
+ IF (NOT MKL_INCLUDE_DIRECTORIES)
23
13
message (FATAL_ERROR "MKL_INCLUDE_DIRECTORIES not set. \" mkl.h\" not found in MKL_ROOT/(${SUFFIXES} )" )
24
- endif ()
25
- endif (NOT MKL_ROOT)
14
+ ENDIF ()
15
+ ELSE (DEFINED MKL_ROOT)
16
+ # Finding and setting the MKL_INCLUDE_DIRECTORIES based on MKLROOT, MKL_HOME, $ENV{MKLROOT}, $ENV{MKL_ROOT}, $ENV{MKL_HOME}
17
+ # Extremely Basic Support of common mkl module environment variables
18
+ # or -DMKLROOT/-DMKL_HOME instead of preferred -DMKL_ROOT
19
+ FIND_PATH (MKL_INCLUDE_DIRECTORIES "mkl.h"
20
+ HINTS ${MKLROOT} ${MKL_HOME} $ENV{MKLROOT} $ENV{MKL_ROOT} $ENV{MKL_HOME}
21
+ PATH_SUFFIXES include NO_CMAKE_SYSTEM_PATH)
22
+ IF (MKL_INCLUDE_DIRECTORIES)
23
+ STRING (REPLACE "/include" "" MKL_ROOT ${MKL_INCLUDE_DIRECTORIES} )
24
+ ELSE (MKL_INCLUDE_DIRECTORIES)
25
+ # Finding MKL headers in the system
26
+ FIND_PATH (MKL_INCLUDE_DIRECTORIES "mkl.h" PATH_SUFFIXES mkl)
27
+ ENDIF (MKL_INCLUDE_DIRECTORIES)
28
+ ENDIF (DEFINED MKL_ROOT)
26
29
27
- if (NOT MKL_ROOT)
28
- if (CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
29
- message (FATAL_ERROR "Intel's standard compilervar.sh sets the env variable MKLROOT.\n "
30
+ IF (MKL_INCLUDE_DIRECTORIES)
31
+ MESSAGE ("MKL_INCLUDE_DIRECTORIES: ${MKL_INCLUDE_DIRECTORIES} " )
32
+ ELSE (MKL_INCLUDE_DIRECTORIES)
33
+ IF (CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
34
+ MESSAGE (FATAL_ERROR "Intel's standard compilervar.sh sets the env variable MKLROOT.\n "
30
35
"If you are invoking icc without the customary environment\n "
31
36
"you must set the the environment variable or pass cmake MKL_ROOT." )
32
- else (CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
33
- message (FATAL_ERROR "ENABLE_MKL is TRUE and mkl directory not found. Set MKL_ROOT." )
34
- endif (CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
35
- endif (NOT MKL_ROOT)
36
-
37
- message ("MKL_INCLUDE_DIRECTORIES: ${MKL_INCLUDE_DIRECTORIES} " )
37
+ ELSE (CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
38
+ MESSAGE (FATAL_ERROR "ENABLE_MKL is TRUE and mkl directory not found. Set MKL_ROOT." )
39
+ ENDIF (CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
40
+ ENDIF (MKL_INCLUDE_DIRECTORIES)
38
41
39
- if ( NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
42
+ IF ( NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
40
43
# Finding and setting the MKL_LINK_DIRECTORIES
41
44
# the directory organization varies with platform and targets
42
45
# these suffixes are not exhaustive
43
- set (MKL_FIND_LIB "libmkl_intel_lp64${CMAKE_SHARED_LIBRARY_SUFFIX} " )
44
- set (SUFFIXES lib lib/intel64)
45
- find_library (MKL_LINK_DIRECTORIES "${MKL_FIND_LIB} " HINTS ${MKL_ROOT}
46
- PATH_SUFFIXES ${SUFFIXES} )
47
- if (NOT MKL_LINK_DIRECTORIES)
48
- message (FATAL_ERROR "MKL_LINK_DIRECTORIES not set. ${MKL_FIND_LIB} "
49
- "not found in MKL_ROOT/(${SUFFIXES} )" )
50
- endif ()
51
- string (REPLACE "/${MKL_FIND_LIB} " "" MKL_LINK_DIRECTORIES ${MKL_LINK_DIRECTORIES} )
52
- message ("MKL_LINK_DIRECTORIES: ${MKL_LINK_DIRECTORIES} " )
53
- set (MKL_LINKER_FLAGS "-L${MKL_LINK_DIRECTORIES} -Wl,-rpath,${MKL_LINK_DIRECTORIES} " )
54
- set (MKL_LIBRARIES "-lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl" )
55
- else ( NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
46
+ SET (MKL_FIND_LIB "libmkl_intel_lp64${CMAKE_SHARED_LIBRARY_SUFFIX} " )
47
+ SET (SUFFIXES lib lib/intel64)
48
+ FIND_PATH (MKL_LINK_DIRECTORIES "${MKL_FIND_LIB} " HINTS ${MKL_ROOT}
49
+ PATH_SUFFIXES ${SUFFIXES} NO_CMAKE_SYSTEM_PATH)
50
+ IF (MKL_LINK_DIRECTORIES)
51
+ MESSAGE ("MKL_LINK_DIRECTORIES: ${MKL_LINK_DIRECTORIES} " )
52
+ set (MKL_LINKER_FLAGS "-L${MKL_LINK_DIRECTORIES} -Wl,-rpath,${MKL_LINK_DIRECTORIES} " )
53
+ ELSE (MKL_LINK_DIRECTORIES)
54
+ FIND_LIBRARY (MKL_SYSTEM_LIBRARIES "${MKL_FIND_LIB} " )
55
+ IF (MKL_SYSTEM_LIBRARIES)
56
+ MESSAGE ("MKL provided by the system. Leave MKL_LINK_DIRECTORIES unset." )
57
+ ENDIF ()
58
+ ENDIF (MKL_LINK_DIRECTORIES)
59
+ IF (NOT MKL_LINK_DIRECTORIES AND NOT MKL_SYSTEM_LIBRARIES)
60
+ MESSAGE (FATAL_ERROR "${MKL_FIND_LIB} found neither in MKL_ROOT/(${SUFFIXES} ) nor on system library paths." )
61
+ ENDIF ()
62
+ SET (MKL_LIBRARIES "-lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl" )
63
+ ELSE ( NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
56
64
# this takes away link control for intel but is convenient
57
65
# perhaps we should consider dropping it since it will more or less
58
66
# unify the MKL setup.
59
67
# Note -mkl implicitly includes that icc's mkl/include
60
- set (MKL_COMPILE_DEFINITIONS "-mkl" )
61
- endif (NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
68
+ SET (MKL_COMPILE_DEFINITIONS "-mkl" )
69
+ ENDIF (NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
62
70
63
71
# Check for mkl.h
64
72
FILE ( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /CMakeTmp/src_mkl.cxx"
65
73
"#include <iostream>\n #include <mkl.h>\n int main() { return 0; }\n " )
66
- try_compile (HAVE_MKL ${CMAKE_BINARY_DIR}
74
+ TRY_COMPILE (HAVE_MKL ${CMAKE_BINARY_DIR}
67
75
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /CMakeTmp/src_mkl.cxx
68
76
CMAKE_FLAGS
69
77
"-DINCLUDE_DIRECTORIES=${MKL_INCLUDE_DIRECTORIES} "
70
78
"-DLINK_DIRECTORIES=${MKL_LINK_DIRECTORIES} "
71
79
LINK_LIBRARIES "${MKL_LIBRARIES} "
72
80
COMPILE_DEFINITIONS "${MKL_COMPILE_DEFINITIONS} "
73
81
OUTPUT_VARIABLE MKL_OUT)
74
- if ( NOT HAVE_MKL )
82
+ IF ( NOT HAVE_MKL )
75
83
MESSAGE ( "${MKL_OUT} " )
76
- endif ( NOT HAVE_MKL )
84
+ ENDIF ( NOT HAVE_MKL )
77
85
78
86
# Check for mkl_vml_functions.h
79
87
FILE ( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /CMakeTmp/src_mkl_vml.cxx"
80
88
"#include <iostream>\n #include <mkl_vml_functions.h>\n int main() { return 0; }\n " )
81
- try_compile (HAVE_MKL_VML ${CMAKE_BINARY_DIR}
89
+ TRY_COMPILE (HAVE_MKL_VML ${CMAKE_BINARY_DIR}
82
90
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /CMakeTmp/src_mkl_vml.cxx
83
91
CMAKE_FLAGS
84
92
"-DINCLUDE_DIRECTORIES=${MKL_INCLUDE_DIRECTORIES} "
@@ -87,34 +95,65 @@ try_compile(HAVE_MKL_VML ${CMAKE_BINARY_DIR}
87
95
OUTPUT_VARIABLE MKL_OUT)
88
96
89
97
# Check for fftw3
90
- find_path (MKL_FFTW3 "fftw3.h"
98
+ FIND_PATH (MKL_FFTW3 "fftw3.h"
91
99
HINTS ${MKL_INCLUDE_DIRECTORIES}
92
100
PATH_SUFFIXES fftw)
93
- if (MKL_FFTW3)
94
- list (APPEND MKL_INCLUDE_DIRECTORIES ${MKL_FFTW3} )
101
+ IF (MKL_FFTW3)
95
102
FILE ( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /CMakeTmp/src_mkl_fftw3.cxx"
96
103
"#include <iostream>\n #include <fftw3.h>\n int main() { return 0; }\n " )
97
- try_compile (HAVE_MKL_FFTW3 ${CMAKE_BINARY_DIR}
104
+ TRY_COMPILE (HAVE_MKL_FFTW3 ${CMAKE_BINARY_DIR}
98
105
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY} /CMakeTmp/src_mkl_fftw3.cxx
99
106
CMAKE_FLAGS
100
- "-DINCLUDE_DIRECTORIES=${MKL_INCLUDE_DIRECTORIES } "
107
+ "-DINCLUDE_DIRECTORIES=${MKL_FFTW3 } "
101
108
"-DLINK_DIRECTORIES=${MKL_LINK_DIRECTORIES} "
102
109
LINK_LIBRARIES "${MKL_LIBRARIES} "
103
110
COMPILE_DEFINITIONS "${MKL_COMPILE_DEFINITIONS} "
104
111
OUTPUT_VARIABLE MKL_OUT)
105
- else (MKL_FFTW3)
112
+ ELSE (MKL_FFTW3)
106
113
UNSET (HAVE_MKL_FFTW3)
107
- endif (MKL_FFTW3)
114
+ ENDIF (MKL_FFTW3)
108
115
109
116
IF ( HAVE_MKL )
110
- SET ( MKL_FOUND 1 )
111
- SET ( MKL_FLAGS ${MKL_COMPILE_DEFINITIONS} )
112
- include_directories ( ${MKL_INCLUDE_DIRECTORIES} )
117
+ SET ( MKL_FOUND TRUE )
113
118
MESSAGE (STATUS "MKL found: HAVE_MKL=${HAVE_MKL} , HAVE_MKL_VML=${HAVE_MKL_VML} , HAVE_MKL_FFTW3=${HAVE_MKL_FFTW3} " )
119
+
120
+ #create BLAS_LAPACK target
121
+ ADD_LIBRARY (Math::BLAS_LAPACK INTERFACE IMPORTED )
122
+ SET_TARGET_PROPERTIES (Math::BLAS_LAPACK PROPERTIES INTERFACE_COMPILE_DEFINITIONS "HAVE_MKL" )
123
+ IF (NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
124
+ SET_TARGET_PROPERTIES (Math::BLAS_LAPACK PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE_DIRECTORIES} "
125
+ INTERFACE_LINK_LIBRARIES "${MKL_LINKER_FLAGS} ;${MKL_LIBRARIES} " )
126
+ ELSE (NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
127
+ SET_TARGET_PROPERTIES (Math::BLAS_LAPACK PROPERTIES INTERFACE_COMPILE_OPTIONS "-mkl"
128
+ INTERFACE_LINK_LIBRARIES "-mkl" )
129
+ ENDIF (NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
130
+
131
+ IF ( HAVE_MKL_VML )
132
+ #create scalar_vector_functions target
133
+ ADD_LIBRARY (Math::scalar_vector_functions INTERFACE IMPORTED )
134
+ SET_TARGET_PROPERTIES (Math::scalar_vector_functions PROPERTIES INTERFACE_COMPILE_DEFINITIONS "HAVE_MKL;HAVE_MKL_VML" )
135
+ IF (NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
136
+ SET_TARGET_PROPERTIES (Math::scalar_vector_functions PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${MKL_INCLUDE_DIRECTORIES} "
137
+ INTERFACE_LINK_LIBRARIES "${MKL_LINKER_FLAGS} ;${MKL_LIBRARIES} " )
138
+ ELSE (NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
139
+ SET_TARGET_PROPERTIES (Math::scalar_vector_functions PROPERTIES INTERFACE_COMPILE_OPTIONS "-mkl"
140
+ INTERFACE_LINK_LIBRARIES "-mkl" )
141
+ ENDIF (NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
142
+ ENDIF ( HAVE_MKL_VML )
143
+
144
+ IF ( HAVE_MKL_FFTW3 )
145
+ #create FFTW3 target
146
+ ADD_LIBRARY (Math::FFTW3 INTERFACE IMPORTED )
147
+ SET_TARGET_PROPERTIES (Math::FFTW3 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${MKL_FFTW3} "
148
+ INTERFACE_COMPILE_DEFINITIONS "HAVE_MKL;HAVE_LIBFFTW" )
149
+ IF (NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
150
+ SET_TARGET_PROPERTIES (Math::FFTW3 PROPERTIES INTERFACE_LINK_LIBRARIES "${MKL_LINKER_FLAGS} ;${MKL_LIBRARIES} " )
151
+ ELSE (NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
152
+ SET_TARGET_PROPERTIES (Math::FFTW3 PROPERTIES INTERFACE_COMPILE_OPTIONS "-mkl"
153
+ INTERFACE_LINK_LIBRARIES "-mkl" )
154
+ ENDIF (NOT CMAKE_CXX_COMPILER_ID MATCHES "Intel" )
155
+ ENDIF ( HAVE_MKL_FFTW3 )
114
156
ELSE ( HAVE_MKL )
115
- SET ( MKL_FOUND 0 )
116
- SET ( MKL_FLAGS )
117
- SET ( MKL_LIBRARIES )
118
- SET ( MKL_LINKER_FLAGS )
119
- MESSAGE ("MKL not found" )
157
+ SET ( MKL_FOUND FALSE )
158
+ MESSAGE (STATUS "MKL not found" )
120
159
ENDIF ( HAVE_MKL )
0 commit comments