75 lines
2.9 KiB
CMake
75 lines
2.9 KiB
CMake
# defines:
|
|
# MKL_INCLUDE_DIRS
|
|
# MKL_LIBRARIES
|
|
# MKL_COMPILER_LIBRARIES - a list of compiler libraries (file names) required for MKL
|
|
|
|
#unset(MKL_LIB_DIR CACHE)
|
|
#unset(MKL_COMPILER_LIB_DIR CACHE)
|
|
#unset(MKL_COMPILER_REDIST_PATH CACHE)
|
|
|
|
if(NOT HAVE_MKL)
|
|
find_path(MKL_INCLUDE_DIRS "mkl.h" PATHS ${MKL_INCLUDE_DIR} DOC "The path to MKL headers")
|
|
|
|
if(MKL_INCLUDE_DIRS)
|
|
|
|
get_filename_component(_MKL_LIB_PATH "${MKL_INCLUDE_DIRS}/../lib" ABSOLUTE)
|
|
|
|
if(APPLE)
|
|
# MKL 2017 for mac has only 64 bit libraries without directory prefix
|
|
set(_MKL_COMPILER_LIB_PATH ${MKL_INCLUDE_DIRS}/../../compiler/lib)
|
|
else()
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
set(_MKL_LIB_PATH "${_MKL_LIB_PATH}/intel64")
|
|
set(_MKL_COMPILER_LIB_PATH ${MKL_INCLUDE_DIRS}/../../compiler/lib/intel64)
|
|
if(WIN32)
|
|
set(_MKL_COMPILER_REDIST_PATH ${MKL_INCLUDE_DIRS}/../../redist/intel64/compiler)
|
|
endif()
|
|
else()
|
|
set(_MKL_LIB_PATH "${_MKL_LIB_PATH}/ia32")
|
|
set(_MKL_COMPILER_LIB_PATH ${MKL_INCLUDE_DIRS}/../../compiler/lib/ia32)
|
|
if(WIN32)
|
|
set(_MKL_COMPILER_REDIST_PATH ${MKL_INCLUDE_DIRS}/../../redist/ia32/compiler)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# On Linux and Apple take libraries for redistribution from the same location that is used for linking
|
|
if(UNIX)
|
|
set(_MKL_COMPILER_REDIST_PATH ${_MKL_COMPILER_LIB_PATH})
|
|
endif()
|
|
|
|
if(WIN32)
|
|
set(MKL_COMPILER_LIBRARIES libiomp5md.dll)
|
|
set(MKL_LIBRARIES ${MKL_LIBRARIES} mkl_intel_lp64 mkl_core mkl_intel_thread libiomp5md)
|
|
elseif(APPLE)
|
|
set(MKL_COMPILER_LIBRARIES libiomp5.dylib)
|
|
# generated by https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor
|
|
# with the following options: OSX; Clang; Intel64; static; 32 bit integer; OpenMP; Intel OpenMP
|
|
set(MKL_LIBRARIES ${MKL_LIBRARIES} libmkl_intel_lp64.a libmkl_intel_thread.a libmkl_core.a iomp5 pthread m dl)
|
|
else()
|
|
set(MKL_COMPILER_LIBRARIES libiomp5.so)
|
|
# a --start-group / --end-group pair is required when linking with static MKL on GNU.
|
|
# see https://software.intel.com/en-us/forums/topic/280974#comment-1478780
|
|
# and https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor
|
|
set(MKL_LIBRARIES ${MKL_LIBRARIES}
|
|
"-Wl,--start-group"
|
|
libmkl_intel_lp64.a libmkl_core.a libmkl_intel_thread.a
|
|
"-Wl,--end-group"
|
|
"-Wl,--exclude-libs,libmkl_intel_lp64.a,--exclude-libs,libmkl_core.a,--exclude-libs,libmkl_intel_thread.a,--exclude-libs,iomp5"
|
|
iomp5 dl pthread m)
|
|
endif()
|
|
|
|
set(MKL_LIB_DIR "${_MKL_LIB_PATH}"
|
|
CACHE PATH "Full path of MKL library directory")
|
|
set(MKL_COMPILER_LIB_DIR "${_MKL_COMPILER_LIB_PATH}"
|
|
CACHE PATH "Full path of MKL compiler library directory")
|
|
set(MKL_COMPILER_REDIST_PATH "${_MKL_COMPILER_REDIST_PATH}"
|
|
CACHE PATH "Full path of MKL compiler redistributable library directory")
|
|
|
|
link_directories(${MKL_LIB_DIR} ${MKL_COMPILER_LIB_DIR})
|
|
|
|
set(HAVE_MKL 1)
|
|
|
|
endif(MKL_INCLUDE_DIRS)
|
|
endif(NOT HAVE_MKL)
|