Advertisement
Guest User

cmake/OpenCVFindMKL.cmake

a guest
Jan 18th, 2017
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.29 KB | None | 0 0
  1. #
  2. # The script to detect Intel(R) Math Kernel Library (MKL)
  3. # installation/package
  4. #
  5. # Parameters:
  6. # MKL_WITH_TBB
  7. #
  8. # On return this will define:
  9. #
  10. # HAVE_MKL - True if Intel IPP found
  11. # MKL_ROOT_DIR - root of IPP installation
  12. # MKL_INCLUDE_DIRS - IPP include folder
  13. # MKL_LIBRARIES - IPP libraries that are used by OpenCV
  14. #
  15.  
  16. macro (mkl_find_lib VAR NAME DIRS)
  17. find_path(${VAR} ${NAME} ${DIRS} NO_DEFAULT_PATH)
  18. set(${VAR} ${${VAR}}/${NAME})
  19. unset(${VAR} CACHE)
  20. endmacro()
  21.  
  22. macro(mkl_fail)
  23. set(HAVE_MKL OFF CACHE BOOL "True if MKL found")
  24. set(MKL_ROOT_DIR ${MKL_ROOT_DIR} CACHE PATH "Path to MKL directory")
  25. unset(MKL_INCLUDE_DIRS CACHE)
  26. unset(MKL_LIBRARIES CACHE)
  27. return()
  28. endmacro()
  29.  
  30. macro(get_mkl_version VERSION_FILE)
  31. # read MKL version info from file
  32. file(STRINGS ${VERSION_FILE} STR1 REGEX "__INTEL_MKL__")
  33. file(STRINGS ${VERSION_FILE} STR2 REGEX "__INTEL_MKL_MINOR__")
  34. file(STRINGS ${VERSION_FILE} STR3 REGEX "__INTEL_MKL_UPDATE__")
  35. #file(STRINGS ${VERSION_FILE} STR4 REGEX "INTEL_MKL_VERSION")
  36.  
  37. # extract info and assign to variables
  38. string(REGEX MATCHALL "[0-9]+" MKL_VERSION_MAJOR ${STR1})
  39. string(REGEX MATCHALL "[0-9]+" MKL_VERSION_MINOR ${STR2})
  40. string(REGEX MATCHALL "[0-9]+" MKL_VERSION_UPDATE ${STR3})
  41. set(MKL_VERSION_STR "${MKL_VERSION_MAJOR}.${MKL_VERSION_MINOR}.${MKL_VERSION_UPDATE}" CACHE STRING "MKL version" FORCE)
  42. endmacro()
  43.  
  44.  
  45. if(NOT DEFINED MKL_USE_MULTITHREAD)
  46. OCV_OPTION(MKL_WITH_TBB "Use MKL with TBB multithreading" OFF)#ON IF WITH_TBB)
  47. OCV_OPTION(MKL_WITH_OPENMP "Use MKL with OpenMP multithreading" OFF)#ON IF WITH_OPENMP)
  48. endif()
  49.  
  50. #check current MKL_ROOT_DIR
  51. if(NOT MKL_ROOT_DIR OR NOT EXISTS ${MKL_ROOT_DIR}/include/mkl.h)
  52. set(mkl_root_paths ${MKL_ROOT_DIR})
  53. if(DEFINED $ENV{MKLROOT})
  54. list(APPEND mkl_root_paths $ENV{MKLROOT})
  55. endif()
  56. if(WIN32)
  57. set(ProgramFilesx86 "ProgramFiles(x86)")
  58. list(APPEND mkl_root_paths $ENV{${ProgramFilesx86}}/IntelSWTools/compilers_and_libraries/windows/mkl)
  59. endif()
  60. if(UNIX)
  61. list(APPEND mkl_root_paths "/opt/intel/mkl")
  62. endif()
  63.  
  64. find_path(MKL_ROOT_DIR include/mkl.h PATHS ${mkl_root_paths})
  65. endif()
  66.  
  67. if(NOT MKL_ROOT_DIR)
  68. mkl_fail()
  69. endif()
  70.  
  71. set(MKL_INCLUDE_DIRS ${MKL_ROOT_DIR}/include)
  72. get_mkl_version(${MKL_INCLUDE_DIRS}/mkl_version.h)
  73.  
  74. #determine arch
  75. if(CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8)
  76. set(MKL_X64 1)
  77. set(MKL_ARCH "intel64")
  78.  
  79. include(CheckTypeSize)
  80. CHECK_TYPE_SIZE(int _sizeof_int)
  81. if (_sizeof_int EQUAL 4)
  82. set(MKL_LP64 "lp64")
  83. else()
  84. set(MKL_LP64 "ilp64")
  85. endif()
  86. else()
  87. set(MKL_ARCH "ia32")
  88. endif()
  89.  
  90. if(${MKL_VERSION_STR} VERSION_GREATER "11.3.0" OR ${MKL_VERSION_STR} VERSION_EQUAL "11.3.0")
  91. set(mkl_lib_find_paths
  92. ${MKL_ROOT_DIR}/lib
  93. ${MKL_ROOT_DIR}/lib/${MKL_ARCH} ${MKL_ROOT_DIR}/../tbb/lib/${MKL_ARCH})
  94.  
  95. set(mkl_lib_list
  96. mkl_core
  97. mkl_intel_${MKL_LP64})
  98.  
  99. if(MKL_WITH_TBB)
  100. list(APPEND mkl_lib_list mkl_tbb_thread tbb)
  101. elseif(MKL_WITH_OPENMP)
  102. if(MSVC)
  103. list(APPEND mkl_lib_list mkl_intel_thread libiomp5md)
  104. else()
  105. list(APPEND mkl_lib_list libmkl_gnu_thread)
  106. endif()
  107. else()
  108. list(APPEND mkl_lib_list mkl_sequential)
  109. endif()
  110. else()
  111. message(STATUS "MKL version ${MKL_VERSION_STR} is not supported")
  112. mkl_fail()
  113. endif()
  114.  
  115.  
  116. set(MKL_LIBRARIES "")
  117. foreach(lib ${mkl_lib_list})
  118. find_library(${lib} ${lib} ${mkl_lib_find_paths})
  119. mark_as_advanced(${lib})
  120. if(NOT ${lib})
  121. mkl_fail()
  122. endif()
  123. list(APPEND MKL_LIBRARIES ${${lib}})
  124. endforeach()
  125.  
  126. message(STATUS "Found MKL ${MKL_VERSION_STR} at: ${MKL_ROOT_DIR}")
  127. set(HAVE_MKL ON CACHE BOOL "True if MKL found")
  128. set(MKL_ROOT_DIR ${MKL_ROOT_DIR} CACHE PATH "Path to MKL directory")
  129. set(MKL_INCLUDE_DIRS ${MKL_INCLUDE_DIRS} CACHE PATH "Path to MKL include directory")
  130. if(NOT UNIX)
  131. set(MKL_LIBRARIES ${MKL_LIBRARIES} CACHE FILEPATH "MKL libarries")
  132. else()
  133. #it's ugly but helps to avoid cyclic lib problem
  134. set(MKL_LIBRARIES ${MKL_LIBRARIES} ${MKL_LIBRARIES} ${MKL_LIBRARIES} "-lpthread" "-lm" "-ldl")
  135. set(MKL_LIBRARIES ${MKL_LIBRARIES} CACHE STRING "MKL libarries")
  136. endif()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement