diff --git a/docs/REPOS.md b/docs/REPOS.md index 133622c..39e257e 100644 --- a/docs/REPOS.md +++ b/docs/REPOS.md @@ -140,8 +140,34 @@ docs/BOM.md only where the repo owns hardware Python floors at **3.10**, the Orin's version, for anything that might run there. The workstation has 3.14; do not rely on it. -Rust binaries are built for `aarch64-unknown-linux-gnu`. `Cargo.lock` and -`pubspec.lock` are committed — these are applications, not libraries. +`Cargo.lock` and `pubspec.lock` are committed — these are applications, not +libraries. + +#### Building for the Orin + +Services cross-compile from the workstation: + +```bash +cargo build --release --target aarch64-unknown-linux-gnu +``` + +Each service repo's `.cargo/config.toml` points at `aarch64-linux-gnu-gcc`, from +the `gcc-aarch64-linux-gnu` package. + +⚠ **The cross sysroot's glibc is newer than the Orin's** — 2.43 against 2.35 — and +a binary cannot use a symbol version the target lacks. What matters is not the +sysroot but the **highest version actually referenced**, currently 2.34, which is +why the binaries run. The margin is one release. + +A dependency reaching for a newer symbol breaks this at **runtime**, on the car, +as a loader error — the build succeeds. Check before deploying: + +```bash +objdump -T | grep -o 'GLIBC_[0-9.]*' | sort -Vu | tail -1 +``` + +At or below `GLIBC_2.35` it will run. Above it, build on the Orin or in a +container matching its release. ### Writing style