OpenCVFindCANN.cmake 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. ocv_check_environment_variables(CANN_INSTALL_DIR)
  2. if("cann${CANN_INSTALL_DIR}" STREQUAL "cann" AND DEFINED ENV{ASCEND_TOOLKIT_HOME})
  3. set(CANN_INSTALL_DIR $ENV{ASCEND_TOOLKIT_HOME})
  4. message(STATUS "CANN: updated CANN_INSTALL_DIR from ASCEND_TOOLKIT_HOME=$ENV{ASCEND_TOOLKIT_HOME}")
  5. endif()
  6. if(EXISTS "${CANN_INSTALL_DIR}/opp/op_proto/built-in/inc")
  7. set(CANN_VERSION_BELOW_6_3_ALPHA002 "YES" )
  8. add_definitions(-DCANN_VERSION_BELOW_6_3_ALPHA002="YES")
  9. endif()
  10. if(CANN_INSTALL_DIR)
  11. # Supported system: UNIX
  12. if(NOT UNIX)
  13. set(HAVE_CANN OFF)
  14. message(WARNING "CANN: CANN toolkit supports unix but not ${CMAKE_SYSTEM_NAME}. Turning off HAVE_CANN")
  15. return()
  16. endif()
  17. # Supported platforms: x86-64, arm64
  18. if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
  19. elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64")
  20. else()
  21. set(HAVE_CANN OFF)
  22. message(WARNING "CANN: CANN toolkit supports x86-64 and arm64 but not ${CMAKE_SYSTEM_PROCESSOR}. Turning off HAVE_CANN")
  23. return()
  24. endif()
  25. # Supported OS: linux (because of we need fork() to build models in child process)
  26. # done via checks in cann.cpp
  27. # FIXME: remove the check if a better model building solution is found
  28. # include
  29. set(incs_cann "${CANN_INSTALL_DIR}/include")
  30. list(APPEND incs_cann "${CANN_INSTALL_DIR}/opp")
  31. # libs
  32. # * libascendcl.so
  33. set(lib_ascendcl "${CANN_INSTALL_DIR}/acllib/lib64")
  34. find_library(found_lib_ascendcl NAMES ascendcl PATHS ${lib_ascendcl} NO_DEFAULT_PATH)
  35. if(found_lib_ascendcl)
  36. set(lib_ascendcl ${found_lib_ascendcl})
  37. message(STATUS "CANN: libascendcl.so is found at ${lib_ascendcl}")
  38. else()
  39. message(WARNING "CANN: Missing libascendcl.so. Turning off HAVE_CANN")
  40. set(HAVE_CANN OFF)
  41. return()
  42. endif()
  43. # * libacl_op_compiler.so
  44. set(lib_acl_op_compiler "${CANN_INSTALL_DIR}/lib64")
  45. find_library(found_lib_acl_op_compiler NAMES acl_op_compiler PATHS ${lib_acl_op_compiler} NO_DEFAULT_PATH)
  46. if(found_lib_acl_op_compiler)
  47. set(lib_acl_op_compiler ${found_lib_acl_op_compiler})
  48. message(STATUS "CANN: libacl_op_compiler.so is found at ${lib_acl_op_compiler}")
  49. else()
  50. message(STATUS "CANN: Missing libacl_op_compiler.so. Turning off HAVE_CANN")
  51. set(HAVE_CANN OFF)
  52. return()
  53. endif()
  54. # * libacl_dvpp_mpi.so
  55. set(libacl_dvpp_mpi "${CANN_INSTALL_DIR}/lib64")
  56. find_library(found_libacldvppmpi NAMES acl_dvpp_mpi PATHS ${libacl_dvpp_mpi} NO_DEFAULT_PATH)
  57. if(found_libacldvppmpi)
  58. set(libacl_dvpp_mpi ${found_libacldvppmpi})
  59. message(STATUS "CANN: libacl_dvpp_mpi.so is found at ${libacl_dvpp_mpi}")
  60. else()
  61. message(STATUS "CANN: Missing libacl_dvpp_mpi.so. Turning off HAVE_CANN")
  62. set(HAVE_CANN OFF)
  63. return()
  64. endif()
  65. # * libgraph.so
  66. set(lib_graph "${CANN_INSTALL_DIR}/compiler/lib64")
  67. find_library(found_lib_graph NAMES graph PATHS ${lib_graph} NO_DEFAULT_PATH)
  68. if(found_lib_graph)
  69. set(lib_graph ${found_lib_graph})
  70. message(STATUS "CANN: libgraph.so is found at ${lib_graph}")
  71. else()
  72. message(WARNING "CANN: Missing libgraph.so. Turning off HAVE_CANN")
  73. set(HAVE_CANN OFF)
  74. return()
  75. endif()
  76. # * libge_compiler.so
  77. set(lib_ge_compiler "${CANN_INSTALL_DIR}/compiler/lib64")
  78. find_library(found_lib_ge_compiler NAMES ge_compiler PATHS ${lib_ge_compiler} NO_DEFAULT_PATH)
  79. if(found_lib_ge_compiler)
  80. set(lib_ge_compiler ${found_lib_ge_compiler})
  81. message(STATUS "CANN: libge_compiler.so is found at ${lib_ge_compiler}")
  82. else()
  83. message(WARNING "CANN: Missing libge_compiler.so. Turning off HAVE_CANN")
  84. set(HAVE_CANN OFF)
  85. return()
  86. endif()
  87. # * libopsproto.so
  88. if (CANN_VERSION_BELOW_6_3_ALPHA002)
  89. set(lib_opsproto "${CANN_INSTALL_DIR}/opp/op_proto/built-in/")
  90. else()
  91. if(EXISTS "${CANN_INSTALL_DIR}/opp/built-in/op_proto/lib/linux")
  92. set(lib_opsproto "${CANN_INSTALL_DIR}/opp/built-in/op_proto/lib/linux/${CMAKE_HOST_SYSTEM_PROCESSOR}")
  93. else()
  94. set(lib_opsproto "${CANN_INSTALL_DIR}/opp/built-in/op_proto")
  95. endif()
  96. endif()
  97. find_library(found_lib_opsproto NAMES opsproto PATHS ${lib_opsproto} NO_DEFAULT_PATH)
  98. if(found_lib_opsproto)
  99. set(lib_opsproto ${found_lib_opsproto})
  100. message(STATUS "CANN: libopsproto.so is found at ${lib_opsproto}")
  101. else()
  102. message(WARNING "CANN: Missing libopsproto.so can't found at ${lib_opsproto}. Turning off HAVE_CANN")
  103. set(HAVE_CANN OFF)
  104. return()
  105. endif()
  106. set(libs_cann "")
  107. list(APPEND libs_cann ${lib_ascendcl})
  108. list(APPEND libs_cann ${lib_acl_op_compiler})
  109. list(APPEND libs_cann ${lib_opsproto})
  110. list(APPEND libs_cann ${lib_graph})
  111. list(APPEND libs_cann ${lib_ge_compiler})
  112. list(APPEND libs_cann ${libacl_dvpp_mpi})
  113. # * lib_graph_base.so
  114. if(NOT CANN_VERSION_BELOW_6_3_ALPHA002)
  115. set(lib_graph_base "${CANN_INSTALL_DIR}/compiler/lib64")
  116. find_library(found_libgraph_base NAMES graph_base PATHS ${lib_graph_base} NO_DEFAULT_PATH)
  117. if(found_libgraph_base)
  118. set(lib_graph_base ${found_libgraph_base})
  119. message(STATUS "CANN: lib_graph_base.so is found at ${lib_graph_base}")
  120. list(APPEND libs_cann ${lib_graph_base})
  121. else()
  122. message(STATUS "CANN: Missing lib_graph_base.so. It is only required after cann version 6.3.RC1.alpha002")
  123. endif()
  124. endif()
  125. try_compile(VALID_ASCENDCL
  126. "${OpenCV_BINARY_DIR}"
  127. "${OpenCV_SOURCE_DIR}/cmake/checks/cann.cpp"
  128. CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${incs_cann}"
  129. "-DLINK_LIBRARIES:STRING=${libs_cann}"
  130. OUTPUT_VARIABLE ASCEND_TRY_OUT)
  131. if(NOT ${VALID_ASCENDCL})
  132. message(WARNING "Cannot use CANN")
  133. set(HAVE_CANN OFF)
  134. return()
  135. endif()
  136. set(HAVE_CANN ON)
  137. endif()
  138. if(HAVE_CANN)
  139. set(CANN_INCLUDE_DIRS ${incs_cann})
  140. set(CANN_LIBRARIES ${libs_cann})
  141. ocv_add_external_target(cann "${CANN_INCLUDE_DIRS}" "${CANN_LIBRARIES}" "HAVE_CANN")
  142. ocv_warnings_disable(CMAKE_C_FLAGS -Wignored-qualifiers)
  143. ocv_warnings_disable(CMAKE_CXX_FLAGS -Wignored-qualifiers)
  144. endif()
  145. MARK_AS_ADVANCED(
  146. incs_cann
  147. libs_cann
  148. lib_ascendcl
  149. lib_graph
  150. lib_ge_compiler
  151. )