Switch arm64 over to our new bookworm nvidia sysroot
This also adds some cc_library rules using the sysroot necesary to build
vision code against libargus
Change-Id: Icbc529c546af2932fe4f041806ca9e6bb3cf93d1
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/WORKSPACE b/WORKSPACE
index 19b9bfb..46a10c5 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -325,12 +325,12 @@
},
standard_libraries = {
"linux-x86_64": "libstdc++-10",
- "linux-aarch64": "libstdc++-10",
+ "linux-aarch64": "libstdc++-12",
},
static_libstdcxx = False,
sysroot = {
"linux-x86_64": "@amd64_debian_sysroot//:sysroot_files",
- "linux-aarch64": "@arm64_debian_rootfs//:sysroot_files",
+ "linux-aarch64": "@arm64_debian_sysroot//:sysroot_files",
},
target_toolchain_roots = {
"linux-x86_64": "@llvm_k8//",
@@ -451,15 +451,12 @@
url = "https://software.frc971.org/Build-Dependencies/cortexa9_vfpv3-roborio-academic-2023-x86_64-linux-gnu-Toolchain-12.1.0.tgz",
)
-# The main partition from https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2021-11-08/2021-10-30-raspios-bullseye-armhf-lite.zip.sig
-# The following files and folders are removed to make bazel happy with it:
-# usr/share/ca-certificates
-# lib/systemd/system/system-systemd\\x2dcryptsetup.slice
+# The main partition built from //frc971/orin/build_rootfs.py.
http_archive(
- name = "arm64_debian_rootfs",
- build_file = "@//:compilers/debian_rootfs.BUILD",
- sha256 = "7e6ad432fec0a36f8b66c3fc2ab8795ea446e61f7dce7a206b55602677cf0904",
- url = "https://software.frc971.org/Build-Dependencies/2021-10-30-raspios-bullseye-arm64-lite_rootfs.tar.bz2",
+ name = "arm64_debian_sysroot",
+ build_file = "@//:compilers/orin_debian_rootfs.BUILD",
+ sha256 = "a1d8297cebdf8dcc380afaa9703d56864f256775d4d239210d0883a9f2d009bc",
+ url = "https://software.frc971.org/Build-Dependencies/2023-11-18-bookworm-arm64-nvidia-rootfs.tar.xz",
)
# Created with:
diff --git a/compilers/orin_debian_rootfs.BUILD b/compilers/orin_debian_rootfs.BUILD
new file mode 100644
index 0000000..d70d329
--- /dev/null
+++ b/compilers/orin_debian_rootfs.BUILD
@@ -0,0 +1,81 @@
+filegroup(
+ name = "sysroot_files",
+ srcs = glob(
+ include = [
+ "include/**",
+ "lib/**",
+ "lib64/**",
+ "usr/include/**",
+ "usr/local/**",
+ "usr/lib/**",
+ "usr/lib64/**",
+ ],
+ exclude = [
+ "usr/share/**",
+ "usr/local/cuda-11.8/include/thrust/**",
+ "usr/local/cuda-11.8/include/nv/**",
+ "usr/local/cuda-11.8/include/cuda/**",
+ "usr/local/cuda-11.8/include/cub/**",
+ ],
+ ),
+ visibility = ["//visibility:public"],
+)
+
+cc_library(
+ name = "argus",
+ srcs = [
+ "usr/lib/libnvargus_socketclient.so",
+ ],
+ hdrs = glob(
+ include = ["usr/include/Argus/**"],
+ ),
+ includes = ["usr/include/Argus/utils/"],
+ visibility = ["//visibility:public"],
+)
+
+cc_library(
+ name = "eglstream",
+ hdrs = glob(
+ include = ["usr/include/EGLStream/**"],
+ ),
+ includes = ["usr/include/EGLStream/"],
+ visibility = ["//visibility:public"],
+)
+
+cc_library(
+ name = "nvbufsurface",
+ srcs = [
+ "usr/lib/libnvbufsurface.so.1.0.0",
+ ],
+ visibility = ["//visibility:public"],
+)
+
+cc_library(
+ name = "egl",
+ srcs = [
+ "usr/lib/aarch64-linux-gnu/libEGL.so",
+ ],
+ visibility = ["//visibility:public"],
+)
+
+cc_library(
+ name = "nppi",
+ srcs = [
+ "usr/local/cuda-11.8/lib/libnppc.so.11",
+ "usr/local/cuda-11.8/lib/libnppif.so.11",
+ ],
+ hdrs = glob(
+ include = ["usr/local/cuda-11.8/include/npp*.h"],
+ ),
+ includes = ["usr/local/cuda-11.8/include"],
+ visibility = ["//visibility:public"],
+)
+
+cc_library(
+ name = "cudart",
+ srcs = [
+ "usr/lib/libcuda.so.1",
+ "usr/local/cuda-11.8/lib/libcudart.so.11.0",
+ ],
+ visibility = ["//visibility:public"],
+)
diff --git a/frc971/orin/build_rootfs.py b/frc971/orin/build_rootfs.py
index f82bed7..ddbb853 100755
--- a/frc971/orin/build_rootfs.py
+++ b/frc971/orin/build_rootfs.py
@@ -5,7 +5,9 @@
import collections
import subprocess
import shlex
+import datetime
import os
+import shutil
IMAGE = "arm64_bookworm_debian_yocto.img"
YOCTO = "/home/austin/local/jetpack/robot-yocto/build"
@@ -295,7 +297,8 @@
"gstreamer1.0-plugins-ugly", "gstreamer1.0-nice", "usbutils",
"locales", "trace-cmd", "clinfo", "jq", "strace", "sysstat",
"lm-sensors", "can-utils", "xfsprogs", "gstreamer1.0-tools",
- "bridge-utils", "net-tools", "apt-file", "parted", "xxd"
+ "bridge-utils", "net-tools", "apt-file", "parted", "xxd",
+ "libv4l-dev"
])
target(["apt-get", "clean"])
@@ -311,16 +314,43 @@
install_virtual_packages(virtual_packages)
yocto_package_names = [
- 'tegra-argus-daemon', 'tegra-firmware', 'tegra-firmware-tegra234',
- 'tegra-firmware-vic', 'tegra-firmware-xusb',
- 'tegra-libraries-argus-daemon-base', 'tegra-libraries-camera',
- 'tegra-libraries-core', 'tegra-libraries-cuda',
- 'tegra-libraries-eglcore', 'tegra-libraries-glescore',
- 'tegra-libraries-glxcore', 'tegra-libraries-multimedia',
+ 'tegra-argus-daemon',
+ 'tegra-firmware',
+ 'tegra-firmware-tegra234',
+ 'tegra-firmware-vic',
+ 'tegra-firmware-xusb',
+ 'tegra-libraries-argus-daemon-base',
+ 'tegra-libraries-camera',
+ 'tegra-libraries-core',
+ 'tegra-libraries-cuda',
+ 'tegra-libraries-eglcore',
+ 'tegra-libraries-glescore',
+ 'tegra-libraries-glxcore',
+ 'tegra-libraries-multimedia',
'tegra-libraries-multimedia-utils',
- 'tegra-libraries-multimedia-v4l', 'tegra-libraries-nvsci',
- 'tegra-libraries-vulkan', 'tegra-nvphs', 'tegra-nvphs-base',
- 'libnvidia-egl-wayland1'
+ 'tegra-libraries-multimedia-v4l',
+ 'tegra-libraries-nvsci',
+ 'tegra-libraries-vulkan',
+ 'tegra-nvphs',
+ 'tegra-nvphs-base',
+ 'libnvidia-egl-wayland1',
+ 'tegra-mmapi',
+ 'tegra-mmapi-dev',
+ 'cuda-cudart-11-8',
+ 'cuda-cudart-11-8-dev',
+ 'cuda-cudart-11-8-stubs',
+ 'libcurand-11-8',
+ 'libcurand-11-8-dev',
+ 'libcurand-11-8-stubs',
+ 'cuda-nvcc-11-8',
+ 'tegra-cmake-overrides',
+ 'cuda-target-environment',
+ 'libnpp-11-8',
+ 'libnpp-11-8-stubs',
+ 'libnpp-11-8-dev',
+ 'cuda-cccl-11-8',
+ 'cuda-nvcc-11-8',
+ 'cuda-nvcc-headers-11-8',
]
yocto_packages = list_yocto_packages()
packages = list_packages()
@@ -407,6 +437,56 @@
)
target(["vim", "-c", "\":qa!\""])
+ tarball = datetime.date.today().strftime(
+ f"{os.getcwd()}/%Y-%m-%d-bookworm-arm64-nvidia-rootfs.tar")
+ print(tarball)
+
+ subprocess.run([
+ "sudo",
+ "tar",
+ "--exclude=./usr/share/ca-certificates",
+ "--exclude=./home",
+ "--exclude=./root",
+ "--exclude=./usr/src",
+ "--exclude=./usr/lib/mesa-diverted",
+ "--exclude=./usr/bin/X11",
+ "--exclude=./usr/lib/systemd/system/system-systemd*cryptsetup.slice",
+ "--exclude=./dev",
+ "--exclude=./usr/local/cuda-11.8/bin/fatbinary",
+ "--exclude=./usr/local/cuda-11.8/bin/ptxas",
+ "-cf",
+ tarball,
+ ".",
+ ],
+ cwd=partition,
+ check=True)
+
+ # Pack ptxas and fatbinary into the spots that clang expect them to make compiling easy.
+ nvidia_cuda_toolkit_path = 'nvidia-cuda-toolkit'
+ if not os.path.exists(nvidia_cuda_toolkit_path):
+ os.mkdir(nvidia_cuda_toolkit_path)
+
+ subprocess.run(['apt-get', 'download', 'nvidia-cuda-toolkit'],
+ cwd=nvidia_cuda_toolkit_path,
+ check=True)
+
+ subprocess.run(
+ ['dpkg', '-x',
+ os.listdir(nvidia_cuda_toolkit_path)[0], '.'],
+ cwd=nvidia_cuda_toolkit_path,
+ check=True)
+
+ subprocess.run([
+ "sudo", "tar",
+ '--transform=s|usr/bin/ptxas|usr/local/cuda-11.8/bin/ptxas|',
+ '--transform=s|usr/bin/fatbinary|usr/local/cuda-11.8/bin/aarch64-unknown-linux-gnu-fatbinary|',
+ "--append", "-f", tarball, "usr/bin/fatbinary", "usr/bin/ptxas"
+ ],
+ cwd=nvidia_cuda_toolkit_path,
+ check=True)
+
+ subprocess.run(["sha256sum", tarball], check=True)
+
if __name__ == '__main__':
main()
diff --git a/frc971/vision/geometry.h b/frc971/vision/geometry.h
index 7858418..3285446 100644
--- a/frc971/vision/geometry.h
+++ b/frc971/vision/geometry.h
@@ -1,6 +1,8 @@
#ifndef FRC971_VISION_GEOMETRY_H_
#define FRC971_VISION_GEOMETRY_H_
+#include <optional>
+
#include "glog/logging.h"
#include "opencv2/core/types.hpp"