CMakeLists.txt 31 KB

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