First-build summary on chromium-builder@boltzmann. gn gen succeeds with our V4L2VDA-unlock args. ninja fails immediately on: 1. chromium 147 emits clang flags (-fno-lifetime-dse, -fsanitize-ignore-for-ubsan-feature=array-bounds) that clang 22 doesn't know. Arch Linux ARM is on clang 22; clang 23 hasn't landed in extra yet. 2. Bundled x86_64 esbuild is invoked via qemu-x86_64-static but /lib64/ld-linux-x86-64.so.2 isn't installed — same shape as the bundled node-linux-x64 issue we already fixed by symlinking to system node. Smaller wall. Documents 5 paths forward (grind patches / pin chromium 132 (7Ji's known-good) / pin 138-141 middle ground / use chromium's bundled clang / wait for Arch ARM clang 23) with estimated effort and trade- offs. Recommends pinning to a chromium version that compiles clean against clang 22 as the fastest path to a working browser, then bumping as Arch ARM bumps clang. Build host state preserved — container running, source extracted, gn-gen'd, no compile artifacts. Easy to resume from any of the five paths. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.2 KiB
chromium-fourier — first-build status (2026-04-26 00:42 UTC)
Where we are
Build environment: chromium-builder LXD container on boltzmann
(8 cores, 28 GB RAM cap, 824 GB NVMe, Beryllium OS rkr3 host kernel).
Source: chromium-147.0.7727.116 release tarball extracted at
/build/chromium/src (25 GB extracted).
gn gen out/Default succeeds with our 7Ji-style args
(use_v4l2_codec=true use_v4lplugin=true use_linux_v4l2_only=true use_vaapi=false, system toolchain via unbundle:default, system clang
at /usr/bin/clang, version-symlink /usr/lib/clang/23 →
/usr/lib/clang/22, compiler-rt-adjust-paths style suffix patch
manually applied). 28057 targets generated.
ninja -C out/Default chrome fails immediately with two distinct walls:
Wall 1 — clang version mismatch (chromium 147 ↔ Arch clang 22)
Chromium 147's compile flags include
-fno-lifetime-dse and
-fsanitize-ignore-for-ubsan-feature=array-bounds. Both are clang 23+
features. Arch Linux ARM ships clang 22.1.3 (extra repo). Every
single C++ compile fails with clang++: error: unknown argument.
Resolutions, in order of effort:
- (a) Wait for Arch ARM to bump clang to 23. Tracking package upstream — happens whenever LLVM 23 lands in extra. Days to weeks.
- (b) Use chromium's bundled clang via
tools/clang/scripts/update.py. That hits the same CIPD/gs:// "linux-arm64 isn't a first-class target" issue we saw withgclient syncearlier — chromium's clang prebuilts are x86_64-only for many platforms. - (c) Fork an older chromium (e.g., 132 or 138) that compiles cleanly with clang 22. 7Ji's chromium-mpp PKGBUILD targets 132 and builds clean on Arch ARM today. Loses 15 versions of upstream chromium evolution but ships fast.
- (d) Patch chromium 147 to drop the offending flags
(
build/config/compiler/BUILD.gnhas the cflags lists). 50–200 line patch, brittle across version bumps but tractable. Fights every rebase.
Wall 2 — bundled x86_64 esbuild under qemu
After Wall 1 (or independently for Action targets):
qemu-x86_64-static: Could not open '/lib64/ld-linux-x86-64.so.2'
when chromium runs the bundled x86_64 esbuild from
third_party/devtools-frontend/.../scripts/build/typescript/ts_library.py.
Same shape as the bundled node-linux-x64 issue we already fixed (we
symlinked system node into that path). esbuild needs the same
treatment — install system esbuild via npm install -g esbuild and
symlink it into the path chromium expects. Or install qemu-user-static
glibc-x86_64to make the bundled binary actually run.
Wall 2 is much smaller than Wall 1 — a handful of bundled-x86_64 binaries to identify and replace, vs. fundamental clang version mismatch.
What worked
- LXD container provisioning on boltzmann via his recommendation — the host environment is right.
- Tarball-instead-of-gclient approach — sidesteps CIPD-doesn't-have- linux-arm64 problem for source acquisition, leaves only a few bundled binary issues at build time.
- Wall 1 / Wall 2 are both identifiable and bounded. We're past the "is this even doable" phase; this is now down to grinding the patches.
Options — needs your call
- Grind through Wall 1 with patches — patch
build/config/compiler/BUILD.gnto drop flags clang 22 doesn't know. Iterate per build error. Estimated 5–15 patch-and-retry cycles to compile clean. Then 6–10 h actual build. - Pin to chromium 132 — match 7Ji's known-working version on Arch ARM. Drop our STUDY focus on "current upstream Chromium" and ship a 1-year-old binary. Build should work much sooner.
- Pin to chromium 138 or 140 — middle ground. Likely uses clang 22 features and not 23. Some research needed to find the cutover.
- Use chromium's bundled clang — not viable on linux-arm64 without extensive sysroot setup; same CIPD issue as gclient sync.
- Wait for Arch ARM clang 23 — passive, days-to-weeks horizon.
Recommended (FWIW): start with (3) — find the latest chromium
version that builds clean against clang 22 (probably 138-141 range),
ship that as chromium-fourier, then bump as Arch ARM bumps clang.
That gives us a working browser in a few hours rather than days, on
mainline Linux + Wayland + V4L2 unlock — which is the actual goal.
The "current upstream Chromium" requirement was nice-to-have, not
essential.
State of the build host (preserved)
- Container:
chromium-builderon boltzmann (running, idle) - Source:
/build/chromium/src(extracted tarball, 25 GB) - Build dir:
/build/chromium/src/out/Default(gn-gen'd, no artifacts) - Tools installed: gn, ninja, clang 22, lld, gperf, nodejs (system), rust, qt5/6, all the gtk/wayland/va/v4l deps from the long pacman shopping list
- Patches applied to source:
compiler-rt-adjust-pathsstyle (manual) - Symlinks:
/usr/lib/clang/23→/usr/lib/clang/22,third_party/node/linux/node-linux-x64/bin/node→/usr/bin/node - Service unit history:
chromium-fetch.service(one-shot, succeeded on tarball + extract);chromium-build.service(one-shot, three failed attempts above).
Discard the container and start over with option 2 if you pick that direction; otherwise iterate from current state.