XRobot gRPC for JetPack 5
This note builds JetPack 5 compatible gRPC dependencies for
XRoboToolkit-PC-Service/RoboticsService/PXREARobotSDK.
If the onboard Orin is already on JetPack 6, skip this entire guide and keep
the upstream Redistributable/linux_aarch64/grpc package.
Why
The upstream Redistributable/linux_aarch64/grpc package can require newer
glibc/libstdc++ symbols than JetPack 5 provides, for example
__libc_single_threaded. Build the dependency set directly on the Orin to
match JetPack 5 / Ubuntu 20.04.
Versions
- gRPC:
v1.66.0 - Protobuf:
27.2.0 - Abseil:
20240116 - Build host: JetPack 5 / L4T R35 / Ubuntu 20.04 / aarch64
Build On Orin
Run this on g1-rp.
source ~/.bashrc
proxy_on
export work_dir=/tmp/xrobot-grpc-build
export install_dir=/tmp/xrobot-grpc-install
rm -rf "$work_dir" "$install_dir"
mkdir -p "$work_dir"
git clone --depth 1 --branch v1.66.0 https://github.com/grpc/grpc "$work_dir/grpc"
cd "$work_dir/grpc"
git config --global http.version HTTP/1.1
git submodule update --init --jobs 1 \
third_party/abseil-cpp \
third_party/protobuf \
third_party/re2 \
third_party/zlib \
third_party/cares/cares \
third_party/boringssl-with-bazel
cmake -S . -B cmake/build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$install_dir" \
-DBUILD_SHARED_LIBS=OFF \
-DgRPC_INSTALL=ON \
-DgRPC_BUILD_TESTS=OFF \
-DgRPC_BUILD_CODEGEN=ON \
-DgRPC_ABSL_PROVIDER=module \
-DgRPC_CARES_PROVIDER=module \
-DgRPC_PROTOBUF_PROVIDER=module \
-DgRPC_RE2_PROVIDER=module \
-DgRPC_SSL_PROVIDER=module \
-DgRPC_ZLIB_PROVIDER=module
cmake --build cmake/build --target install -- -j8
Package For Local Reuse
Run this on g1-rp after the build succeeds.
cd "$install_dir"
tar -czf /tmp/xrobot-grpc-jetpack5-aarch64.tar.gz .
Copy the archive to the development machine.
scp g1-rp:/tmp/xrobot-grpc-jetpack5-aarch64.tar.gz /tmp/
Unpack it into a local directory on the development machine.
rm -rf /tmp/xrobot-grpc-jetpack5-aarch64/grpc
mkdir -p /tmp/xrobot-grpc-jetpack5-aarch64/grpc
tar -xzf /tmp/xrobot-grpc-jetpack5-aarch64.tar.gz \
-C /tmp/xrobot-grpc-jetpack5-aarch64/grpc
You can keep this extracted directory anywhere convenient; do not assume a
prebuilt/ path is versioned in git.
Use The Prepared Package
Run this on onboard Orin before building PXREARobotSDK, but only on
JetPack 5.
export xrobot_root=external/XRoboToolkit-PC-Service
export sdk_grpc="$xrobot_root/RoboticsService/Redistributable/linux_aarch64/grpc"
export local_grpc="prebuilt/jetpack5-aarch64/xrobot-grpc"
rm -rf "$sdk_grpc.upstream"
mv "$sdk_grpc" "$sdk_grpc.upstream"
cp -a "$local_grpc" "$sdk_grpc"
Then build the SDK.
(cd "$xrobot_root/RoboticsService/PXREARobotSDK" && bash build.sh)