#!/usr/bin/env bash # CMake-сборка libgpr_core_cpp + standalone (без nvcc; NVRTC/driver). # # Источник CUDA (nvrtc.h / libnvrtc), по убыванию приоритета: # 1. env CUDA_INC / CUDA_LIB — заданы явно; # 2. pip-пакеты nvidia-* в venv ($VENV, по умолчанию ../../.venv — venv # radar_system) — дев-машина; # 3. системный toolkit /usr/local/cuda — Jetson/JetPack, apt cuda-toolkit. # # GPR_BUILD_PYTHON=ON вернул бы pybind-модуль, но bindings/ не вендорен в # radar_system (см. README) — по умолчанию OFF. set -eu HERE="$(cd "$(dirname "$0")" && pwd)" VENV="${VENV:-$HERE/../../.venv}" PY="$VENV/bin/python" GPR_BUILD_PYTHON="${GPR_BUILD_PYTHON:-OFF}" CUDA_INC="${CUDA_INC:-}" CUDA_LIB="${CUDA_LIB:-}" if [ -z "$CUDA_INC" ] || [ -z "$CUDA_LIB" ]; then if [ -x "$PY" ]; then # Печатается только когда найдены nvrtc.h, cuda.h И библиотека — частичная # детекция не может подсунуть мусорный путь. nvrtc.h и cuda.h могут лежать # в РАЗНЫХ каталогах (раздельные pip-пакеты cuda_nvrtc/cuda_runtime на # Jetson) — тогда CUDA_INC становится ';'-списком для CMake. PIP_CUDA=$("$PY" - <<'P' 2>/dev/null || true import glob, os, site sp = site.getsitepackages()[0] nvrtc_hdr = glob.glob(os.path.join(sp, 'nvidia', '**', 'include', 'nvrtc.h'), recursive=True) cuda_hdr = glob.glob(os.path.join(sp, 'nvidia', '**', 'include', 'cuda.h'), recursive=True) lib = sorted(glob.glob(os.path.join(sp, 'nvidia', '**', 'lib', 'libnvrtc.so*'), recursive=True)) if nvrtc_hdr and cuda_hdr and lib: inc_dirs = [] for hdr in (nvrtc_hdr[0], cuda_hdr[0]): d = os.path.dirname(hdr) if d not in inc_dirs: inc_dirs.append(d) print(';'.join(inc_dirs)) print(os.path.dirname(lib[0])) P ) if [ -n "$PIP_CUDA" ]; then CUDA_INC=$(printf '%s\n' "$PIP_CUDA" | sed -n 1p) CUDA_LIB=$(printf '%s\n' "$PIP_CUDA" | sed -n 2p) fi fi fi if [ -z "$CUDA_INC" ] || [ -z "$CUDA_LIB" ]; then if [ -e /usr/local/cuda/include/nvrtc.h ]; then CUDA_INC=/usr/local/cuda/include CUDA_LIB=/usr/local/cuda/lib64 echo "[build_cmake] pip nvidia-* не найдены; использую системный CUDA: $CUDA_INC" else echo "[build_cmake] CUDA не найден: нет ни pip nvidia-* в $VENV, ни /usr/local/cuda." >&2 echo "[build_cmake] Задайте CUDA_INC=