cmake_minimum_required(VERSION 3.0.2)
project(invicta_hardware)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE Release)
endif()

find_package(catkin REQUIRED COMPONENTS
  roscpp
  sensor_msgs
  geometry_msgs
  invicta_msgs
  roslib
)

catkin_package(
  INCLUDE_DIRS include
  CATKIN_DEPENDS roscpp roslib sensor_msgs geometry_msgs invicta_msgs
)

# TOML 解析库：single-header，vendored 在 third_party/tomlplusplus/toml++/toml.hpp
# 单头版本本身就是 header-only（自带 TOML_HEADER_ONLY），实现直接编进本节点：无 find_package、无运行时库依赖
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/tomlplusplus)

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)

# 把本节点自己的配置头列进源列表：改该头会触发重编（改 TOML 不用重编）
set(NODE_CONFIG_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/include/invicta_hardware/hardware_config.h")
if(NOT EXISTS "${NODE_CONFIG_HEADER}")
  message(WARNING "invicta_hardware_node: 找不到本节点配置头")
  set(NODE_CONFIG_HEADER "")
endif()

add_executable(invicta_hardware_node
  src/invicta_hardware_node.cpp
  include/invicta_hardware/can_bus.h
  include/invicta_hardware/joint_module_protocol.h
  include/invicta_hardware/hardware_bridge.h
  ${NODE_CONFIG_HEADER}
)

target_link_libraries(invicta_hardware_node ${catkin_LIBRARIES})

install(TARGETS invicta_hardware_node
  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
install(DIRECTORY launch config
  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
