A build for the Raspberry Pi 3B, and a CI lane that makes it #2

Merged
bcox merged 4 commits from bcox/pi-build into main 2026-11-04 00:53:59 +00:00 AGit
Owner

Stacked on #1, which it needs (ci.yml, ci_test.sh): this branch holds #1's commit too until #1 merges.

--config=pi cross-builds the kit for the Raspberry Pi 3B (aarch64 Linux) the way ../mini-800 does, so a repository targeting the Pi keeps working with the kit:

  • Toolchain (MODULE.bazel, all dev dependencies): llvm_toolchain_pi, the same clang 22.1.7 targeting aarch64 against Debian 12's arm64 glibc (pi_sysroot, same package versions as the x86 sysroot), with LLVM's aarch64 libc++ from llvm_aarch64_dist linked statically. Registered first, as in mini-800.
  • Platform and config: //platforms:pi3_aarch64, //platforms:linux_aarch64, and build:pi in .bazelrc with -mcpu=cortex-a53.
  • .vst3: on aarch64 Linux it's bundled without moduleinfo.json, since moduleinfotool can't load it on the build machine (same as the x86 packages and mini-800).
  • Packages: linux_packages hardcoded amd64, so a Pi build produced a .deb/.rpm labeled amd64 holding aarch64 binaries. It now picks arm64 (.rpm: aarch64) by CPU.
  • CI: a pi lane after tsan: bazel build --config=pi --copt=-Werror //..., running nothing; ci_test.sh has a build mode for it.

Checked: bazel build --config=pi --copt=-Werror //... (aarch64 ELF out); the kit's tests with X11; -Werror; x86 packages unchanged; plugin-template as an effect and with an instrument; bazel test //... on macOS (kaelego).

The other lanes still fail on the Ivy Bridge runner, which lacks AVX2; pi only builds, so it doesn't need it.

🤖 Generated with Claude Code

**Stacked on #1**, which it needs (`ci.yml`, `ci_test.sh`): this branch holds #1's commit too until #1 merges. `--config=pi` cross-builds the kit for the Raspberry Pi 3B (aarch64 Linux) the way ../mini-800 does, so a repository targeting the Pi keeps working with the kit: - **Toolchain** (`MODULE.bazel`, all dev dependencies): `llvm_toolchain_pi`, the same clang 22.1.7 targeting aarch64 against Debian 12's arm64 glibc (`pi_sysroot`, same package versions as the x86 sysroot), with LLVM's aarch64 libc++ from `llvm_aarch64_dist` linked statically. Registered first, as in mini-800. - **Platform and config:** `//platforms:pi3_aarch64`, `//platforms:linux_aarch64`, and `build:pi` in `.bazelrc` with `-mcpu=cortex-a53`. - **`.vst3`:** on aarch64 Linux it's bundled without `moduleinfo.json`, since `moduleinfotool` can't load it on the build machine (same as the x86 packages and mini-800). - **Packages:** `linux_packages` hardcoded `amd64`, so a Pi build produced a `.deb`/`.rpm` labeled amd64 holding aarch64 binaries. It now picks `arm64` (`.rpm`: aarch64) by CPU. - **CI:** a `pi` lane after `tsan`: `bazel build --config=pi --copt=-Werror //...`, running nothing; `ci_test.sh` has a `build` mode for it. Checked: `bazel build --config=pi --copt=-Werror //...` (aarch64 ELF out); the kit's tests with X11; `-Werror`; x86 packages unchanged; plugin-template as an effect and with an instrument; `bazel test //...` on macOS (kaelego). The other lanes still fail on the Ivy Bridge runner, which lacks AVX2; `pi` only builds, so it doesn't need it. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
X11 tests under Xvfb, a test of the X11 window, and coverage
Some checks failed
ci / default (pull_request) Failing after 5m21s
ci / opt (pull_request) Failing after 5m13s
ci / asan (pull_request) Failing after 5m14s
ci / ubsan (pull_request) Failing after 5m46s
ci / tsan (pull_request) Failing after 5m24s
ci / coverage (pull_request) Failing after 5m58s
339ab165f4
CI's lanes run the X11 tests against Xvfb (-noreset: the server otherwise
starts over whenever its last client leaves, refusing the next test's
connection). x11_window_test drives the window as its host would: a parent
window, input sent to it, the parent resized, its pixels read back. With
DISPLAY set and unreachable the X11 tests now fail instead of skipping.

