CMakeLists.txt 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. set(SON_PROJECT_NAME yoloseg)
  2. message("========== Load son project ${SON_PROJECT_NAME} ==========" )
  3. unset(OPTION_ENABLE_TENSORRT_DETECT_CODE CACHE)
  4. option(OPTION_ENABLE_TENSORRT_DETECT_CODE "" OFF)
  5. message("<=${SON_PROJECT_NAME}=> OPTION_ENABLE_TENSORRT_DETECT_CODE: " ${OPTION_ENABLE_TENSORRT_DETECT_CODE})
  6. if (OPTION_ENABLE_TENSORRT_DETECT_CODE)
  7. set(CMAKE_CUDA_ARCHITECTURES 60 61 62 70 72 75 86)
  8. set(CMAKE_CUDA_COMPILER /usr/local/cuda/bin/nvcc)
  9. project(${SON_PROJECT_NAME} LANGUAGES CXX CUDA)
  10. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O3")
  11. set(CMAKE_CXX_STANDARD 17)
  12. option(CUDA_USE_STATIC_CUDA_RUNTIME OFF)
  13. # CUDA
  14. find_package(CUDA REQUIRED)
  15. message(STATUS "CUDA Libs: \n${CUDA_LIBRARIES}\n")
  16. get_filename_component(CUDA_LIB_DIR ${CUDA_LIBRARIES} DIRECTORY)
  17. message(STATUS "CUDA Headers: \n${CUDA_INCLUDE_DIRS}\n")
  18. # OpenCV
  19. message(STATUS "OpenCV Libs: \n${OpenCV_LIBS}\n")
  20. message(STATUS "OpenCV Libraries: \n${OpenCV_LIBRARIES}\n")
  21. message(STATUS "OpenCV Headers: \n${OpenCV_INCLUDE_DIRS}\n")
  22. if(${OpenCV_VERSION} VERSION_GREATER_EQUAL 4.7.0)
  23. message(STATUS "Build with -DBATCHED_NMS")
  24. add_definitions(-DBATCHED_NMS)
  25. endif()
  26. # TensorRT
  27. set(TensorRT_INCLUDE_DIRS /usr/include/aarch64-linux-gnu)
  28. set(TensorRT_LIBRARIES /usr/lib/aarch64-linux-gnu)
  29. message(STATUS "TensorRT Libs: \n${TensorRT_LIBRARIES}\n")
  30. message(STATUS "TensorRT Headers: \n${TensorRT_INCLUDE_DIRS}\n")
  31. list(APPEND INCLUDE_DIRS
  32. ${CUDA_INCLUDE_DIRS}
  33. ${TensorRT_INCLUDE_DIRS}
  34. )
  35. list(APPEND ALL_LIBS
  36. nvinfer
  37. nvinfer_plugin
  38. ${CUDA_LIBRARIES}
  39. ${CUDA_LIB_DIR}
  40. ${TensorRT_LIBRARIES}
  41. )
  42. aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/tensorrt_detect yolov8_detect)
  43. else ()
  44. aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/onnx_detect yolov8_detect)
  45. endif ()
  46. find_package(gRPC CONFIG REQUIRED)
  47. # 获取系统架构
  48. message("SYSTEM: ${CMAKE_SYSTEM_PROCESSOR}")
  49. aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/proto proto)
  50. include_directories(
  51. ${INCLUDE_DIRS}
  52. ${CMAKE_CURRENT_LIST_DIR}
  53. ${OpenCV_INCLUDE_DIRS}
  54. ${PROTOBUF_INCLUDE_DIR}
  55. ${NebulaSDK_PATH}/include
  56. )
  57. aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/detect detect)
  58. set(SON_PROJECT_SOURCE_LIST ${SON_PROJECT_SOURCE_LIST}
  59. ${proto}
  60. ${yolov8_detect}
  61. ${CMAKE_CURRENT_LIST_DIR}/segMain.cpp
  62. ${CMAKE_CURRENT_LIST_DIR}/net_message_trans.h
  63. ${CMAKE_CURRENT_LIST_DIR}/net_message_trans.cpp
  64. ${CMAKE_CURRENT_LIST_DIR}/yolo_seg_mqtt_async.h
  65. ${CMAKE_CURRENT_LIST_DIR}/yolo_seg_mqtt_async.cpp
  66. )
  67. set(SON_PROJECT_DEPEND_LIST ${SON_PROJECT_DEPEND_LIST}
  68. zxpahoc
  69. zxthread
  70. protobuf::libprotobuf
  71. gRPC::grpc++_reflection
  72. ${OpenCV_LIBRARIES}
  73. ${ALL_LIBS}
  74. )
  75. add_executable(${SON_PROJECT_NAME} ${SON_PROJECT_SOURCE_LIST})
  76. target_link_libraries(${SON_PROJECT_NAME} ${SON_PROJECT_DEPEND_LIST})
  77. target_compile_definitions(${SON_PROJECT_NAME} PRIVATE PROJECT_NAME="${SON_PROJECT_NAME}")
  78. if (OPTION_ENABLE_TENSORRT_DETECT_CODE)
  79. target_compile_definitions(${SON_PROJECT_NAME} PRIVATE ENABLE_TENSORRT_DETECT)
  80. endif ()
  81. install(TARGETS ${SON_PROJECT_NAME}
  82. LIBRARY DESTINATION lib # 动态库安装路径
  83. ARCHIVE DESTINATION lib # 静态库安装路径
  84. RUNTIME DESTINATION bin # 可执行文件安装路径
  85. PUBLIC_HEADER DESTINATION include # 头文件安装路径
  86. )