CMakeLists.txt 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744
  1. # Copyright (c) 2024 PaddlePaddle Authors. All Rights Reserved.
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. #
  7. # http://www.apache.org/licenses/LICENSE-2.0
  8. #
  9. # Unless required by applicable law or agreed to in writing, software
  10. # distributed under the License is distributed on an "AS IS" BASIS,
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. # See the License for the specific language governing permissions and
  13. # limitations under the License.
  14. PROJECT(ultra_infer C CXX)
  15. CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
  16. option(CSRCS_DIR_NAME "Name of source code directory")
  17. option(LIBRARY_NAME "Name of build library name")
  18. option(PY_LIBRARY_NAME "Name of build python library name")
  19. if(NOT CSRCS_DIR_NAME)
  20. set(CSRCS_DIR_NAME ".")
  21. endif()
  22. if(NOT LIBRARY_NAME)
  23. set(LIBRARY_NAME "ultra_infer")
  24. endif()
  25. if(NOT PY_LIBRARY_NAME)
  26. set(PY_LIBRARY_NAME "ultra_infer_main")
  27. endif()
  28. include(ExternalProject)
  29. set(THIRD_PARTY_PATH ${CMAKE_CURRENT_BINARY_DIR}/third_libs)
  30. set(THIRD_PARTY_DIR ${PROJECT_SOURCE_DIR}/third_party)
  31. add_subdirectory(${CSRCS_DIR_NAME}/ultra_infer)
  32. include(${PROJECT_SOURCE_DIR}/cmake/utils.cmake)
  33. # Set C++11 as standard for the whole project
  34. if(NOT MSVC)
  35. if(NOT DEFINED CMAKE_CXX_STANDARD)
  36. set(CMAKE_CXX_STANDARD 11)
  37. endif()
  38. set(CMAKE_CXX_FLAGS "-Wno-format -g0 -O3")
  39. if(NEED_ABI0)
  40. add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
  41. else()
  42. add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)
  43. endif()
  44. endif(NOT MSVC)
  45. include(${PROJECT_SOURCE_DIR}/cmake/build_tools.cmake)
  46. if(UNIX AND (NOT APPLE) AND (NOT WITH_TIMVX))
  47. download_patchelf()
  48. set(PATCHELF_EXE ${THIRD_PARTY_PATH}/patchelf/bin/patchelf)
  49. endif()
  50. ############################# Basic Options for UltraInfer ################################
  51. option(WITH_GPU "Whether WITH_GPU=ON, will enable onnxruntime-gpu/paddle-infernce-gpu/poros-gpu" OFF)
  52. option(WITH_IPU "Whether WITH_IPU=ON, will enable paddle-infernce-ipu" OFF)
  53. option(WITH_OPENCL "Whether WITH_OPENCL=ON, will enable paddle-lite-gpu" OFF)
  54. option(ENABLE_ORT_BACKEND "Whether to enable onnxruntime backend." OFF)
  55. option(ENABLE_TRT_BACKEND "Whether to enable tensorrt backend." OFF)
  56. option(ENABLE_PADDLE_BACKEND "Whether to enable paddle backend." OFF)
  57. option(ENABLE_POROS_BACKEND "Whether to enable poros backend." OFF)
  58. option(ENABLE_OPENVINO_BACKEND "Whether to enable openvino backend." OFF)
  59. option(ENABLE_RKNPU2_BACKEND "Whether to enable RKNPU2 backend." OFF)
  60. option(ENABLE_SOPHGO_BACKEND "Whether to enable SOPHON backend." OFF)
  61. option(ENABLE_TVM_BACKEND "Whether to enable TVM backend." OFF)
  62. option(ENABLE_LITE_BACKEND "Whether to enable paddle lite backend." OFF)
  63. option(ENABLE_HORIZON_BACKEND "Whether to enable HORIZON backend." OFF)
  64. option(ENABLE_OM_BACKEND "Whether to enable OM backend." OFF)
  65. option(ENABLE_VISION "Whether to enable vision models usage." OFF)
  66. option(ENABLE_TEXT "Whether to enable text models usage." OFF)
  67. option(ENABLE_FLYCV "Whether to enable flycv to boost image preprocess." OFF)
  68. option(ENABLE_CVCUDA "Whether to enable NVIDIA CV-CUDA to boost image preprocess." OFF)
  69. option(ENABLE_BENCHMARK "Whether to enable Benchmark mode." OFF)
  70. option(WITH_ASCEND "Whether to compile for Huawei Ascend deploy." OFF)
  71. option(WITH_DIRECTML "Whether to compile for onnxruntime DirectML deploy." OFF)
  72. option(WITH_TIMVX "Whether to compile for TIMVX deploy." OFF)
  73. option(WITH_KUNLUNXIN "Whether to compile for KunlunXin XPU deploy." OFF)
  74. option(WITH_TESTING "Whether to compile with unittest." OFF)
  75. option(WITH_CAPI "Whether to compile with c api." OFF)
  76. option(WITH_CSHARPAPI "Whether to compile with c# api" OFF)
  77. option(BUILD_EXAMPLES "Whether to build ultra_infer with vision examples" OFF)
  78. option(BUILD_PADDLE2ONNX "Whether to build paddle2onnx from sources" OFF)
  79. option(BUILD_FD_TRITON_BACKEND "Whether to compile as Triton Inference Server backend." OFF)
  80. ######################### Paths to user's custom libraries directory #####################
  81. set(CUDA_DIRECTORY "" CACHE PATH "If build tensorrt backend, need to define path of cuda library.")
  82. set(TRT_DIRECTORY "" CACHE PATH "If build tensorrt backend, need to define path of tensorrt library.")
  83. set(ORT_DIRECTORY "" CACHE PATH "User can specify the installed onnxruntime directory.")
  84. set(OPENCV_DIRECTORY "" CACHE PATH "User can specify the installed opencv directory.")
  85. set(OPENVINO_DIRECTORY "" CACHE PATH "User can specify the installed openvino directory.")
  86. # Whether to build ultra_infer on device Nvidia Jetson
  87. # Only support CPU Inference & GPU(TensorRT) Inference Now
  88. option(BUILD_ON_JETSON "Whether to build ultra_infer on Nvidia Jetson" OFF)
  89. if(BUILD_ON_JETSON)
  90. set(WITH_GPU ON)
  91. set(ENABLE_TRT_BACKEND ON)
  92. set(ENABLE_ORT_BACKEND ON)
  93. endif()
  94. # config GIT_URL with github mirrors to speed up dependent repos clone
  95. option(GIT_URL "Git URL to clone dependent repos" ${GIT_URL})
  96. if(NOT GIT_URL)
  97. set(GIT_URL "https://github.com")
  98. endif()
  99. # check build options
  100. include(${PROJECT_SOURCE_DIR}/cmake/check.cmake)
  101. if(WIN32)
  102. add_definitions(-DYAML_CPP_DLL)
  103. set(YAML_BUILD_SHARED_LIBS ON)
  104. set(YAML_CPP_INSTALL ON)
  105. set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
  106. endif()
  107. if(NOT CUDA_DIRECTORY)
  108. set(CUDA_DIRECTORY "/usr/local/cuda")
  109. endif()
  110. option(BUILD_ULTRAINFER_PYTHON "if build python lib for ultra_infer." OFF)
  111. set(HEAD_DIR "${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}")
  112. include_directories(${HEAD_DIR})
  113. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  114. if (WITH_TIMVX)
  115. include(${PROJECT_SOURCE_DIR}/cmake/timvx.cmake)
  116. endif()
  117. if (WITH_ASCEND)
  118. include(${PROJECT_SOURCE_DIR}/cmake/ascend.cmake)
  119. endif()
  120. if (WITH_KUNLUNXIN)
  121. include(${PROJECT_SOURCE_DIR}/cmake/kunlunxin.cmake)
  122. endif()
  123. if(WITH_IPU)
  124. if(NOT ENABLE_PADDLE_BACKEND)
  125. message("Will force to set ENABLE_PADDLE_BACKEND when build with GraphCore IPU.")
  126. set(ENABLE_PADDLE_BACKEND ON)
  127. endif()
  128. add_definitions(-DWITH_IPU)
  129. endif()
  130. # Check for macOS architecture
  131. get_osx_architecture()
  132. ##################################### Building: UltraInfer C++ SDK #######################################
  133. add_definitions(-DULTRAINFER_LIB)
  134. # set CMAKE_BUILD_TYPE to Release
  135. add_definitions(-DCMAKE_BUILD_TYPE=Release)
  136. # configure files before glob sources.
  137. configure_file(${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/core/config.h.in ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/core/config.h)
  138. configure_file(${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/pybind/main.cc.in ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/pybind/main.cc)
  139. file(GLOB_RECURSE ALL_DEPLOY_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/*.cc)
  140. file(GLOB_RECURSE DEPLOY_ORT_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/ort/*.cc)
  141. file(GLOB_RECURSE DEPLOY_PADDLE_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/paddle/*.cc)
  142. file(GLOB_RECURSE DEPLOY_POROS_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/poros/*.cc)
  143. file(GLOB_RECURSE DEPLOY_TRT_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/tensorrt/*.cc ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/tensorrt/*.cpp)
  144. file(GLOB_RECURSE DEPLOY_OPENVINO_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/openvino/*.cc)
  145. file(GLOB_RECURSE DEPLOY_RKNPU2_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/rknpu2/*.cc)
  146. file(GLOB_RECURSE DEPLOY_HORIZON_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/horizon/*.cc)
  147. file(GLOB_RECURSE DEPLOY_SOPHGO_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/sophgo/*.cc)
  148. file(GLOB_RECURSE DEPLOY_TVM_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/tvm/*.cc)
  149. file(GLOB_RECURSE DEPLOY_LITE_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/lite/*.cc)
  150. file(GLOB_RECURSE DEPLOY_PIPELINE_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/pipeline/*.cc)
  151. file(GLOB_RECURSE DEPLOY_OM_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/om/*.cc)
  152. file(GLOB_RECURSE DEPLOY_VISION_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/vision/*.cc)
  153. file(GLOB_RECURSE DEPLOY_TEXT_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/text/*.cc)
  154. file(GLOB_RECURSE DEPLOY_PYBIND_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/pybind/*.cc ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/*_pybind.cc)
  155. file(GLOB_RECURSE DEPLOY_PADDLE_CUSTOM_OP_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/paddle/ops/*.cc)
  156. if(WITH_GPU)
  157. file(GLOB_RECURSE DEPLOY_CUDA_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/*.cu)
  158. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_CUDA_SRCS})
  159. file(GLOB_RECURSE DEPLOY_PADDLE_CUSTOM_OP_CUDA_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/paddle/ops/*.cu)
  160. list(REMOVE_ITEM ALL_DEPLOY_SRCS ${DEPLOY_PADDLE_CUSTOM_OP_CUDA_SRCS})
  161. file(GLOB_RECURSE DEPLOY_VISION_CUDA_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/vision/*.cu)
  162. list(APPEND DEPLOY_VISION_SRCS ${DEPLOY_VISION_CUDA_SRCS})
  163. file(GLOB_RECURSE DEPLOY_TEXT_CUDA_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/text/*.cu)
  164. list(APPEND DEPLOY_TEXT_SRCS ${DEPLOY_TEXT_CUDA_SRCS})
  165. endif()
  166. list(REMOVE_ITEM DEPLOY_PADDLE_SRCS ${DEPLOY_PADDLE_CUSTOM_OP_SRCS})
  167. list(REMOVE_ITEM ALL_DEPLOY_SRCS ${DEPLOY_ORT_SRCS} ${DEPLOY_PADDLE_SRCS}
  168. ${DEPLOY_POROS_SRCS} ${DEPLOY_TRT_SRCS}
  169. ${DEPLOY_OPENVINO_SRCS} ${DEPLOY_LITE_SRCS}
  170. ${DEPLOY_VISION_SRCS} ${DEPLOY_TEXT_SRCS}
  171. ${DEPLOY_PIPELINE_SRCS} ${DEPLOY_RKNPU2_SRCS}
  172. ${DEPLOY_SOPHGO_SRCS}
  173. ${DEPLOY_HORIZON_SRCS} ${DEPLOY_TVM_SRCS}
  174. ${DEPLOY_PADDLE_CUSTOM_OP_SRCS} ${DEPLOY_OM_SRCS})
  175. set(DEPEND_LIBS "")
  176. file(READ "${PROJECT_SOURCE_DIR}/VERSION_NUMBER" ULTRAINFER_VERSION)
  177. string(STRIP "${ULTRAINFER_VERSION}" ULTRAINFER_VERSION)
  178. # Add eigen lib
  179. download_eigen()
  180. include_directories(${PROJECT_SOURCE_DIR}/third_party/eigen)
  181. if(WIN32)
  182. add_definitions(-DEIGEN_STRONG_INLINE=inline)
  183. endif()
  184. # sw(sunway) not support thread_local semantic
  185. if(WITH_SW)
  186. add_definitions(-DEIGEN_AVOID_THREAD_LOCAL)
  187. endif()
  188. if(ENABLE_ORT_BACKEND)
  189. set(ENABLE_PADDLE2ONNX ON)
  190. add_definitions(-DENABLE_ORT_BACKEND)
  191. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_ORT_SRCS})
  192. include(${PROJECT_SOURCE_DIR}/cmake/onnxruntime.cmake)
  193. list(APPEND DEPEND_LIBS external_onnxruntime)
  194. endif()
  195. if(ENABLE_LITE_BACKEND)
  196. add_definitions(-DENABLE_LITE_BACKEND)
  197. include(${PROJECT_SOURCE_DIR}/cmake/paddlelite.cmake)
  198. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_LITE_SRCS})
  199. list(APPEND DEPEND_LIBS external_paddle_lite)
  200. endif()
  201. if(ENABLE_PADDLE_BACKEND)
  202. set(ENABLE_PADDLE2ONNX ON)
  203. add_definitions(-DENABLE_PADDLE_BACKEND)
  204. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_PADDLE_SRCS})
  205. include(${PROJECT_SOURCE_DIR}/cmake/paddle_inference.cmake)
  206. list(APPEND DEPEND_LIBS external_paddle_inference)
  207. if(external_dnnl_FOUND)
  208. list(APPEND DEPEND_LIBS external_dnnl external_omp)
  209. endif()
  210. if(external_ort_FOUND)
  211. list(APPEND DEPEND_LIBS external_p2o external_ort)
  212. endif()
  213. if(PADDLEINFERENCE_API_CUSTOM_OP)
  214. set_paddle_custom_ops_compatible_policy()
  215. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_PADDLE_CUSTOM_OP_SRCS})
  216. if(WITH_GPU)
  217. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_PADDLE_CUSTOM_OP_CUDA_SRCS})
  218. endif()
  219. endif()
  220. endif()
  221. if(ENABLE_OPENVINO_BACKEND)
  222. set(ENABLE_PADDLE2ONNX ON)
  223. add_definitions(-DENABLE_OPENVINO_BACKEND)
  224. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_OPENVINO_SRCS})
  225. include(${PROJECT_SOURCE_DIR}/cmake/openvino.cmake)
  226. endif()
  227. if(ENABLE_RKNPU2_BACKEND)
  228. add_definitions(-DENABLE_RKNPU2_BACKEND)
  229. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_RKNPU2_SRCS})
  230. include(${PROJECT_SOURCE_DIR}/cmake/rknpu2.cmake)
  231. list(APPEND DEPEND_LIBS ${RKNN_RT_LIB})
  232. endif()
  233. if(ENABLE_HORIZON_BACKEND)
  234. add_definitions(-DENABLE_HORIZON_BACKEND)
  235. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_HORIZON_SRCS})
  236. include(${PROJECT_SOURCE_DIR}/cmake/horizon.cmake)
  237. list(APPEND DEPEND_LIBS ${BPU_libs})
  238. endif()
  239. if(ENABLE_TVM_BACKEND)
  240. set(CMAKE_CXX_STANDARD 17)
  241. add_definitions(-DENABLE_TVM_BACKEND)
  242. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_TVM_SRCS})
  243. include(${PROJECT_SOURCE_DIR}/cmake/tvm.cmake)
  244. list(APPEND DEPEND_LIBS ${TVM_RUNTIME_LIB})
  245. endif()
  246. if(ENABLE_SOPHGO_BACKEND)
  247. add_definitions(-DENABLE_SOPHGO_BACKEND)
  248. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_SOPHGO_SRCS})
  249. include(${PROJECT_SOURCE_DIR}/cmake/sophgo.cmake)
  250. list(APPEND DEPEND_LIBS ${SOPHGO_RT_LIB})
  251. endif()
  252. if(ENABLE_POROS_BACKEND)
  253. set(CMAKE_CXX_STANDARD 14)
  254. add_definitions(-DENABLE_POROS_BACKEND)
  255. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_POROS_SRCS})
  256. include(${PROJECT_SOURCE_DIR}/cmake/poros.cmake)
  257. list(APPEND DEPEND_LIBS external_poros)
  258. set(PYTHON_MINIMUM_VERSION 3.6)
  259. set(PYTORCH_MINIMUM_VERSION 1.9)
  260. set(TENSORRT_MINIMUM_VERSION 8.0)
  261. # find python3
  262. find_package(Python3 ${PYTHON_MINIMUM_VERSION} REQUIRED COMPONENTS Interpreter Development)
  263. message(STATUS "Found Python: ${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}.${Python3_VERSION_PATCH}")
  264. if (NOT Python3_SITELIB)
  265. message(FATAL_ERROR "site-packages not found. ")
  266. else ()
  267. message(STATUS "site-packages: ${Python3_SITELIB}")
  268. endif ()
  269. include_directories(${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/poros/common)
  270. # find trt
  271. if(NOT WITH_GPU)
  272. message(FATAL_ERROR "While -DENABLE_POROS_BACKEND=ON, must set -DWITH_GPU=ON, but now it's OFF")
  273. endif()
  274. if(NOT TRT_DIRECTORY)
  275. message(FATAL_ERROR "While -DENABLE_POROS_BACKEND=ON, must define -DTRT_DIRECTORY, e.g -DTRT_DIRECTORY=/Downloads/TensorRT-8.4")
  276. endif()
  277. include_directories(${TRT_DIRECTORY}/include)
  278. find_library(TRT_INFER_LIB nvinfer ${TRT_DIRECTORY}/lib)
  279. find_library(TRT_ONNX_LIB nvonnxparser ${TRT_DIRECTORY}/lib)
  280. find_library(TRT_PLUGIN_LIB nvinfer_plugin ${TRT_DIRECTORY}/lib)
  281. list(APPEND DEPEND_LIBS ${TRT_INFER_LIB} ${TRT_ONNX_LIB} ${TRT_PLUGIN_LIB})
  282. if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt")
  283. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt")
  284. endif()
  285. if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt/lib")
  286. file(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt/lib")
  287. endif()
  288. find_package(Python COMPONENTS Interpreter Development REQUIRED)
  289. message(STATUS "Copying ${TRT_DIRECTORY}/lib to ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt/lib ...")
  290. execute_process(COMMAND ${Python_EXECUTABLE} ${PROJECT_SOURCE_DIR}/scripts/copy_directory.py ${TRT_DIRECTORY}/lib ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt/lib)
  291. endif()
  292. if(ENABLE_OM_BACKEND)
  293. add_definitions(-DENABLE_OM_BACKEND)
  294. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_OM_SRCS})
  295. include(${PROJECT_SOURCE_DIR}/cmake/om.cmake)
  296. list(APPEND DEPEND_LIBS ${NPU_libs})
  297. endif()
  298. if(WITH_GPU)
  299. add_definitions(-DWITH_GPU)
  300. include_directories(${CUDA_DIRECTORY}/include)
  301. if(WIN32)
  302. find_library(CUDA_LIB cudart ${CUDA_DIRECTORY}/lib/x64)
  303. find_library(NVJPEG_LIB nvjpeg ${CUDA_DIRECTORY}/lib/x64)
  304. add_definitions(-DENABLE_NVJPEG)
  305. else()
  306. find_library(CUDA_LIB cudart ${CUDA_DIRECTORY}/lib64)
  307. if(NOT BUILD_ON_JETSON)
  308. find_library(NVJPEG_LIB nvjpeg ${CUDA_DIRECTORY}/lib64)
  309. add_definitions(-DENABLE_NVJPEG)
  310. endif()
  311. endif()
  312. list(APPEND DEPEND_LIBS ${CUDA_LIB} ${NVJPEG_LIB})
  313. # build CUDA source files in ultra_infer, CUDA source files include CUDA preprocessing, TRT plugins, etc.
  314. enable_language(CUDA)
  315. message(STATUS "CUDA compiler: ${CMAKE_CUDA_COMPILER}, version: "
  316. "${CMAKE_CUDA_COMPILER_ID} ${CMAKE_CUDA_COMPILER_VERSION}")
  317. include(${PROJECT_SOURCE_DIR}/cmake/cuda.cmake)
  318. endif()
  319. if(WITH_OPENCL)
  320. add_definitions(-DWITH_OPENCL)
  321. endif()
  322. if(ENABLE_TRT_BACKEND)
  323. set(ENABLE_PADDLE2ONNX ON)
  324. if(APPLE OR IOS)
  325. message(FATAL_ERROR "Cannot enable tensorrt backend in mac/ios os, please set -DENABLE_TRT_BACKEND=OFF.")
  326. endif()
  327. if(NOT WITH_GPU)
  328. message(FATAL_ERROR "While -DENABLE_TRT_BACKEND=ON, must set -DWITH_GPU=ON, but now it's OFF")
  329. endif()
  330. if(NOT BUILD_ON_JETSON)
  331. if(NOT TRT_DIRECTORY)
  332. set(TRT_INC_DIR /usr/include/x86_64-linux-gnu/)
  333. set(TRT_LIB_DIR /usr/lib/x86_64-linux-gnu/)
  334. endif()
  335. endif()
  336. if(BUILD_ON_JETSON)
  337. set(TRT_INC_DIR /usr/include/aarch64-linux-gnu/)
  338. set(TRT_LIB_DIR /usr/lib/aarch64-linux-gnu/)
  339. else()
  340. set(TRT_INC_DIR /usr/include/x86_64-linux-gnu/)
  341. set(TRT_LIB_DIR /usr/lib/x86_64-linux-gnu/)
  342. if(TRT_DIRECTORY)
  343. set(TRT_INC_DIR ${TRT_DIRECTORY}/include)
  344. set(TRT_LIB_DIR ${TRT_DIRECTORY}/lib)
  345. endif()
  346. endif()
  347. add_definitions(-DENABLE_TRT_BACKEND)
  348. include_directories(${TRT_INC_DIR})
  349. include_directories(${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/tensorrt/common)
  350. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_TRT_SRCS})
  351. find_library(TRT_INFER_LIB nvinfer ${TRT_LIB_DIR} NO_DEFAULT_PATH)
  352. find_library(TRT_ONNX_LIB nvonnxparser ${TRT_LIB_DIR} NO_DEFAULT_PATH)
  353. find_library(TRT_PLUGIN_LIB nvinfer_plugin ${TRT_LIB_DIR} NO_DEFAULT_PATH)
  354. list(APPEND DEPEND_LIBS ${TRT_INFER_LIB} ${TRT_ONNX_LIB} ${TRT_PLUGIN_LIB})
  355. if(NOT BUILD_ON_JETSON AND TRT_DIRECTORY)
  356. if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt")
  357. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt")
  358. endif()
  359. if(EXISTS "${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt/lib")
  360. file(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt/lib")
  361. endif()
  362. if (NOT Python_EXECUTABLE)
  363. find_package(Python COMPONENTS Interpreter Development REQUIRED)
  364. endif()
  365. message(STATUS "Copying ${TRT_DIRECTORY}/lib to ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt/lib ...")
  366. execute_process(COMMAND ${Python_EXECUTABLE} ${PROJECT_SOURCE_DIR}/scripts/copy_directory.py ${TRT_DIRECTORY}/lib ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt/lib)
  367. file(GLOB_RECURSE TRT_STATIC_LIBS ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt/lib/*.a)
  368. if(TRT_STATIC_LIBS)
  369. file(REMOVE ${TRT_STATIC_LIBS})
  370. endif()
  371. if(UNIX AND (NOT APPLE))
  372. execute_process(COMMAND sh -c "ls *.so*" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt/lib
  373. COMMAND sh -c "xargs ${PATCHELF_EXE} --force-rpath --set-rpath '$ORIGIN'" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/tensorrt/lib
  374. RESULT_VARIABLE result
  375. OUTPUT_VARIABLE curr_out
  376. ERROR_VARIABLE curr_out)
  377. if(ret EQUAL "1")
  378. message(FATAL_ERROR "Failed to patchelf tensorrt libraries.")
  379. endif()
  380. message(STATUS "result:${result} out:${curr_out}")
  381. endif()
  382. endif()
  383. endif()
  384. if(ENABLE_VISION)
  385. add_definitions(-DENABLE_VISION)
  386. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_VISION_SRCS})
  387. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_PIPELINE_SRCS})
  388. include(${PROJECT_SOURCE_DIR}/cmake/opencv.cmake)
  389. if(ENABLE_FLYCV)
  390. add_definitions(-DENABLE_FLYCV)
  391. include(${PROJECT_SOURCE_DIR}/cmake/flycv.cmake)
  392. list(APPEND DEPEND_LIBS ${FLYCV_LIBRARIES})
  393. endif()
  394. if(ENABLE_CVCUDA)
  395. include(${PROJECT_SOURCE_DIR}/cmake/cvcuda.cmake)
  396. add_definitions(-DENABLE_CVCUDA)
  397. list(APPEND DEPEND_LIBS nvcv_types cvcuda)
  398. endif()
  399. endif()
  400. download_yaml_cpp()
  401. add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/yaml-cpp)
  402. list(APPEND DEPEND_LIBS yaml-cpp)
  403. include_directories(${PROJECT_SOURCE_DIR}/third_party/yaml-cpp/include)
  404. if(ENABLE_TEXT)
  405. add_definitions(-DENABLE_TEXT)
  406. list(APPEND ALL_DEPLOY_SRCS ${DEPLOY_TEXT_SRCS})
  407. include(${PROJECT_SOURCE_DIR}/cmake/fast_tokenizer.cmake)
  408. endif()
  409. if(ENABLE_PADDLE2ONNX)
  410. add_definitions(-DENABLE_PADDLE2ONNX)
  411. if(BUILD_PADDLE2ONNX)
  412. download_protobuf()
  413. download_onnx()
  414. download_optimizer()
  415. include(${PROJECT_SOURCE_DIR}/cmake/build_paddle2onnx.cmake)
  416. list(APPEND ALL_DEPLOY_SRCS ${PADDLE2ONNX_ALL_SRCS})
  417. list(APPEND DEPEND_LIBS p2o_paddle_proto onnx)
  418. else()
  419. include(${PROJECT_SOURCE_DIR}/cmake/paddle2onnx.cmake)
  420. list(APPEND DEPEND_LIBS external_paddle2onnx)
  421. endif()
  422. endif(ENABLE_PADDLE2ONNX)
  423. if(WITH_CAPI)
  424. include(${PROJECT_SOURCE_DIR}/c_api/CMakeLists.txt)
  425. if(MSVC)
  426. add_definitions(-DFD_CAPI)
  427. endif()
  428. endif()
  429. if(WITH_CSHARPAPI)
  430. if(MSVC)
  431. add_subdirectory(${PROJECT_SOURCE_DIR}/csharp)
  432. endif()
  433. endif()
  434. configure_file(${PROJECT_SOURCE_DIR}/UltraInfer.cmake.in ${PROJECT_SOURCE_DIR}/UltraInfer.cmake @ONLY)
  435. configure_file(${PROJECT_SOURCE_DIR}/UltraInferCSharp.cmake.in ${PROJECT_SOURCE_DIR}/UltraInferCSharp.cmake @ONLY)
  436. if(BUILD_FD_TRITON_BACKEND)
  437. configure_file(${PROJECT_SOURCE_DIR}/python/ultra_infer/c_lib_wrap.py.in ${PROJECT_SOURCE_DIR}/python/ultra_infer/c_lib_wrap.py)
  438. else()
  439. configure_file(${PROJECT_SOURCE_DIR}/python/${LIBRARY_NAME}/c_lib_wrap.py.in ${PROJECT_SOURCE_DIR}/python/${LIBRARY_NAME}/c_lib_wrap.py)
  440. endif()
  441. configure_file(${PROJECT_SOURCE_DIR}/python/scripts/process_libraries.py.in ${PROJECT_SOURCE_DIR}/python/scripts/process_libraries.py)
  442. list(REMOVE_ITEM ALL_DEPLOY_SRCS ${DEPLOY_PYBIND_SRCS})
  443. add_library(${LIBRARY_NAME} SHARED ${ALL_DEPLOY_SRCS})
  444. redefine_file_macro(${LIBRARY_NAME})
  445. file(READ "${PROJECT_SOURCE_DIR}/VERSION_NUMBER" ULTRAINFER_VERSION)
  446. string(STRIP "${ULTRAINFER_VERSION}" ULTRAINFER_VERSION)
  447. if (APPLE)
  448. set_target_properties(${LIBRARY_NAME} PROPERTIES COMPILE_FLAGS "-fvisibility=hidden")
  449. elseif(MSVC)
  450. else()
  451. if(WITH_GPU)
  452. set_target_properties(${LIBRARY_NAME} PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
  453. set_target_properties(${LIBRARY_NAME} PROPERTIES INTERFACE_COMPILE_OPTIONS
  454. "$<$<BUILD_INTERFACE:$<COMPILE_LANGUAGE:CXX>>:-fvisibility=hidden>$<$<BUILD_INTERFACE:$<COMPILE_LANGUAGE:CUDA>>:-Xcompiler=-fvisibility=hidden>")
  455. else()
  456. set_target_properties(${LIBRARY_NAME} PROPERTIES COMPILE_FLAGS "-fvisibility=hidden")
  457. endif()
  458. set_target_properties(${LIBRARY_NAME} PROPERTIES LINK_FLAGS "-Wl,--exclude-libs,ALL")
  459. set_target_properties(${LIBRARY_NAME} PROPERTIES LINK_FLAGS_RELEASE -s)
  460. endif()
  461. set_target_properties(${LIBRARY_NAME} PROPERTIES VERSION ${ULTRAINFER_VERSION})
  462. if(MSVC)
  463. # disable warnings for dll export
  464. target_compile_options(${LIBRARY_NAME} PRIVATE "$<$<BUILD_INTERFACE:$<COMPILE_LANGUAGE:CXX>>:/wd4251>$<$<BUILD_INTERFACE:$<COMPILE_LANGUAGE:CUDA>>:-Xcompiler=/wd4251>")
  465. file(GLOB FD_FILES_REQUIRE_BIGOBJ ${CSRCS_DIR_NAME}/ultra_infer/function/reduce.cc)
  466. set_source_files_properties(${FD_FILES_REQUIRE_BIGOBJ} PROPERTIES COMPILE_FLAGS "/bigobj")
  467. endif()
  468. target_link_libraries(${LIBRARY_NAME} ${DEPEND_LIBS})
  469. ##################################### Examples ####################################
  470. if(WIN32)
  471. if("${CMAKE_GENERATOR}" STREQUAL "Ninja")
  472. add_custom_target(copy_yaml_library ALL COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/third_party/yaml-cpp ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/yaml-cpp/lib DEPENDS ${LIBRARY_NAME})
  473. else()
  474. add_custom_target(copy_yaml_library ALL COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/third_party/yaml-cpp/Release ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/yaml-cpp/lib DEPENDS ${LIBRARY_NAME})
  475. add_custom_target(copy_yaml_include ALL COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/third_party/yaml-cpp/include ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/yaml-cpp/include DEPENDS ${LIBRARY_NAME})
  476. endif()
  477. endif()
  478. # add examples after prepare include paths for third-parties
  479. if(BUILD_EXAMPLES AND EXISTS ${PROJECT_SOURCE_DIR}/examples)
  480. add_definitions(-DBUILD_EXAMPLES)
  481. if(NOT EXECUTABLE_OUTPUT_PATH STREQUAL ${CMAKE_CURRENT_BINARY_DIR}/bin)
  482. set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin)
  483. endif()
  484. include(${PROJECT_SOURCE_DIR}/cmake/gflags.cmake)
  485. add_subdirectory(examples)
  486. endif()
  487. if (WITH_TESTING AND EXISTS ${PROJECT_SOURCE_DIR}/tests)
  488. add_definitions(-DWITH_TESTING)
  489. include(${PROJECT_SOURCE_DIR}/cmake/gtest.cmake)
  490. if(NOT BUILD_EXAMPLES)
  491. include(${PROJECT_SOURCE_DIR}/cmake/gflags.cmake)
  492. endif()
  493. include(${PROJECT_SOURCE_DIR}/cmake/glog.cmake)
  494. add_subdirectory(tests)
  495. endif()
  496. include(${PROJECT_SOURCE_DIR}/cmake/summary.cmake)
  497. ultra_infer_summary()
  498. ################################ Installation: UltraInfer C++ SDK ###############################
  499. if(WIN32)
  500. install(
  501. TARGETS ${LIBRARY_NAME}
  502. LIBRARY DESTINATION lib
  503. ARCHIVE DESTINATION lib
  504. RUNTIME DESTINATION lib
  505. )
  506. else()
  507. install(
  508. TARGETS ${LIBRARY_NAME}
  509. LIBRARY DESTINATION lib)
  510. endif()
  511. install(
  512. DIRECTORY ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer
  513. DESTINATION ${CMAKE_INSTALL_PREFIX}/include
  514. FILES_MATCHING
  515. PATTERN "*.h"
  516. PATTERN "${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/runtime/backends/*/*.h"
  517. )
  518. install(
  519. DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install
  520. DESTINATION ${CMAKE_INSTALL_PREFIX}/third_libs
  521. )
  522. install(
  523. FILES
  524. ${PROJECT_SOURCE_DIR}/LICENSE
  525. ${PROJECT_SOURCE_DIR}/ThirdPartyNotices.txt
  526. ${PROJECT_SOURCE_DIR}/VERSION_NUMBER
  527. ${PROJECT_SOURCE_DIR}/UltraInfer.cmake
  528. ${PROJECT_SOURCE_DIR}/UltraInferCSharp.cmake
  529. ${PROJECT_SOURCE_DIR}/cmake/UltraInferConfig.cmake
  530. ${PROJECT_SOURCE_DIR}/cmake/utils.cmake
  531. ${PROJECT_SOURCE_DIR}/cmake/summary.cmake
  532. DESTINATION ${CMAKE_INSTALL_PREFIX}
  533. )
  534. install(
  535. FILES ${PROJECT_SOURCE_DIR}/cmake/gflags.cmake
  536. DESTINATION ${CMAKE_INSTALL_PREFIX}/utils
  537. )
  538. if(NOT WIN32)
  539. install(
  540. FILES ${PROJECT_SOURCE_DIR}/scripts/ultra_infer_init.sh
  541. DESTINATION ${CMAKE_INSTALL_PREFIX}
  542. )
  543. else()
  544. install(
  545. FILES ${PROJECT_SOURCE_DIR}/scripts/ultra_infer_init.bat
  546. DESTINATION ${CMAKE_INSTALL_PREFIX}
  547. )
  548. endif()
  549. if(WITH_ASCEND)
  550. install(
  551. FILES ${PROJECT_SOURCE_DIR}/scripts/ascend_init.sh
  552. DESTINATION ${CMAKE_INSTALL_PREFIX}
  553. )
  554. endif()
  555. if(WITH_CAPI)
  556. install(
  557. DIRECTORY ${PROJECT_SOURCE_DIR}/c_api/ultra_infer_capi
  558. DESTINATION ${CMAKE_INSTALL_PREFIX}/include
  559. FILES_MATCHING
  560. PATTERN "*.h"
  561. PATTERN "*/types_internal.h" EXCLUDE
  562. )
  563. endif()
  564. include(${PROJECT_SOURCE_DIR}/cmake/config_cpack.cmake)
  565. if(WIN32 AND BUILD_EXAMPLES)
  566. get_windows_path(_tmp_install_dir ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install)
  567. get_windows_path(_publish_exe_dir ${EXECUTABLE_OUTPUT_PATH}/Release)
  568. list(GET CMAKE_CONFIGURATION_TYPES 0 _CONFIG_TYPE)
  569. if((${CMAKE_BUILD_TYPE} MATCHES "Release") OR (${_CONFIG_TYPE} MATCHES "Release"))
  570. install(TARGETS ${LIBRARY_NAME} RUNTIME DESTINATION ${EXECUTABLE_OUTPUT_PATH}/Release)
  571. add_custom_target(
  572. copy_fd_third_dlls_examples ALL COMMAND
  573. cmd /C ${PROJECT_SOURCE_DIR}/scripts/ultra_infer_init.bat install ${_tmp_install_dir} ${_publish_exe_dir} noconfirm)
  574. add_dependencies(copy_fd_third_dlls_examples ${LIBRARY_NAME} copy_yaml_library)
  575. endif()
  576. endif()
  577. ############################### Building: UltraInfer Python Wheel #############################
  578. if(BUILD_ULTRAINFER_PYTHON)
  579. add_definitions(-DBUILD_ULTRAINFER_PYTHON)
  580. if("${PY_EXT_SUFFIX}" STREQUAL "")
  581. if(MSVC)
  582. set(PY_EXT_SUFFIX ".pyd")
  583. else()
  584. set(PY_EXT_SUFFIX ".so")
  585. endif()
  586. endif()
  587. # find_package Python has replaced PythonInterp and PythonLibs since cmake 3.12
  588. # Use the following command in the future; now this is only compatible with the latest pybind11
  589. # find_package(Python ${PY_VERSION} COMPONENTS Interpreter Development REQUIRED)
  590. find_package(PythonInterp ${PY_VERSION} REQUIRED)
  591. find_package(PythonLibs ${PY_VERSION})
  592. if(CMAKE_SYSTEM_NAME STREQUAL "AIX")
  593. set(CMAKE_NO_SYSTEM_FROM_IMPORTED 1)
  594. endif()
  595. if(NOT ENABLE_VISION)
  596. file(GLOB_RECURSE VISION_PYBIND_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/vision/*_pybind.cc)
  597. file(GLOB_RECURSE PIPELINE_PYBIND_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/pipeline/*_pybind.cc)
  598. list(REMOVE_ITEM DEPLOY_PYBIND_SRCS ${VISION_PYBIND_SRCS} ${PIPELINE_PYBIND_SRCS})
  599. endif()
  600. if (NOT ENABLE_TEXT)
  601. file(GLOB_RECURSE TEXT_PYBIND_SRCS ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/ultra_infer/text/*_pybind.cc)
  602. list(REMOVE_ITEM DEPLOY_PYBIND_SRCS ${TEXT_PYBIND_SRCS})
  603. endif()
  604. add_library(${PY_LIBRARY_NAME} MODULE ${DEPLOY_PYBIND_SRCS})
  605. redefine_file_macro(${PY_LIBRARY_NAME})
  606. set_target_properties(${PY_LIBRARY_NAME} PROPERTIES PREFIX "")
  607. set_target_properties(${PY_LIBRARY_NAME}
  608. PROPERTIES COMPILE_FLAGS "-fvisibility=hidden")
  609. set_target_properties(${PY_LIBRARY_NAME} PROPERTIES SUFFIX ${PY_EXT_SUFFIX})
  610. set_target_properties(${PY_LIBRARY_NAME}
  611. PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
  612. target_include_directories(${PY_LIBRARY_NAME} PRIVATE
  613. $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
  614. $<INSTALL_INTERFACE:include>
  615. ${PYTHON_INCLUDE_DIR})
  616. download_pybind()
  617. target_include_directories(${PY_LIBRARY_NAME} PUBLIC ${PROJECT_SOURCE_DIR}/third_party/pybind11/include)
  618. download_dlpack()
  619. target_include_directories(${PY_LIBRARY_NAME} PUBLIC ${PROJECT_SOURCE_DIR}/third_party/dlpack/include)
  620. if(APPLE)
  621. set_target_properties(${PY_LIBRARY_NAME}
  622. PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
  623. endif()
  624. target_link_libraries(${PY_LIBRARY_NAME} PUBLIC ${LIBRARY_NAME})
  625. if(MSVC)
  626. target_link_libraries(${PY_LIBRARY_NAME} PRIVATE ${PYTHON_LIBRARIES})
  627. target_compile_options(${PY_LIBRARY_NAME}
  628. PRIVATE /MP
  629. /wd4244 # 'argument': conversion from 'google::
  630. # protobuf::uint64' to 'int', possible
  631. # loss of data
  632. /wd4267 # Conversion from 'size_t' to 'int',
  633. # possible loss of data
  634. /wd4996 # The second parameter is ignored.
  635. ${EXTRA_FLAGS})
  636. target_compile_options(${PY_LIBRARY_NAME} PRIVATE $<$<NOT:$<CONFIG:Debug>>:/MT> $<$<CONFIG:Debug>:/MTd>)
  637. endif()
  638. file(REMOVE_RECURSE ${PROJECT_SOURCE_DIR}/python/${LIBRARY_NAME}/libs)
  639. file(MAKE_DIRECTORY ${PROJECT_SOURCE_DIR}/python/${LIBRARY_NAME}/libs)
  640. if(WIN32)
  641. add_custom_target(copy_fd_libraries ALL COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/Release ${PROJECT_SOURCE_DIR}/python/${LIBRARY_NAME}/libs/ DEPENDS ${PY_LIBRARY_NAME})
  642. elseif(APPLE)
  643. add_custom_target(copy_fd_libraries ALL COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/*.so** ${CMAKE_CURRENT_BINARY_DIR}/*.dylib** ${PROJECT_SOURCE_DIR}/python/${LIBRARY_NAME}/libs/ DEPENDS ${PY_LIBRARY_NAME})
  644. else()
  645. add_custom_target(copy_fd_libraries ALL COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/*.so* ${PROJECT_SOURCE_DIR}/python/${LIBRARY_NAME}/libs/ DEPENDS ${PY_LIBRARY_NAME})
  646. endif()
  647. add_custom_target(copy_third_libraries ALL COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install ${PROJECT_SOURCE_DIR}/python/${LIBRARY_NAME}/libs/third_libs DEPENDS ${PY_LIBRARY_NAME})
  648. endif(BUILD_ULTRAINFER_PYTHON)
  649. if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  650. if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.4.0")
  651. string(STRIP "${CMAKE_CXX_COMPILER_VERSION}" CMAKE_CXX_COMPILER_VERSION)
  652. 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.")
  653. endif()
  654. endif()