bazel coverage is configured in .bazelrc, and tools/coverage.sh writes
coverage/: the merged report, a summary, genhtml's pages and diff-cover's
report of the lines changed since a base. A coverage job follows the lanes
on a pull request and posts that report on it. Line coverage goes from 65%
to 89%; x11_window.cc from none to 86%.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A build for the Raspberry Pi 3B, and a CI lane that makes it
Some checks failed
ci / default (pull_request) Failing after 5m17s
ci / opt (pull_request) Failing after 4m57s
ci / asan (pull_request) Failing after 5m22s
ci / ubsan (pull_request) Failing after 5m9s
ci / tsan (pull_request) Failing after 4m55s
ci / pi (pull_request) Successful in 6m28s
ci / coverage (pull_request) Failing after 5m48s
1843dae391
--config=pi cross-builds the kit for aarch64 Linux as ../mini-800 does: the
x86_64 clang targeting aarch64 against Debian 12's arm64 glibc, with LLVM's
aarch64 libc++ linked statically, all as dev dependencies and registered first.
A CI lane, pi, builds //... that way with -Werror and runs nothing, so a change
that breaks the kit for a repository targeting the Pi fails here.

A .vst3 for aarch64 Linux is bundled without moduleinfo.json, as the exec tool
cannot load it. The Linux packages took amd64 as their architecture whatever
they held; they now say arm64 (aarch64 in the .rpm) for the Pi.

ci_test.sh gains a build mode for the lane.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bcox force-pushed bcox/pi-build from 1843dae391
Some checks failed
ci / default (pull_request) Failing after 5m17s
ci / opt (pull_request) Failing after 4m57s
ci / asan (pull_request) Failing after 5m22s
ci / ubsan (pull_request) Failing after 5m9s
ci / tsan (pull_request) Failing after 4m55s
ci / pi (pull_request) Successful in 6m28s
ci / coverage (pull_request) Failing after 5m48s
to d193a4a30f
Some checks failed
ci / tsan (pull_request) Blocked by required conditions
ci / pi (pull_request) Blocked by required conditions
ci / coverage (pull_request) Blocked by required conditions
ci / default (pull_request) Successful in 5m12s
ci / opt (pull_request) Failing after 2m23s
ci / asan (pull_request) Failing after 2m22s
ci / ubsan (pull_request) Waiting to run
2026-11-03 22:20:58 +00:00
Compare
bcox force-pushed bcox/pi-build from d193a4a30f
Some checks failed
ci / tsan (pull_request) Blocked by required conditions
ci / pi (pull_request) Blocked by required conditions
ci / coverage (pull_request) Blocked by required conditions
ci / default (pull_request) Successful in 5m12s
ci / opt (pull_request) Failing after 2m23s
ci / asan (pull_request) Failing after 2m22s
ci / ubsan (pull_request) Waiting to run
to be75fc64e2
Some checks failed
ci / default (pull_request) Successful in 2m11s
ci / opt (pull_request) Successful in 2m20s
ci / asan (pull_request) Successful in 2m13s
ci / ubsan (pull_request) Successful in 2m12s
ci / tsan (pull_request) Failing after 2m16s
ci / pi (pull_request) Failing after 2m48s
ci / coverage (pull_request) Has been cancelled
2026-11-03 22:40:42 +00:00
Compare
bcox force-pushed bcox/pi-build from be75fc64e2
Some checks failed
ci / default (pull_request) Successful in 2m11s
ci / opt (pull_request) Successful in 2m20s
ci / asan (pull_request) Successful in 2m13s
ci / ubsan (pull_request) Successful in 2m12s
ci / tsan (pull_request) Failing after 2m16s
ci / pi (pull_request) Failing after 2m48s
ci / coverage (pull_request) Has been cancelled
to 88817099a2
Some checks failed
ci / default (pull_request) Successful in 2m7s
ci / opt (pull_request) Successful in 2m9s
ci / asan (pull_request) Successful in 2m10s
ci / ubsan (pull_request) Successful in 2m13s
ci / tsan (pull_request) Failing after 2m11s
ci / pi (pull_request) Has been cancelled
ci / coverage (pull_request) Has been cancelled
2026-11-03 23:32:23 +00:00
Compare
No seccomp option for TSan's container, which the runner ignores
All checks were successful
ci / default (pull_request) Successful in 2m12s
ci / opt (pull_request) Successful in 2m9s
ci / asan (pull_request) Successful in 2m11s
ci / ubsan (pull_request) Successful in 2m13s
ci / tsan (pull_request) Successful in 2m12s
ci / pi (pull_request) Successful in 2m13s
ci / coverage (pull_request) Successful in 2m23s
5e65c11364
The commit that added it came along from before #1 dropped it; slab's
vm.mmap_rnd_bits is what lets TSan run (.bazelrc). And the merge's long comment
line wrapped again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Diff Coverage

Diff: origin/main...HEAD, staged and unstaged changes

No lines with coverage information in this diff.

Whole suite: 89.3% 1924/2154 total. Every file: the coverage-html artifact of this run.

# Diff Coverage ## Diff: origin/main...HEAD, staged and unstaged changes No lines with coverage information in this diff. Whole suite: 89.3% 1924/2154 total. Every file: the coverage-html artifact of [this run](https://forge.djehuti.com/bcox/plugin-kit/actions/runs/15).
bcox merged commit 6548d8052f into main 2026-11-04 00:53:59 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
bcox/plugin-kit!2
No description provided.