# Maintainer: Piotr Gorski # Contributor: Jan Alexander Steffens (heftig) # Contributor: Tobias Powalowski # Contributor: Thomas Baechler ### BUILD OPTIONS # Set these variables to ANYTHING that is not null to enable them ### Tweak kernel options prior to a build via nconfig _makenconfig= ### Tweak kernel options prior to a build via menuconfig _makemenuconfig= ### Tweak kernel options prior to a build via xconfig _makexconfig= ### Tweak kernel options prior to a build via gconfig _makegconfig= # NUMA is optimized for multi-socket motherboards. # A single multi-core CPU actually runs slower with NUMA enabled. # See, https://bugs.archlinux.org/task/31187 _NUMAdisable=y # Compile ONLY used modules to VASTLYreduce the number of modules built # and the build time. # # To keep track of which modules are needed for your specific system/hardware, # give module_db script a try: https://aur.archlinux.org/packages/modprobed-db # This PKGBUILD read the database kept if it exists # # More at this wiki page ---> https://wiki.archlinux.org/index.php/Modprobed-db _localmodcfg= # Use the current kernel's .config file # Enabling this option will use the .config of the RUNNING kernel rather than # the ARCH defaults. Useful when the package gets updated and you already went # through the trouble of customizing your config options. NOT recommended when # a new kernel is released, but again, convenient for package bumps. _use_current= ### Running with a 1000 HZ tick rate _1k_HZ_ticks= ### Do not edit below this line unless you know what you're doing pkgbase=linux-uksm # pkgname=('linux-uksm' 'linux-uksm-headers' 'linux-uksm-docs') _major=5.17 _minor=9 pkgver=${_major}.${_minor} _srcname=linux-${pkgver} pkgrel=1 pkgdesc='Linux UKSM' arch=('x86_64') url="https://github.com/dolohow/uksm" license=('GPL2') options=('!strip') makedepends=('bc' 'libelf' 'python-sphinx' 'python-sphinx_rtd_theme' 'graphviz' 'imagemagick' 'pahole' 'cpio' 'perl' 'tar' 'xz' 'texlive-latexextra' 'xmlto') #_lucjanpath="https://raw.githubusercontent.com/sirlucjan/kernel-patches/master/${_major}" _lucjanpath="https://gitlab.com/sirlucjan/kernel-patches/raw/master/${_major}" _uksm_path="uksm-patches-v3" #_uksm_path="https://raw.githubusercontent.com/dolohow/uksm/master/v5.x" #_uksm_path="https://raw.githubusercontent.com/zaza42/uksm/master" _uksm_patch="0001-UKSM-for-${_major}.patch" _compiler_path="cpu-patches-sep" _compiler_patch="0001-cpu-${_major}-merge-graysky-s-patchset.patch" source=("https://www.kernel.org/pub/linux/kernel/v5.x/${_srcname}.tar.xz" "https://www.kernel.org/pub/linux/kernel/v5.x/${_srcname}.tar.sign" "${_lucjanpath}/${_uksm_path}/${_uksm_patch}" "${_lucjanpath}/${_compiler_path}/${_compiler_patch}" "${_lucjanpath}/arch-patches-v16-sep/0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch" "${_lucjanpath}/arch-patches-v16-sep/0002-random-treat-bootloader-trust-toggle-the-same-way-as.patch" "${_lucjanpath}/arch-patches-v16-sep/0003-tick-Detect-and-fix-jiffies-update-stall.patch" "${_lucjanpath}/arch-patches-v16-sep/0004-tick-rcu-Remove-obsolete-rcu_needs_cpu-parameters.patch" "${_lucjanpath}/arch-patches-v16-sep/0005-tick-rcu-Stop-allowing-RCU_SOFTIRQ-in-idle.patch" "${_lucjanpath}/arch-patches-v16-sep/0006-lib-irq_poll-Declare-IRQ_POLL-softirq-vector-as-ksof.patch" "${_lucjanpath}/arch-patches-v16-sep/0007-NFSv4.1-provide-mount-option-to-toggle-trunking-disc.patch" # the main kernel config files 'config') export KBUILD_BUILD_HOST=archlinux export KBUILD_BUILD_USER=$pkgbase export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})" prepare() { cd $_srcname ### Setting version echo "Setting version..." sed -e "/^EXTRAVERSION =/s/=.*/=/" -i Makefile scripts/setlocalversion --save-scmversion echo "-$pkgrel" > localversion.10-pkgrel echo "${pkgbase#linux}" > localversion.20-pkgname ### Patching sources local src for src in "${source[@]}"; do src="${src%%::*}" src="${src##*/}" [[ $src = *.patch ]] || continue echo "Applying patch $src..." patch -Np1 < "../$src" done ### Setting config echo "Setting config..." cp ../config .config make olddefconfig diff -u ../config .config || : ### Prepared version make -s kernelrelease > version echo "Prepared $pkgbase version $( ./.config else warning "Your kernel was not compiled with IKCONFIG_PROC!" warning "You cannot read the current config!" warning "Aborting!" exit fi fi ### Optionally set tickrate to 1000 if [ -n "$_1k_HZ_ticks" ]; then echo "Setting tick rate to 1k..." scripts/config --disable CONFIG_HZ_300 scripts/config --enable CONFIG_HZ_1000 scripts/config --set-val CONFIG_HZ 1000 fi ### Optionally disable NUMA for 64-bit kernels only # (x86 kernels do not support NUMA) if [ -n "$_NUMAdisable" ]; then echo "Disabling NUMA from kernel config..." scripts/config --disable CONFIG_NUMA fi ### Optionally load needed modules for the make localmodconfig # See https://aur.archlinux.org/packages/modprobed-db if [ -n "$_localmodcfg" ]; then if [ -f $HOME/.config/modprobed.db ]; then echo "Running Steven Rostedt's make localmodconfig now" make LSMOD=$HOME/.config/modprobed.db localmodconfig else echo "No modprobed.db data found" exit fi fi ### Running make nconfig [[ -z "$_makenconfig" ]] || make nconfig ### Running make menuconfig [[ -z "$_makemenuconfig" ]] || make menuconfig ### Running make xconfig [[ -z "$_makexconfig" ]] || make xconfig ### Running make gconfig [[ -z "$_makegconfig" ]] || make gconfig ### Save configuration for later reuse cat .config > "${startdir}/config.last" } build() { cd $_srcname make all make htmldocs } _package() { pkgdesc="The $pkgdesc kernel and modules" depends=('coreutils' 'kmod' 'initramfs') optdepends=('wireless-regdb: to set the correct wireless channels of your country' 'linux-firmware: firmware images needed for some devices' 'modprobed-db: Keeps track of EVERY kernel module that has ever been probed - useful for those of us who make localmodconfig') provides=(VIRTUALBOX-GUEST-MODULES WIREGUARD-MODULE) cd $_srcname local kernver="$(