Files
packages/core/linux-firmware/build.sh
T
2026-03-21 12:43:00 -05:00

256 lines
6.7 KiB
Bash

#!/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
}