Skip to content

Commit 0a48f17

Browse files
task-jptronical
authored andcommitted
Torizon: Add SW renderer support for home-automation demo on GPU-less platforms
Add conditional compilation to use demo-sw-renderer.slint for home-automation when building for platforms without GPU support (default). - Add sw-renderer feature to home-automation Cargo.toml - Use conditional compilation in lib.rs to select demo.slint or demo-sw-renderer.slint - Add BUILD_HOME_AUTOMATION_SW_RENDERER ARG to Dockerfile.torizon-demos - Configure torizon_demos.yaml to enable SW renderer for GPU-less platforms
1 parent 8dbe3d4 commit 0a48f17

File tree

4 files changed

+31
-3
lines changed

4 files changed

+31
-3
lines changed

.github/workflows/torizon_demos.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,35 @@ jobs:
2626
image_arch: linux/arm64
2727
rust_toolchain_arch: aarch64-unknown-linux-gnu
2828
base_image_suffix: ""
29+
build_home_automation_sw_renderer: true
2930
# GPU-specific variants
3031
# https://developer.toradex.com/torizon/application-development/provided-containers/debian-containers-for-torizon
3132
- target: arm64
3233
image_arch: linux/arm64
3334
rust_toolchain_arch: aarch64-unknown-linux-gnu
3435
base_image_suffix: "-imx8"
36+
build_home_automation_sw_renderer: false
3537
- target: arm64
3638
image_arch: linux/arm64
3739
rust_toolchain_arch: aarch64-unknown-linux-gnu
3840
base_image_suffix: "-am62"
41+
build_home_automation_sw_renderer: false
3942
- target: arm64
4043
image_arch: linux/arm64
4144
rust_toolchain_arch: aarch64-unknown-linux-gnu
4245
base_image_suffix: "-am62p"
46+
build_home_automation_sw_renderer: false
4347
- target: arm64
4448
image_arch: linux/arm64
4549
rust_toolchain_arch: aarch64-unknown-linux-gnu
4650
base_image_suffix: "-imx95"
51+
build_home_automation_sw_renderer: false
4752
# Legacy vivante support (for backward compatibility)
4853
- target: arm64
4954
image_arch: linux/arm64
5055
rust_toolchain_arch: aarch64-unknown-linux-gnu
5156
base_image_suffix: "-vivante"
57+
build_home_automation_sw_renderer: false
5258

5359
steps:
5460
- uses: actions/checkout@v5
@@ -76,3 +82,4 @@ jobs:
7682
RUST_TOOLCHAIN_ARCH=${{matrix.rust_toolchain_arch}}
7783
BASE_NAME=wayland-base${{matrix.base_image_suffix}}
7884
WEATHER_API_KEY=${{secrets.WEATHER_API_KEY}}
85+
BUILD_HOME_AUTOMATION_SW_RENDERER=${{matrix.build_home_automation_sw_renderer}}

demos/home-automation/rust/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ name = "home_automation_lib"
2222
slint = { path = "../../../api/rs/slint" }
2323
chrono = "0.4"
2424

25+
[features]
26+
sw-renderer = []
27+
2528
[target.'cfg(target_arch = "wasm32")'.dependencies]
2629
wasm-bindgen = { version = "0.2" }
2730
web-sys = { version = "0.3", features = ["console"] }

demos/home-automation/rust/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ use slint::{Timer, TimerMode};
77
#[cfg(target_arch = "wasm32")]
88
use wasm_bindgen::prelude::*;
99

10+
#[cfg(feature = "sw-renderer")]
11+
slint::slint! {
12+
export { Api, AppWindow } from "../ui/demo-sw-renderer.slint";
13+
}
14+
15+
#[cfg(not(feature = "sw-renderer"))]
1016
slint::slint! {
1117
export { Api, AppWindow } from "../ui/demo.slint";
1218
}

docker/Dockerfile.torizon-demos

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,12 @@ ARG TOOLCHAIN_ARCH=arm64
77
ARG IMAGE_ARCH=linux/arm64
88
ARG BASE_VERSION=4
99
ARG BASE_NAME=wayland-base
10+
ARG BUILD_HOME_AUTOMATION_SW_RENDERER=false
11+
1012
FROM torizon/cross-toolchain-$TOOLCHAIN_ARCH:${BASE_VERSION} AS build
1113
ARG TOOLCHAIN_ARCH
1214
ARG RUST_TOOLCHAIN_ARCH=aarch64-unknown-linux-gnu
15+
ARG BUILD_HOME_AUTOMATION_SW_RENDERER
1316

1417
ARG WEATHER_API_KEY
1518
ENV WEATHER_API=$WEATHER_API_KEY
@@ -39,10 +42,19 @@ COPY . /slint
3942
WORKDIR /slint
4043
RUN mkdir demos_compiled \
4144
&& cargo build --release --target $RUST_TOOLCHAIN_ARCH --features slint/renderer-skia,slint/backend-linuxkms-noseat \
42-
-p printerdemo -p slide_puzzle -p gallery -p opengl_underlay -p carousel -p todo -p energy-monitor -p home-automation -p weather-demo \
43-
&& for demo in printerdemo slide_puzzle gallery opengl_underlay carousel todo energy-monitor home-automation weather-demo; do \
45+
-p printerdemo -p slide_puzzle -p gallery -p opengl_underlay -p carousel -p todo -p energy-monitor -p weather-demo \
46+
&& for demo in printerdemo slide_puzzle gallery opengl_underlay carousel todo energy-monitor weather-demo; do \
4447
cp target/$RUST_TOOLCHAIN_ARCH/release/$demo ./demos_compiled/; \
45-
done
48+
done \
49+
&& if [ "$BUILD_HOME_AUTOMATION_SW_RENDERER" = "true" ]; then \
50+
cargo build --release --target $RUST_TOOLCHAIN_ARCH --features slint/renderer-skia,slint/backend-linuxkms-noseat,home-automation/sw-renderer \
51+
-p home-automation \
52+
&& cp target/$RUST_TOOLCHAIN_ARCH/release/home-automation ./demos_compiled/home-automation; \
53+
else \
54+
cargo build --release --target $RUST_TOOLCHAIN_ARCH --features slint/renderer-skia,slint/backend-linuxkms-noseat \
55+
-p home-automation \
56+
&& cp target/$RUST_TOOLCHAIN_ARCH/release/home-automation ./demos_compiled/home-automation; \
57+
fi
4658

4759
# Create container for target
4860
FROM --platform=${IMAGE_ARCH} torizon/${BASE_NAME}:${BASE_VERSION} AS deploy

0 commit comments

Comments
 (0)