Files
marfrit-packages/arch/chromium-fourier/NEXT.md
T
test0r f3a7b8f1c1
build and publish packages / distcc-avahi-aarch64 (push) Successful in 38s
build and publish packages / lmcp-any (push) Successful in 7s
build and publish packages / lmcp-debian (push) Successful in 4s
build and publish packages / claude-his-any (push) Successful in 7s
build and publish packages / ffmpeg-v4l2-request-aarch64 (push) Successful in 11m33s
build and publish packages / claude-his-debian (push) Successful in 5s
chromium-fourier NEXT.md: hit the clang 22 vs 147 wall
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>
2026-04-26 01:02:24 +00:00

111 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 with
`gclient sync` earlier — 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.gn` has the cflags lists). 50200 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_64` to 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
1. **Grind through Wall 1 with patches** — patch
`build/config/compiler/BUILD.gn` to drop flags clang 22 doesn't
know. Iterate per build error. Estimated 515 patch-and-retry
cycles to compile clean. Then 610 h actual build.
2. **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.
3. **Pin to chromium 138 or 140** — middle ground. Likely uses clang
22 features and not 23. Some research needed to find the cutover.
4. **Use chromium's bundled clang** — not viable on linux-arm64
without extensive sysroot setup; same CIPD issue as gclient sync.
5. **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-builder` on 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-paths` style (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.