UltraInfer.cmake.in 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. CMAKE_MINIMUM_REQUIRED(VERSION 3.8)
  2. # UltraInfer basic infos
  3. set(ULTRAINFER_VERSION @ULTRAINFER_VERSION@)
  4. set(LIBRARY_NAME @LIBRARY_NAME@)
  5. # If compile with GLIBC_CXX_ABI=0
  6. set(NEED_ABI0 @NEED_ABI0@)
  7. # Hardware and Language API
  8. set(WITH_GPU @WITH_GPU@)
  9. set(WITH_IPU @WITH_IPU@)
  10. set(WITH_OPENCL @WITH_OPENCL@)
  11. set(WITH_ASCEND @WITH_ASCEND@)
  12. set(WITH_DIRECTML @WITH_DIRECTML@)
  13. set(WITH_TIMVX @WITH_TIMVX@)
  14. set(WITH_KUNLUNXIN @WITH_KUNLUNXIN@)
  15. set(WITH_CAPI @WITH_CAPI@)
  16. set(WITH_CSHARPAPI @WITH_CSHARPAPI@)
  17. set(WITH_TESTING @WITH_TESTING@)
  18. set(BUILD_ON_JETSON @BUILD_ON_JETSON@)
  19. set(RKNN2_TARGET_SOC "@RKNN2_TARGET_SOC@")
  20. # Inference backend and UltraInfer Moudle
  21. set(ENABLE_ORT_BACKEND @ENABLE_ORT_BACKEND@)
  22. set(ENABLE_RKNPU2_BACKEND @ENABLE_RKNPU2_BACKEND@)
  23. set(ENABLE_TVM_BACKEND @ENABLE_TVM_BACKEND@)
  24. set(ENABLE_HORIZON_BACKEND @ENABLE_HORIZON_BACKEND@)
  25. set(ENABLE_SOPHGO_BACKEND @ENABLE_SOPHGO_BACKEND@)
  26. set(ENABLE_LITE_BACKEND @ENABLE_LITE_BACKEND@)
  27. set(ENABLE_PADDLE_BACKEND @ENABLE_PADDLE_BACKEND@)
  28. set(ENABLE_OPENVINO_BACKEND @ENABLE_OPENVINO_BACKEND@)
  29. set(ENABLE_POROS_BACKEND @ENABLE_POROS_BACKEND@)
  30. set(ENABLE_TRT_BACKEND @ENABLE_TRT_BACKEND@)
  31. set(ENABLE_PADDLE2ONNX @ENABLE_PADDLE2ONNX@)
  32. set(BUILD_PADDLE2ONNX @BUILD_PADDLE2ONNX@)
  33. set(ENABLE_VISION @ENABLE_VISION@)
  34. set(ENABLE_FLYCV @ENABLE_FLYCV@)
  35. set(ENABLE_CVCUDA @ENABLE_CVCUDA@)
  36. set(ENABLE_TEXT @ENABLE_TEXT@)
  37. set(ENABLE_BENCHMARK @ENABLE_BENCHMARK@)
  38. # Version infos and custom settings for third libs
  39. set(PADDLEINFERENCE_VERSION @PADDLEINFERENCE_VERSION@)
  40. set(POROS_VERSION @POROS_VERSION@)
  41. set(OPENVINO_VERSION @OPENVINO_VERSION@)
  42. set(OPENCV_FILENAME @OPENCV_FILENAME@)
  43. set(OPENVINO_FILENAME @OPENVINO_FILENAME@)
  44. set(PADDLELITE_FILENAME @PADDLELITE_FILENAME@)
  45. set(OPENCV_DIRECTORY "@OPENCV_DIRECTORY@")
  46. set(ORT_DIRECTORY "@ORT_DIRECTORY@")
  47. set(OPENVINO_DIRECTORY "@OPENVINO_DIRECTORY@")
  48. set(ULTRAINFER_LIBS "")
  49. set(ULTRAINFER_INCS "")
  50. list(APPEND ULTRAINFER_INCS ${CMAKE_CURRENT_LIST_DIR}/include)
  51. # Note(zhoushunjie): include some useful utils function
  52. include(${CMAKE_CURRENT_LIST_DIR}/utils.cmake)
  53. # Set C++11 as standard for the whole project
  54. if(NOT MSVC)
  55. set(CMAKE_CXX_STANDARD 11)
  56. set(CMAKE_CXX_FLAGS "-Wno-format")
  57. if(NEED_ABI0)
  58. add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
  59. else()
  60. add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)
  61. endif()
  62. endif(NOT MSVC)
  63. # Still need omp while using UltraInfer static lib.
  64. # This is due to the use of openmp for Paddle Lite's
  65. # static library.
  66. find_library(FDLIB ${LIBRARY_NAME} ${CMAKE_CURRENT_LIST_DIR}/lib NO_DEFAULT_PATH)
  67. list(APPEND ULTRAINFER_LIBS ${FDLIB})
  68. if(ENABLE_ORT_BACKEND)
  69. if (ORT_DIRECTORY)
  70. set(ORT_LIB_PATH ${ORT_DIRECTORY}/lib)
  71. else()
  72. set(ORT_LIB_PATH ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/onnxruntime/lib)
  73. endif()
  74. message(STATUS "The path of ONNXRuntime is ${ORT_LIB_PATH}.")
  75. find_library(ORT_LIB onnxruntime ${ORT_LIB_PATH} NO_DEFAULT_PATH)
  76. list(APPEND ULTRAINFER_LIBS ${ORT_LIB})
  77. endif()
  78. if(ENABLE_TVM_BACKEND)
  79. if(APPLE)
  80. set(TVM_RUNTIME_LIB ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/tvm/lib/libtvm_runtime.dylib)
  81. else()
  82. set(TVM_RUNTIME_LIB ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/tvm/lib/libtvm_runtime.so)
  83. endif()
  84. list(APPEND ULTRAINFER_LIBS ${TVM_RUNTIME_LIB})
  85. endif()
  86. if(ENABLE_PADDLE_BACKEND)
  87. string(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" _ "${PADDLEINFERENCE_VERSION}")
  88. set(PADDLEINFERENCE_VERSION_MAJOR "${CMAKE_MATCH_1}")
  89. set(PADDLEINFERENCE_VERSION_MINOR "${CMAKE_MATCH_2}")
  90. set(PADDLEINFERENCE_VERSION_PATCH "${CMAKE_MATCH_3}")
  91. find_library(PADDLE_LIB paddle_inference ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/paddle_inference/paddle/lib NO_DEFAULT_PATH)
  92. if(WIN32)
  93. if(PADDLEINFERENCE_VERSION_MAJOR EQUAL 2)
  94. set(DNNL_LIB "${CMAKE_CURRENT_LIST_DIR}/third_libs/install/paddle_inference/third_party/install/mkldnn/lib/mkldnn.lib")
  95. else()
  96. set(DNNL_LIB "${CMAKE_CURRENT_LIST_DIR}/third_libs/install/paddle_inference/third_party/install/onednn/lib/dnnl.lib")
  97. endif()
  98. set(IOMP_LIB "${CMAKE_CURRENT_LIST_DIR}/third_libs/install/paddle_inference/third_party/install/mklml/lib/libiomp5md.lib")
  99. elseif(APPLE)
  100. message(STATUS "No third parties libs(mkldnn and omp) need to link into paddle_inference on MacOS OSX.")
  101. else()
  102. if(PADDLEINFERENCE_VERSION_MAJOR EQUAL 2)
  103. set(DNNL_LIB "${CMAKE_CURRENT_LIST_DIR}/third_libs/install/paddle_inference/third_party/install/mkldnn/lib/libmkldnn.so.0")
  104. else()
  105. set(DNNL_LIB "${CMAKE_CURRENT_LIST_DIR}/third_libs/install/paddle_inference/third_party/install/onednn/lib/libdnnl.so.3")
  106. endif()
  107. set(IOMP_LIB "${CMAKE_CURRENT_LIST_DIR}/third_libs/install/paddle_inference/third_party/install/mklml/lib/libiomp5.so")
  108. endif()
  109. list(APPEND ULTRAINFER_LIBS ${PADDLE_LIB})
  110. if(EXISTS "${DNNL_LIB}")
  111. list(APPEND ULTRAINFER_LIBS ${DNNL_LIB} ${IOMP_LIB})
  112. endif()
  113. endif()
  114. if(ENABLE_OPENVINO_BACKEND)
  115. if (OPENVINO_DIRECTORY)
  116. set(OPENVINO_DIR ${OPENVINO_DIRECTORY})
  117. else()
  118. set(OPENVINO_DIR ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/${OPENVINO_FILENAME}/runtime)
  119. endif()
  120. get_openvino_libs(${OPENVINO_DIR})
  121. message(STATUS "OPENVINO_LIBS = ${OPENVINO_LIBS}")
  122. list(APPEND ULTRAINFER_LIBS ${OPENVINO_LIBS})
  123. endif()
  124. if(ENABLE_RKNPU2_BACKEND)
  125. if(RKNN2_TARGET_SOC STREQUAL "RK356X")
  126. set(RKNPU2_LIB ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/rknpu2_runtime/lib/librknnrt.so)
  127. elseif (RKNN2_TARGET_SOC STREQUAL "RK3588")
  128. set(RKNPU2_LIB ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/rknpu2_runtime/lib/librknnrt.so)
  129. else ()
  130. message(FATAL_ERROR "RKNN2_TARGET_SOC is not set, ref value: RK356X or RK3588")
  131. endif()
  132. message(STATUS "The path of RKNPU2 is ${RKNPU2_LIB}.")
  133. list(APPEND ULTRAINFER_LIBS ${RKNPU2_LIB})
  134. endif()
  135. if(ENABLE_HORIZON_BACKEND)
  136. set(DNN_PATH ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/dnn)
  137. set(APPSDK_PATH ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/appsdk/appuser/)
  138. set(DNN_LIB_PATH ${DNN_PATH}/lib)
  139. set(APPSDK_LIB_PATH ${APPSDK_PATH}/lib/hbbpu)
  140. set(BPU_libs dnn cnn_intf hbrt_bernoulli_aarch64)
  141. link_directories(${DNN_LIB_PATH}
  142. ${APPSDK_PATH}/lib/hbbpu
  143. ${APPSDK_PATH}/lib)
  144. list(APPEND ULTRAINFER_LIBS ${BPU_libs})
  145. endif()
  146. if(ENABLE_LITE_BACKEND)
  147. set(LITE_DIR ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/${PADDLELITE_FILENAME})
  148. # Linux/Mac/Win/...
  149. find_library(LITE_LIB paddle_full_api_shared ${LITE_DIR}/lib NO_DEFAULT_PATH)
  150. list(APPEND ULTRAINFER_LIBS ${LITE_LIB})
  151. endif()
  152. if(ENABLE_POROS_BACKEND)
  153. find_library(POROS_LIB poros ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/poros/lib NO_DEFAULT_PATH)
  154. find_library(TORCH_LIB torch ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/torch/lib NO_DEFAULT_PATH)
  155. set(TORCH_INCLUDE "${CMAKE_CURRENT_LIST_DIR}/third_libs/install/torch/include")
  156. list(APPEND ULTRAINFER_LIBS ${POROS_LIB} ${TORCH_LIB})
  157. list(APPEND ULTRAINFER_INCS ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/poros/include ${TORCH_INCLUDE})
  158. endif()
  159. if(WITH_GPU)
  160. if(NOT CUDA_DIRECTORY)
  161. set(CUDA_DIRECTORY "/usr/local/cuda")
  162. endif()
  163. if(WIN32)
  164. find_library(CUDA_LIB cudart ${CUDA_DIRECTORY}/lib/x64)
  165. find_library(NVJPEG_LIB nvjpeg ${CUDA_DIRECTORY}/lib/x64)
  166. else()
  167. find_library(CUDA_LIB cudart ${CUDA_DIRECTORY}/lib64)
  168. if(NOT BUILD_ON_JETSON)
  169. find_library(NVJPEG_LIB nvjpeg ${CUDA_DIRECTORY}/lib64)
  170. endif()
  171. endif()
  172. if(NOT CUDA_LIB)
  173. message(FATAL_ERROR "[UltraInfer] Cannot find library cudart in ${CUDA_DIRECTORY}, Please define CUDA_DIRECTORY, e.g -DCUDA_DIRECTORY=/path/to/cuda")
  174. endif()
  175. list(APPEND ULTRAINFER_LIBS ${CUDA_LIB} ${NVJPEG_LIB})
  176. list(APPEND ULTRAINFER_INCS ${CUDA_DIRECTORY}/include)
  177. if(ENABLE_TRT_BACKEND)
  178. if(BUILD_ON_JETSON)
  179. find_library(TRT_INFER_LIB nvinfer /usr/lib/aarch64-linux-gnu/)
  180. find_library(TRT_ONNX_LIB nvonnxparser /usr/lib/aarch64-linux-gnu/)
  181. find_library(TRT_PLUGIN_LIB nvinfer_plugin /usr/lib/aarch64-linux-gnu/)
  182. else()
  183. if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/tensorrt/)
  184. find_library(TRT_INFER_LIB nvinfer ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/tensorrt/lib NO_DEFAULT_PATH)
  185. find_library(TRT_ONNX_LIB nvonnxparser ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/tensorrt/lib NO_DEFAULT_PATH)
  186. find_library(TRT_PLUGIN_LIB nvinfer_plugin ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/tensorrt/lib NO_DEFAULT_PATH)
  187. else()
  188. find_library(TRT_INFER_LIB nvinfer /usr/lib/x86_64-linux-gnu/)
  189. find_library(TRT_ONNX_LIB nvonnxparser /usr/lib/x86_64-linux-gnu/)
  190. find_library(TRT_PLUGIN_LIB nvinfer_plugin /usr/lib/x86_64-linux-gnu/)
  191. endif()
  192. endif()
  193. list(APPEND ULTRAINFER_LIBS ${TRT_INFER_LIB} ${TRT_ONNX_LIB} ${TRT_PLUGIN_LIB})
  194. endif()
  195. endif()
  196. if(ENABLE_VISION)
  197. if(OPENCV_DIRECTORY)
  198. set(OpenCV_DIR ${OPENCV_DIRECTORY})
  199. else()
  200. set(OpenCV_DIR ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/${OPENCV_FILENAME})
  201. if(WIN32)
  202. set(OpenCV_DIR ${OpenCV_DIR}/build)
  203. endif()
  204. endif()
  205. message(STATUS "The path of OpenCV is ${OpenCV_DIR}.")
  206. # Win/Linux/Mac
  207. find_package(OpenCV REQUIRED PATHS ${OpenCV_DIR} NO_DEFAULT_PATH)
  208. list(APPEND ULTRAINFER_INCS ${OpenCV_INCLUDE_DIRS})
  209. list(APPEND ULTRAINFER_LIBS ${OpenCV_LIBS})
  210. if(ENABLE_FLYCV)
  211. include_directories(${CMAKE_CURRENT_LIST_DIR}/third_libs/install/flycv/include)
  212. set(FLYCV_LIB_DIR ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/flycv/lib)
  213. find_library(FLYCV_LIB flycv_shared ${FLYCV_LIB_DIR} NO_DEFAULT_PATH)
  214. list(APPEND ULTRAINFER_LIBS ${FLYCV_LIB})
  215. endif()
  216. if(ENABLE_CVCUDA)
  217. find_library(CVCUDA_LIB cvcuda ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/cvcuda/lib NO_DEFAULT_PATH)
  218. find_library(NVCV_TYPES_LIB nvcv_types ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/cvcuda/lib NO_DEFAULT_PATH)
  219. list(APPEND ULTRAINFER_LIBS ${CVCUDA_LIB} ${NVCV_TYPES_LIB})
  220. list(APPEND ULTRAINFER_INCS ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/cvcuda/include NO_DEFAULT_PATH)
  221. add_definitions(-DENABLE_CVCUDA)
  222. endif()
  223. endif()
  224. if (ENABLE_TEXT)
  225. # Add dependency libs later: Linux/Mac/Win/...
  226. find_library(FAST_TOKENIZER_LIB core_tokenizers ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/fast_tokenizer/lib NO_DEFAULT_PATH)
  227. list(APPEND ULTRAINFER_LIBS ${FAST_TOKENIZER_LIB})
  228. list(APPEND ULTRAINFER_INCS ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/fast_tokenizer/include)
  229. list(APPEND ULTRAINFER_INCS ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/fast_tokenizer/third_party/include)
  230. endif()
  231. if(ENABLE_PADDLE2ONNX)
  232. if(NOT BUILD_PADDLE2ONNX)
  233. find_library(PADDLE2ONNX_LIB paddle2onnx ${CMAKE_CURRENT_LIST_DIR}/third_libs/install/paddle2onnx/lib NO_DEFAULT_PATH)
  234. list(APPEND ULTRAINFER_LIBS ${PADDLE2ONNX_LIB})
  235. endif()
  236. endif()
  237. if(WITH_KUNLUNXIN)
  238. list(APPEND ULTRAINFER_LIBS -lpthread -lrt -ldl)
  239. endif()
  240. remove_duplicate_libraries(ULTRAINFER_LIBS)
  241. include(${CMAKE_CURRENT_LIST_DIR}/summary.cmake)
  242. ultra_infer_summary()
  243. message(STATUS " DEPENDENCY_LIBS : ${ULTRAINFER_LIBS}")
  244. if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  245. if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.4.0")
  246. string(STRIP "${CMAKE_CXX_COMPILER_VERSION}" CMAKE_CXX_COMPILER_VERSION)
  247. message(FATAL_ERROR "[ERROR] UltraInfer require g++ version >= 5.4.0, but now your g++ version is ${CMAKE_CXX_COMPILER_VERSION}, this may cause failure! Use -DCMAKE_CXX_COMPILER to define path of your compiler.")
  248. endif()
  249. endif()
  250. function(install_ultra_infer_libraries DESTINATION_DIR)
  251. set(DYN_LIB_SUFFIX "*.so*")
  252. if(WIN32)
  253. set(DYN_LIB_SUFFIX "*.dll")
  254. elseif(APPLE)
  255. set(DYN_LIB_SUFFIX "*.dylib*")
  256. endif()
  257. if(UltraInfer_DIR)
  258. set(DYN_SEARCH_DIR ${UltraInfer_DIR})
  259. elseif(ULTRAINFER_INSTALL_DIR)
  260. set(DYN_SEARCH_DIR ${ULTRAINFER_INSTALL_DIR})
  261. else()
  262. message(FATAL_ERROR "Please set UltraInfer_DIR/ULTRAINFER_INSTALL_DIR before call install_ultra_infer_libraries.")
  263. endif()
  264. file(GLOB_RECURSE ALL_NEED_DYN_LIBS ${DYN_SEARCH_DIR}/lib/${DYN_LIB_SUFFIX})
  265. file(GLOB_RECURSE ALL_DEPS_DYN_LIBS ${DYN_SEARCH_DIR}/third_libs/${DYN_LIB_SUFFIX})
  266. if(ENABLE_VISION)
  267. # OpenCV
  268. file(GLOB_RECURSE ALL_OPENCV_DYN_LIBS ${OpenCV_DIR}/${DYN_LIB_SUFFIX})
  269. list(REMOVE_ITEM ALL_DEPS_DYN_LIBS ${ALL_OPENCV_DYN_LIBS})
  270. if(WIN32)
  271. file(GLOB OPENCV_DYN_LIBS ${OpenCV_DIR}/x64/vc15/bin/${DYN_LIB_SUFFIX})
  272. file(INSTALL ${OPENCV_DYN_LIBS} DESTINATION ${DESTINATION_DIR})
  273. else() # linux/mac
  274. file(GLOB OPENCV_DYN_LIBS ${OpenCV_DIR}/lib/${DYN_LIB_SUFFIX})
  275. file(INSTALL ${OPENCV_DYN_LIBS} DESTINATION ${DESTINATION_DIR})
  276. endif()
  277. # FlyCV
  278. if(ENABLE_FLYCV)
  279. file(GLOB_RECURSE ALL_FLYCV_DYN_LIBS ${FLYCV_LIB_DIR}/${DYN_LIB_SUFFIX})
  280. list(REMOVE_ITEM ALL_DEPS_DYN_LIBS ${ALL_FLYCV_DYN_LIBS})
  281. endif()
  282. endif()
  283. if(ENABLE_OPENVINO_BACKEND)
  284. # need plugins.xml for openvino backend
  285. set(OPENVINO_RUNTIME_BIN_DIR ${OPENVINO_DIR}/bin)
  286. file(GLOB OPENVINO_PLUGIN_XML ${OPENVINO_RUNTIME_BIN_DIR}/*.xml)
  287. file(INSTALL ${OPENVINO_PLUGIN_XML} DESTINATION ${DESTINATION_DIR})
  288. endif()
  289. # Install other libraries
  290. file(INSTALL ${ALL_NEED_DYN_LIBS} DESTINATION ${DESTINATION_DIR})
  291. file(INSTALL ${ALL_DEPS_DYN_LIBS} DESTINATION ${DESTINATION_DIR})
  292. endfunction()