File PKGBUILD of Package linux-pf-silvermont

# Maintainer: Oleksandr Natalenko aka post-factum <oleksandr@natalenko.name>

_basename="linux-pf"
_suffix="silvermont"
pkgname=(
		"${_basename}-${_suffix}" "${_basename}-headers-${_suffix}"
	)
_linux_major=5
_linux_minor=14
_release=2
_basever=${_linux_major}.${_linux_minor}.0-pf${_release}
pkgver=${_linux_major}.${_linux_minor}.${_release}
pkgrel=2
pkgdesc="pf-kernel"
arch=(x86_64)
url="https://gitlab.com/post-factum/pf-kernel/wikis/README"
license=(GPL2)
makedepends=(bc kmod libelf xmlto cpio perl tar xz zstd python)
options=('!strip')
_srcname="linux-${_linux_major}.${_linux_minor}"
source=(
		"linux-${_linux_major}.${_linux_minor}.tar.xz::https://cdn.kernel.org/pub/linux/kernel/v${_linux_major}.x/linux-${_linux_major}.${_linux_minor}.tar.xz"
		"patch-${_linux_major}.${_linux_minor}-pf${_release}.diff::https://github.com/pfactum/pf-kernel/compare/v${_linux_major}.${_linux_minor}...pf-${_linux_major}.${_linux_minor}.diff"
		"config_arch_${_suffix}"
	)

sha256sums=('7e068b5e0d26a62b10e5320b25dce57588cbbc6f781c090442138c9c9c3271b2'
            '520357e5f2521ab11c7f76cad813a6e044c16b80b4c06c9ce4ad7c4b117e140b'
            'f4a500e44b48cf4a2640f765524873b4f2edb4319dacca24b9f134982ea9d8bc')

export KBUILD_BUILD_HOST=archlinux
export KBUILD_BUILD_USER=${_basename}
export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})"

prepare() {
	cd "${_srcname}"

	echo "Applying ${pkgdesc} patch..."
	patch -Np1 -i ${srcdir}/patch-${_linux_major}.${_linux_minor}-pf${_release}.diff

	echo "Setting config..."
	cp "../config_arch_${_suffix}" .config
	make olddefconfig

	make -s kernelrelease >version
	echo "Prepared ${pkgdesc} version $(<version)"
}

build() {
	cd "${_srcname}"

	__nthreads=$(($(nproc) + 1))
	make -j${__nthreads} all
}

_package() {
	pkgdesc="The ${pkgdesc} and modules"
	depends=(coreutils kmod initramfs)
	optdepends=('crda: to set the correct wireless channels of your country'
				'ksmbd-tools: userspace tools for the ksmbd kernel SMB server'
				'linux-firmware: firmware images needed for some devices'
				'uksmd: userspace KSM helper daemon'
				'v4l2loopback-utils: v4l2-loopback device utilities')
	provides=(linux-pf KSMBD-MODULE NTFS3-MODULE UKSMD-BUILTIN V4L2LOOPBACK-MODULE VIRTUALBOX-GUEST-MODULES WIREGUARD-MODULE)
	replaces=(linux-pf ksmbd-dkms ntfs3-dkms v4l2loopback-dkms virtualbox-guest-modules-arch wireguard-arch)

	cd "${_srcname}"
	local modulesdir="${pkgdir}/usr/lib/modules/${_basever}"

	echo "Installing boot image..."
	# systemd expects to find the kernel here to allow hibernation
	# https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344
	install -Dm644 "$(make -s image_name)" "${modulesdir}/vmlinuz"

	# Used by mkinitcpio to name the kernel
	echo "${_basename}" | install -Dm644 /dev/stdin "${modulesdir}/pkgbase"

	echo "Installing modules..."
	make INSTALL_MOD_PATH="${pkgdir}/usr" modules_install

	# remove build and source links
	rm "${modulesdir}"/{source,build}
}

