1#================================================================== 2# Copyright (c) 2018 The Regents of the University of California, 3# through Lawrence Berkeley National Laboratory. 4# 5# Author: David Williams-Young 6# 7# This file is part of cmake-modules. All rights reserved. 8# 9# Redistribution and use in source and binary forms, with or without 10# modification, are permitted provided that the following conditions are met: 11# 12# (1) Redistributions of source code must retain the above copyright notice, this 13# list of conditions and the following disclaimer. 14# (2) Redistributions in binary form must reproduce the above copyright notice, 15# this list of conditions and the following disclaimer in the documentation 16# and/or other materials provided with the distribution. 17# (3) Neither the name of the University of California, Lawrence Berkeley 18# National Laboratory, U.S. Dept. of Energy nor the names of its contributors may 19# be used to endorse or promote products derived from this software without 20# specific prior written permission. 21# 22# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 23# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 24# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 25# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 26# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 27# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 28# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 29# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 31# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32# 33# You are under no obligation whatsoever to provide any bug fixes, patches, or 34# upgrades to the features, functionality or performance of the source code 35# ("Enhancements") to anyone; however, if you choose to make your Enhancements 36# available either publicly, or directly to Lawrence Berkeley National 37# Laboratory, without imposing a separate written license agreement for such 38# Enhancements, then you hereby grant the following license: a non-exclusive, 39# royalty-free perpetual license to install, use, modify, prepare derivative 40# works, incorporate into other computer software, distribute, and sublicense 41# such enhancements or derivative works thereof, in binary and source code form. 42# 43#================================================================== 44 45# FindIntelMKL.cmake 46# 47# Finds Intel(R) MKL and exports its linkange as 48# CMake TARGETS 49# 50# This module is meant to serve as part of FindLinAlg. 51# It can also be used by itself. 52# 53# The module will define the following variables: 54# 55# IntelMKL_FOUND - Found MKL installation 56# IntelMKL_INCLUDE_DIR - Location of MKL headers (mkl.h) 57# IntelMKL_LIBRARIES - MKL libraries 58# 59# This module will export the following CMake TARGETS if possible 60# 61# IntelMKL::mkl 62# 63# intelmkl_PREFERS_STATIC - default ON 64# intelmkl_PREFERED_THREAD_LEVEL - ( sequential, openmp, tbb ) default: openmp 65# intelmkl_PREFERED_THREAD_LIBRARY - ( intel, gnu, pgi ) default: depends on compiler 66 67include(CommonFunctions) 68 69# SANITY CHECK 70if( "ilp64" IN_LIST IntelMKL_FIND_COMPONENTS AND "lp64" IN_LIST IntelMKL_FIND_COMPONENTS ) 71 message( FATAL_ERROR "IntelMKL cannot link to both ILP64 and LP64 iterfaces" ) 72endif() 73 74if( "scalapack" IN_LIST IntelMKL_FIND_COMPONENTS AND NOT ("blacs" IN_LIST IntelMKL_FIND_COMPONENTS) ) 75 list(APPEND IntelMKL_FIND_COMPONENTS "blacs" ) 76endif() 77 78set(intelmkl_PREFERS_STATIC ON) 79if(BUILD_SHARED_LIBS) 80 set(intelmkl_PREFERS_STATIC OFF) 81endif() 82 83# MKL lib names 84if( intelmkl_PREFERS_STATIC ) 85 set( intelmkl_LP64_LIBRARY_NAME "libmkl_intel_lp64.a" ) 86 set( intelmkl_ILP64_LIBRARY_NAME "libmkl_intel_ilp64.a" ) 87 set( intelmkl_SEQUENTIAL_LIBRARY_NAME "libmkl_sequential.a" ) 88 set( intelmkl_OMP_INTEL_LIBRARY_NAME "libmkl_intel_thread.a" ) 89 set( intelmkl_OMP_GNU_LIBRARY_NAME "libmkl_gnu_thread.a" ) 90 set( intelmkl_OMP_PGI_LIBRARY_NAME "libmkl_pgi_thread.a" ) 91 set( intelmkl_TBB_LIBRARY_NAME "libmkl_tbb_thread.a" ) 92 set( intelmkl_CORE_LIBRARY_NAME "libmkl_core.a" ) 93 94 set( intelmkl_LP64_SCALAPACK_LIBRARY_NAME "libmkl_scalapack_lp64.a" ) 95 set( intelmkl_ILP64_SCALAPACK_LIBRARY_NAME "libmkl_scalapack_ilp64.a" ) 96 97 set( intelmkl_LP64_INTELMPI_BLACS_LIBRARY_NAME "libmkl_blacs_intelmpi_lp64.a" ) 98 set( intelmkl_LP64_OPENMPI_BLACS_LIBRARY_NAME "libmkl_blacs_openmpi_lp64.a" ) 99 set( intelmkl_LP64_SGIMPT_BLACS_LIBRARY_NAME "libmkl_blacs_sgimpt_lp64.a" ) 100 set( intelmkl_ILP64_INTELMPI_BLACS_LIBRARY_NAME "libmkl_blacs_intelmpi_ilp64.a" ) 101 set( intelmkl_ILP64_OPENMPI_BLACS_LIBRARY_NAME "libmkl_blacs_openmpi_ilp64.a" ) 102 set( intelmkl_ILP64_SGIMPT_BLACS_LIBRARY_NAME "libmkl_blacs_sgimpt_ilp64.a" ) 103else() 104 set( intelmkl_LP64_LIBRARY_NAME "mkl_intel_lp64" ) 105 set( intelmkl_ILP64_LIBRARY_NAME "mkl_intel_ilp64" ) 106 set( intelmkl_SEQUENTIAL_LIBRARY_NAME "mkl_sequential" ) 107 set( intelmkl_OMP_INTEL_LIBRARY_NAME "mkl_intel_thread" ) 108 set( intelmkl_OMP_GNU_LIBRARY_NAME "mkl_gnu_thread" ) 109 set( intelmkl_OMP_PGI_LIBRARY_NAME "mkl_pgi_thread" ) 110 set( intelmkl_TBB_LIBRARY_NAME "mkl_tbb_thread" ) 111 set( intelmkl_CORE_LIBRARY_NAME "mkl_core" ) 112 113 set( intelmkl_LP64_SCALAPACK_LIBRARY_NAME "mkl_scalapack_lp64" ) 114 set( intelmkl_ILP64_SCALAPACK_LIBRARY_NAME "mkl_scalapack_ilp64" ) 115 116 set( intelmkl_LP64_INTELMPI_BLACS_LIBRARY_NAME "mkl_blacs_intelmpi_lp64" ) 117 set( intelmkl_LP64_OPENMPI_BLACS_LIBRARY_NAME "mkl_blacs_openmpi_lp64" ) 118 set( intelmkl_LP64_SGIMPT_BLACS_LIBRARY_NAME "mkl_blacs_sgimpt_lp64" ) 119 set( intelmkl_ILP64_INTELMPI_BLACS_LIBRARY_NAME "mkl_blacs_intelmpi_ilp64" ) 120 set( intelmkl_ILP64_OPENMPI_BLACS_LIBRARY_NAME "mkl_blacs_openmpi_ilp64" ) 121 set( intelmkl_ILP64_SGIMPT_BLACS_LIBRARY_NAME "mkl_blacs_sgimpt_ilp64" ) 122endif() 123 124if( intelmkl_PREFERS_STATIC AND ENABLE_DPCPP) 125 set( intelmkl_SYCL_LIBRARY_NAME "libmkl_sycl.a" ) 126elseif(ENABLE_DPCPP) 127 set( intelmkl_SYCL_LIBRARY_NAME "mkl_sycl" ) 128endif() 129 130# Defaults 131if( NOT intelmkl_PREFERED_THREAD_LEVEL ) 132 if(USE_OPENMP) 133 set( intelmkl_PREFERED_THREAD_LEVEL "openmp" ) 134 else() 135 set( intelmkl_PREFERED_THREAD_LEVEL "sequential" ) 136 endif() 137endif() 138 139if( NOT intelmkl_PREFERED_MPI_LIBRARY ) 140 set( intelmkl_PREFERED_MPI_LIBRARY "intelmpi" ) 141endif() 142 143if( NOT intelmkl_PREFIX ) 144 set( intelmkl_PREFIX ${MKLROOT} $ENV{MKLROOT} ) 145endif() 146 147 148 149# MKL Threads 150if( intelmkl_PREFERED_THREAD_LEVEL MATCHES "sequential" ) 151 set( intelmkl_THREAD_LIBRARY_NAME ${intelmkl_SEQUENTIAL_LIBRARY_NAME} ) 152elseif( intelmkl_PREFERED_THREAD_LEVEL MATCHES "tbb" ) 153 set( intelmkl_THREAD_LIBRARY_NAME ${intelmkl_TBB_LIBRARY_NAME} ) 154else() # OpenMP 155 if( CMAKE_C_COMPILER_ID MATCHES "Intel" ) 156 set( intelmkl_THREAD_LIBRARY_NAME ${intelmkl_OMP_INTEL_LIBRARY_NAME} ) 157 elseif( CMAKE_C_COMPILER_ID MATCHES "PGI" ) 158 set( intelmkl_THREAD_LIBRARY_NAME ${intelmkl_OMP_PGI_LIBRARY_NAME} ) 159 else() 160 set( intelmkl_THREAD_LIBRARY_NAME ${intelmkl_OMP_GNU_LIBRARY_NAME} ) 161 endif() 162endif() 163 164 165# MKL MPI for BLACS 166if( intelmkl_PREFERED_MPI_LIBRARY MATCHES "openmpi" ) 167 set( intelmkl_LP64_BLACS_LIBRARY_NAME ${intelmkl_LP64_OPENMPI_BLACS_LIBRARY_NAME} ) 168 set( intelmkl_ILP64_BLACS_LIBRARY_NAME ${intelmkl_ILP64_OPENMPI_BLACS_LIBRARY_NAME} ) 169elseif( intelmkl_PREFERED_MPI_LIBRARY MATCHES "sgimpt" ) 170 set( intelmkl_LP64_BLACS_LIBRARY_NAME ${intelmkl_LP64_SGIMPT_BLACS_LIBRARY_NAME} ) 171 set( intelmkl_ILP64_BLACS_LIBRARY_NAME ${intelmkl_ILP64_SGIMPT_BLACS_LIBRARY_NAME} ) 172else() # Intel MPI 173 set( intelmkl_LP64_BLACS_LIBRARY_NAME ${intelmkl_LP64_INTELMPI_BLACS_LIBRARY_NAME} ) 174 set( intelmkl_ILP64_BLACS_LIBRARY_NAME ${intelmkl_ILP64_INTELMPI_BLACS_LIBRARY_NAME} ) 175endif() 176 177 178# Header 179find_path( intelmkl_INCLUDE_DIR 180 NAMES mkl.h 181 HINTS ${intelmkl_PREFIX} 182 PATHS ${intelmkl_INCLUDE_DIR} 183 PATH_SUFFIXES include 184 DOC "Intel(R) MKL header" 185) 186 187find_library( intelmkl_THREAD_LIBRARY 188 NAMES ${intelmkl_THREAD_LIBRARY_NAME} 189 HINTS ${intelmkl_PREFIX} 190 PATHS ${intelmkl_LIBRARY_DIR} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES} 191 PATH_SUFFIXES lib/intel64 lib/ia32 192 DOC "Intel(R) MKL THREAD Library" 193) 194 195find_library( intelmkl_CORE_LIBRARY 196 NAMES ${intelmkl_CORE_LIBRARY_NAME} 197 HINTS ${intelmkl_PREFIX} 198 PATHS ${intelmkl_LIBRARY_DIR} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES} 199 PATH_SUFFIXES lib/intel64 lib/ia32 200 DOC "Intel(R) MKL CORE Library" 201) 202 203# Check version 204if( EXISTS ${intelmkl_INCLUDE_DIR}/mkl_version.h ) 205 set( version_pattern 206 "^#define[\t ]+__INTEL_MKL(|_MINOR|_UPDATE)__[\t ]+([0-9\\.]+)$" 207 ) 208 file( STRINGS ${intelmkl_INCLUDE_DIR}/mkl_version.h mkl_version 209 REGEX ${version_pattern} ) 210 211 foreach( match ${mkl_version} ) 212 213 if(IntelMKL_VERSION_STRING) 214 set(IntelMKL_VERSION_STRING "${IntelMKL_VERSION_STRING}.") 215 endif() 216 217 string(REGEX REPLACE ${version_pattern} 218 "${IntelMKL_VERSION_STRING}\\2" 219 IntelMKL_VERSION_STRING ${match} 220 ) 221 222 set(IntelMKL_VERSION_${CMAKE_MATCH_1} ${CMAKE_MATCH_2}) 223 224 endforeach() 225 226 unset( mkl_version ) 227 unset( version_pattern ) 228endif() 229 230if( intelmkl_INCLUDE_DIR ) 231 set( IntelMKL_INCLUDE_DIR ${intelmkl_INCLUDE_DIR} ) 232endif() 233 234 235# Handle LP64 / ILP64 236find_library( intelmkl_ILP64_LIBRARY 237 NAMES ${intelmkl_ILP64_LIBRARY_NAME} 238 HINTS ${intelmkl_PREFIX} 239 PATHS ${intelmkl_LIBRARY_DIR} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES} 240 PATH_SUFFIXES lib/intel64 lib/ia32 241 DOC "Intel(R) ILP64 MKL Library" 242) 243 244find_library( intelmkl_LP64_LIBRARY 245 NAMES ${intelmkl_LP64_LIBRARY_NAME} 246 HINTS ${intelmkl_PREFIX} 247 PATHS ${intelmkl_LIBRARY_DIR} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES} 248 PATH_SUFFIXES lib/intel64 lib/ia32 249 DOC "Intel(R) LP64 MKL Library" 250) 251 252if( intelmkl_ILP64_LIBRARY ) 253 set( IntelMKL_ilp64_FOUND TRUE ) 254endif() 255 256if( intelmkl_LP64_LIBRARY ) 257 set( IntelMKL_lp64_FOUND TRUE ) 258endif() 259 260# SYCL 261if(ENABLE_DPCPP) 262 set(USE_DPCPP ON) 263 find_library( intelmkl_SYCL_LIBRARY 264 NAMES ${intelmkl_SYCL_LIBRARY_NAME} 265 HINTS ${intelmkl_PREFIX} 266 PATHS ${intelmkl_LIBRARY_DIR} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES} 267 PATH_SUFFIXES lib/intel64 lib/ia32 268 DOC "Intel(R) MKL SYCL Library" 269 ) 270endif() 271 272 273# BLACS / ScaLAPACK 274 275find_library( intelmkl_ILP64_BLACS_LIBRARY 276 NAMES ${intelmkl_ILP64_BLACS_LIBRARY_NAME} 277 HINTS ${intelmkl_PREFIX} 278 PATHS ${intelmkl_LIBRARY_DIR} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES} 279 PATH_SUFFIXES lib/intel64 lib/ia32 280 DOC "Intel(R) ILP64 MKL BLACS Library" 281) 282 283find_library( intelmkl_LP64_BLACS_LIBRARY 284 NAMES ${intelmkl_LP64_BLACS_LIBRARY_NAME} 285 HINTS ${intelmkl_PREFIX} 286 PATHS ${intelmkl_LIBRARY_DIR} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES} 287 PATH_SUFFIXES lib/intel64 lib/ia32 288 DOC "Intel(R) LP64 MKL BLACS Library" 289) 290 291find_library( intelmkl_ILP64_SCALAPACK_LIBRARY 292 NAMES ${intelmkl_ILP64_SCALAPACK_LIBRARY_NAME} 293 HINTS ${intelmkl_PREFIX} 294 PATHS ${intelmkl_LIBRARY_DIR} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES} 295 PATH_SUFFIXES lib/intel64 lib/ia32 296 DOC "Intel(R) ILP64 MKL SCALAPACK Library" 297) 298 299find_library( intelmkl_LP64_SCALAPACK_LIBRARY 300 NAMES ${intelmkl_LP64_SCALAPACK_LIBRARY_NAME} 301 HINTS ${intelmkl_PREFIX} 302 PATHS ${intelmkl_LIBRARY_DIR} ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES} 303 PATH_SUFFIXES lib/intel64 lib/ia32 304 DOC "Intel(R) LP64 MKL SCALAPACK Library" 305) 306 307 308 309# Default to LP64 310if( "ilp64" IN_LIST IntelMKL_FIND_COMPONENTS ) 311 set(MKL_ILP64 ON) 312 #set( IntelMKL_COMPILE_DEFINITIONS "MKL_ILP64" ) 313 if( CMAKE_C_COMPILER_ID MATCHES "GNU" ) 314 set( IntelMKL_C_COMPILE_FLAGS "-m64" ) 315 set( IntelMKL_Fortran_COMPILE_FLAGS "-m64" "-fdefault-integer-8" ) 316 elseif( CMAKE_C_COMPILER_ID MATCHES "PGI" ) 317 set( IntelMKL_Fortran_COMPILE_FLAGS "-i8" ) 318 endif() 319 set( intelmkl_LIBRARY ${intelmkl_ILP64_LIBRARY} ) 320 321 if( intelmkl_ILP64_BLACS_LIBRARY ) 322 set( intelmkl_BLACS_LIBRARY ${intelmkl_ILP64_BLACS_LIBRARY} ) 323 set( IntelMKL_blacs_FOUND TRUE ) 324 endif() 325 326 if( intelmkl_ILP64_SCALAPACK_LIBRARY ) 327 set( intelmkl_SCALAPACK_LIBRARY ${intelmkl_ILP64_SCALAPACK_LIBRARY} ) 328 set( IntelMKL_scalapack_FOUND TRUE ) 329 endif() 330 331else() 332 set( intelmkl_LIBRARY ${intelmkl_LP64_LIBRARY} ) 333 334 if( intelmkl_LP64_BLACS_LIBRARY ) 335 set( intelmkl_BLACS_LIBRARY ${intelmkl_LP64_BLACS_LIBRARY} ) 336 set( IntelMKL_blacs_FOUND TRUE ) 337 endif() 338 339 if( intelmkl_LP64_SCALAPACK_LIBRARY ) 340 set( intelmkl_SCALAPACK_LIBRARY ${intelmkl_LP64_SCALAPACK_LIBRARY} ) 341 set( IntelMKL_scalapack_FOUND TRUE ) 342 endif() 343endif() 344 345 346 347 348 349# Check if found library is actually static 350if( intelmkl_CORE_LIBRARY MATCHES ".+libmkl_core.a" ) 351 set( intelmkl_PREFERS_STATIC TRUE ) 352endif() 353 354 355 356 357if( intelmkl_LIBRARY AND intelmkl_THREAD_LIBRARY AND intelmkl_CORE_LIBRARY ) 358 #if( intelmkl_PREFERS_STATIC ) 359 # set( IntelMKL_LIBRARIES "-Wl,--start-group" ${intelmkl_LIBRARY} ${intelmkl_THREAD_LIBRARY} ${intelmkl_CORE_LIBRARY} "-Wl,--end-group" ) 360 #else() 361 # set( IntelMKL_LIBRARIES "-Wl,--no-as-needed" ${intelmkl_LIBRARY} ${intelmkl_THREAD_LIBRARY} ${intelmkl_CORE_LIBRARY} ) 362 #endif() 363 364 365 if( intelmkl_PREFERS_STATIC ) 366 367 if( "scalapack" IN_LIST IntelMKL_FIND_COMPONENTS ) 368 set( IntelMKL_LIBRARIES ${intelmkl_SCALAPACK_LIBRARY} ) 369 endif() 370 371 list( APPEND IntelMKL_LIBRARIES "-Wl,--start-group" ${intelmkl_LIBRARY} ${intelmkl_THREAD_LIBRARY} ${intelmkl_CORE_LIBRARY} ${intelmkl_SYCL_LIBRARY}) 372 373 if( "blacs" IN_LIST IntelMKL_FIND_COMPONENTS ) 374 list( APPEND IntelMKL_LIBRARIES ${intelmkl_BLACS_LIBRARY} ) 375 endif() 376 377 list( APPEND IntelMKL_LIBRARIES "-Wl,--end-group" ) 378 379 else() 380 381 set( IntelMKL_LIBRARIES "-Wl,--no-as-needed" ) 382 if( "scalapack" IN_LIST IntelMKL_FIND_COMPONENTS ) 383 list( APPEND IntelMKL_LIBRARIES ${intelmkl_SCALAPACK_LIBRARY} ) 384 endif() 385 386 list( APPEND IntelMKL_LIBRARIES ${intelmkl_LIBRARY} ${intelmkl_THREAD_LIBRARY} ${intelmkl_CORE_LIBRARY} ${intelmkl_SYCL_LIBRARY}) 387 388 if( "blacs" IN_LIST IntelMKL_FIND_COMPONENTS ) 389 list( APPEND IntelMKL_LIBRARIES ${intelmkl_BLACS_LIBRARY} ) 390 endif() 391 392 endif() 393 394 395 if( intelmkl_PREFERED_THREAD_LEVEL MATCHES "openmp" ) 396 find_package( OpenMP QUIET ) 397 set( IntelMKL_LIBRARIES ${IntelMKL_LIBRARIES} OpenMP::OpenMP_C ) 398 elseif( intelmkl_PREFERED_THREAD_LEVEL MATCHES "sequential" ) 399 find_package( Threads ) 400 set( IntelMKL_LIBRARIES ${IntelMKL_LIBRARIES} Threads::Threads ) 401 elseif( intelmkl_PREFERED_THREAD_LEVEL MATCHES "tbb" ) 402 find_package( TBB QUIET ) 403 set( IntelMKL_LIBRARIES ${IntelMKL_LIBRARIES} tbb ) 404 endif() 405 set( IntelMKL_LIBRARIES ${IntelMKL_LIBRARIES} "m" "dl" ) 406endif() 407 408# list(APPEND IntelMKL_COMPILE_DEFINITIONS "BLA_LAPACK_INT=MKL_INT") 409# list(APPEND IntelMKL_COMPILE_DEFINITIONS "BLA_LAPACK_COMPLEX8=MKL_Complex8") 410# list(APPEND IntelMKL_COMPILE_DEFINITIONS "BLA_LAPACK_COMPLEX16=MKL_Complex16") 411# list(APPEND IntelMKL_COMPILE_DEFINITIONS "BLA_VENDOR_MKL") 412 413set(BLA_VENDOR_MKL ON) 414set(BLA_LAPACK_INT "MKL_INT") 415set(BLA_LAPACK_COMPLEX8 "MKL_Complex8") 416set(BLA_LAPACK_COMPLEX16 "MKL_Complex16") 417 418include(FindPackageHandleStandardArgs) 419is_valid(IntelMKL_C_COMPILE_FLAGS __has_cflags) 420if(__has_cflags) 421 find_package_handle_standard_args( IntelMKL 422 REQUIRED_VARS IntelMKL_LIBRARIES IntelMKL_INCLUDE_DIR 423 IntelMKL_C_COMPILE_FLAGS 424 VERSION_VAR IntelMKL_VERSION_STRING 425 HANDLE_COMPONENTS 426 ) 427else() 428 find_package_handle_standard_args( IntelMKL 429 REQUIRED_VARS IntelMKL_LIBRARIES IntelMKL_INCLUDE_DIR 430 VERSION_VAR IntelMKL_VERSION_STRING 431 HANDLE_COMPONENTS 432 ) 433endif() 434 435if( IntelMKL_FOUND AND NOT TARGET IntelMKL::mkl ) 436 437 add_library( IntelMKL::mkl INTERFACE IMPORTED ) 438 439 set_target_properties( IntelMKL::mkl PROPERTIES 440 INTERFACE_INCLUDE_DIRECTORIES "${IntelMKL_INCLUDE_DIR}" 441 INTERFACE_LINK_LIBRARIES "${IntelMKL_LIBRARIES}" 442 INTERFACE_COMPILE_OPTIONS "${IntelMKL_C_COMPILE_FLAGS}" 443 # INTERFACE_COMPILE_DEFINITIONS "${IntelMKL_COMPILE_DEFINITIONS}" 444 ) 445 446 if( "scalapack" IN_LIST IntelMKL_FIND_COMPONENTS AND NOT scalapack_LIBRARIES ) 447 set( scalapack_LIBRARIES IntelMKL::mkl ) 448 endif() 449 450 if( "blacs" IN_LIST IntelMKL_FIND_COMPONENTS AND NOT blacs_LIBRARIES ) 451 set( blacs_LIBRARIES IntelMKL::mkl ) 452 endif() 453 454endif() 455