Files
marfrit-packages/arch/chromium-fourier/PKGBUILD
T
test0r 055fc0ba06
build and publish packages / distcc-avahi-aarch64 (push) Successful in 30s
build and publish packages / lmcp-any (push) Successful in 8s
build and publish packages / lmcp-debian (push) Successful in 4s
build and publish packages / claude-his-any (push) Successful in 6s
build and publish packages / ffmpeg-v4l2-request-aarch64 (push) Successful in 11m59s
build and publish packages / claude-his-debian (push) Successful in 4s
arch/chromium-fourier: scaffold PKGBUILD + placeholder patch
Initial chromium-fourier shape on the chromium-builder@boltzmann LXD
container we provisioned today. Approach is the 7Ji-style "tarball +
system tools" pattern (no gclient/CIPD, the linux-arm64 dependency
binaries don't exist anyway) but stripped of the MPP/X11/panfork
specifics — chromium-fourier targets mainline kernel + Wayland +
panfrost/panthor + V4L2 stateless on /dev/video0, not the vendor
stack 7Ji's chromium-mpp targets.

PKGBUILD highlights:
- pkgver=147.0.7727.116 (current Chrome stable as of 2026-04-25)
- gn args: use_v4l2_codec=true, use_v4lplugin=true, use_linux_v4l2_only=true,
  use_vaapi=true. The first three are the magic that unlocks V4L2VDA on
  Linux non-ChromeOS without source patches; if they're sufficient on
  their own, the chromeos-pipeline-bypass patch stays a no-op.
- ffmpeg_branding="Chrome" + proprietary_codecs=true for H.264.
- enable_widevine=false, enable_nacl=false to keep the tree small.
- Currently development-shaped: prepare()/build() operate on a
  pre-extracted /build/chromium/src rather than makepkg-fetched
  source. Will switch to canonical source=(...tarball.xz) shape once
  the patches stabilise.

patches/chromeos-pipeline-bypass.patch is a placeholder; the actual
patch (if any) gets developed once we see what 7Ji's gn args do or
don't unlock for us.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 23:28:12 +00:00

167 lines
4.5 KiB
Bash

