#!/bin/sh set -eu other_destdir() { printf '%s\n' "${DEPOT_SUBDESTDIR_LINUX_FIRMWARE_OTHER:?build.sh: DEPOT_SUBDESTDIR_LINUX_FIRMWARE_OTHER is not set}" } require_destdir() { printf '%s\n' "${DESTDIR:?build.sh: DESTDIR is not set}" } move_from_other() { pkg=$1 shift srcroot=$(other_destdir) destroot=$(require_destdir) moved=0 for pattern in "$@"; do set -- "$srcroot"/$pattern for src in "$@"; do [ -e "$src" ] || [ -L "$src" ] || continue rel=${src#$srcroot/} dst=$destroot/$rel mkdir -p "$(dirname "$dst")" rm -rf "$dst" mv "$src" "$dst" moved=1 done done [ "$moved" -eq 1 ] || { echo "build.sh: no matches moved from linux-firmware-other for $pkg" >&2 exit 1 } } dedup_current_firmware() { destdir=$(require_destdir) [ -d "$destdir/usr/lib/firmware" ] || return 0 make -C . \ DESTDIR="$destdir" \ FIRMWAREDIR=/usr/lib/firmware \ dedup } build_amd_ucode_img() { mkdir -p kernel/x86/microcode rm -f kernel/x86/microcode/AuthenticAMD.bin amd-ucode.img find amd-ucode -maxdepth 1 -type f -name 'microcode_amd*.bin' | LC_ALL=C sort | while IFS= read -r blob; do cat "$blob" >> kernel/x86/microcode/AuthenticAMD.bin done [ -s kernel/x86/microcode/AuthenticAMD.bin ] || { echo "build.sh: failed to assemble AuthenticAMD.bin" >&2 exit 1 } printf '%s\0' 'kernel/x86/microcode/AuthenticAMD.bin' | cpio --null -o -H newc --quiet > amd-ucode.img } install_whence_payload() { destdir=$(require_destdir) mkdir -p "$destdir/usr/share/licenses/linux-firmware" for file in WHENCE LICENSE* LICENCE* COPYING*; do [ -e "$file" ] || continue install -m644 "$file" "$destdir/usr/share/licenses/linux-firmware/${file##*/}" done } depot_build() { build_amd_ucode_img } depot_install_linux_firmware_whence() { install_whence_payload } depot_install_linux_firmware_other() { destdir=$(require_destdir) env ZSTD_CLEVEL=19 MAKEFLAGS= \ make -C . \ DESTDIR="$destdir" \ FIRMWAREDIR=/usr/lib/firmware \ install-zst } depot_install_amd_ucode() { destdir=$(require_destdir) move_from_other amd-ucode \ 'usr/lib/firmware/amd-ucode' \ 'usr/lib/firmware/amd-ucode/*' dedup_current_firmware install -Dm644 amd-ucode.img "$destdir/boot/amd-ucode.img" } depot_install_linux_firmware_amdgpu() { move_from_other linux-firmware-amdgpu \ 'usr/lib/firmware/amdgpu' \ 'usr/lib/firmware/amdgpu/*' dedup_current_firmware } depot_install_linux_firmware_atheros() { move_from_other linux-firmware-atheros \ 'usr/lib/firmware/ar[0-9]*' \ 'usr/lib/firmware/ath*' \ 'usr/lib/firmware/carl9170*' \ 'usr/lib/firmware/htc_*' \ 'usr/lib/firmware/qca' \ 'usr/lib/firmware/qca/*' \ 'usr/lib/firmware/wil6210*' dedup_current_firmware } depot_install_linux_firmware_broadcom() { move_from_other linux-firmware-broadcom \ 'usr/lib/firmware/bnx2*' \ 'usr/lib/firmware/brcm' \ 'usr/lib/firmware/brcm/*' \ 'usr/lib/firmware/cypress' \ 'usr/lib/firmware/cypress/*' \ 'usr/lib/firmware/tigon' dedup_current_firmware } depot_install_linux_firmware_cirrus() { move_from_other linux-firmware-cirrus \ 'usr/lib/firmware/cirrus' \ 'usr/lib/firmware/cirrus/*' \ 'usr/lib/firmware/cs42l43*' dedup_current_firmware } depot_install_linux_firmware_intel() { move_from_other linux-firmware-intel \ 'usr/lib/firmware/e100' \ 'usr/lib/firmware/e100/*' \ 'usr/lib/firmware/hfi1_*' \ 'usr/lib/firmware/i915' \ 'usr/lib/firmware/i915/*' \ 'usr/lib/firmware/intel' \ 'usr/lib/firmware/intel/*' \ 'usr/lib/firmware/isci' \ 'usr/lib/firmware/isci/*' \ 'usr/lib/firmware/iwlwifi*' \ 'usr/lib/firmware/ixp4xx' \ 'usr/lib/firmware/ixp4xx/*' \ 'usr/lib/firmware/qat_*' \ 'usr/lib/firmware/xe' \ 'usr/lib/firmware/xe/*' dedup_current_firmware } depot_install_linux_firmware_liquidio() { move_from_other linux-firmware-liquidio \ 'usr/lib/firmware/liquidio' \ 'usr/lib/firmware/liquidio/*' dedup_current_firmware } depot_install_linux_firmware_marvell() { move_from_other linux-firmware-marvell \ 'usr/lib/firmware/libertas' \ 'usr/lib/firmware/libertas/*' \ 'usr/lib/firmware/mwl8k' \ 'usr/lib/firmware/mwl8k/*' \ 'usr/lib/firmware/mwlwifi' \ 'usr/lib/firmware/mwlwifi/*' \ 'usr/lib/firmware/mrvl' \ 'usr/lib/firmware/mrvl/*' dedup_current_firmware } depot_install_linux_firmware_mediatek() { move_from_other linux-firmware-mediatek \ 'usr/lib/firmware/mediatek' \ 'usr/lib/firmware/mediatek/*' \ 'usr/lib/firmware/mt7*' \ 'usr/lib/firmware/vpu_*' \ 'usr/lib/firmware/rt[237]*' dedup_current_firmware } depot_install_linux_firmware_mellanox() { move_from_other linux-firmware-mellanox \ 'usr/lib/firmware/mellanox' \ 'usr/lib/firmware/mellanox/*' dedup_current_firmware } depot_install_linux_firmware_nfp() { move_from_other linux-firmware-nfp \ 'usr/lib/firmware/netronome' \ 'usr/lib/firmware/netronome/*' dedup_current_firmware } depot_install_linux_firmware_nvidia() { move_from_other linux-firmware-nvidia \ 'usr/lib/firmware/nvidia' \ 'usr/lib/firmware/nvidia/*' dedup_current_firmware } depot_install_linux_firmware_qcom() { move_from_other linux-firmware-qcom \ 'usr/lib/firmware/qcom' \ 'usr/lib/firmware/qcom/*' \ 'usr/lib/firmware/a300_*' dedup_current_firmware } depot_install_linux_firmware_qlogic() { move_from_other linux-firmware-qlogic \ 'usr/lib/firmware/qlogic' \ 'usr/lib/firmware/qlogic/*' \ 'usr/lib/firmware/qed' \ 'usr/lib/firmware/qed/*' \ 'usr/lib/firmware/ql2???_*' \ 'usr/lib/firmware/cbfw-*' \ 'usr/lib/firmware/ctfw-*' \ 'usr/lib/firmware/ct2fw-*' dedup_current_firmware } depot_install_linux_firmware_radeon() { move_from_other linux-firmware-radeon \ 'usr/lib/firmware/radeon' \ 'usr/lib/firmware/radeon/*' dedup_current_firmware } depot_install_linux_firmware_realtek() { move_from_other linux-firmware-realtek \ 'usr/lib/firmware/realtek' \ 'usr/lib/firmware/realtek/*' \ 'usr/lib/firmware/rtlwifi' \ 'usr/lib/firmware/rtlwifi/*' \ 'usr/lib/firmware/rtw8*' \ 'usr/lib/firmware/rtl_*' dedup_current_firmware }