xanmod-tt

This commit is contained in:
Nathan 2022-02-16 16:12:33 -06:00
parent 0d6f6a58a3
commit c1fd056aef
3 changed files with 517 additions and 0 deletions

41
linux-xanmod-tt/.SRCINFO Normal file
View file

@ -0,0 +1,41 @@
pkgbase = linux-xanmod-tt
pkgdesc = Linux Xanmod. Development branch with the Task Type CPU Scheduler by Hamad Al Marri
pkgver = 5.15.24
pkgrel = 1
url = http://www.xanmod.org/
arch = x86_64
license = GPL2
makedepends = bc
makedepends = cpio
makedepends = kmod
makedepends = libelf
makedepends = perl
makedepends = tar
makedepends = xz
options = !strip
source = https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.tar.xz
source = https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.tar.sign
source = https://github.com/xanmod/linux/releases/download/5.15.24-xanmod1-tt/patch-5.15.24-xanmod1-tt.xz
source = choose-gcc-optimization.sh
validpgpkeys = ABAF11C65A2970B130ABE3C479BE3E4300411886
validpgpkeys = 647F28654894E3BD457199BE38DBBDC86092693E
sha256sums = 57b2cf6991910e3b67a1b3490022e8a0674b6965c74c12da1e99d138d1991ee8
sha256sums = SKIP
sha256sums = d131a9d5a3c1bb7b06a15bbdc0e487c4d1f6a06afa142679892b6ee388096ca0
sha256sums = 1ac18cad2578df4a70f9346f7c6fccbb62f042a0ee0594817fdef9f2704904ee
pkgname = linux-xanmod-tt
pkgdesc = The Linux kernel and modules with Xanmod patches
depends = coreutils
depends = kmod
depends = initramfs
optdepends = crda: to set the correct wireless channels of your country
optdepends = linux-firmware: firmware images needed for some devices
provides = VIRTUALBOX-GUEST-MODULES
provides = WIREGUARD-MODULE
provides = KSMBD-MODULE
provides = NTFS3-MODULE
pkgname = linux-xanmod-tt-headers
pkgdesc = Headers and scripts for building modules for the Linux Xanmod. Development branch with the Task Type CPU Scheduler by Hamad Al Marri kernel
depends = pahole

337
linux-xanmod-tt/PKGBUILD Normal file
View file

