mirror of
https://github.com/toyota-connected/emb_cli.git
synced 2026-06-21 07:19:37 -07:00
feat(examples): full Raspberry Pi family manifest (rpi4/5/zero-2w x bookworm/trixie)
Expand the rpi family example from a single bookworm/drm-kms-egl board into the
six targets the ivi-homescreen PiOS CI needs: {rpi5, rpi4, rpi-zero-2w} x
{bookworm, trixie}.
- OS variant drives toolchain + sysroot (and thus the container image):
bookworm -> 12.3.rel1 + raspios-bookworm; trixie -> 15.2.rel1 + raspios-trixie.
bookworm cross-builds libdisplay-info 0.2.0 (ships 0.1.1, drm-cxx needs >=0.2.0)
and omits the apt libdisplay-info-dev so the static .a isn't shadowed; trixie
keeps it. Vulkan headers are vendored by ivi-homescreen + drm-cxx, so neither
OS stages them.
- Board only changes -mcpu (a76/a72/a53); all three share one sysroot per OS.
- Backends: rpi5 builds all five (incl. drm-kms-vulkan); rpi4 and zero-2w build
the four without it. Plugins on (PLUGINS_DIR=../ivi-homescreen-plugins).
Validated: parses, --list-targets shows the right per-model backend sets, and
--dry-run resolves each target's toolchain/image/cpu/augment. Example tests pass.
Signed-off-by: Joel Winarske <joel.winarske@gmail.com>
This commit is contained in:
@@ -29,11 +29,26 @@
|
||||
"icefish",
|
||||
"opencontainers",
|
||||
"skopeo",
|
||||
"libcamera",
|
||||
"libdisplay",
|
||||
"libdrm",
|
||||
"libegl",
|
||||
"libgbm",
|
||||
"libgles",
|
||||
"libglib",
|
||||
"libgstreamer",
|
||||
"libinput",
|
||||
"libpipewire",
|
||||
"libsecret",
|
||||
"libsystemd",
|
||||
"libudev",
|
||||
"libvulkan",
|
||||
"libxkbcommon",
|
||||
"dlopens",
|
||||
"gstreamer",
|
||||
"pipewire",
|
||||
"sdbus",
|
||||
"waypp",
|
||||
"mcpu",
|
||||
"OECORE",
|
||||
"passwordless",
|
||||
|
||||
@@ -1,76 +1,201 @@
|
||||
# Multi-platform manifest: one project, several boards via `cross.targets`.
|
||||
#
|
||||
# Shared config lives at the cross: level; each board overrides only its image
|
||||
# and cpu tuning. Pick one with `--target`:
|
||||
# Raspberry Pi family — ivi-homescreen cross-compiled for PiOS aarch64.
|
||||
#
|
||||
# One project, six targets: {rpi5, rpi4, rpi-zero-2w} x {bookworm, trixie}.
|
||||
# emb cross . --list-targets
|
||||
# emb cross . --target rpi5 --build --deb
|
||||
# emb cross . --target radxa-zero3 --build
|
||||
# emb cross . --target rpi5-bookworm --build --backend drm-kms-egl
|
||||
# emb cross . --target rpi5-trixie --publish --image ghcr.io/<org>/emb-cross-aarch64-none-linux-gnu
|
||||
#
|
||||
# rpi4/rpi5/rpi-zero-2w share one raspios sysroot (same image, only -mcpu
|
||||
# differs); radxa-zero3 uses a different image and gets its own. Parse/plan
|
||||
# validated via --dry-run; the rpi5 single-target config is build-validated in
|
||||
# pi5.emb.yaml.
|
||||
# Why the matrix:
|
||||
# - OS variant drives the toolchain + sysroot (and the container image):
|
||||
# bookworm -> gcc 12 / glibc 2.36, raspios-bookworm image
|
||||
# trixie -> gcc 15 / glibc 2.41, raspios-trixie image
|
||||
# bookworm ships libdisplay-info 0.1.1 (< drm-cxx's 0.2.0), so it cross-
|
||||
# builds 0.2.0 from source (augment) and omits the apt libdisplay-info-dev
|
||||
# (its .so would shadow the static 0.2.0 at link time). trixie ships 0.2.0,
|
||||
# so no augment and it keeps libdisplay-info-dev. (Vulkan headers are
|
||||
# vendored by ivi-homescreen + drm-cxx, so neither OS stages them.)
|
||||
# - Board only changes -mcpu (a76/a72/a53). All three boards on a given OS
|
||||
# share one sysroot -> one container image (cpu_flags aren't in sysroot_key).
|
||||
# - Backends: rpi5 builds all five (incl. drm-kms-vulkan); rpi4 and zero-2w
|
||||
# build the four without drm-kms-vulkan.
|
||||
#
|
||||
# Plugins are built (DISABLE_PLUGINS=OFF): the sibling ivi-homescreen-plugins
|
||||
# repo must sit next to this one (PLUGINS_DIR=../ivi-homescreen-plugins).
|
||||
id: ivi-homescreen
|
||||
type: app
|
||||
supported_archs: [arm64]
|
||||
supported_host_types: [ubuntu, fedora]
|
||||
|
||||
build:
|
||||
app_path: .
|
||||
archs: [arm64]
|
||||
modes: [release]
|
||||
output: bundles
|
||||
|
||||
cross:
|
||||
provider: arm-gnu
|
||||
version_policy: pinned
|
||||
toolchain_version: 12.3.rel1 # bookworm → gcc 12 / glibc 2.36
|
||||
triple: aarch64-none-linux-gnu
|
||||
|
||||
sysroot:
|
||||
partition: 2
|
||||
# Shared sysroot = the trixie layout (keeps the apt libdisplay-info-dev).
|
||||
# bookworm targets override this (see &sysroot_bookworm) to drop it.
|
||||
sysroot: &sysroot_trixie
|
||||
partition: 2 # raspios rootfs is the Linux (type 83) p2
|
||||
dev_packages:
|
||||
# Embedder + plugins shared deps (waypp always needs wayland-*; plugins
|
||||
# pull camera/gstreamer/pipewire/secret; sdbus-cpp needs libsystemd).
|
||||
- libcamera-dev
|
||||
- libcurl4-openssl-dev
|
||||
- libegl-dev
|
||||
- libgles2-mesa-dev
|
||||
- libglib2.0-dev
|
||||
- libgstreamer1.0-dev
|
||||
- libgstreamer-plugins-base1.0-dev
|
||||
- libjpeg-dev
|
||||
- libpipewire-0.3-dev
|
||||
- libsecret-1-dev
|
||||
- libsystemd-dev
|
||||
- libudev-dev
|
||||
- libwayland-dev
|
||||
- libxkbcommon-dev
|
||||
- libxml2-dev
|
||||
- wayland-protocols
|
||||
- zlib1g-dev
|
||||
# Vulkan (wayland-vulkan links the loader; drm-kms-vulkan dlopens it).
|
||||
- libvulkan-dev
|
||||
- mesa-vulkan-drivers
|
||||
# DRM/KMS + GBM + seat/input (drm-kms-egl, drm-kms-vulkan, software).
|
||||
- libdrm-dev
|
||||
- libgbm-dev
|
||||
- libinput-dev
|
||||
- libxcursor-dev
|
||||
- libseat-dev
|
||||
- libegl-dev
|
||||
- libgles2-mesa-dev
|
||||
- libwayland-dev
|
||||
- libxkbcommon-dev
|
||||
- libudev-dev
|
||||
- libsystemd-dev
|
||||
- libglib2.0-dev
|
||||
- wayland-protocols
|
||||
- zlib1g-dev
|
||||
# trixie ships libdisplay-info >= 0.2.0; link against it directly.
|
||||
- libdisplay-info-dev
|
||||
|
||||
augment:
|
||||
- pkg: libdisplay-info
|
||||
min: "0.2.0"
|
||||
url: https://gitlab.freedesktop.org/emersion/libdisplay-info/-/archive/0.2.0/libdisplay-info-0.2.0.tar.gz
|
||||
build: meson
|
||||
static: true
|
||||
# Merged into every backend (a backend's own key wins on a clash).
|
||||
defines:
|
||||
BUILD_BACKEND_HEADLESS_EGL: 'OFF'
|
||||
DISABLE_PLUGINS: 'OFF'
|
||||
PLUGINS_DIR: '../ivi-homescreen-plugins'
|
||||
|
||||
# Default backend set (rpi4 / zero-2w): four backends, no drm-kms-vulkan.
|
||||
# rpi5 targets override `backends` to add drm-kms-vulkan. Each entry is
|
||||
# anchored so the rpi5 set and the per-OS targets can reuse it.
|
||||
backends:
|
||||
drm-kms-egl:
|
||||
BUILD_BACKEND_DRM_KMS_EGL: 'ON'
|
||||
wayland-egl: &be_wayland_egl
|
||||
BUILD_BACKEND_WAYLAND_EGL: 'ON'
|
||||
BUILD_BACKEND_WAYLAND_VULKAN: 'OFF'
|
||||
BUILD_BACKEND_DRM_KMS_EGL: 'OFF'
|
||||
BUILD_BACKEND_SOFTWARE: 'OFF'
|
||||
wayland-vulkan: &be_wayland_vulkan
|
||||
BUILD_BACKEND_WAYLAND_EGL: 'OFF'
|
||||
BUILD_BACKEND_WAYLAND_VULKAN: 'ON'
|
||||
BUILD_BACKEND_DRM_KMS_EGL: 'OFF'
|
||||
BUILD_BACKEND_SOFTWARE: 'OFF'
|
||||
drm-kms-egl: &be_drm_kms_egl
|
||||
BUILD_BACKEND_WAYLAND_EGL: 'OFF'
|
||||
BUILD_BACKEND_WAYLAND_VULKAN: 'OFF'
|
||||
DISABLE_PLUGINS: 'ON'
|
||||
BUILD_BACKEND_DRM_KMS_EGL: 'ON'
|
||||
BUILD_BACKEND_SOFTWARE: 'OFF'
|
||||
software: &be_software
|
||||
BUILD_BACKEND_WAYLAND_EGL: 'OFF'
|
||||
BUILD_BACKEND_WAYLAND_VULKAN: 'OFF'
|
||||
BUILD_BACKEND_DRM_KMS_EGL: 'OFF'
|
||||
BUILD_BACKEND_SOFTWARE: 'ON'
|
||||
|
||||
package:
|
||||
name: ivi-homescreen
|
||||
version: 1.0.0
|
||||
maintainer: "Joel Winarske <joel.winarske@gmail.com>"
|
||||
description: "IVI Flutter Shell (drm-kms-egl backend), cross-built by emb"
|
||||
description: "IVI Flutter Shell, cross-built by emb"
|
||||
section: utils
|
||||
bin: shell/homescreen
|
||||
bin: shell/homescreen # relative to each backend build dir
|
||||
install_dir: /usr/bin
|
||||
|
||||
targets:
|
||||
rpi5:
|
||||
image_url: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-11-19/2024-11-19-raspios-bookworm-arm64-lite.img.xz
|
||||
cpu_flags: [-mcpu=cortex-a76]
|
||||
rpi4:
|
||||
image_url: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-11-19/2024-11-19-raspios-bookworm-arm64-lite.img.xz
|
||||
cpu_flags: [-mcpu=cortex-a72]
|
||||
rpi-zero-2w:
|
||||
image_url: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-11-19/2024-11-19-raspios-bookworm-arm64-lite.img.xz
|
||||
cpu_flags: [-mcpu=cortex-a53]
|
||||
radxa-zero3:
|
||||
image_url: https://github.com/radxa-build/radxa-zero3/releases/download/rsdk-b1/radxa-zero3_bookworm_kde_b1.output_512.img.xz
|
||||
cpu_flags: [-mcpu=cortex-a55]
|
||||
# -- Raspberry Pi 5 (Cortex-A76) — all five backends -------------------
|
||||
rpi5-bookworm:
|
||||
toolchain_version: &tc_bookworm 12.3.rel1
|
||||
image_url: &img_bookworm https://downloads.raspberrypi.com/raspios_oldstable_lite_arm64/images/raspios_oldstable_lite_arm64-2026-04-14/2026-04-13-raspios-bookworm-arm64-lite.img.xz
|
||||
cpu_flags: &cpu_rpi5 [-mcpu=cortex-a76]
|
||||
sysroot: &sysroot_bookworm
|
||||
partition: 2
|
||||
dev_packages:
|
||||
# Identical to the shared list, minus libdisplay-info-dev: bookworm's
|
||||
# apt 0.1.1 would shadow the static 0.2.0 we build in `augment`.
|
||||
- libcamera-dev
|
||||
- libcurl4-openssl-dev
|
||||
- libegl-dev
|
||||
- libgles2-mesa-dev
|
||||
- libglib2.0-dev
|
||||
- libgstreamer1.0-dev
|
||||
- libgstreamer-plugins-base1.0-dev
|
||||
- libjpeg-dev
|
||||
- libpipewire-0.3-dev
|
||||
- libsecret-1-dev
|
||||
- libsystemd-dev
|
||||
- libudev-dev
|
||||
- libwayland-dev
|
||||
- libxkbcommon-dev
|
||||
- libxml2-dev
|
||||
- wayland-protocols
|
||||
- zlib1g-dev
|
||||
- libvulkan-dev
|
||||
- mesa-vulkan-drivers
|
||||
- libdrm-dev
|
||||
- libgbm-dev
|
||||
- libinput-dev
|
||||
- libxcursor-dev
|
||||
- libseat-dev
|
||||
augment: &augment_bookworm
|
||||
# bookworm ships libdisplay-info 0.1.1; drm-cxx requires >= 0.2.0
|
||||
# (pkg_check_modules libdisplay-info>=0.2.0), so build it static and
|
||||
# stage into the sysroot. Vulkan headers are vendored by ivi-homescreen
|
||||
# and drm-cxx (third_party/Vulkan-Headers), so none is needed here.
|
||||
- pkg: libdisplay-info
|
||||
min: "0.2.0"
|
||||
url: https://gitlab.freedesktop.org/emersion/libdisplay-info/-/archive/0.2.0/libdisplay-info-0.2.0.tar.gz
|
||||
build: meson
|
||||
static: true
|
||||
backends: &backends_rpi5
|
||||
wayland-egl: *be_wayland_egl
|
||||
wayland-vulkan: *be_wayland_vulkan
|
||||
drm-kms-egl: *be_drm_kms_egl
|
||||
drm-kms-vulkan:
|
||||
BUILD_BACKEND_WAYLAND_EGL: 'OFF'
|
||||
BUILD_BACKEND_WAYLAND_VULKAN: 'OFF'
|
||||
BUILD_BACKEND_DRM_KMS_EGL: 'OFF'
|
||||
BUILD_BACKEND_DRM_KMS_VULKAN: 'ON'
|
||||
BUILD_BACKEND_SOFTWARE: 'OFF'
|
||||
BUILD_COMPOSITOR: 'ON' # engine presents via the layer scene
|
||||
software: *be_software
|
||||
rpi5-trixie:
|
||||
toolchain_version: &tc_trixie 15.2.rel1
|
||||
image_url: &img_trixie https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2026-04-21/2026-04-21-raspios-trixie-arm64-lite.img.xz
|
||||
cpu_flags: *cpu_rpi5
|
||||
backends: *backends_rpi5
|
||||
|
||||
# -- Raspberry Pi 4 (Cortex-A72) — four backends ----------------------
|
||||
rpi4-bookworm:
|
||||
toolchain_version: *tc_bookworm
|
||||
image_url: *img_bookworm
|
||||
cpu_flags: &cpu_rpi4 [-mcpu=cortex-a72]
|
||||
sysroot: *sysroot_bookworm
|
||||
augment: *augment_bookworm
|
||||
rpi4-trixie:
|
||||
toolchain_version: *tc_trixie
|
||||
image_url: *img_trixie
|
||||
cpu_flags: *cpu_rpi4
|
||||
|
||||
# -- Raspberry Pi Zero 2 W (Cortex-A53) — four backends ---------------
|
||||
rpi-zero-2w-bookworm:
|
||||
toolchain_version: *tc_bookworm
|
||||
image_url: *img_bookworm
|
||||
cpu_flags: &cpu_zero2w [-mcpu=cortex-a53]
|
||||
sysroot: *sysroot_bookworm
|
||||
augment: *augment_bookworm
|
||||
rpi-zero-2w-trixie:
|
||||
toolchain_version: *tc_trixie
|
||||
image_url: *img_trixie
|
||||
cpu_flags: *cpu_zero2w
|
||||
|
||||
Reference in New Issue
Block a user