Commit 8ecae046 authored by Vitaliy Lyudvichenko's avatar Vitaliy Lyudvichenko

Updating of cmake/OpenCVFindMKL.cmake

parent 55856bd9
...@@ -13,11 +13,18 @@ ...@@ -13,11 +13,18 @@
# MKL_LIBRARIES - IPP libraries that are used by OpenCV # MKL_LIBRARIES - IPP libraries that are used by OpenCV
# #
macro (mkl_find_lib VAR NAME DIRS)
find_path(${VAR} ${NAME} ${DIRS} NO_DEFAULT_PATH)
set(${VAR} ${${VAR}}/${NAME})
unset(${VAR} CACHE)
endmacro()
macro(mkl_fail) macro(mkl_fail)
set(HAVE_MKL OFF CACHE BOOL "True if MKL found") set(HAVE_MKL OFF CACHE BOOL "True if MKL found")
set(MKL_ROOT_DIR ${MKL_ROOT_DIR} CACHE PATH "Path to MKL directory") set(MKL_ROOT_DIR ${MKL_ROOT_DIR} CACHE PATH "Path to MKL directory")
unset(MKL_INCLUDE_DIRS CACHE) unset(MKL_INCLUDE_DIRS CACHE)
unset(MKL_LIBRARIES CACHE) unset(MKL_LIBRARIES CACHE)
return()
endmacro() endmacro()
macro(get_mkl_version VERSION_FILE) macro(get_mkl_version VERSION_FILE)
...@@ -42,28 +49,27 @@ endif() ...@@ -42,28 +49,27 @@ endif()
#check current MKL_ROOT_DIR #check current MKL_ROOT_DIR
if(NOT MKL_ROOT_DIR OR NOT EXISTS ${MKL_ROOT_DIR}/include/mkl.h) if(NOT MKL_ROOT_DIR OR NOT EXISTS ${MKL_ROOT_DIR}/include/mkl.h)
set(MKLROOT_PATHS ${MKL_ROOT_DIR}) set(mkl_root_paths ${MKL_ROOT_DIR})
if(DEFINED $ENV{MKLROOT}) if(DEFINED $ENV{MKLROOT})
list(APPEND MKLROOT_PATHS $ENV{MKLROOT}) list(APPEND mkl_root_paths $ENV{MKLROOT})
endif() endif()
if(WIN32) if(WIN32)
set(ProgramFilesx86 "ProgramFiles(x86)") set(ProgramFilesx86 "ProgramFiles(x86)")
list(APPEND MKLROOT_PATHS $ENV{${ProgramFilesx86}}/IntelSWTools/compilers_and_libraries/windows/mkl) list(APPEND mkl_root_paths $ENV{${ProgramFilesx86}}/IntelSWTools/compilers_and_libraries/windows/mkl)
endif() endif()
if(UNIX) if(UNIX)
list(APPEND MKLROOT_PATHS "/opt/intel/mkl") list(APPEND mkl_root_paths "/opt/intel/mkl")
endif() endif()
find_path(MKL_ROOT_DIR include/mkl.h PATHS ${MKLROOT_PATHS}) find_path(MKL_ROOT_DIR include/mkl.h PATHS ${mkl_root_paths})
endif() endif()
if(NOT MKL_ROOT_DIR) if(NOT MKL_ROOT_DIR)
mkl_fail() mkl_fail()
return()
endif() endif()
set(MKL_INCLUDE_DIRS ${MKL_ROOT_DIR}/include) set(MKL_INCLUDE_DIRS ${MKL_ROOT_DIR}/include)
set(MKL_INCLUDE_HEADERS ${MKL_INCLUDE_DIRS}/mkl.h ${MKL_INCLUDE_DIRS}/mkl_version.h) get_mkl_version(${MKL_INCLUDE_DIRS}/mkl_version.h)
#determine arch #determine arch
if(CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8) if(CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8)
...@@ -81,43 +87,50 @@ else() ...@@ -81,43 +87,50 @@ else()
set(MKL_ARCH "ia32") set(MKL_ARCH "ia32")
endif() endif()
if(MSVC) if(${MKL_VERSION_STR} VERSION_GREATER "11.3.0" OR ${MKL_VERSION_STR} VERSION_EQUAL "11.3.0")
set(MKL_EXT ".lib") set(mkl_lib_find_paths
set(MKL_PRE "") ${MKL_ROOT_DIR}/lib
else() ${MKL_ROOT_DIR}/lib/${MKL_ARCH} ${MKL_ROOT_DIR}/../tbb/lib/${MKL_ARCH})
set(MKL_EXT ".a")
set(MKL_PRE "lib")
endif()
set(MKL_LIB_DIR ${MKL_ROOT_DIR}/lib/${MKL_ARCH}) set(mkl_lib_list
set(MKL_LIBRARIES ${MKL_LIB_DIR}/${MKL_PRE}mkl_core${MKL_EXT} ${MKL_LIB_DIR}/${MKL_PRE}mkl_intel_${MKL_LP64}${MKL_EXT}) mkl_core
mkl_intel_${MKL_LP64})
if(MKL_WITH_TBB) if(MKL_WITH_TBB)
list(APPEND MKL_LIBRARIES ${MKL_LIB_DIR}/${MKL_PRE}mkl_tbb_thread${MKL_EXT}) list(APPEND mkl_lib_list mkl_tbb_thread tbb)
list(APPEND MKL_LIBRARIES ${MKL_ROOT_DIR}/../tbb/lib/${MKL_ARCH}/tbb${MKL_EXT}) elseif(MKL_WITH_OPENMP)
elseif(MKL_WITH_OPENMP) if(MSVC)
message(FATAL_ERROR "Multithreaded MKL is not supported yet") list(APPEND mkl_lib_list mkl_intel_thread libiomp5md)
else()
list(APPEND mkl_lib_list libmkl_gnu_thread)
endif()
else()
list(APPEND mkl_lib_list mkl_sequential)
endif()
else() else()
list(APPEND MKL_LIBRARIES ${MKL_LIB_DIR}/${MKL_PRE}mkl_sequential${MKL_EXT}) message(STATUS "MKL version ${MKL_VERSION_STR} is not supported")
mkl_fail()
endif() endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(MKL MKL_INCLUDE_HEADERS MKL_LIBRARIES)
if(MKL_FOUND)
get_mkl_version(${MKL_INCLUDE_DIRS}/mkl_version.h)
message(STATUS "Found MKL ${MKL_VERSION_STR} at: ${MKL_ROOT_DIR}")
set(HAVE_MKL ON CACHE BOOL "True if MKL found") set(MKL_LIBRARIES "")
set(MKL_ROOT_DIR ${MKL_ROOT_DIR} CACHE PATH "Path to MKL directory") foreach(lib ${mkl_lib_list})
set(MKL_INCLUDE_DIRS ${MKL_INCLUDE_DIRS} CACHE PATH "Path to MKL include directory") find_library(${lib} ${lib} ${mkl_lib_find_paths})
if(NOT UNIX) mark_as_advanced(${lib})
if(NOT ${lib})
mkl_fail()
endif()
list(APPEND MKL_LIBRARIES ${${lib}})
endforeach()
message(STATUS "Found MKL ${MKL_VERSION_STR} at: ${MKL_ROOT_DIR}")
set(HAVE_MKL ON CACHE BOOL "True if MKL found")
set(MKL_ROOT_DIR ${MKL_ROOT_DIR} CACHE PATH "Path to MKL directory")
set(MKL_INCLUDE_DIRS ${MKL_INCLUDE_DIRS} CACHE PATH "Path to MKL include directory")
if(NOT UNIX)
set(MKL_LIBRARIES ${MKL_LIBRARIES} CACHE FILEPATH "MKL libarries") set(MKL_LIBRARIES ${MKL_LIBRARIES} CACHE FILEPATH "MKL libarries")
else() else()
#it's ugly but helps to avoid cyclic lib problem #it's ugly but helps to avoid cyclic lib problem
set(MKL_LIBRARIES ${MKL_LIBRARIES} ${MKL_LIBRARIES} ${MKL_LIBRARIES} "-lpthread" "-lm" "-ldl") set(MKL_LIBRARIES ${MKL_LIBRARIES} ${MKL_LIBRARIES} ${MKL_LIBRARIES} "-lpthread" "-lm" "-ldl")
set(MKL_LIBRARIES ${MKL_LIBRARIES} CACHE STRING "MKL libarries") set(MKL_LIBRARIES ${MKL_LIBRARIES} CACHE STRING "MKL libarries")
endif()
else()
endif() endif()
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment