Files
yq_2026_duo/wust_vision-main/CMakeLists.txt
2026-03-27 03:41:42 +08:00

161 lines
4.6 KiB
CMake

cmake_minimum_required(VERSION 3.14)
cmake_policy(SET CMP0072 NEW)
project(wust_vision LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
set(CMAKE_BUILD_TYPE "Release")
message(STATUS "--------------------CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}--------------------")
option(BUILD_WITH_TRT "Enable TensorRT backend" ON)
option(BUILD_WITH_OPENVINO "Enable OpenVINO backend" ON)
option(BUILD_WITH_NCNN "Enable NCNN backend" OFF)
option(BUILD_WITH_ORT "Enable ORT backend" ON)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)
file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS tasks/*.cpp)
# list(FILTER SOURCES EXCLUDE REGEX "tasks/auto_guidance/.*")
# list(FILTER SOURCES EXCLUDE REGEX "tasks/auto_sniper/.*")
find_package(OpenCV REQUIRED)
find_package(Eigen3 REQUIRED)
find_package(fmt REQUIRED)
find_package(yaml-cpp REQUIRED)
find_package(Ceres REQUIRED)
find_package(HikSDK REQUIRED)
find_package(wust_vl REQUIRED)
set(BUILD_DEFINITIONS "")
set(BUILD_LIBS "")
if(BUILD_WITH_OPENVINO)
find_package(OpenVINO REQUIRED COMPONENTS Runtime ONNX)
list(APPEND BUILD_DEFINITIONS USE_OPENVINO)
list(APPEND BUILD_LIBS openvino::runtime openvino::frontend::onnx)
endif()
if(BUILD_WITH_TRT)
find_package(CUDAToolkit REQUIRED)
set(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};/home/hy/TensorRT-10.6.0.26")
find_package(TensorRT REQUIRED)
include_directories(${TensorRT_INCLUDE_DIR})
include_directories(/usr/local/cuda/include)
set(CMAKE_CUDA_COMPILER /usr/local/cuda/bin/nvcc)
set(CMAKE_CUDA_ARCHITECTURES 86)
enable_language(CUDA)
set(CMAKE_CUDA_STANDARD 14)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
set(CMAKE_CUDA_COMPILER_LAUNCHER ccache)
add_subdirectory(${CMAKE_SOURCE_DIR}/cuda_infer ${CMAKE_BINARY_DIR}/cuda_infer_build)
list(APPEND BUILD_DEFINITIONS USE_TRT)
list(APPEND BUILD_LIBS TensorRT::TensorRT TensorRT::nvonnxparser CUDA::cudart cuda_infer)
endif()
if(BUILD_WITH_NCNN)
find_package(ncnn REQUIRED)
list(APPEND BUILD_DEFINITIONS USE_NCNN)
list(APPEND BUILD_LIBS ncnn)
endif()
if(BUILD_WITH_ORT)
set(ort_root_path "/home/hy/onnxruntime-linux-x64-gpu-1.22.0")
find_package(Ort REQUIRED)
include_directories(${Ort_INCLUDE_DIR})
list(APPEND BUILD_DEFINITIONS USE_ORT)
list(APPEND BUILD_LIBS ${Ort_LIB})
endif()
add_library(${PROJECT_NAME} SHARED ${SOURCES})
target_compile_definitions(${PROJECT_NAME} PUBLIC ${BUILD_DEFINITIONS})
target_include_directories(${PROJECT_NAME} PUBLIC
${PROJECT_SOURCE_DIR}
${OpenCV_INCLUDE_DIRS}
)
target_link_libraries(${PROJECT_NAME}
wust_vl::wust_vl
HikSDK::HikSDK
yaml-cpp
fmt::fmt
Eigen3::Eigen
Ceres::ceres
${OpenCV_LIBS}
${BUILD_LIBS}
)
set(ROS2_PACKAGES
ament_cmake
rosidl_typesupport_cpp
rclcpp
geometry_msgs
tf2_ros
tf2_geometry_msgs
sensor_msgs
visualization_msgs
sentry_interfaces
nav_msgs
)
function(add_common_executable exe_name src_file)
add_executable(${exe_name} ${src_file})
target_link_libraries(${exe_name} ${PROJECT_NAME})
endfunction()
add_common_executable(standard src/standard.cpp)
# add_common_executable(dart src/dart.cpp)
add_common_executable(test_usbcamera test/test_usbcamera.cpp)
foreach(pkg IN LISTS ROS2_PACKAGES)
find_package(${pkg} QUIET)
endforeach()
set(ROS2_FULL_FOUND TRUE)
foreach(pkg IN LISTS ROS2_PACKAGES)
if(NOT ${pkg}_FOUND)
set(ROS2_FULL_FOUND FALSE)
message(WARNING "ROS2 package ${pkg} not found")
endif()
endforeach()
if(ROS2_FULL_FOUND)
message(STATUS "ROS2 full environment found, compiling ROS2 targets ...")
list(APPEND BUILD_DEFINITIONS USE_ROS2)
set(ROS2_INCLUDES)
foreach(pkg IN LISTS ROS2_PACKAGES)
if(TARGET ${pkg}::${pkg})
list(APPEND ROS2_INCLUDES ${${pkg}_INCLUDE_DIRS})
endif()
endforeach()
include_directories(${ROS2_INCLUDES})
# find_package(Open3D REQUIRED)
# target_link_libraries(${PROJECT_NAME}
# Open3D::Open3D
# )
ament_target_dependencies(${PROJECT_NAME} ${ROS2_PACKAGES})
target_compile_definitions(${PROJECT_NAME} PUBLIC ${BUILD_DEFINITIONS})
macro(add_ros2_executable exe_name src_file)
add_executable(${exe_name} ${src_file})
target_link_libraries(${exe_name} ${PROJECT_NAME} )
endmacro()
add_ros2_executable(sentry src/sentry.cpp)
add_ros2_executable(nav test/nav.cpp)
else()
message(WARNING "ROS2 dependencies incomplete, skipping ROS2 targets ...")
endif()