diff options
Diffstat (limited to 'PKGBUILD')
-rw-r--r-- | PKGBUILD | 352 |
1 files changed, 222 insertions, 130 deletions
@@ -1,148 +1,235 @@ -# Maintainer: Dan Ziemba <zman0900@gmail.com> -# Maintainer: Mark Weiman <markzz@archlinux.net> - -pkgbase=linux-vfio -_srcver=5.3.7-arch1 -pkgver=${_srcver//-/.} +# Maintainer: +# Contributor: éclairevoyant +# Contributor: Mark Weiman (markzz) <mark.weiman@markzz.com> +# Contributor: Katelyn Schiesser (slowbro) <katelyn.schiesser@gmail.com> +# Contributor: Dan Ziemba <zman0900@gmail.com> + +## options +: ${_build_arch_patch:=true} + +: ${_build_clang:=false} +: ${_build_tracer:=true} +: ${_build_numa:=true} + +: ${_build_vfio:=true} +: ${_build_lts:=false} +: ${_build_v3:=false} + +unset _pkgtype +[[ "${_build_vfio::1}" == "t" ]] && _pkgtype+="-vfio" +[[ "${_build_lts::1}" == "t" ]] && _pkgtype+="-lts" +[[ "${_build_v3::1}" == "t" ]] && _pkgtype+="-v3" + +## basic info +_gitname="linux" +_pkgname="$_gitname${_pkgtype:-}" +pkgbase="$_pkgname" +pkgver=6.8.9 pkgrel=1 -arch=(x86_64) -url="https://git.archlinux.org/linux.git/log/?h=v$_srcver" -license=(GPL2) -makedepends=(xmlto kmod inetutils bc libelf git) +pkgdesc='Linux' +url='https://www.kernel.org' +license=('GPL-2.0-or-later') +arch=('x86_64') + +makedepends=( + bc + cpio + gettext + libelf + pahole + perl + python + tar + xz + + # htmldocs + graphviz + imagemagick + python-sphinx + python-yaml + texlive-latexextra +) options=('!strip') -_srcname=archlinux-linux -source=( - "$_srcname::git+https://git.archlinux.org/linux.git?signed#tag=v$_srcver" - config # the main kernel config file - 60-linux.hook # pacman hook for depmod - 90-linux.hook # pacman hook for initramfs regeneration - linux.preset # standard config files for mkinitcpio ramdisk - add-acs-overrides.patch # patch for acs overrides - i915-vga-arbiter.patch # patch for i915 VGA arbiter +_srcname=linux-$pkgver +source+=( + https://cdn.kernel.org/pub/linux/kernel/v${pkgver%%.*}.x/${_srcname}.tar.{xz,sign} + "config-$pkgver"::https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/raw/main/config +) +sha256sums+=( + 'f905f1238ea7a8e85314bacf283302e8097006010d25fcea726d0de0ea5bc9b6' + 'SKIP' + 'SKIP' ) validpgpkeys=( - 'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds - '647F28654894E3BD457199BE38DBBDC86092693E' # Greg Kroah-Hartman - '8218F88849AAC522E94CF470A5E9288C4FA415FA' # Jan Alexander Steffens (heftig) + ABAF11C65A2970B130ABE3C479BE3E4300411886 # Linus Torvalds + 647F28654894E3BD457199BE38DBBDC86092693E # Greg Kroah-Hartman + 83BC8889351B5DEBBB68416EB8AC08600F108CDF # Jan Alexander Steffens (heftig) ) -sha256sums=('SKIP' - '7d09d1d79a4ecb82502b4483cf989ede3f643e05613de45e12563dfe85d80423' - 'ae2e95db94ef7176207c690224169594d49445e04249d2499e9d2fbc117a0b21' - '75f99f5239e03238f88d1a834c50043ec32b1dc568f2cc291b07d04718483919' - 'ad6344badc91ad0630caacde83f7f9b97276f80d26a20619a87952be65492c65' - 'dbf4ac4b873ce6972e63b78d74ddba18f2701716163bb7f4b4fe5e909346a6e1' - '3d711ad5eda51c42b20575a66683cd416fe7a02a3162d8a7107f2b2c82d328ce') -_kernelname=${pkgbase#linux} -: ${_kernelname:=-ARCH} +if [[ ${_build_vfio::1} == "t" ]]; then + source+=( + 1001-6.8.0-add-acs-overrides.patch # updated from https://lkml.org/lkml/2013/5/30/513 + 1002-6.8.0-i915-vga-arbiter.patch # updated from https://lkml.org/lkml/2014/5/9/517 + ) + sha256sums+=( + 'b35c26d5dc31fb9cfac68292de7b1ee8ca93b4647e4958efc77e2c77f586f1f2' + '966c15da4044a9a3b5f9d362c2cf08303f1265ad4489c9835c95973b71255d07' + ) +fi + +if [[ ${_build_arch_patch::1} == "t" ]]; then + _srctag=v${pkgver}-arch1 + _dl_url_arch='https://github.com/archlinux/linux' + + # if no new patch, use previous one + if grep 404 <(curl -sI $_dl_url_arch/releases/download/$_srctag/linux-$_srctag.patch.zst | head -1) > /dev/null; then + _srctag=v${pkgver::4}$((${pkgver##*.} - 1))-arch1 + fi + + source+=( + $_dl_url_arch/releases/download/$_srctag/linux-$_srctag.patch.zst{,.sig} + ) + sha256sums+=( + 'SKIP' + 'SKIP' + ) +fi + +if [[ ${_build_clang::1} == "t" ]]; then + makedepends+=(clang llvm lld) + + export LLVM=1 + export LLVM_IAS=1 +fi + +if [[ "${_build_v3::1}" == "t" ]]; then + export KCFLAGS="-march=x86-64-v3 -mtune=generic -O3" + export HOSTCFLAGS="-march=x86-64-v3 -mtune=generic -O3" + export HOSTCXXFLAGS="-march=x86-64-v3 -mtune=generic -O3" +fi + +export KBUILD_BUILD_HOST=archlinux +export KBUILD_BUILD_USER=$pkgbase +export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})" + +_prepare_extra() { + # remove extra version suffix + sed -E 's&^(EXTRAVERSION =).*$&\1&' -i Makefile + + if [[ "${_build_clang::1}" == "t" ]]; then + scripts/config --disable LTO_CLANG_FULL + scripts/config --enable LTO_CLANG_THIN + fi + + if [[ "${_build_clang::1}" == "t" ]] || [[ "${_build_tracer::1}" != "t" ]]; then + echo "Disabling Tracers..." + scripts/config \ + --disable CONFIG_FTRACE \ + --disable CONFIG_FUNCTION_TRACER \ + --disable CONFIG_STACK_TRACER + fi + + if [[ "${_build_numa::1}" != "t" ]]; then + echo "Disabling NUMA..." + scripts/config --disable CONFIG_NUMA + fi +} prepare() { + cp "config-$pkgver" "config" + cd $_srcname - msg2 "Setting version..." - scripts/setlocalversion --save-scmversion + echo "Setting version..." echo "-$pkgrel" > localversion.10-pkgrel - echo "$_kernelname" > localversion.20-pkgname + echo "${pkgbase#linux}" > localversion.20-pkgname local src for src in "${source[@]}"; do src="${src%%::*}" src="${src##*/}" + src="${src%.zst}" [[ $src = *.patch ]] || continue - msg2 "Applying patch $src..." - patch -Np1 < "../$src" + echo + echo "Applying patch $src..." + patch -Np1 -F100 -i "../$src" done - msg2 "Setting config..." + echo "Setting config..." cp ../config .config make olddefconfig + diff -u ../config .config || : - make -s kernelrelease > ../version - msg2 "Prepared %s version %s" "$pkgbase" "$(<../version)" + _prepare_extra + + make -s kernelrelease > version + echo "Prepared $pkgbase version $(< version)" } build() { cd $_srcname - make bzImage modules + make all + make -C tools/bpf/bpftool vmlinux.h feature-clang-bpf-co-re=1 + #make htmldocs } _package() { - pkgdesc="The ${pkgbase/linux/Linux} kernel and modules" - [[ $pkgbase = linux ]] && groups=(base) - depends=(coreutils linux-firmware kmod mkinitcpio) - optdepends=('crda: to set the correct wireless channels of your country') - backup=("etc/mkinitcpio.d/$pkgbase.preset") - install=linux.install - - local kernver="$(<version)" + pkgdesc="The $pkgdesc kernel and modules (ACS override and i915 VGA arbiter patches)" + depends=( + coreutils + initramfs + kmod + ) + optdepends=( + 'wireless-regdb: to set the correct wireless channels of your country' + 'linux-firmware: firmware images needed for some devices' + ) + provides=( + KSMBD-MODULE + VIRTUALBOX-GUEST-MODULES + WIREGUARD-MODULE + ) cd $_srcname + local modulesdir="$pkgdir/usr/lib/modules/$(< version)" + + 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 "$pkgbase" | install -Dm644 /dev/stdin "$modulesdir/pkgbase" + + echo "Installing modules..." + ZSTD_CLEVEL=19 make INSTALL_MOD_PATH="$pkgdir/usr" INSTALL_MOD_STRIP=1 \ + DEPMOD=/doesnt/exist modules_install # Suppress depmod - msg2 "Installing boot image..." - install -Dm644 "$(make -s image_name)" "$pkgdir/boot/vmlinuz-$pkgbase" - - msg2 "Installing modules..." - local modulesdir="$pkgdir/usr/lib/modules/$kernver" - mkdir -p "$modulesdir" - make INSTALL_MOD_PATH="$pkgdir/usr" modules_install - - # a place for external modules, - # with version file for building modules and running depmod from hook - local extramodules="extramodules$_kernelname" - local extradir="$pkgdir/usr/lib/modules/$extramodules" - install -Dt "$extradir" -m644 ../version - ln -sr "$extradir" "$modulesdir/extramodules" - - # remove build and source links - rm "$modulesdir"/{source,build} - - msg2 "Installing hooks..." - # sed expression for following substitutions - local subst=" - s|%PKGBASE%|$pkgbase|g - s|%KERNVER%|$kernver|g - s|%EXTRAMODULES%|$extramodules|g - " - - # hack to allow specifying an initially nonexisting install file - sed "$subst" "$startdir/$install" > "$startdir/$install.pkg" - true && install=$install.pkg - - # fill in mkinitcpio preset and pacman hooks - sed "$subst" ../linux.preset | install -Dm644 /dev/stdin \ - "$pkgdir/etc/mkinitcpio.d/$pkgbase.preset" - sed "$subst" ../60-linux.hook | install -Dm644 /dev/stdin \ - "$pkgdir/usr/share/libalpm/hooks/60-$pkgbase.hook" - sed "$subst" ../90-linux.hook | install -Dm644 /dev/stdin \ - "$pkgdir/usr/share/libalpm/hooks/90-$pkgbase.hook" - - msg2 "Fixing permissions..." - chmod -Rc u=rwX,go=rX "$pkgdir" + # remove build link + rm "$modulesdir"/build } _package-headers() { - pkgdesc="Header files and scripts for building modules for ${pkgbase/linux/Linux} kernel" - - local builddir="$pkgdir/usr/lib/modules/$(<version)/build" + pkgdesc="Headers and scripts for building modules for the $pkgdesc kernel (ACS override and i915 VGA arbiter patches)" + depends=(pahole) cd $_srcname + local builddir="$pkgdir/usr/lib/modules/$(< version)/build" - msg2 "Installing build files..." - install -Dt "$builddir" -m644 Makefile .config Module.symvers System.map vmlinux + echo "Installing build files..." + install -Dt "$builddir" -m644 .config Makefile Module.symvers System.map \ + localversion.* 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 + # required when STACK_VALIDATION is enabled install -Dt "$builddir/tools/objtool" tools/objtool/objtool - # add xfs and shmem for aufs building - mkdir -p "$builddir"/{fs/xfs,mm} - - # ??? - mkdir "$builddir/.tmp_versions" + # required when DEBUG_INFO_BTF_MODULES is enabled + install -Dt "$builddir/tools/bpf/resolve_btfids" tools/bpf/resolve_btfids/resolve_btfids - msg2 "Installing headers..." + 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 @@ -150,18 +237,21 @@ _package-headers() { install -Dt "$builddir/drivers/md" -m644 drivers/md/*.h install -Dt "$builddir/net/mac80211" -m644 net/mac80211/*.h - # http://bugs.archlinux.org/task/13146 + # https://bugs.archlinux.org/task/13146 install -Dt "$builddir/drivers/media/i2c" -m644 drivers/media/i2c/msp3400-driver.h - # http://bugs.archlinux.org/task/20402 + # 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 - msg2 "Installing KConfig files..." + # 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/{}" \; - msg2 "Removing unneeded architectures..." + echo "Removing unneeded architectures..." local arch for arch in "$builddir"/arch/*/; do [[ $arch = */x86/ ]] && continue @@ -169,63 +259,65 @@ _package-headers() { rm -r "$arch" done - msg2 "Removing documentation..." + echo "Removing documentation..." rm -r "$builddir/Documentation" - msg2 "Removing broken symlinks..." + echo "Removing broken symlinks..." find -L "$builddir" -type l -printf 'Removing %P\n' -delete - msg2 "Removing loose objects..." + echo "Removing loose objects..." find "$builddir" -type f -name '*.o' -printf 'Removing %P\n' -delete - msg2 "Stripping build tools..." + echo "Stripping build tools..." local file while read -rd '' file; do - case "$(file -bi "$file")" in - application/x-sharedlib\;*) # Libraries (.so) + case "$(file -Sib "$file")" in + application/x-sharedlib\;*) # Libraries (.so) strip -v $STRIP_SHARED "$file" ;; - application/x-archive\;*) # Libraries (.a) + application/x-archive\;*) # Libraries (.a) strip -v $STRIP_STATIC "$file" ;; - application/x-executable\;*) # Binaries + 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) - msg2 "Adding symlink..." - mkdir -p "$pkgdir/usr/src" - ln -sr "$builddir" "$pkgdir/usr/src/$pkgbase-$pkgver" + echo "Stripping vmlinux..." + strip -v $STRIP_STATIC "$builddir/vmlinux" - msg2 "Fixing permissions..." - chmod -Rc u=rwX,go=rX "$pkgdir" + echo "Adding symlink..." + mkdir -p "$pkgdir/usr/src" + ln -sr "$builddir" "$pkgdir/usr/src/$pkgbase" } _package-docs() { - pkgdesc="Kernel hackers manual - HTML documentation that comes with the ${pkgbase/linux/Linux} kernel" - - local builddir="$pkgdir/usr/lib/modules/$(<version)/build" + pkgdesc="Documentation for the $pkgdesc kernel (ACS override and i915 VGA arbiter patches)" cd $_srcname + local builddir="$pkgdir/usr/lib/modules/$(< version)/build" - msg2 "Installing documentation..." - mkdir -p "$builddir" - cp -t "$builddir" -a Documentation + echo "Installing documentation..." + local src dst + while read -rd '' src; do + dst="${src#Documentation/}" + dst="$builddir/Documentation/${dst#output/}" + install -Dm644 "$src" "$dst" + done < <(find Documentation -name '.*' -prune -o ! -type d -print0) - msg2 "Adding symlink..." + echo "Adding symlink..." mkdir -p "$pkgdir/usr/share/doc" ln -sr "$builddir/Documentation" "$pkgdir/usr/share/doc/$pkgbase" - - msg2 "Fixing permissions..." - chmod -Rc u=rwX,go=rX "$pkgdir" } -pkgname=("$pkgbase" "$pkgbase-headers" "$pkgbase-docs") +pkgname=( + "$pkgbase" + "$pkgbase-headers" + #"$pkgbase-docs" +) for _p in "${pkgname[@]}"; do eval "package_$_p() { $(declare -f "_package${_p#$pkgbase}") _package${_p#$pkgbase} }" done - -# vim:set ts=8 sts=2 sw=2 et: |