You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

mkl.cmake 3.0 kB

feat(cmake/windows/xp/sp2/inference): implement inference on windows xp (os vesion >= sp2) build with cmake * cmake build support(xp sp2): (dbg)EXTRA_CMAKE_ARGS="-DMGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2=ON" ./scripts/cmake-build/host_build.sh -m -d (opt)EXTRA_CMAKE_ARGS="-DMGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2=ON" ./scripts/cmake-build/host_build.sh -m * cmake build support(xp sp3): (dbg)EXTRA_CMAKE_ARGS="-DMGE_DEPLOY_INFERENCE_ON_WINDOWS_XP=ON" ./scripts/cmake-build/host_build.sh -m -d (opt)EXTRA_CMAKE_ARGS="-DMGE_DEPLOY_INFERENCE_ON_WINDOWS_XP=ON" ./scripts/cmake-build/host_build.sh -m * internal behavior: will define MGB_HAVE_THREAD=0 when enable -DMGE_DEPLOY_INFERENCE_ON_WINDOWS_XP_SP2=ON * refer to https://docs.microsoft.com/en-us/cpp/build/configuring-programs-for-windows-xp?view=msvc-160 xp sp2(x86) do not support vc runtime fully, casused by KERNEL32.dll do not implement some base apis for c++ std function, for example, std::mutex/std::thread/std::condition_variable as a workround, we will disable some MegEngine features on xp sp2 env, for exampe, multi-thread etc! * about DNN_MUTEX/MGB_MUTEX/LITE_MUTEX, if your code will build in inference code (even CPU backends), please replace std::mutex to DNN_MUTEX/MGB_MUTEX, * about multi-thread, if you code need multi-thread support, please enable it when MGB_HAVE_THREAD=1 * about test build env status 1: Visual Studio 2019(MSVC version <= 14.26.28801)---- pass 2: Visual Studio 2019(MSVC version > 14.26.28801) ---- failed caused by this 'new' version will put VCR depends on win7 KERNEL32.DLL, this may be fixed at Visual Studio 2019 later version but we do not test at this MR merge point 3: Visual Studio 2017 ---------- pass 4: Visual Studio 2014 ---------- pass GitOrigin-RevId: ea6e1f8b4fea9aa03594e3af8d59708b4cdf7bdc
3 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. find_path(MKL_ROOT_DIR
  2. include/mkl_cblas.h
  3. PATHS
  4. ${PROJECT_SOURCE_DIR}/third_party/mkl/${MGE_ARCH}
  5. ${PROJECT_SOURCE_DIR}/third_party/mkl/${MGE_ARCH}/Library
  6. ${PROJECT_SOURCE_DIR}/third_party/mkl/x86_32/Library
  7. ${PROJECT_SOURCE_DIR}/third_party/mkl/x86_32
  8. $ENV{MKLDIR}
  9. /opt/intel/mkl/*/
  10. /opt/intel/cmkl/*/
  11. /Library/Frameworks/Intel_MKL.framework/Versions/Current/lib/universal
  12. )
  13. if(${MKL_ROOT_DIR} STREQUAL "MKL_ROOT_DIR-NOTFOUND")
  14. message(FATAL_ERROR "Can not find MKL")
  15. endif()
  16. message(STATUS "Build with MKL in ${MKL_ROOT_DIR}")
  17. find_path(MKL_INCLUDE_DIR
  18. mkl_cblas.h
  19. PATHS
  20. ${MKL_ROOT_DIR}/include
  21. ${INCLUDE_INSTALL_DIR}
  22. )
  23. option(MGE_MKL_USE_STATIC "Build MegEngine with static MKL" ON)
  24. if(MGE_MKL_USE_STATIC)
  25. find_library(MKL_CORE_LIBRARY
  26. NAMES libmkl_core.a mkl_core.lib
  27. PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/)
  28. find_library(MKL_SEQUENTIAL_LIBRARY
  29. NAMES libmkl_sequential.a mkl_sequential.lib
  30. PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/)
  31. if(${MGE_ARCH} STREQUAL "x86_64")
  32. find_library(MKL_IPL_LIBRARY
  33. NAMES libmkl_intel_ilp64.a mkl_intel_ilp64.lib
  34. PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/)
  35. elseif(${MGE_ARCH} STREQUAL "i386")
  36. find_library(MKL_IPL_LIBRARY
  37. NAMES libmkl_intel_32.a mkl_intel_32.lib mkl_intel_c.lib
  38. PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/)
  39. endif()
  40. add_library(libmkl INTERFACE IMPORTED)
  41. if(UNIX AND NOT APPLE)
  42. target_link_libraries(libmkl INTERFACE -Wl,--start-group ${MKL_CORE_LIBRARY} ${MKL_SEQUENTIAL_LIBRARY} ${MKL_IPL_LIBRARY} -Wl,--end-group)
  43. else()
  44. target_link_libraries(libmkl INTERFACE ${MKL_CORE_LIBRARY} ${MKL_SEQUENTIAL_LIBRARY} ${MKL_IPL_LIBRARY})
  45. endif()
  46. target_include_directories(libmkl INTERFACE ${MKL_INCLUDE_DIR})
  47. else()
  48. find_library(MKL_CORE_LIBRARY
  49. NAMES libmkl_core.so libmkl_core.dylib
  50. PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/)
  51. find_library(MKL_SEQUENTIAL_LIBRARY
  52. NAMES libmkl_sequential.so libmkl_sequential.dylib
  53. PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/)
  54. if(${MGE_ARCH} STREQUAL "x86_64")
  55. find_library(MKL_IPL_LIBRARY
  56. NAMES libmkl_intel_ilp64.so libmkl_intel_ilp64.dylib
  57. PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/)
  58. elseif(${MGE_ARCH} STREQUAL "x86_32")
  59. find_library(MKL_IPL_LIBRARY
  60. NAMES libmkl_intel_32.so libmkl_intel_32.dylib
  61. PATHS ${MKL_ROOT_DIR}/lib/${MKL_ARCH_DIR} ${MKL_ROOT_DIR}/lib/)
  62. endif()
  63. target_link_libraries(libmkl INTERFACE ${MKL_CORE_LIBRARY} ${MKL_SEQUENTIAL_LIBRARY} ${MKL_IPL_LIBRARY})
  64. target_include_directories(libmkl INTERFACE ${MKL_INCLUDE_DIR})
  65. endif()
  66. if(${MGE_ARCH} STREQUAL "x86_64")
  67. target_compile_definitions(libmkl INTERFACE -DMKL_ILP64)
  68. endif()