161 lines
4.6 KiB
CMake
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()
|
|
|