328 lines
11 KiB
Text
328 lines
11 KiB
Text
# Maintainer: Joan Figueras <ffigue at gmail dot com>
|
|
# Contributor: Torge Matthies <openglfreak at googlemail dot com>
|
|
# Contributor: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
|
|
|
|
##
|
|
## The following variables can be customized at build time. Use env or export to change at your wish
|
|
##
|
|
## Example: env _microarchitecture=98 use_numa=n use_tracers=n makepkg -sc
|
|
##
|
|
## Look inside 'choose-gcc-optimization.sh' to choose your microarchitecture
|
|
## Valid numbers between: 0 to 99
|
|
## Default is: 0 => generic
|
|
## Good option if your package is for one machine: 98 (Intel native) or 99 (AMD native)
|
|
if [ -z ${_microarchitecture+x} ]; then
|
|
_microarchitecture=0
|
|
fi
|
|
|
|
## Disable NUMA since most users do not have multiple processors. Breaks CUDA/NvEnc.
|
|
## Archlinux and Xanmod enable it by default.
|
|
## Set variable "use_numa" to: n to disable (possibly increase performance)
|
|
## y to enable (stock default)
|
|
if [ -z ${use_numa+x} ]; then
|
|
use_numa=y
|
|
fi
|
|
|
|
## For performance you can disable FUNCTION_TRACER/GRAPH_TRACER. Limits debugging and analyzing of the kernel.
|
|
## Stock Archlinux and Xanmod have this enabled.
|
|
## Set variable "use_tracers" to: n to disable (possibly increase performance)
|
|
## y to enable (stock default)
|
|
if [ -z ${use_tracers+x} ]; then
|
|
use_tracers=y
|
|
fi
|
|
|
|
## GCC is the unique compiler supported
|
|
if [ -z ${_compiler+x} ]; then
|
|
_compiler=gcc
|
|
fi
|
|
|
|
# Compress modules with ZSTD (to save disk space)
|
|
if [ -z ${_compress_modules+x} ]; then
|
|
_compress_modules=n
|
|
fi
|
|
|
|
# Compile ONLY used modules to VASTLY reduce 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
|
|
if [ -z ${_localmodcfg} ]; then
|
|
_localmodcfg=n
|
|
fi
|
|
|
|
# Tweak kernel options prior to a build via nconfig
|
|
if [ -z ${_makenconfig} ]; then
|
|
_makenconfig=n
|
|
fi
|
|
|
|
### IMPORTANT: Do no edit below this line unless you know what you're doing
|
|
|
|
pkgbase=linux-xanmod-rt510
|
|
_major=5.10
|
|
pkgver=${_major}.131
|
|
_branch=5.x
|
|
_rt=72
|
|
xanmod=1
|
|
pkgrel=${xanmod}.${_rt}
|
|
pkgdesc='Linux Xanmod real-time version'
|
|
url="http://www.xanmod.org/"
|
|
arch=(x86_64)
|
|
license=(GPL2)
|
|
makedepends=(
|
|
bc cpio kmod libelf perl tar xz
|
|
)
|
|
options=('!strip')
|
|
_srcname="linux-${pkgver}-rt${_rt}-xanmod${xanmod}"
|
|
|
|
source=("https://cdn.kernel.org/pub/linux/kernel/v${_branch}/linux-${_major}.tar."{xz,sign}
|
|
"https://github.com/xanmod/linux/releases/download/${pkgver}-rt${_rt}-xanmod${xanmod}/patch-${pkgver}-rt${_rt}-xanmod${xanmod}.xz"
|
|
choose-gcc-optimization.sh)
|
|
validpgpkeys=(
|
|
'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linux Torvalds
|
|
'647F28654894E3BD457199BE38DBBDC86092693E' # Greg Kroah-Hartman
|
|
)
|
|
|
|
# Archlinux patches
|
|
_commit="ec9e9a4219fe221dec93fa16fddbe44a34933d8d"
|
|
_patches=()
|
|
for _patch in ${_patches[@]}; do
|
|
#source+=("${_patch}::https://git.archlinux.org/svntogit/packages.git/plain/trunk/${_patch}?h=packages/linux&id=${_commit}")
|
|
source+=("${_patch}::https://raw.githubusercontent.com/archlinux/svntogit-packages/${_commit}/trunk/${_patch}")
|
|
done
|
|
|
|
sha256sums=('dcdf99e43e98330d925016985bfbc7b83c66d367b714b2de0cbbfcbf83d8ca43'
|
|
'SKIP'
|
|
'ed536019466c3dfba8302455d2a85da2568a678d8a6b34edfedb0cbf3d1de9b1'
|
|
'51742dee57cd15bece152d6527f48af87cb7930f0f6a356d5282f778e7c35b39')
|
|
|
|
export KBUILD_BUILD_HOST=${KBUILD_BUILD_HOST:-archlinux}
|
|
export KBUILD_BUILD_USER=${KBUILD_BUILD_USER:-makepkg}
|
|
export KBUILD_BUILD_TIMESTAMP=${KBUILD_BUILD_TIMESTAMP:-$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})}
|
|
|
|
prepare() {
|
|
cd linux-${_major}
|
|
|
|
# Apply Xanmod patch
|
|
patch -Np1 -i ../patch-${pkgver}-rt${_rt}-xanmod${xanmod}
|
|
|
|
msg2 "Setting version..."
|
|
scripts/setlocalversion --save-scmversion
|
|
echo "-$pkgrel" > localversion.10-pkgrel
|
|
#echo "${pkgbase#linux-xanmod}" > localversion.20-pkgname
|
|
|
|
# Archlinux patches
|
|
local src
|
|
for src in "${source[@]}"; do
|
|
src="${src%%::*}"
|
|
src="${src##*/}"
|
|
[[ $src = *.patch ]] || continue
|
|
msg2 "Applying patch $src..."
|
|
patch -Np1 < "../$src"
|
|
done
|
|
|
|
# Applying configuration
|
|
cp -vf CONFIGS/xanmod/${_compiler}/config .config
|
|
|
|
# CONFIG_STACK_VALIDATION gives better stack traces. Also is enabled in all official kernel packages by Archlinux team
|
|
scripts/config --enable CONFIG_STACK_VALIDATION
|
|
|
|
# Enable IKCONFIG following Arch's philosophy
|
|
scripts/config --enable CONFIG_IKCONFIG \
|
|
--enable CONFIG_IKCONFIG_PROC
|
|
|
|
# User set. See at the top of this file
|
|
if [ "$use_tracers" = "n" ]; then
|
|
msg2 "Disabling FUNCTION_TRACER/GRAPH_TRACER..."
|
|
scripts/config --disable CONFIG_FUNCTION_TRACER \
|
|
--disable CONFIG_STACK_TRACER
|
|
fi
|
|
|
|
if [ "$use_numa" = "n" ]; then
|
|
msg2 "Disabling NUMA..."
|
|
scripts/config --disable CONFIG_NUMA
|
|
fi
|
|
|
|
# Compress modules by default (following Arch's kernel)
|
|
if [ "$_compress_modules" = "y" ]; then
|
|
scripts/config --enable CONFIG_MODULE_COMPRESS_ZSTD
|
|
fi
|
|
|
|
# Let's user choose microarchitecture optimization in GCC
|
|
../choose-gcc-optimization.sh $_microarchitecture
|
|
# Disable CONFIG_GENERIC_CPU2 if we have choosen another microarchitecture
|
|
# https://github.com/xanmod/linux/issues/240
|
|
[ "$_microarchitecture" = "0" ] || scripts/config --disable CONFIG_GENERIC_CPU2
|
|
|
|
# This is intended for the people that want to build this package with their own config
|
|
# Put the file "myconfig" at the package folder (this will take preference) or "${XDG_CONFIG_HOME}/linux-xanmod/myconfig"
|
|
# If we detect partial file with scripts/config commands, we execute as a script
|
|
# If not, it's a full config, will be replaced
|
|
for _myconfig in "${SRCDEST}/myconfig" "${HOME}/.config/linux-xanmod/myconfig" "${XDG_CONFIG_HOME}/linux-xanmod/myconfig" ; do
|
|
if [ -f "${_myconfig}" ] && [ "$(wc -l <"${_myconfig}")" -gt "0" ]; then
|
|
if grep -q 'scripts/config' "${_myconfig}"; then
|
|
# myconfig is a partial file. Executing as a script
|
|
msg2 "Applying myconfig..."
|
|
bash -x "${_myconfig}"
|
|
else
|
|
# myconfig is a full config file. Replacing default .config
|
|
msg2 "Using user CUSTOM config..."
|
|
cp -f "${_myconfig}" .config
|
|
fi
|
|
echo
|
|
break
|
|
fi
|
|
done
|
|
|
|
make olddefconfig
|
|
|
|
### Optionally load needed modules for the make localmodconfig
|
|
# See https://aur.archlinux.org/packages/modprobed-db
|
|
if [ "$_localmodcfg" = "y" ]; then
|
|
if [ -f $HOME/.config/modprobed.db ]; then
|
|
msg2 "Running Steven Rostedt's make localmodconfig now"
|
|
make LSMOD=$HOME/.config/modprobed.db localmodconfig
|
|
else
|
|
msg2 "No modprobed.db data found"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
make -s kernelrelease > version
|
|
msg2 "Prepared %s version %s" "$pkgbase" "$(<version)"
|
|
|
|
if [ "$_makenconfig" = "y" ]; then
|
|
make nconfig
|
|
fi
|
|
|
|
# save configuration for later reuse
|
|
cat .config > "${SRCDEST}/config.last"
|
|
}
|
|
|
|
build() {
|
|
cd linux-${_major}
|
|
make all
|
|
}
|
|
|
|
_package() {
|
|
pkgdesc="The Linux kernel and modules with Xanmod patches"
|
|
depends=(coreutils kmod initramfs)
|
|
optdepends=('crda: to set the correct wireless channels of your country'
|
|
'linux-firmware: firmware images needed for some devices')
|
|
provides=(VIRTUALBOX-GUEST-MODULES
|
|
WIREGUARD-MODULE
|
|
KSMBD-MODULE
|
|
NTFS3-MODULE)
|
|
|
|
cd linux-${_major}
|
|
local kernver="$(<version)"
|
|
local modulesdir="$pkgdir/usr/lib/modules/$kernver"
|
|
|
|
msg2 "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"
|
|
|
|
msg2 "Installing modules..."
|
|
make INSTALL_MOD_PATH="$pkgdir/usr" INSTALL_MOD_STRIP=1 modules_install
|
|
|
|
# remove build and source links
|
|
rm "$modulesdir"/{source,build}
|
|
}
|
|
|
|
_package-headers() {
|
|
pkgdesc="Headers and scripts for building modules for the $pkgdesc kernel"
|
|
depends=(pahole)
|
|
|
|
cd linux-${_major}
|
|
local builddir="$pkgdir/usr/lib/modules/$(<version)/build"
|
|
|
|
msg2 "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
|
|
|
|
# required when STACK_VALIDATION is enabled
|
|
install -Dt "$builddir/tools/objtool" tools/objtool/objtool
|
|
|
|
# required when DEBUG_INFO_BTF_MODULES is enabled
|
|
if [ -f "$builddir/tools/bpf/resolve_btfids" ]; then install -Dt "$builddir/tools/bpf/resolve_btfids" tools/bpf/resolve_btfids/resolve_btfids ; fi
|
|
|
|
msg2 "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/{}" \;
|
|
|
|
msg2 "Removing unneeded architectures..."
|
|
local arch
|
|
for arch in "$builddir"/arch/*/; do
|
|
[[ $arch = */x86/ ]] && continue
|
|
echo "Removing $(basename "$arch")"
|
|
rm -r "$arch"
|
|
done
|
|
|
|
msg2 "Removing documentation..."
|
|
rm -r "$builddir/Documentation"
|
|
|
|
msg2 "Removing broken symlinks..."
|
|
find -L "$builddir" -type l -printf 'Removing %P\n' -delete
|
|
|
|
msg2 "Removing loose objects..."
|
|
find "$builddir" -type f -name '*.o' -printf 'Removing %P\n' -delete
|
|
|
|
msg2 "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)
|
|
|
|
msg2 "Stripping vmlinux..."
|
|
strip -v $STRIP_STATIC "$builddir/vmlinux"
|
|
|
|
msg2 "Adding symlink..."
|
|
mkdir -p "$pkgdir/usr/src"
|
|
ln -sr "$builddir" "$pkgdir/usr/src/$pkgbase"
|
|
}
|
|
|
|
pkgname=("${pkgbase}" "${pkgbase}-headers")
|
|
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:
|