chromium-fourier NEXT.md: hit the clang 22 vs 147 wall
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
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
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>
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
# 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). 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_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 5–15 patch-and-retry
|
||||
cycles to compile clean. Then 6–10 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.
|
||||
Reference in New Issue
Block a user