2025-08-22 16:57:29 +08:00
|
|
|
|
cmake_minimum_required(VERSION 3.22.0)
|
|
|
|
|
|
|
|
|
|
|
|
project(cmvr_es)
|
|
|
|
|
|
|
|
|
|
|
|
# 设置C++标准
|
|
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
2026-01-14 14:04:07 +08:00
|
|
|
|
#set(CMAKE_CXX_FLAGS -pthread)
|
|
|
|
|
|
#set(CMAKE_CXX_STANDARD_REQUIRED True)
|
2025-08-22 16:57:29 +08:00
|
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
|
|
|
|
|
|
|
|
###########################################################
|
|
|
|
|
|
## DEPENDENCIES
|
|
|
|
|
|
#############################################################
|
2026-01-14 14:04:07 +08:00
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
|
|
|
|
|
|
include(FindExternalLib)
|
|
|
|
|
|
set(ARCH "x86")
|
|
|
|
|
|
setup_external_libs(${ARCH})
|
|
|
|
|
|
# 在调用 setup_external_libs 之后
|
|
|
|
|
|
message(STATUS "CMAKE_EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}")
|
|
|
|
|
|
message(STATUS "CMAKE_SHARED_LINKER_FLAGS: ${CMAKE_SHARED_LINKER_FLAGS}")
|
2025-08-22 16:57:29 +08:00
|
|
|
|
find_package(protobuf REQUIRED)
|
|
|
|
|
|
find_package(gRPC REQUIRED)
|
2025-12-05 16:33:11 +08:00
|
|
|
|
|
2025-08-22 16:57:29 +08:00
|
|
|
|
############################################################
|
|
|
|
|
|
# PROTO
|
|
|
|
|
|
############################################################
|
|
|
|
|
|
|
|
|
|
|
|
set(PROTO_IMPORT_DIR ${PROJECT_SOURCE_DIR}/protos)
|
|
|
|
|
|
set(PROTO_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/_protobuf)
|
|
|
|
|
|
file(MAKE_DIRECTORY ${PROTO_BINARY_DIR})
|
|
|
|
|
|
file(GLOB_RECURSE PROTO_FILES ${PROTO_IMPORT_DIR}/*.proto)
|
2025-12-15 17:01:32 +08:00
|
|
|
|
|
|
|
|
|
|
# 1) 先做 OBJECT:只负责生成/编译 pb.cc
|
|
|
|
|
|
add_library(proto-objects OBJECT)
|
|
|
|
|
|
target_sources(proto-objects PRIVATE ${PROTO_FILES})
|
|
|
|
|
|
set_target_properties(proto-objects PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
2025-08-22 16:57:29 +08:00
|
|
|
|
|
|
|
|
|
|
protobuf_generate(
|
|
|
|
|
|
TARGET proto-objects
|
|
|
|
|
|
IMPORT_DIRS ${PROTO_IMPORT_DIR}
|
|
|
|
|
|
PROTOC_OUT_DIR ${PROTO_BINARY_DIR}
|
2025-12-15 17:01:32 +08:00
|
|
|
|
USAGE_REQUIREMENT PRIVATE
|
2025-08-22 16:57:29 +08:00
|
|
|
|
)
|
|
|
|
|
|
protobuf_generate(
|
|
|
|
|
|
TARGET proto-objects
|
|
|
|
|
|
LANGUAGE grpc
|
|
|
|
|
|
GENERATE_EXTENSIONS .grpc.pb.h .grpc.pb.cc
|
2026-01-14 14:04:07 +08:00
|
|
|
|
PLUGIN "protoc-gen-grpc=${PROJECT_SOURCE_DIR}/dependency/${ARCH}/third_party/grpc/v1.76.0/bin/grpc_cpp_plugin"
|
2025-08-22 16:57:29 +08:00
|
|
|
|
IMPORT_DIRS ${PROTO_IMPORT_DIR}
|
|
|
|
|
|
PROTOC_OUT_DIR ${PROTO_BINARY_DIR}
|
2025-12-15 17:01:32 +08:00
|
|
|
|
USAGE_REQUIREMENT PRIVATE
|
2025-08-22 16:57:29 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
2025-12-15 17:01:32 +08:00
|
|
|
|
# 2) 把 OBJECT 打包成一个“唯一的”共享库(关键)
|
|
|
|
|
|
add_library(proto SHARED $<TARGET_OBJECTS:proto-objects>)
|
2026-01-14 14:04:07 +08:00
|
|
|
|
target_include_directories(proto PUBLIC ${PROTO_BINARY_DIR} ${PROTO_IMPORT_DIR} ${Protobuf_INCLUDE_DIRS})
|
2025-12-15 17:01:32 +08:00
|
|
|
|
target_link_libraries(proto PUBLIC protobuf::libprotobuf gRPC::grpc++ gRPC::grpc++_reflection)
|
|
|
|
|
|
add_library(cmvr_es::proto ALIAS proto)
|
2025-08-22 16:57:29 +08:00
|
|
|
|
############################################################
|
|
|
|
|
|
# include
|
|
|
|
|
|
############################################################
|
|
|
|
|
|
include_directories(
|
|
|
|
|
|
/usr/include/opencv4
|
|
|
|
|
|
/usr/local/include/
|
|
|
|
|
|
${PROTO_BINARY_DIR}
|
|
|
|
|
|
${PROJECT_SOURCE_DIR}/include
|
2026-01-14 14:04:07 +08:00
|
|
|
|
${PROJECT_SOURCE_DIR}/cmvr-es/devices
|
|
|
|
|
|
${PROJECT_SOURCE_DIR}/cmvr-es/utils
|
|
|
|
|
|
${PROJECT_SOURCE_DIR}/cmvr-es
|
|
|
|
|
|
${PROJECT_SOURCE_DIR}/dependency/${ARCH}/third_party
|
|
|
|
|
|
${PROJECT_SOURCE_DIR}/dependency/${ARCH}/third_party/osqp/v0.6.3/include/osqp
|
2025-08-22 16:57:29 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
############################################################
|
|
|
|
|
|
# subdirectory
|
|
|
|
|
|
############################################################
|
|
|
|
|
|
|
2026-01-14 14:04:07 +08:00
|
|
|
|
add_subdirectory(cmvr-es)
|
2025-08-22 16:57:29 +08:00
|
|
|
|
|
|
|
|
|
|
############################################################
|
|
|
|
|
|
# executables
|
|
|
|
|
|
############################################################
|
|
|
|
|
|
|
2026-01-14 14:04:07 +08:00
|
|
|
|
add_executable(cmvr_es cmvr-es/main.cpp)
|
2025-08-22 16:57:29 +08:00
|
|
|
|
target_include_directories(cmvr_es PRIVATE ${GLOG_INCLUDE_DIRS})
|
|
|
|
|
|
target_link_libraries(cmvr_es PRIVATE
|
2025-12-15 17:01:32 +08:00
|
|
|
|
cmvr_es::proto
|
2025-08-22 16:57:29 +08:00
|
|
|
|
service
|
|
|
|
|
|
${GLOG_LIBRARIES}
|
|
|
|
|
|
gflags
|
2026-01-14 14:04:07 +08:00
|
|
|
|
jsoncpp
|
2025-08-22 16:57:29 +08:00
|
|
|
|
cmvr_es::utils
|
|
|
|
|
|
cmvr_es::service
|
2025-11-17 16:49:09 +08:00
|
|
|
|
cmvr_es::monitor_manager
|
2025-08-22 16:57:29 +08:00
|
|
|
|
cmvr_es::hardware
|
|
|
|
|
|
cmvr_es::device::canbus
|
|
|
|
|
|
cmvr_es::device::ti5motor
|
2025-12-05 16:33:11 +08:00
|
|
|
|
cmvr_es::controller
|
2025-11-10 16:54:06 +08:00
|
|
|
|
cmvr_es::data_center
|
|
|
|
|
|
cmvr_es::ik_solver
|
2025-11-11 11:33:55 +08:00
|
|
|
|
cmvr_es::planner
|
2025-11-12 09:58:22 +08:00
|
|
|
|
cmvr_es::device::humanoid_robot
|
2026-01-14 14:04:07 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|