From a2f5de9de00c2a64f5ed054183b806dbee8ec292 Mon Sep 17 00:00:00 2001 From: Jorijn van der Graaf Date: Sun, 6 Sep 2026 00:02:19 +0200 Subject: [PATCH] kernel: build for the cores the phone has, pkgrel 102 The FP6 is 4x Cortex-A520 + 4x Cortex-A720 and this image boots nothing else, so pass the compiler KCFLAGS="-march=armv8.6-a+fp16fml+aes+sha3+sm4 -mtune=cortex-a720". The stock arm64 build gives the compiler no arch flag at all (so one image can boot any Armv8 board). The string is what `gcc -march=native` derives on the phone, re-based on armv8.6-a so clang can express the same set (clang has no flagm2/rcpc2/ frintts tokens; it reaches them through the architecture level). 8.6 is the highest level whose mandatory set the phone exposes: 8.7 would assume WFxT and 9.x SVE2, and neither is in its hwcaps or ID registers. clang emits identical code for this and for -mcpu=cortex-a720+nosve+nomemtag; the difference is only which system features (SPE, ETE, TRBE, FPAC) it knows about, none of which generate code. Verified on eef717f978f1 with the aport config: builds with zero warnings, same module set as r100 (417), compat vDSO untouched, boots the dev phone with a clean dmesg and a GREEN selftest. Record: fp6 journal/base/captures/2026-09-05-mcpu-a720-verification.md. --- aports/device/linux-postmarketos-qcom-milos/APKBUILD | 9 ++++++++- aports/temp/libcamera/APKBUILD | 9 ++++++++- aports/temp/libqmi/APKBUILD | 8 +++++++- aports/temp/modemmanager/APKBUILD | 8 +++++++- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/aports/device/linux-postmarketos-qcom-milos/APKBUILD b/aports/device/linux-postmarketos-qcom-milos/APKBUILD index c7c3224..fbe947c 100644 --- a/aports/device/linux-postmarketos-qcom-milos/APKBUILD +++ b/aports/device/linux-postmarketos-qcom-milos/APKBUILD @@ -8,7 +8,7 @@ _flavor="postmarketos-qcom-milos" pkgname=linux-$_flavor pkgver=7.2.0 # always sorts above the upstream aport (r0..r99) -pkgrel=101 +pkgrel=102 pkgdesc="Milos mainline kernel + Catcrafts FP6 bring-up carries (combined-stable)" arch="aarch64" _carch="arm64" @@ -57,7 +57,14 @@ prepare() { build() { unset LDFLAGS + # Build for the cores this image runs on: 4x Cortex-A520 + 4x Cortex-A720. + # The stock arm64 build gives the compiler no arch flag so one image boots + # any Armv8 board; this one boots the FP6. armv8.6-a is the highest level + # whose mandatory set the phone exposes (8.7 would assume WFxT, 9.x SVE2; + # neither is in its hwcaps); +fp16fml+aes+sha3+sm4 are the optional + # extensions it has, the same set `gcc -march=native` derives on the phone. make ARCH="$_carch" LLVM=1 \ + KCFLAGS="-march=armv8.6-a+fp16fml+aes+sha3+sm4 -mtune=cortex-a720" \ KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-$_flavor" } diff --git a/aports/temp/libcamera/APKBUILD b/aports/temp/libcamera/APKBUILD index adb297d..f7785b2 100644 --- a/aports/temp/libcamera/APKBUILD +++ b/aports/temp/libcamera/APKBUILD @@ -3,7 +3,7 @@ maintainer="Robert Mader " pkgname=libcamera _pkgver=0.7.2 pkgver=9999$_pkgver -pkgrel=9 +pkgrel=10 pkgdesc="Linux camera framework" url="https://libcamera.org/" arch="all" @@ -83,6 +83,13 @@ builddir="$srcdir/$pkgname-v$_pkgver" # gstreamer tests fail # manual strip because ipa .sign files depend on the file contents- have to re-sign after strip options="!strip !check" +# fp6-img: this package only ever runs on the FP6 (4x Cortex-A520 + 4x +# Cortex-A720), so tune for it. Spelled -march/-mtune, not -mcpu: GCC 16 +# expands -mcpu=cortex-a720 into a +sve-bitperm token that binutils 2.45 +# rejects at the assembler. +nosve+nomemtag: the FP6 exposes neither SVE nor +# MTE (no sve/mte hwcaps), and without them the code would SIGILL. +export CFLAGS="$CFLAGS -march=armv9.2-a+nosve+nomemtag -mtune=cortex-a720" +export CXXFLAGS="$CXXFLAGS -march=armv9.2-a+nosve+nomemtag -mtune=cortex-a720" case "$CARCH" in arm*|aarch64) diff --git a/aports/temp/libqmi/APKBUILD b/aports/temp/libqmi/APKBUILD index 317b7c8..520c5d9 100644 --- a/aports/temp/libqmi/APKBUILD +++ b/aports/temp/libqmi/APKBUILD @@ -7,7 +7,7 @@ maintainer="Achill Gilgenast " pkgname=libqmi pkgver=1.39.1_git20260808 _commit=30f3e998e6cbda364ac1bc73223de20561e6d555 -pkgrel=100 +pkgrel=101 pkgdesc="QMI modem protocol helper library" url="https://www.freedesktop.org/wiki/Software/libqmi" arch="all" @@ -27,6 +27,12 @@ makedepends=" # fp6-img: crossdirect breaks meson compiler introspection (cc1 spawn # failure), same as modemmanager; build under plain qemu. options="!pmb:crossdirect" +# fp6-img: this package only ever runs on the FP6 (4x Cortex-A520 + 4x +# Cortex-A720), so tune for it. Spelled -march/-mtune, not -mcpu: GCC 16 +# expands -mcpu=cortex-a720 into a +sve-bitperm token that binutils 2.45 +# rejects at the assembler. +nosve+nomemtag: the FP6 exposes neither SVE nor +# MTE (no sve/mte hwcaps), and without them the code would SIGILL. +export CFLAGS="$CFLAGS -march=armv9.2-a+nosve+nomemtag -mtune=cortex-a720" subpackages=" $pkgname-dev $pkgname-doc diff --git a/aports/temp/modemmanager/APKBUILD b/aports/temp/modemmanager/APKBUILD index 95d537e..0891e6b 100644 --- a/aports/temp/modemmanager/APKBUILD +++ b/aports/temp/modemmanager/APKBUILD @@ -5,7 +5,7 @@ maintainer="Achill Gilgenast " pkgname=modemmanager pkgver=1.25.95_git20260709 -pkgrel=100 +pkgrel=101 _commit=d776ea38d29ca472a12323c1d45002ee19a66f57 pkgdesc="ModemManager library" url="https://www.freedesktop.org/wiki/Software/ModemManager" @@ -42,6 +42,12 @@ checkdepends="glib-dev py3-gobject3 py3-dbus" # native builders, and none exercise the GNSS code our patches change) - # on-device validation is the real test. options="!pmb:crossdirect !check" +# fp6-img: this package only ever runs on the FP6 (4x Cortex-A520 + 4x +# Cortex-A720), so tune for it. Spelled -march/-mtune, not -mcpu: GCC 16 +# expands -mcpu=cortex-a720 into a +sve-bitperm token that binutils 2.45 +# rejects at the assembler. +nosve+nomemtag: the FP6 exposes neither SVE nor +# MTE (no sve/mte hwcaps), and without them the code would SIGILL. +export CFLAGS="$CFLAGS -march=armv9.2-a+nosve+nomemtag -mtune=cortex-a720" subpackages=" $pkgname-lang $pkgname-doc