#!/bin/sh # Cross-compile Linux 6.12.1-msm8916 QDSP6/Q6Voice audio modules and MSM8905/MSM8909 DTBs set -eu BASE_DIR="$(cd "$(dirname "$0")/.." && pwd)" ROOTFS_DIR="${ROOTFS_DIR:-$BASE_DIR/rootfs}" if [ -e "$ROOTFS_DIR" ]; then ROOTFS_DIR="$(realpath "$ROOTFS_DIR")" fi KERNEL_TAG="v6.12.1-msm8916" KERNEL_URL="https://github.com/msm8916-mainline/linux/archive/refs/tags/${KERNEL_TAG}.tar.gz" KERNEL_CACHE_DIR="${KERNEL_CACHE_DIR:-/tmp/linux-msm8916}" DOCKER_CACHE_ARGS="" if [ -d "$KERNEL_CACHE_DIR" ]; then DOCKER_CACHE_ARGS="-v $KERNEL_CACHE_DIR:/kcache" fi # shellcheck disable=SC2086 exec docker run --rm --network=host \ -e HOST_UID="$(id -u)" \ -e HOST_GID="$(id -g)" \ -e KERNEL_TAG="$KERNEL_TAG" \ -e KERNEL_URL="$KERNEL_URL" \ -v "$BASE_DIR:/bananarchy" \ -v "$ROOTFS_DIR:/target-rootfs:ro" \ $DOCKER_CACHE_ARGS \ alpine:3.24 sh -eu -c ' cat > /etc/apk/repositories </dev/null; then echo "[2/5] Applying Bananarchy QDSP6/Q6Voice and MSM8905/MSM8909 DTS patches..." patch -p1 < /bananarchy/patches/kernel/0001-msm8909-qdsp6-voice-sound-nokia-argon-6.12.patch fi if [ ! -f include/config/auto.conf ]; then echo "[3/5] Preparing kernel configuration..." cp /bananarchy/patches/kernel/config-bananarchy-msm8909.armv7 .config make ARCH=arm CROSS_COMPILE=armv7-alpine-linux-musleabihf- olddefconfig make ARCH=arm CROSS_COMPILE=armv7-alpine-linux-musleabihf- modules_prepare fi else mkdir -p /tmp/kbuild CACHE_TAR="/bananarchy/prebuilt/kernel-6.12.1-msm8916/linux-${KERNEL_TAG#v}.tar.gz" cd /tmp/kbuild if [ -f "$CACHE_TAR" ] && [ "$(wc -c < "$CACHE_TAR")" -gt 1000000 ]; then echo "[1/5] Using cached Linux ${KERNEL_TAG} tarball..." cp "$CACHE_TAR" linux.tar.gz else echo "[1/5] Downloading Linux ${KERNEL_TAG}..." curl -f -sSL "$KERNEL_URL" -o linux.tar.gz cp linux.tar.gz "$CACHE_TAR" || true fi tar -xzf linux.tar.gz cd "linux-${KERNEL_TAG#v}" echo "[2/5] Applying Bananarchy QDSP6/Q6Voice and MSM8905/MSM8909 DTS patches..." patch -p1 < /bananarchy/patches/kernel/0001-msm8909-qdsp6-voice-sound-nokia-argon-6.12.patch echo "[3/5] Preparing kernel configuration and Module.symvers..." cp /bananarchy/patches/kernel/config-bananarchy-msm8909.armv7 .config make ARCH=arm CROSS_COMPILE=armv7-alpine-linux-musleabihf- olddefconfig make ARCH=arm CROSS_COMPILE=armv7-alpine-linux-musleabihf- modules_prepare fi echo "[4/5] Building QDSP6/Q6Voice sound modules, torch LED module, camera module, and Nokia MSM8905/MSM8909 DTBs..." make ARCH=arm CROSS_COMPILE=armv7-alpine-linux-musleabihf- -j"$(nproc)" \ KBUILD_MODPOST_WARN=1 M=sound/soc/qcom/qdsp6 modules make ARCH=arm CROSS_COMPILE=armv7-alpine-linux-musleabihf- -j"$(nproc)" \ KBUILD_MODPOST_WARN=1 M=/bananarchy/src/leds-msm8905-torch modules make ARCH=arm CROSS_COMPILE=armv7-alpine-linux-musleabihf- -j"$(nproc)" \ KBUILD_MODPOST_WARN=1 M=/bananarchy/src/msm8905-cam modules make ARCH=arm CROSS_COMPILE=armv7-alpine-linux-musleabihf- -j"$(nproc)" \ qcom/qcom-msm8905-nokia-argon.dtb \ qcom/qcom-msm8909-nokia-sparkler.dtb \ qcom/qcom-msm8909-nokia-leo.dtb echo "[5/5] Exporting built modules and DTBs to prebuilt/kernel-6.12.1-msm8916..." mkdir -p /bananarchy/prebuilt/kernel-6.12.1-msm8916/qdsp6 \ /bananarchy/prebuilt/kernel-6.12.1-msm8916/leds \ /bananarchy/prebuilt/kernel-6.12.1-msm8916/camera \ /bananarchy/prebuilt/kernel-6.12.1-msm8916/dtbs cp -a sound/soc/qcom/qdsp6/*.ko /bananarchy/prebuilt/kernel-6.12.1-msm8916/qdsp6/ cp -a /bananarchy/src/leds-msm8905-torch/leds-msm8905-torch.ko \ /bananarchy/prebuilt/kernel-6.12.1-msm8916/leds/ cp -a /bananarchy/src/msm8905-cam/msm8905-cam.ko \ /bananarchy/prebuilt/kernel-6.12.1-msm8916/camera/ armv7-alpine-linux-musleabihf-strip --strip-unneeded \ /bananarchy/prebuilt/kernel-6.12.1-msm8916/qdsp6/*.ko \ /bananarchy/prebuilt/kernel-6.12.1-msm8916/leds/*.ko \ /bananarchy/prebuilt/kernel-6.12.1-msm8916/camera/*.ko for ko in \ /bananarchy/prebuilt/kernel-6.12.1-msm8916/qdsp6/*.ko \ /bananarchy/prebuilt/kernel-6.12.1-msm8916/leds/*.ko \ /bananarchy/prebuilt/kernel-6.12.1-msm8916/camera/*.ko; do zstd -f -q -k "$ko" -o "${ko}.zst" done make ARCH=arm CROSS_COMPILE=armv7-alpine-linux-musleabihf- \ M=/bananarchy/src/leds-msm8905-torch clean make ARCH=arm CROSS_COMPILE=armv7-alpine-linux-musleabihf- \ M=/bananarchy/src/msm8905-cam clean cp -a arch/arm/boot/dts/qcom/qcom-msm8905-nokia-argon.dtb \ arch/arm/boot/dts/qcom/qcom-msm8909-nokia-sparkler.dtb \ arch/arm/boot/dts/qcom/qcom-msm8909-nokia-leo.dtb \ /bananarchy/prebuilt/kernel-6.12.1-msm8916/dtbs/ dtc -I dts -O dtb -o /bananarchy/prebuilt/kernel-6.12.1-msm8916/dtbs/qcom-msm8905-nokia-beatles.dtb \ /bananarchy/devices/nokia-beatles/qcom-msm8905-nokia-beatles.dts 2>/dev/null dtc -I dts -O dtb -o /bananarchy/prebuilt/kernel-6.12.1-msm8916/dtbs/qcom-msm8905-nokia-coconut.dtb \ /bananarchy/devices/nokia-tough/qcom-msm8905-nokia-coconut.dts 2>/dev/null chown -R "$HOST_UID:$HOST_GID" /bananarchy/prebuilt/kernel-6.12.1-msm8916 \ /bananarchy/src/leds-msm8905-torch \ /bananarchy/src/msm8905-cam echo "Kernel audio modules, torch LED module, camera module, and DTBs built successfully." '