256 lines
6.7 KiB
Bash
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
|
|
}
|