# Maintainer: Markus Fritsche <mfritsche@reauktion.de>
#
# Chromium with V4L2 HW video decode unlocked on Linux for Rockchip
# (RK3566 hantro / RK3588 VDPU381) on **mainline** kernel + Wayland +
# panfrost / panthor — no vendor MPP, no Mali blob, no panfork, no
# 5.10 BSP kernel. Fills the niche that 7Ji's chromium-mpp explicitly
# does not (it forces BSP + X11 + vendor stack); see
# /home/mfritsche/src/marfrit-packages/arch/chromium-fourier/STUDY.md
# for the full rationale.
#
# Build host: chromium-builder LXD container on boltzmann (8 cores,
# 28 GB RAM cap, 824 GB NVMe). 6-10 h initial build.
pkgname=chromium-fourier
pkgver=147.0.7727.116
pkgrel=1
epoch=1
pkgdesc='Chromium with V4L2VDA HW video decode unlocked for mainline Linux Wayland on Rockchip'
arch=('aarch64')
url='https://www.chromium.org/Home'
license=('BSD-3-Clause')
depends=(
alsa-lib
at-spi2-core
cairo
cups
dbus
fontconfig
freetype2
gtk3
hicolor-icon-theme
libdrm
libpulse
libva
libxcb
libxkbcommon
mesa
nspr
nss
pango
pciutils
pipewire
ttf-liberation
v4l-utils
wayland
)
makedepends=(
clang
elfutils
gn
gperf
java-runtime-headless
libxslt
lld
ninja
nodejs
npm
python
qt5-base
qt6-base
re2
rust
rust-bindgen
)
optdepends=(
'qt6-base: for Qt6 toolkit integration'
)
provides=(chromium)
conflicts=(chromium)
options=('!lto' '!strip')
# NB: the chromium tarball is fetched lazily by build.sh on the build
# host (5.7 GB compressed, doesn't belong in this git repo). The
# PKGBUILD assumes /build/chromium/src is already populated.
source=(
'patches/chromeos-pipeline-bypass.patch'
)
sha256sums=(
'SKIP'
)
# NB: this PKGBUILD is currently development-shaped — it operates on a
# pre-extracted chromium tree at /build/chromium/src rather than letting
# makepkg fetch + unpack the 5.7 GB tarball into ${srcdir}. Once the
# patches stabilise we'll switch to the canonical pattern with
# source=(${url}/chromium-${pkgver}.tar.xz ...) so the standard makepkg
# flow + CI fermi-style pipeline work end-to-end.
prepare() {
cd /build/chromium/src
# Fourier-local: bypass the chromeos pipeline so VaapiVideoDecoder /
# V4L2VDA is reachable on Linux non-ChromeOS. The 7Ji-style gn args
# (use_v4l2_codec / use_v4lplugin / use_linux_v4l2_only) may be
# sufficient on their own; this patch is the fallback if they aren't.
patch -Np1 -i "${srcdir}/patches/chromeos-pipeline-bypass.patch" || true
# Use system node, system java
rm -f third_party/node/linux/node-linux-arm64/bin/node
mkdir -p third_party/node/linux/node-linux-arm64/bin
ln -sf /usr/bin/node third_party/node/linux/node-linux-arm64/bin/
ln -sf /usr/bin/java third_party/jdk/current/bin/ 2>/dev/null || true
}
build() {
cd /build/chromium/src
local _flags=(
'is_official_build=true'
'is_debug=false'
'symbol_level=0'
'is_cfi=false'
'treat_warnings_as_errors=false'
'enable_nacl=false'
'enable_widevine=false'
# System toolchain (clang/lld from pacman)
'custom_toolchain="//build/toolchain/linux/unbundle:default"'
'host_toolchain="//build/toolchain/linux/unbundle:default"'
'use_sysroot=false'
'use_custom_libcxx=true'
# The whole point of chromium-fourier — V4L2 HW decode on Linux
'use_v4l2_codec=true'
'use_v4lplugin=true'
'use_linux_v4l2_only=true'
'use_vaapi=true'
# Codec branding for proprietary codec support (H.264 etc.)
'ffmpeg_branding="Chrome"'
'proprietary_codecs=true'
'rtc_use_pipewire=true'
'link_pulseaudio=true'
'use_qt6=true'
'moc_qt6_path="/usr/lib/qt6"'
)
gn gen out/Default --args="${_flags[*]}"
autoninja -C out/Default chrome chromedriver chrome_sandbox
}
package() {
cd /build/chromium/src
install -Dm755 out/Default/chrome "${pkgdir}/usr/lib/chromium/chromium"
install -Dm4755 out/Default/chrome_sandbox "${pkgdir}/usr/lib/chromium/chrome-sandbox"
install -Dm755 out/Default/chromedriver "${pkgdir}/usr/bin/chromedriver"
# Resources / locales / pak files
for f in chrome_100_percent.pak chrome_200_percent.pak resources.pak \
v8_context_snapshot.bin icudtl.dat headless_lib_data.pak \
headless_lib_strings.pak; do
[ -f "out/Default/$f" ] && install -Dm644 "out/Default/$f" \
"${pkgdir}/usr/lib/chromium/$f"
done
# Locales
if [ -d out/Default/locales ]; then
install -dm755 "${pkgdir}/usr/lib/chromium/locales"
cp -r out/Default/locales/* "${pkgdir}/usr/lib/chromium/locales/"
fi
# Top-level launcher
install -dm755 "${pkgdir}/usr/bin"
ln -s /usr/lib/chromium/chromium "${pkgdir}/usr/bin/chromium"
}