diff --git a/arch/chromium-fourier/NEXT.md b/arch/chromium-fourier/NEXT.md new file mode 100644 index 000000000..9928e4ada --- /dev/null +++ b/arch/chromium-fourier/NEXT.md @@ -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.