mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-08-05 13:27:09 +02:00
197 lines
7.7 KiB
Plaintext
197 lines
7.7 KiB
Plaintext
# Contributor: Oliver Smith <ollieparanoid@postmarketos.org>
|
|
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
|
|
pkgname=linux-firmware
|
|
pkgver=20240811
|
|
pkgrel=0
|
|
pkgdesc="firmware files for linux"
|
|
url="https://git.kernel.org/?p=linux/kernel/git/firmware/linux-firmware.git;a=summary"
|
|
arch="all"
|
|
license="custom"
|
|
makedepends="libarchive-tools coreutils rdfind zstd"
|
|
provides="linux-firmware-any"
|
|
provider_priority=2
|
|
options="!strip !check !archcheck !spdx"
|
|
|
|
_rpi_bt=78d6a07730e2d20c035899521ab67726dc028e1c
|
|
_rpi_brcm=4b356e134e8333d073bd3802d767a825adec3807
|
|
|
|
source="https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/snapshot/linux-firmware-$pkgver.tar.gz
|
|
bluez-firmware-$_rpi_bt.tar.gz::https://github.com/RPi-Distro/bluez-firmware/archive/$_rpi_bt.tar.gz
|
|
brcm-firmware-$_rpi_brcm.tar.gz::https://github.com/RPi-Distro/firmware-nonfree/archive/$_rpi_brcm.tar.gz
|
|
"
|
|
|
|
# Put /lib/firmware/* folders in subpackages
|
|
_folders="3com acenic adaptec advansys airoha amd amd-ucode amdgpu amdtee
|
|
amlogic amphion ar3k arm ath10k ath11k ath12k ath6k ath9k_htc atmel atusb
|
|
av7110 bnx2 bnx2x brcm cadence cavium cirrus cis cnm cpia2 cxgb3 cxgb4 cypress
|
|
dabusb dpaa2 dsp56k e100 edgeport emi26 emi62 ene-ub6250 ess go7007 i915 imx
|
|
inside-secure intel isci ixp4xx kaweth keyspan keyspan_pda korg libertas
|
|
liquidio matrox mediatek mellanox meson microchip moxa mrvl mwl8k mwlwifi
|
|
myricom netronome nvidia nxp ositech powervr qca qcom qed qlogic r128 radeon
|
|
rockchip rsi rtl_bt rtl_nic rtlwifi rtw88 rtw89 sb16 slicoss sun sxg synaptics
|
|
tehuti ti ti-connectivity ti-keystone tigon ttusb-budget ueagle-atm vicam vxge
|
|
wfx xe yam yamaha"
|
|
|
|
subpackages="$pkgname-other::noarch $pkgname-none::noarch"
|
|
depends="linux-firmware-other=$pkgver-r$pkgrel"
|
|
for i in $_folders; do
|
|
subpackages="$pkgname-$i:_folder:noarch $subpackages"
|
|
depends="$pkgname-$i=$pkgver-r$pkgrel $depends"
|
|
done
|
|
subpackages="amd-ucode::noarch $subpackages"
|
|
|
|
# Add S5P MFC subpackage separately (it doesn't have its own folder)
|
|
subpackages="$pkgname-s5p-mfc:s5p_mfc:noarch $subpackages"
|
|
depends="$pkgname-s5p-mfc=$pkgver-r$pkgrel $depends"
|
|
|
|
prepare() {
|
|
default_prepare
|
|
}
|
|
|
|
package() {
|
|
## install upstream linux-firmare files
|
|
ZSTD_NBTHREADS=4 ZSTD_CLEVEL=19 make DESTDIR="$pkgdir" FIRMWAREDIR="/lib/firmware" install-zst
|
|
|
|
find "$pkgdir" \( -name '*.S' -or -name '*.asm' -or \
|
|
-name '*.c' -or -name '*.h' -or -name '*.pl' -or \
|
|
-name 'Makefile' \) -exec rm -- {} \;
|
|
|
|
## add original Pi Foundation bluetooth firmware files (supplement to upstream)
|
|
install -Dm 644 "$srcdir"/bluez-firmware-$_rpi_bt/debian/firmware/broadcom/*.hcd \
|
|
-t "$pkgdir"/lib/firmware/brcm
|
|
install -Dm 644 "$srcdir"/bluez-firmware-$_rpi_bt/debian/firmware/synaptics/*.hcd \
|
|
-t "$pkgdir"/lib/firmware/synaptics
|
|
# add symlinks from bluez-firmware.links
|
|
while read -r link_args; do
|
|
link_args="${link_args/ \/lib/ lib}"
|
|
link_args="${link_args/\/lib\/firmware\/brcm\//}"
|
|
( cd "$pkgdir" && ln -sfv ${link_args/\/lib\/firmware\/synaptics\//..\/synaptics\/} )
|
|
done < "$srcdir/bluez-firmware-$_rpi_bt/debian/bluez-firmware.links"
|
|
|
|
|
|
## add original Pi Foundation brcm wifi firmware files
|
|
# we can use either the -standard or -minimal 43455 file so use standard by default
|
|
ln -sfv cyfmac43455-sdio-standard.bin "$srcdir"/firmware-nonfree-$_rpi_brcm/debian/config/brcm80211/cypress/cyfmac43455-sdio.bin
|
|
|
|
# install deref's symlinks and copies a whole file, which makes rpi use duplicated
|
|
# variants specifically from downstream firmware (does not alter base upstream files)
|
|
install -Dm644 \
|
|
"$srcdir"/firmware-nonfree-$_rpi_brcm/debian/config/brcm80211/brcm/brcmfmac*raspberrypi* \
|
|
-t "$pkgdir"/lib/firmware/brcm
|
|
|
|
# but 43436/43436s/43456 is not in linux-firmware, so copy it normally
|
|
cp -a \
|
|
"$srcdir"/firmware-nonfree-$_rpi_brcm/debian/config/brcm80211/brcm/brcmfmac43456* \
|
|
"$srcdir"/firmware-nonfree-$_rpi_brcm/debian/config/brcm80211/brcm/brcmfmac43436* \
|
|
"$pkgdir"/lib/firmware/brcm
|
|
|
|
# Prevent recursive dependency between mrvl and libertas
|
|
ln -nfv "$pkgdir"/lib/firmware/mrvl/sd8688.bin.zst "$pkgdir"/lib/firmware/libertas/sd8688.bin.zst
|
|
ln -nfvs ../libertas/sd8688.bin.zst "$pkgdir"/lib/firmware/mrvl/sd8688.bin.zst
|
|
ln -nfvs sd8682_helper.bin.zst "$pkgdir"/lib/firmware/libertas/sd8688_helper.bin.zst
|
|
|
|
## symlinks for Visionfive1 riscv64 boards, till it fixed upstream
|
|
ln -sfv ../cypress/cyfmac43430-sdio.bin.zst "$pkgdir"/lib/firmware/brcm/brcmfmac43430-sdio.starfive,visionfive-v1.bin.zst
|
|
|
|
dangling=$(cd "$pkgdir" && find . -type l ! -exec test -e {} \; -print)
|
|
if [ -n "$dangling" ]; then
|
|
error "dangling symlinks:"
|
|
echo "$dangling" >&2
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
_folder() {
|
|
local folder=${subpkgname##linux-firmware-}
|
|
pkgdesc="firmware files for linux ($folder folder)"
|
|
depends=""
|
|
provides="linux-firmware-any"
|
|
provider_priority=1
|
|
|
|
local linkedbins= bin=
|
|
cd "$pkgdir"
|
|
# Move things that symlink into the target folder
|
|
# this fixes the -other deps, because
|
|
# - there are top-level files that are in -other (non-folder)
|
|
# - but, they are actually symlinks into .e.g -mediatek
|
|
# so, -other now depends on -mediatek due to symlink resolution
|
|
# this moves the symlinks along with the thing they symlink to.
|
|
linkedbins="$(find lib/firmware -maxdepth 1 -type l -exec sh -c "readlink \$1 | grep -qi $folder && echo \$1" - {} \;)"
|
|
|
|
if [ -n "$linkedbins" ]; then
|
|
for bin in $linkedbins; do
|
|
amove "$bin"
|
|
done
|
|
fi
|
|
|
|
# Move /lib/firmware/$folder (case insensitive)
|
|
amove "$(find lib/firmware -iname "$folder" -type d)"
|
|
}
|
|
|
|
other() {
|
|
# Requires subfolders to be split in subpackages
|
|
local leftover=""
|
|
local i
|
|
for i in "$pkgdir"/lib/firmware/*; do
|
|
[ -d "$i" ] && leftover="$leftover $(basename $i)"
|
|
done
|
|
if [ "$leftover" != "" ]; then
|
|
local fixed
|
|
error "Not all subfolders have been moved to subpackages!"
|
|
error "Fix this by adjusting _folders as follows:"
|
|
fixed="$(echo $_folders$leftover | tr " " "\n" | tr '[:upper:]' '[:lower:]' | sort)"
|
|
echo "_folders=\"$(printf "%s" "$fixed" | tr "\n" " ")\"" | fold -s
|
|
return 1
|
|
fi
|
|
|
|
# Move /lib/firmware (which doesn't have subfolders now)
|
|
pkgdesc="firmware files for linux (uncategorized)"
|
|
depends=""
|
|
provides="linux-firmware-any"
|
|
provider_priority=1
|
|
|
|
amove /lib
|
|
}
|
|
|
|
none() {
|
|
# dummy package with no firmware
|
|
pkgdesc="Empty linux firwmare package for those who does not need any firmware"
|
|
provides="linux-firmware-any"
|
|
provider_priority=1
|
|
depends=
|
|
mkdir -p "$subpkgdir"
|
|
}
|
|
|
|
ucode() {
|
|
pkgdesc="Microcode update files for AMD CPUs"
|
|
provider_priority=
|
|
provides=
|
|
depends=
|
|
|
|
# build ported from Arch Linux's PKGBUILD
|
|
mkdir -p "$subpkgdir"/boot
|
|
mkdir -p "$builddir"/kernel/x86/microcode
|
|
cat "$pkgdir"/lib/firmware/amd-ucode/microcode_amd*.bin > "$builddir"/kernel/x86/microcode/AuthenticAMD.bin
|
|
[ -n "$SOURCE_DATE_EPOCH" ] && touch -d @$SOURCE_DATE_EPOCH "$builddir"/kernel/x86/microcode/AuthenticAMD.bin
|
|
cd "$builddir" && echo kernel/x86/microcode/AuthenticAMD.bin |
|
|
bsdtar --uid 0 --gid 0 -cnf - -T - |
|
|
bsdtar --null -cf - --format=newc @- > "$subpkgdir"/boot/amd-ucode.img
|
|
}
|
|
|
|
s5p_mfc() {
|
|
# This needs its own function as the files are not in a directory,
|
|
# but rather loose in the main directory.
|
|
pkgdesc="firmware files for linux (S5P MFC firmware)"
|
|
provides="linux-firmware-any"
|
|
provider_priority=1
|
|
depends=
|
|
|
|
amove /lib/firmware/s5p-mfc*.fw.zst
|
|
}
|
|
|
|
sha512sums="
|
|
d7067f38d6a0b59042438cb147f16b71e2334e46bfdc9fba58131a215b834dce07c8e808debf878f2eae28690a51121ba0b6b0f3734b0de0113c1b4ef6ccd9a9 linux-firmware-20240811.tar.gz
|
|
d5182840ba3c1a12e5d8afa078fa334d8c1a2e0e5ca33fa675e64ac1ac26f732a588ac2c7451a4ccf739121268bc56b2f7f22d66cc5344ff108e39e410886419 bluez-firmware-78d6a07730e2d20c035899521ab67726dc028e1c.tar.gz
|
|
790ac2a68fef50fe01969e7269f9f9ee024b4b26bf3e1ffe5d5ced11d1c8bc995858f7acae3c80d8d212812cd208f112c00e159038f5ba92eeaa23384963ba8b brcm-firmware-4b356e134e8333d073bd3802d767a825adec3807.tar.gz
|
|
"
|