-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
294 lines (276 loc) · 11 KB
/
Copy pathCMakeLists.txt
File metadata and controls
294 lines (276 loc) · 11 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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
cmake_minimum_required(VERSION 3.16)
project(robotcpp VERSION 0.1.0 LANGUAGES C CXX)
include(CTest)
option(ROBOT_CPP_BUILD_ROBOT_SERVER "Build model-server target" ON)
option(ROBOT_CPP_BUILD_MODEL_CLI "Build model-cli target" OFF)
option(ROBOT_CPP_BUILD_ROBOT_CLIENT "Build C++ robot client targets" OFF)
option(ROBOT_CPP_BUILD_STARVLA "Build the StarVLA runtime (requires llama.cpp overlay)" OFF)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/third_party/llama.cpp/CMakeLists.txt")
message(FATAL_ERROR "third_party/llama.cpp is required; run `git submodule update --init --recursive`")
endif()
if(ROBOT_CPP_BUILD_STARVLA)
file(READ
"${CMAKE_CURRENT_SOURCE_DIR}/third_party/llama.cpp/tools/mtmd/models/qwen3vl.cpp"
ROBOT_CPP_QWEN3VL_MTMD_SOURCE)
file(READ
"${CMAKE_CURRENT_SOURCE_DIR}/third_party/llama.cpp/include/llama.h"
ROBOT_CPP_LLAMA_PUBLIC_HEADER)
string(FIND "${ROBOT_CPP_QWEN3VL_MTMD_SOURCE}"
"FFN_GELU_ERF" ROBOT_CPP_QWEN3VL_PARITY_PATCH_INDEX)
string(FIND "${ROBOT_CPP_LLAMA_PUBLIC_HEADER}"
"llama_set_backend_native_graphs_enabled" ROBOT_CPP_LLAMA_GRAPH_PATCH_INDEX)
if(ROBOT_CPP_QWEN3VL_PARITY_PATCH_INDEX EQUAL -1 OR
ROBOT_CPP_LLAMA_GRAPH_PATCH_INDEX EQUAL -1)
message(FATAL_ERROR
"StarVLA requires the pinned llama.cpp overlay. Run "
"`./tools/apply_patches.sh` from the repository root, "
"then configure again.")
endif()
unset(ROBOT_CPP_QWEN3VL_MTMD_SOURCE)
unset(ROBOT_CPP_LLAMA_PUBLIC_HEADER)
endif()
set(LLAMA_BUILD_COMMON ON CACHE BOOL "" FORCE)
set(LLAMA_BUILD_TOOLS OFF CACHE BOOL "" FORCE)
set(LLAMA_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(LLAMA_BUILD_TESTS OFF CACHE BOOL "" FORCE)
add_subdirectory(third_party/llama.cpp EXCLUDE_FROM_ALL)
if(NOT TARGET ggml OR NOT TARGET llama)
message(FATAL_ERROR "llama.cpp must provide ggml and llama targets")
endif()
if(ROBOT_CPP_BUILD_STARVLA)
# mtmd normally inherits this variable when llama.cpp builds all tools.
if(NOT LLAMA_INSTALL_VERSION)
set(LLAMA_INSTALL_VERSION ${PROJECT_VERSION})
endif()
add_subdirectory(third_party/llama.cpp/tools/mtmd EXCLUDE_FROM_ALL)
if(NOT TARGET mtmd)
message(FATAL_ERROR "llama.cpp must provide the mtmd target for Qwen-VL")
endif()
endif()
set(ROBOT_CPP_LLAMA_INCLUDE_DIRS
${CMAKE_CURRENT_SOURCE_DIR}/third_party/llama.cpp
${CMAKE_CURRENT_SOURCE_DIR}/third_party/llama.cpp/include
${CMAKE_CURRENT_SOURCE_DIR}/third_party/llama.cpp/src
${CMAKE_CURRENT_SOURCE_DIR}/third_party/llama.cpp/ggml/include
${CMAKE_CURRENT_SOURCE_DIR}/third_party/llama.cpp/vendor/stb
)
set(SMOLVLA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/models/smolvla)
set(STARVLA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/models/starvla)
set(ROBOT_SERVER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/robot_server)
set(ROBOT_CLIENT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/robot_client)
add_library(robotcpp_model_common STATIC
src/models/ggml_backend.cpp
src/models/ggml_backend.h
src/models/gguf_loader.cpp
src/models/gguf_loader.h
src/models/model_type.cpp
)
target_include_directories(robotcpp_model_common
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/src
${ROBOT_CPP_LLAMA_INCLUDE_DIRS}
)
target_link_libraries(robotcpp_model_common PUBLIC ggml)
target_compile_features(robotcpp_model_common PUBLIC cxx_std_17)
if(NOT MSVC)
target_compile_options(robotcpp_model_common PRIVATE -Wno-cast-qual)
endif()
add_library(smolvla_runtime STATIC
${SMOLVLA_DIR}/smolvla_engine.cpp
${SMOLVLA_DIR}/smolvla_engine.h
${SMOLVLA_DIR}/state_proj.cpp
${SMOLVLA_DIR}/state_proj.h
${SMOLVLA_DIR}/vision.cpp
${SMOLVLA_DIR}/vision.h
${SMOLVLA_DIR}/action_expert.cpp
${SMOLVLA_DIR}/action_expert.h
)
target_include_directories(smolvla_runtime
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/src
${SMOLVLA_DIR}
${ROBOT_CPP_LLAMA_INCLUDE_DIRS}
)
target_link_libraries(smolvla_runtime PUBLIC robotcpp_model_common llama)
target_compile_features(smolvla_runtime PUBLIC cxx_std_17)
if(NOT MSVC)
target_compile_options(smolvla_runtime PRIVATE -Wno-cast-qual)
endif()
add_library(pi0_engine STATIC
src/models/pi0/types.h
src/models/pi0/action.cpp
src/models/pi0/action.h
src/models/pi0/component_runtime.cpp
src/models/pi0/component_runtime.h
src/models/pi0/config.h
src/models/pi0/load.cpp
src/models/pi0/load.h
src/models/pi0/pi0_context.h
src/models/pi0/pi0_engine.cpp
src/models/pi0/pi0_engine.h
src/models/pi0/preprocess.cpp
src/models/pi0/preprocess.h
src/models/pi0/weights.cpp
src/models/pi0/weights.h
src/models/pi0/vlm.cpp
src/models/pi0/vlm.h
)
target_include_directories(pi0_engine
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/src
${ROBOT_CPP_LLAMA_INCLUDE_DIRS}
)
target_link_libraries(pi0_engine PUBLIC robotcpp_model_common llama)
target_compile_features(pi0_engine PUBLIC cxx_std_17)
if(NOT MSVC)
target_compile_options(pi0_engine PRIVATE -Wno-cast-qual)
endif()
if(ROBOT_CPP_BUILD_STARVLA)
add_library(starvla_runtime STATIC
${STARVLA_DIR}/fast_codec.cpp
${STARVLA_DIR}/fast_codec.h
${STARVLA_DIR}/fast_policy.cpp
${STARVLA_DIR}/fast_policy.h
${STARVLA_DIR}/groot_policy.cpp
${STARVLA_DIR}/groot_policy.h
${STARVLA_DIR}/groot_prompt.cpp
${STARVLA_DIR}/groot_prompt.h
${STARVLA_DIR}/normalization.cpp
${STARVLA_DIR}/normalization.h
${STARVLA_DIR}/oft_image_preprocess.cpp
${STARVLA_DIR}/oft_image_preprocess.h
${STARVLA_DIR}/oft_prompt.cpp
${STARVLA_DIR}/oft_prompt.h
${STARVLA_DIR}/oft_policy.cpp
${STARVLA_DIR}/oft_policy.h
${STARVLA_DIR}/pi_policy.cpp
${STARVLA_DIR}/pi_policy.h
${STARVLA_DIR}/pi_v3_policy.cpp
${STARVLA_DIR}/pi_v3_policy.h
${STARVLA_DIR}/policy_gguf.h
${STARVLA_DIR}/qwen3vl_bridge.cpp
${STARVLA_DIR}/qwen3vl_bridge.h
${STARVLA_DIR}/starvla_engine.cpp
${STARVLA_DIR}/starvla_engine.h
third_party/llama.cpp/examples/gguf-hash/deps/sha256/sha256.c
)
target_include_directories(starvla_runtime
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/src
${ROBOT_CPP_LLAMA_INCLUDE_DIRS}
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/third_party/llama.cpp/vendor
${CMAKE_CURRENT_SOURCE_DIR}/third_party/llama.cpp/examples/gguf-hash/deps
${CMAKE_CURRENT_SOURCE_DIR}/third_party/llama.cpp/examples/gguf-hash/deps/sha256
)
target_link_libraries(starvla_runtime PUBLIC robotcpp_model_common llama mtmd)
target_compile_features(starvla_runtime PUBLIC cxx_std_17)
if(GGML_CUDA)
enable_language(CUDA)
target_sources(starvla_runtime PRIVATE ${STARVLA_DIR}/qwen_bf16_round_cuda.cu)
target_compile_definitions(starvla_runtime PRIVATE ROBOTCPP_STARVLA_CUDA=1)
set_property(TARGET starvla_runtime PROPERTY CUDA_STANDARD 17)
endif()
if(NOT MSVC)
target_compile_options(starvla_runtime PRIVATE -Wno-cast-qual)
endif()
endif()
add_library(robotcpp STATIC
src/models/argument_parse.h
src/models/model.h
src/models/model_factory.cpp
src/models/pi0/pi0_model.cpp
src/models/pi0/pi0_model.h
${SMOLVLA_DIR}/smolvla_model.cpp
${SMOLVLA_DIR}/smolvla_model.h
)
target_include_directories(robotcpp
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/src
${SMOLVLA_DIR}
)
target_link_libraries(robotcpp PUBLIC smolvla_runtime pi0_engine)
target_compile_features(robotcpp PUBLIC cxx_std_17)
if(ROBOT_CPP_BUILD_STARVLA)
target_sources(robotcpp PRIVATE
${STARVLA_DIR}/starvla_model.cpp
${STARVLA_DIR}/starvla_model.h)
target_link_libraries(robotcpp PUBLIC starvla_runtime)
target_compile_definitions(robotcpp PUBLIC ROBOT_CPP_BUILD_STARVLA=1)
endif()
if(BUILD_TESTING AND ROBOT_CPP_BUILD_STARVLA)
add_executable(robotcpp-starvla-model-test tests/starvla/model_test.cpp)
target_link_libraries(robotcpp-starvla-model-test PRIVATE robotcpp)
add_test(NAME robotcpp-starvla-model-test COMMAND robotcpp-starvla-model-test)
endif()
if(ROBOT_CPP_BUILD_ROBOT_SERVER OR ROBOT_CPP_BUILD_ROBOT_CLIENT)
add_library(robot_server_common STATIC
${ROBOT_SERVER_DIR}/protocol.cpp
${ROBOT_SERVER_DIR}/protocol.h
${ROBOT_SERVER_DIR}/socket.cpp
${ROBOT_SERVER_DIR}/socket.h
)
target_include_directories(robot_server_common PUBLIC ${ROBOT_SERVER_DIR})
target_compile_features(robot_server_common PUBLIC cxx_std_17)
if(WIN32)
target_link_libraries(robot_server_common PUBLIC ws2_32)
endif()
endif()
if(ROBOT_CPP_BUILD_ROBOT_CLIENT)
add_library(model_client_cpp STATIC
${ROBOT_CLIENT_DIR}/cpp/model_client.cpp
${ROBOT_CLIENT_DIR}/cpp/model_client.h
)
target_include_directories(model_client_cpp PUBLIC
${ROBOT_CLIENT_DIR}
${ROBOT_SERVER_DIR}
)
target_link_libraries(model_client_cpp PUBLIC robot_server_common)
target_compile_features(model_client_cpp PUBLIC cxx_std_17)
add_executable(model-cpp-client-example ${ROBOT_CLIENT_DIR}/examples/cpp/minimal_example.cpp)
set_target_properties(model-cpp-client-example PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
target_link_libraries(model-cpp-client-example PRIVATE model_client_cpp)
target_compile_features(model-cpp-client-example PRIVATE cxx_std_17)
endif()
if(ROBOT_CPP_BUILD_ROBOT_SERVER)
add_library(robot_server_core STATIC
${ROBOT_SERVER_DIR}/session.cpp
${ROBOT_SERVER_DIR}/session.h
${ROBOT_SERVER_DIR}/model_adapter.cpp
${ROBOT_SERVER_DIR}/model_adapter.h
)
target_include_directories(robot_server_core
PUBLIC
${ROBOT_SERVER_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/src
)
target_link_libraries(robot_server_core PUBLIC robot_server_common robotcpp)
target_compile_features(robot_server_core PUBLIC cxx_std_17)
add_executable(model-server ${ROBOT_SERVER_DIR}/model-server.cpp)
set_target_properties(model-server PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
target_include_directories(model-server PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${SMOLVLA_DIR}
${ROBOT_SERVER_DIR}
)
target_link_libraries(model-server PRIVATE robot_server_core robotcpp)
target_compile_features(model-server PRIVATE cxx_std_17)
add_executable(smolvla-raw-predict ${ROBOT_SERVER_DIR}/test/smolvla_raw_predict.cpp)
set_target_properties(smolvla-raw-predict PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
target_include_directories(smolvla-raw-predict PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ${SMOLVLA_DIR})
target_link_libraries(smolvla-raw-predict PRIVATE smolvla_runtime)
target_compile_features(smolvla-raw-predict PRIVATE cxx_std_17)
endif()
if(ROBOT_CPP_BUILD_MODEL_CLI)
add_executable(model-cli src/model-cli.cpp)
set_target_properties(model-cli PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
target_include_directories(model-cli PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${ROBOT_CPP_LLAMA_INCLUDE_DIRS}
)
target_link_libraries(model-cli PRIVATE robotcpp)
target_compile_features(model-cli PRIVATE cxx_std_17)
endif()