@ -0,0 +1,337 @@
# Maintainer: Nathan O <ndowens@artixlinux.org>
# Contributor: 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
## Choose between GCC and CLANG config (default is GCC)
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-tt
_major=5.15
pkgver=${_major}.24
_branch=5.x
xanmod=1
pkgrel=${xanmod}
pkgdesc='Linux Xanmod. Development branch with the Task Type CPU Scheduler by Hamad Al Marri'
url="http://www.xanmod.org/"
arch=(x86_64)
license=(GPL2)
makedepends=(
bc cpio kmod libelf perl tar xz
)
if [ "${_compiler}" = "clang" ]; then
makedepends+=(clang llvm lld python)
fi
options=('!strip')
_srcname="linux-${pkgver}-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}-xanmod${xanmod}-tt/patch-${pkgver}-xanmod${xanmod}-tt.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=('57b2cf6991910e3b67a1b3490022e8a0674b6965c74c12da1e99d138d1991ee8'
'SKIP'
'd131a9d5a3c1bb7b06a15bbdc0e487c4d1f6a06afa142679892b6ee388096ca0'
'1ac18cad2578df4a70f9346f7c6fccbb62f042a0ee0594817fdef9f2704904ee')
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}-xanmod${xanmod}-tt
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
# enable LTO_CLANG_THIN
if [ "${_compiler}" = "clang" ]; then
scripts/config --disable LTO_CLANG_FULL
scripts/config --enable LTO_CLANG_THIN
_LLVM=1
fi
# 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 only if we are not compiling with clang..."
if [ "${_compiler}" = "gcc" ]; then
scripts/config --disable CONFIG_FUNCTION_TRACER \
--disable CONFIG_STACK_TRACER
fi
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
sh ${srcdir}/choose-gcc-optimization.sh $_microarchitecture
# 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
### 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 LLVM=$_LLVM LLVM_IAS=$_LLVM LSMOD=$HOME/.config/modprobed.db localmodconfig
else
msg2 "No modprobed.db data found"
exit 1
fi
fi
make LLVM=$_LLVM LLVM_IAS=$_LLVM olddefconfig
make -s kernelrelease > version
msg2 "Prepared %s version %s" "$pkgbase" "$(<version)"
if [ "$_makenconfig" = "y" ]; then
make LLVM=$_LLVM LLVM_IAS=$_LLVM nconfig
fi
# save configuration for later reuse
cat .config > "${SRCDEST}/config.last"
}
build() {
cd linux-${_major}
make LLVM=$_LLVM LLVM_IAS=$_LLVM 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:

View file

@ -0,0 +1,139 @@
#!/usr/bin/env bash
. /usr/share/makepkg/util/message.sh
colorize
Detect_CPU=$(gcc -c -Q -march=native --help=target | grep march | awk '{print $2}' | head -1)
msg "Detected CPU architecture: $Detect_CPU"
cat << EOF
Available CPU microarchitectures:
1) AMD K6/K6-II/K6-III
2) AMD Athlon/Duron/K7
3) AMD Opteron/Athlon64/Hammer/K8
4) AMD Opteron/Athlon64/Hammer/K8 with SSE3
5) AMD 61xx/7x50/PhenomX3/X4/II/K10
6) AMD Family 10h (Barcelona)
7) AMD Family 14h (Bobcat)
8) AMD Family 16h (Jaguar)
9) AMD Family 15h (Bulldozer)
10) AMD Family 15h (Piledriver)
11) AMD Family 15h (Steamroller)
12) AMD Family 15h (Excavator)
13) AMD Family 17h (Zen)
14) AMD Family 17h (Zen 2)
15) AMD Family 19h Zen 3 processors (Zen 3)
16) Transmeta Crusoe
17) Transmeta Efficeon
18) IDT Winchip C6
19) Winchip-2/Winchip-2A/Winchip-3
20) AMD Elan
21) Geode GX1 (Cyrix MediaGX)
22) AMD Geode GX and LX
23) Cyrix III or C3
24) VIA C3 "Nehemiah"
25) VIA C7
26) Intel Pentium 4, Pentium D and older Nocona/Dempsey Xeon CPUs with Intel 64bit
27) Intel Atom
28) Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and 53xx)
29) Intel 1st Gen Core i3/i5/i7-family (Nehalem)
30) Intel 1.5 Gen Core i3/i5/i7-family (Westmere)
31) Intel Silvermont
32) Intel Goldmont (Apollo Lake and Denverton)
33) Intel Goldmont Plus (Gemini Lake)
34) Intel 2nd Gen Core i3/i5/i7-family (Sandybridge)
35) Intel 3rd Gen Core i3/i5/i7-family (Ivybridge)
36) Intel 4th Gen Core i3/i5/i7-family (Haswell)
37) Intel 5th Gen Core i3/i5/i7-family (Broadwell)
38) Intel 6th Gen Core i3/i5/i7-family (Skylake)
39) Intel 6th Gen Core i7/i9-family (Skylake X)
40) Intel 8th Gen Core i3/i5/i7-family (Cannon Lake)
41) Intel 8th Gen Core i7/i9-family (Ice Lake)
42) Xeon processors in the Cascade Lake family
43) Intel Xeon (Cooper Lake)
44) Intel 3rd Gen 10nm++ i3/i5/i7/i9-family (Tiger Lake)
45) Intel Sapphire Rapids
46) Intel Rocket Lake
47) Intel Alder Lake
92) Generic-x86-64-v2 (Nehalem and newer)
93) Generic-x86-64-v3 (Haswell and newer)
94) Generic-x86-64-v4 (AVX512 CPUs)
98) Intel-Native optimizations autodetected by GCC
99) AMD-Native optimizations autodetected by GCC
0) Generic (default)
EOF
sleep 1
answer=$1
case $answer in
1) Microarchitecture=CONFIG_MK6 ;;
2) Microarchitecture=CONFIG_MK7 ;;
3) Microarchitecture=CONFIG_MK8 ;;
4) Microarchitecture=CONFIG_MK8SSE3 ;;
5) Microarchitecture=CONFIG_MK10 ;;
6) Microarchitecture=CONFIG_MBARCELONA ;;
7) Microarchitecture=CONFIG_MBOBCAT ;;
8) Microarchitecture=CONFIG_MJAGUAR ;;
9) Microarchitecture=CONFIG_MBULLDOZER ;;
10) Microarchitecture=CONFIG_MPILEDRIVER ;;
11) Microarchitecture=CONFIG_MSTEAMROLLER ;;
12) Microarchitecture=CONFIG_MEXCAVATOR ;;
13) Microarchitecture=CONFIG_MZEN ;;
14) Microarchitecture=CONFIG_MZEN2 ;;
15) Microarchitecture=CONFIG_MZEN3 ;;
16) Microarchitecture=CONFIG_MCRUSOE ;;
17) Microarchitecture=CONFIG_MEFFICEON ;;
18) Microarchitecture=CONFIG_MWINCHIPC6 ;;
19) Microarchitecture=CONFIG_MWINCHIP3D ;;
20) Microarchitecture=CONFIG_MELAN ;;
21) Microarchitecture=CONFIG_MGEODEGX1 ;;
22) Microarchitecture=CONFIG_MGEODE_LX ;;
23) Microarchitecture=CONFIG_MCYRIXIII ;;
24) Microarchitecture=CONFIG_MVIAC3_2 ;;
25) Microarchitecture=CONFIG_MVIAC7 ;;
26) Microarchitecture=CONFIG_MPSC ;;
27) Microarchitecture=CONFIG_MATOM ;;
28) Microarchitecture=CONFIG_MCORE2 ;;
29) Microarchitecture=CONFIG_MNEHALEM ;;
30) Microarchitecture=CONFIG_MWESTMERE ;;
31) Microarchitecture=CONFIG_MSILVERMONT ;;
32) Microarchitecture=CONFIG_MGOLDMONT ;;
33) Microarchitecture=CONFIG_MGOLDMONTPLUS ;;
34) Microarchitecture=CONFIG_MSANDYBRIDGE ;;
35) Microarchitecture=CONFIG_MIVYBRIDGE ;;
36) Microarchitecture=CONFIG_MHASWELL ;;
37) Microarchitecture=CONFIG_MBROADWELL ;;
38) Microarchitecture=CONFIG_MSKYLAKE ;;
39) Microarchitecture=CONFIG_MSKYLAKEX ;;
40) Microarchitecture=CONFIG_MCANNONLAKE ;;
41) Microarchitecture=CONFIG_MICELAKE ;;
42) Microarchitecture=CONFIG_MCASCADELAKE ;;
43) Microarchitecture=CONFIG_MCOOPERLAKE ;;
44) Microarchitecture=CONFIG_MTIGERLAKE ;;
45) Microarchitecture=CONFIG_MSAPPHIRERAPIDS ;;
46) Microarchitecture=CONFIG_MROCKETLAKE ;;
47) Microarchitecture=CONFIG_MALDERLAKE ;;
92) Microarchitecture=CONFIG_GENERIC_CPU2 ;;
93) Microarchitecture=CONFIG_GENERIC_CPU3 ;;
94) Microarchitecture=CONFIG_GENERIC_CPU4 ;;
98) Microarchitecture=CONFIG_MNATIVE_INTEL ;;
99) Microarchitecture=CONFIG_MNATIVE_AMD ;;
*) default=CONFIG_GENERIC_CPU ;;
esac
warning "According to PKGBUILD variable _microarchitecture, your choice is $answer"
msg "Building this package for microarchitecture: $Microarchitecture$default"
sleep 5
sed -e 's|^CONFIG_GENERIC_CPU=y|# CONFIG_GENERIC_CPU is not set|g' -i .config
sed -e "s|^# $Microarchitecture is not set|$Microarchitecture=y|g" -i .config
echo