-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
158 lines (135 loc) · 4.03 KB
/
CMakeLists.txt
File metadata and controls
158 lines (135 loc) · 4.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
cmake_minimum_required(VERSION 3.8)
project(ltmap)
set(CMAKE_BUILD_TYPE RelWithDebInfo)
# Default to C++17
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
add_compile_options(-std=c++17)
set(CMAKE_SUPPRESS_DEVELOPER_WARNINGS ON CACHE INTERNAL "" FORCE)
add_definitions(-DEIGEN_MAKE_ALIGNED_OPERATION_NEW)
add_definitions(${PCL_DEFINITIONS})
#######################################
## Find dependencies
#######################################
find_package(ament_cmake REQUIRED)
find_package(CUDAToolkit REQUIRED)
message(STATUS "PyTorch NVTX headers workaround: Yes")
# only do this if nvToolsExt is not defined and CUDA::nvtx3 exists
if(NOT TARGET CUDA::nvToolsExt AND TARGET CUDA::nvtx3)
add_library(CUDA::nvToolsExt INTERFACE IMPORTED)
# ensure that PyTorch is told to use NVTX3 headers
target_compile_definitions(
CUDA::nvToolsExt INTERFACE
TORCH_CUDA_USE_NVTX3
)
target_link_libraries(CUDA::nvToolsExt INTERFACE CUDA::nvtx3)
endif()
# exit without failing if we don't find a new enough version of libtorch
find_package(Torch QUIET PATHS /usr/local/lib/python3.12/dist-packages/torch)
if(NOT Torch_FOUND)
message(WARNING "Torch not found - skipping ${PROJECT_NAME}")
ament_package()
return()
endif()
if(Torch_VERSION VERSION_LESS "2.7.0")
message(WARNING "Torch ${Torch_VERSION} too old (need >= 2.7.0) - skipping ${PROJECT_NAME}")
ament_package()
return()
endif()
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
find_package(sensor_msgs REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(nav_msgs REQUIRED)
find_package(visualization_msgs REQUIRED)
find_package(tf2_ros REQUIRED)
find_package(tf2_geometry_msgs REQUIRED)
find_package(grid_map_core REQUIRED)
find_package(grid_map_msgs REQUIRED)
find_package(grid_map_ros REQUIRED)
find_package(image_transport REQUIRED)
find_package(pcl_ros REQUIRED)
find_package(pcl_conversions REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(OpenCV REQUIRED COMPONENTS opencv_core)
find_package(cv_bridge REQUIRED)
# [============ LIBTORCH LINKING =============]
# OPTION 1 - PREFERRED
# USE LIBTORCH FROM PREINSTALLED PYTORCH (>=2.7)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS} -std=c++17 -Ofast -Wl,-rpath,/usr/local/lib/python3.12/dist-packages/torch/lib")
# OPTION 2 - Download libtorch into local dir using 'download_libtorch' script
#find_package(Torch REQUIRED PATHS libtorch NO_DEFAULT_PATH)
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS} -std=c++17 -Ofast -msse2 -Wl,-rpath,/phoenix/src/perception/ltmap/libtorch/lib")
# [============ LIBTORCH LINKING =============]
###########
## Build ##
###########
# srv
rosidl_generate_interfaces(${PROJECT_NAME}
"srv/AddTarget.srv"
)
rosidl_get_typesupport_target(cpp_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_cpp")
# exec
add_executable(${PROJECT_NAME}_node
src/ltmap.cpp
src/ltmap_node.cpp
src/ltmap_ingest.cpp
src/ltmap_process.cpp
src/ltmap_export.cpp
src/ltmap_traindata.cpp
src/ltmap_service.cpp
)
include_directories(
include
)
target_link_libraries(${PROJECT_NAME}_node
"${cpp_typesupport_target}"
${TORCH_LIBRARIES}
pthread
)
ament_target_dependencies(${PROJECT_NAME}_node
ament_cmake
rclcpp
std_msgs
sensor_msgs
geometry_msgs
nav_msgs
visualization_msgs
tf2_ros
tf2_geometry_msgs
grid_map_core
grid_map_msgs
grid_map_ros
image_transport
pcl_ros
pcl_conversions
OpenCV
cv_bridge
)
install(TARGETS ${PROJECT_NAME}_node
DESTINATION lib/${PROJECT_NAME}
)
install(
DIRECTORY launch
DESTINATION share/${PROJECT_NAME}
)
install(
DIRECTORY config
DESTINATION share/${PROJECT_NAME}
)
install(
DIRECTORY rviz
DESTINATION share/${PROJECT_NAME}
)
install(
DIRECTORY models
DESTINATION share/${PROJECT_NAME}
FILES_MATCHING PATTERN "*.pt"
)
ament_export_include_directories(include)
ament_export_dependencies(rosidl_default_runtime)
ament_package()