_package-headers() {
	pkgdesc="Headers and scripts for building modules for the ${pkgdesc}"
	depends=(pahole)

	cd "${_srcname}"
	local builddir="${pkgdir}/usr/lib/modules/$(<version)/build"

	echo "Installing build files..."
	install -Dt "${builddir}" -m644 .config Makefile Module.symvers System.map \
		version vmlinux
	install -Dt "${builddir}/kernel" -m644 kernel/Makefile
	install -Dt "${builddir}/arch/x86" -m644 arch/x86/Makefile
	cp -t "${builddir}" -a scripts

	# add objtool for external module building and enabled VALIDATION_STACK option
	install -Dt "${builddir}/tools/objtool" tools/objtool/objtool

	# add xfs and shmem for aufs building
	mkdir -p "${builddir}"/{fs/xfs,mm}

	echo "Installing headers..."
	cp -t "${builddir}" -a include
	cp -t "${builddir}/arch/x86" -a arch/x86/include
	install -Dt "${builddir}/arch/x86/kernel" -m644 arch/x86/kernel/asm-offsets.s

	install -Dt "${builddir}/drivers/md" -m644 drivers/md/*.h
	install -Dt "${builddir}/net/mac80211" -m644 net/mac80211/*.h

	# https://bugs.archlinux.org/task/13146
	install -Dt "${builddir}/drivers/media/i2c" -m644 drivers/media/i2c/msp3400-driver.h

	# https://bugs.archlinux.org/task/20402
	install -Dt "${builddir}/drivers/media/usb/dvb-usb" -m644 drivers/media/usb/dvb-usb/*.h
	install -Dt "${builddir}/drivers/media/dvb-frontends" -m644 drivers/media/dvb-frontends/*.h
	install -Dt "${builddir}/drivers/media/tuners" -m644 drivers/media/tuners/*.h

	# https://bugs.archlinux.org/task/71392
	install -Dt "${builddir}/drivers/iio/common/hid-sensors" -m644 drivers/iio/common/hid-sensors/*.h

	echo "Installing Kconfig files..."
	find . -name 'Kconfig*' -exec install -Dm644 {} "${builddir}/{}" \;

	# remove unneeded architectures
	local arch
	for arch in "${builddir}"/arch/*/; do
		[[ ${arch} = */x86/ ]] && continue
		echo "Removing $(basename "${arch}")"
		rm -r "${arch}"
	done

	echo "Removing documentation..."
	rm -r "${builddir}/Documentation"

	echo "Removing broken symlinks..."
	find -L "${builddir}" -type l -printf 'Removing %P\n' -delete

	echo "Removing loose objects..."
	find "${builddir}" -type f -name '*.o' -printf 'Removing %P\n' -delete

	echo "Stripping build tools..."
	local file
	while read -rd '' file; do
		case "$(file -bi "${file}")" in
			application/x-sharedlib\;*)      # Libraries (.so)
				strip -v $STRIP_SHARED "${file}" ;;
			application/x-archive\;*)        # Libraries (.a)
				strip -v $STRIP_STATIC "${file}" ;;
			application/x-executable\;*)     # Binaries
				strip -v $STRIP_BINARIES "${file}" ;;
			application/x-pie-executable\;*) # Relocatable binaries
				strip -v $STRIP_SHARED "${file}" ;;
		esac
	done < <(find "${builddir}" -type f -perm -u+x ! -name vmlinux -print0)

	echo "Adding symlink..."
	mkdir -p "${pkgdir}/usr/src"
	ln -sr "${builddir}" "$pkgdir/usr/src/${_basename}"
}

for _p in ${pkgname[@]}; do
	_i=$(echo ${_p} | sed "s/-${_suffix}//g")
	eval "package_${_i}-${_suffix}() {
		$(declare -f "_package${_i#${_basename}}")
		_package${_i#${_basename}}
	}"
done
openSUSE Build Service is sponsored by