| #!/bin/bash |
|
|
| |
| |
|
|
| echo "π§ Setting up G1 Deploy environment..." |
|
|
| |
| if command -v jetson_clocks &> /dev/null; then |
| if [ -f "/.dockerenv" ]; then |
| |
| echo "βΉοΈ Inside Docker - jetson_clocks should be run on host" |
| else |
| |
| echo "π Setting Jetson to max performance..." |
| sudo jetson_clocks 2>/dev/null || echo "β οΈ jetson_clocks failed (needs sudo)" |
| fi |
| fi |
|
|
| |
| ARCH=$(uname -m) |
|
|
| |
| ONNX_RUNTIME_PATHS=( |
| "/opt/onnxruntime" |
| "/usr/local/onnxruntime" |
| "/usr/lib/onnxruntime" |
| "$HOME/.local/onnxruntime" |
| "/opt/intel/openvino/runtime/3rdparty/onnx_runtime" |
| ) |
|
|
| ONNX_FOUND=false |
| for onnx_path in "${ONNX_RUNTIME_PATHS[@]}"; do |
| if [ -d "$onnx_path" ]; then |
| export onnxruntime_DIR="$onnx_path/lib/cmake/onnxruntime" |
| echo "β
ONNX Runtime found at: $onnx_path" |
| ONNX_FOUND=true |
| break |
| fi |
| done |
|
|
| if [ "$ONNX_FOUND" = false ]; then |
| |
| if pkg-config --exists libonnxruntime 2>/dev/null; then |
| echo "β
ONNX Runtime found via system package manager" |
| else |
| echo "β οΈ ONNX Runtime not found in common locations:" |
| printf " %s\n" "${ONNX_RUNTIME_PATHS[@]}" |
| echo " Please run scripts/install_deps.sh or install ONNX Runtime manually" |
| fi |
| fi |
|
|
| |
| DISTRO_ID="" |
|
|
| |
| if [ -f /etc/os-release ]; then |
| DISTRO_ID=$(grep "^ID=" /etc/os-release | cut -d'=' -f2 | tr -d '"') |
| elif [ -f /etc/redhat-release ]; then |
| DISTRO_ID="rhel" |
| elif [ -f /etc/debian_version ]; then |
| DISTRO_ID="debian" |
| fi |
|
|
| |
| case "$DISTRO_ID" in |
| ubuntu|debian|linuxmint) |
| |
| if [ "$ARCH" = "x86_64" ]; then |
| SYSTEM_LIB_DIR="/usr/lib/x86_64-linux-gnu" |
| elif [ "$ARCH" = "aarch64" ]; then |
| SYSTEM_LIB_DIR="/usr/lib/aarch64-linux-gnu" |
| else |
| SYSTEM_LIB_DIR="/usr/lib" |
| fi |
| ;; |
| fedora|rhel|centos|rocky|almalinux) |
| |
| if [[ "$ARCH" == "x86_64" || "$ARCH" == "aarch64" ]]; then |
| SYSTEM_LIB_DIR="/usr/lib64" |
| else |
| SYSTEM_LIB_DIR="/usr/lib" |
| fi |
| ;; |
| opensuse*|sles) |
| |
| if [[ "$ARCH" == "x86_64" || "$ARCH" == "aarch64" ]]; then |
| SYSTEM_LIB_DIR="/usr/lib64" |
| else |
| SYSTEM_LIB_DIR="/usr/lib" |
| fi |
| ;; |
| arch|manjaro) |
| |
| SYSTEM_LIB_DIR="/usr/lib" |
| ;; |
| *) |
| |
| if [ -d "/usr/lib/$ARCH-linux-gnu" ]; then |
| SYSTEM_LIB_DIR="/usr/lib/$ARCH-linux-gnu" |
| elif [ -d "/usr/lib64" ] && [[ "$ARCH" == "x86_64" || "$ARCH" == "aarch64" ]]; then |
| SYSTEM_LIB_DIR="/usr/lib64" |
| else |
| SYSTEM_LIB_DIR="/usr/lib" |
| fi |
| ;; |
| esac |
|
|
| echo "π Detected: $DISTRO_ID on $ARCH, using library path: $SYSTEM_LIB_DIR" |
|
|
| |
| CMAKE_PATHS="$SYSTEM_LIB_DIR/cmake" |
|
|
| |
| if [ -n "$onnxruntime_DIR" ]; then |
| ONNX_BASE_PATH=$(dirname $(dirname $onnxruntime_DIR)) |
| CMAKE_PATHS="$ONNX_BASE_PATH:$CMAKE_PATHS" |
| fi |
|
|
| export CMAKE_PREFIX_PATH="$CMAKE_PATHS:$CMAKE_PREFIX_PATH" |
| export OPENSSL_ROOT_DIR="/usr" |
|
|
| |
| ROS2_FOUND=false |
|
|
| |
| ROS2_DISTROS=("jazzy" "iron" "humble" "galactic" "foxy" "eloquent" "dashing" "crystal") |
| ROS2_INSTALL_PATHS=("/opt/ros" "/usr/local/ros" "$HOME/ros2_ws/install") |
|
|
| for install_path in "${ROS2_INSTALL_PATHS[@]}"; do |
| if [ "$ROS2_FOUND" = true ]; then |
| break |
| fi |
| |
| for distro in "${ROS2_DISTROS[@]}"; do |
| ros2_setup_file="$install_path/$distro/setup.bash" |
| if [ -f "$ros2_setup_file" ]; then |
| source "$ros2_setup_file" |
| export RMW_IMPLEMENTATION=rmw_fastrtps_cpp |
| |
| export LD_LIBRARY_PATH=$(echo $LD_LIBRARY_PATH | tr ':' '\n' | grep -v "$SYSTEM_LIB_DIR" | tr '\n' ':' | sed 's/:$//') |
| echo "β
ROS2 $distro found at $install_path/$distro - system manages all ROS2 dependencies" |
| export HAS_ROS2=1 |
| export ROS_LOCALHOST_ONLY=1 |
| ROS2_FOUND=true |
| break |
| fi |
| done |
| done |
|
|
| if [ "$ROS2_FOUND" = false ]; then |
| echo "β οΈ ROS2 not found in common locations:" |
| printf " %s/<distro>\n" "${ROS2_INSTALL_PATHS[@]}" |
| echo " Install ROS2 system-wide for ROS2InputHandler support" |
| echo " Building will continue without ROS2InputHandler" |
| export HAS_ROS2=0 |
| fi |
|
|
| |
| if [ -f "src/g1/g1_deploy_onnx_ref/config/fastrtps_profile.xml" ]; then |
| export FASTRTPS_DEFAULT_PROFILES_FILE="$(pwd)/src/g1/g1_deploy_onnx_ref/config/fastrtps_profile.xml" |
| echo "β
FastRTPS production profile configured" |
| fi |
|
|
| |
| |
| if [ -z "$TensorRT_ROOT" ] && [ -f "$HOME/.bashrc" ]; then |
| |
| BASHRC_TENSORRT=$(grep -o 'export TensorRT_ROOT=.*' "$HOME/.bashrc" | head -n1 | cut -d'=' -f2 | tr -d '"' | envsubst) |
| if [ -n "$BASHRC_TENSORRT" ]; then |
| export TensorRT_ROOT="$BASHRC_TENSORRT" |
| echo "π Loaded TensorRT_ROOT from ~/.bashrc: $TensorRT_ROOT" |
| fi |
| fi |
|
|
| if [ -n "$TensorRT_ROOT" ]; then |
| export LD_LIBRARY_PATH="$TensorRT_ROOT/lib:$LD_LIBRARY_PATH" |
| echo "β
TensorRT environment configured" |
| |
| |
| if [[ "$ARCH" == "aarch64" ]] && [[ -f "/etc/nv_tegra_release" || -d "/usr/src/jetson_multimedia_api" ]]; then |
| echo "π€ Jetson system detected - setting up DLA library paths for runtime" |
| |
| |
| if [ -f "/usr/lib/aarch64-linux-gnu/nvidia/libnvcudla.so" ] && [ ! -f "/usr/lib/aarch64-linux-gnu/nvidia/libcudla.so.1" ]; then |
| echo " π Creating libcudla.so.1 symlink for TensorRT compatibility..." |
| sudo ln -sf libnvcudla.so /usr/lib/aarch64-linux-gnu/nvidia/libcudla.so.1 2>/dev/null || echo " β οΈ Could not create symlink (may need sudo)" |
| sudo ln -sf libnvcudla.so /usr/lib/aarch64-linux-gnu/nvidia/libcudla.so 2>/dev/null || echo " β οΈ Could not create symlink (may need sudo)" |
| echo " β
libcudla.so.1 β libnvcudla.so" |
| fi |
| |
| |
| export LD_LIBRARY_PATH="/usr/lib/aarch64-linux-gnu/nvidia:$LD_LIBRARY_PATH" |
| |
| |
| |
| export LIBRARY_PATH="/usr/lib/aarch64-linux-gnu/nvidia:${LIBRARY_PATH:-}" |
| echo " π Added DLA library path to current session (runtime + build-time)" |
| |
| |
| if ! grep -q "/usr/lib/aarch64-linux-gnu/nvidia" ~/.bashrc 2>/dev/null; then |
| echo 'export LD_LIBRARY_PATH="/usr/lib/aarch64-linux-gnu/nvidia:$LD_LIBRARY_PATH"' >> ~/.bashrc |
| echo " β
Added DLA library path to ~/.bashrc for future sessions" |
| fi |
| |
| echo " βΉοΈ Your executable should now be able to find DLA libraries at runtime" |
| fi |
| else |
| echo "β οΈ TensorRT_ROOT is not set" |
| echo " Please install TensorRT and add 'export TensorRT_ROOT=/path/to/tensorrt' to your ~/.bashrc" |
| echo " Or source ~/.bashrc before running this script" |
| fi |
|
|
| |
| echo "π§ Setting up CUDA environment..." |
|
|
| |
| setup_cuda_toolkit() { |
| |
| if [ -n "$CUDAToolkit_ROOT" ] && [ -f "$CUDAToolkit_ROOT/bin/nvcc" ]; then |
| echo "β
CUDA toolkit found: CUDAToolkit_ROOT already set to $CUDAToolkit_ROOT" |
| return 0 |
| fi |
| |
| |
| if command -v nvcc &> /dev/null; then |
| NVCC_PATH=$(command -v nvcc) |
| CUDA_ROOT=$(dirname $(dirname "$NVCC_PATH")) |
| export CUDAToolkit_ROOT="$CUDA_ROOT" |
| echo "β
CUDA toolkit found in PATH: $CUDAToolkit_ROOT" |
| return 0 |
| fi |
| |
| |
| CUDA_PATHS=( |
| "/usr/local/cuda" |
| "/usr/local/cuda-12.6" |
| "/usr/local/cuda-12.5" |
| "/usr/local/cuda-12.4" |
| "/usr/local/cuda-12" |
| "/usr/local/cuda-11.4" |
| "/usr/local/cuda-11" |
| "/usr/local/cuda-10.2" |
| "/usr/local/cuda-10" |
| "/opt/cuda" |
| "/usr/cuda" |
| ) |
| |
| for cuda_path in "${CUDA_PATHS[@]}"; do |
| if [ -f "$cuda_path/bin/nvcc" ]; then |
| export CUDAToolkit_ROOT="$cuda_path" |
| export CUDA_HOME="$cuda_path" |
| export PATH="$cuda_path/bin:$PATH" |
| export LD_LIBRARY_PATH="$cuda_path/lib64:$cuda_path/lib:$LD_LIBRARY_PATH" |
| echo "β
CUDA toolkit found at: $CUDAToolkit_ROOT" |
| echo " Added to PATH: $cuda_path/bin" |
| echo " Added CUDA libraries to LD_LIBRARY_PATH" |
| return 0 |
| fi |
| done |
| |
| return 1 |
| } |
|
|
| |
| if setup_cuda_toolkit; then |
| |
| if [ -n "$CUDAToolkit_ROOT" ]; then |
| export LD_LIBRARY_PATH="$CUDAToolkit_ROOT/lib64:$CUDAToolkit_ROOT/lib:$LD_LIBRARY_PATH" |
| |
| |
| if [[ "$ARCH" == "aarch64" ]] && [ -d "$CUDAToolkit_ROOT/targets/aarch64-linux/lib" ]; then |
| export LD_LIBRARY_PATH="$CUDAToolkit_ROOT/targets/aarch64-linux/lib:$LD_LIBRARY_PATH" |
| echo " β
Added CUDA aarch64-linux libraries (includes libcudla for TensorRT DLA support)" |
| fi |
| fi |
| else |
| echo "βΉοΈ CUDA toolkit (nvcc) not found. This is OK - checking for runtime libraries..." |
| echo " Note: Full toolkit is preferred for development but runtime-only is sufficient for execution" |
| fi |
|
|
| |
| |
| |
| if [ -z "$CUDAToolkit_ROOT" ] && [ -d "/usr/lib/aarch64-linux-gnu/nvidia/" ]; then |
| export LD_LIBRARY_PATH="/usr/lib/aarch64-linux-gnu/nvidia/:$LD_LIBRARY_PATH" |
| echo "β
CUDA runtime libraries found (aarch64)" |
| elif [ -n "$CUDAToolkit_ROOT" ]; then |
| echo "β
Using CUDA libraries from toolkit (prioritized over system runtime libs)" |
| else |
| cuda_so_path=$(find /usr -name libcuda.so.1 2>/dev/null | head -n1) |
| if [ -n "$cuda_so_path" ]; then |
| export LD_PRELOAD="$cuda_so_path" |
| echo "β
CUDA runtime library found at $cuda_so_path" |
| else |
| echo "========================================================================" |
| echo "β οΈ Warning: CUDA libraries not found. GPU functionality may be unavailable." |
| echo " Please install NVIDIA drivers and CUDA toolkit for GPU support." |
| echo "========================================================================" |
| fi |
| fi |
|
|
| |
| if [ -d "/opt/onnxruntime/lib" ]; then |
| export LD_LIBRARY_PATH="/opt/onnxruntime/lib:$LD_LIBRARY_PATH" |
| fi |
|
|
| |
| if command -v git-lfs &> /dev/null; then |
| git lfs install &> /dev/null |
| echo "β
Git LFS configured" |
| |
| |
| if [ -d ".git" ]; then |
| echo "π₯ Pulling Git LFS files..." |
| git lfs pull |
| fi |
| else |
| echo "β οΈ Git LFS not found. Please install git-lfs package." |
| fi |
|
|
| |
| echo "" |
| echo "π Verifying essential tools:" |
|
|
| check_command() { |
| if command -v "$1" &> /dev/null; then |
| echo "β
$1: $(command -v $1)" |
| else |
| echo "β $1: not found" |
| fi |
| } |
|
|
| check_command cmake |
| check_command clang |
| check_command just |
| check_command git |
|
|
| echo "" |
| echo "π Environment setup complete!" |
| echo "" |
| echo "π You can now run:" |
| echo " just build # Build the project" |
| echo " just --list # See all available commands" |
| echo "" |
|
|
| |
| if [ -n "$BASH_VERSION" ]; then |
| export PS1="(g1_deploy) $PS1" |
| fi |
|
|
|
|