f3eba51c33
- Enables CONFIG_EXPERT automatically when futex2 is enabled - Adds the necessary entries to the config for unattended building (suppress prompts from having CONFIG_EXPERT enabled)
1370 lines
56 KiB
Bash
1370 lines
56 KiB
Bash
#!/bin/bash
|
|
|
|
ver54=99
|
|
ver57=19
|
|
ver58=18
|
|
ver59=16
|
|
ver510=17
|
|
ver511=0
|
|
|
|
_tkg_initscript() {
|
|
|
|
# Default to Arch
|
|
if [ -z "$_distro" ] || [ "$_ispkgbuild" = "true" ]; then
|
|
msg2 "Defaulting to Archlinux target\n"
|
|
_distro="Arch"
|
|
fi
|
|
|
|
# create build dir early
|
|
if [ "$_distro" = "Void" ]; then
|
|
_path="${XBPS_BUILDDIR}/${wrksrc}"
|
|
else
|
|
_path="${_where}"
|
|
fi
|
|
|
|
# _basever, _basekernel and _sub are saved to the file "versel"
|
|
# then this file is sourced at the end of these so these vars are accessible
|
|
# to the rest of the script
|
|
if [ -z "$_version" ] && [ ! -e "$_path"/versel ]; then
|
|
plain "Which kernel version do you want to install?"
|
|
read -rp "`echo $' 1. 5.4 LTS\n 2. 5.7\n 3. 5.8\n 4. 5.9\n 5. 5.10\n > 6. 5.11\nchoice[1-6?]'`" _VERSEL;
|
|
case $_VERSEL in
|
|
"1")
|
|
echo "_basever=54" > "$_path"/versel
|
|
echo "_basekernel=5.4" >> "$_path"/versel
|
|
echo "_sub=${ver54}" >> "$_path"/versel
|
|
;;
|
|
"2")
|
|
echo "_basever=57" > "$_path"/versel
|
|
echo "_basekernel=5.7" >> "$_path"/versel
|
|
echo "_sub=${ver57}" >> "$_path"/versel
|
|
;;
|
|
"3")
|
|
echo "_basever=58" > "$_path"/versel
|
|
echo "_basekernel=5.8" >> "$_path"/versel
|
|
echo "_sub=${ver58}" >> "$_path"/versel
|
|
;;
|
|
"4")
|
|
echo "_basever=59" > "$_path"/versel
|
|
echo "_basekernel=5.9" >> "$_path"/versel
|
|
echo "_sub=${ver59}" >> "$_path"/versel
|
|
;;
|
|
"5")
|
|
echo "_basever=510" > "$_path"/versel
|
|
echo "_basekernel=5.10" >> "$_path"/versel
|
|
echo "_sub=${ver510}" >> "$_path"/versel
|
|
;;
|
|
*)
|
|
echo "_basever=511" > "$_path"/versel
|
|
echo "_basekernel=5.11" >> "$_path"/versel
|
|
echo "_sub=${ver511}" >> "$_path"/versel
|
|
;;
|
|
esac
|
|
elif [ -n "$_version" ];then
|
|
case "$_version" in
|
|
"5.4")
|
|
echo "_basever=54" > "$_path"/versel
|
|
echo "_basekernel=5.4" >> "$_path"/versel
|
|
echo "_sub=${ver54}" >> "$_path"/versel
|
|
;;
|
|
"5.7")
|
|
echo "_basever=57" > "$_path"/versel
|
|
echo "_basekernel=5.7" >> "$_path"/versel
|
|
echo "_sub=${ver57}" >> "$_path"/versel
|
|
;;
|
|
"5.8")
|
|
echo "_basever=58" > "$_path"/versel
|
|
echo "_basekernel=5.8" >> "$_path"/versel
|
|
echo "_sub=${ver58}" >> "$_path"/versel
|
|
;;
|
|
"5.9")
|
|
echo "_basever=59" > "$_path"/versel
|
|
echo "_basekernel=5.9" >> "$_path"/versel
|
|
echo "_sub=${ver59}" >> "$_path"/versel
|
|
;;
|
|
"5.10")
|
|
echo "_basever=510" > "$_path"/versel
|
|
echo "_basekernel=5.10" >> "$_path"/versel
|
|
echo "_sub=${ver510}" >> "$_path"/versel
|
|
;;
|
|
"5.11")
|
|
echo "_basever=511" > "$_path"/versel
|
|
echo "_basekernel=5.11" >> "$_path"/versel
|
|
echo "_sub=${ver511}" >> "$_path"/versel
|
|
;;
|
|
*)
|
|
error "There is something wrong with your kernel version selection, exiting..."
|
|
exit 1
|
|
esac
|
|
fi
|
|
|
|
# source versel early if present
|
|
if [ -e "${_path}"/versel ]; then
|
|
source "${_path}"/versel
|
|
fi
|
|
|
|
if [ "$_distro" != "Void" ]; then
|
|
cp "$_where"/linux-tkg-patches/${_basekernel}/* "$_where" # copy patches inside the PKGBUILD's dir to preserve makepkg sourcing and md5sum checking
|
|
cp "$_where"/linux-tkg-config/${_basekernel}/* "$_where" # copy config files and hooks inside the PKGBUILD's dir to preserve makepkg sourcing and md5sum checking
|
|
else
|
|
cp "$_where"/linux-tkg-patches/${_basekernel}/* "$_path"
|
|
cp "$_where"/linux-tkg-config/${_basekernel}/* "$_path"
|
|
fi
|
|
|
|
if [ -z "$_OPTIPROFILE" ] && [ ! -e "$_path"/cpuschedset ]; then
|
|
# Prompt about optimized configurations. Available variable values will overwrite customization.cfg/external config ones.
|
|
plain "Do you want to use a predefined optimized profile?"
|
|
read -rp "`echo $' > 1.Custom\n 2.Ryzen Desktop (Performance)\n 3.Other Desktop (Performance)\nchoice[1-3?]: '`" _OPTIPROFILE;
|
|
fi
|
|
if [ "$_OPTIPROFILE" = "2" ]; then
|
|
source "$_where"/linux-tkg-config/ryzen-desktop-profile.cfg && msg2 "Ryzen Desktop (Performance) profile will be used." && msg2 ""
|
|
elif [ "$_OPTIPROFILE" = "3" ]; then
|
|
source "$_where"/linux-tkg-config/generic-desktop-profile.cfg && msg2 "Generic Desktop (Performance) profile will be used." && msg2 ""
|
|
fi
|
|
|
|
# source cpuschedset early if present
|
|
if [ -e "${_path}"/cpuschedset ]; then
|
|
source "${_path}"/cpuschedset
|
|
fi
|
|
|
|
# source compilerset early if present
|
|
if [ -e "${_path}"/compilerset ]; then
|
|
source "${_path}"/compilerset
|
|
fi
|
|
|
|
# CPU SCHED selector
|
|
if [ -z "$_cpusched" ] && [ ! -e "${_path}"/cpuschedset ]; then
|
|
plain "What CPU sched variant do you want to build/install?"
|
|
if [ "$_basever" = "54" ] || [ "$_basever" = "57" ]; then
|
|
prompt="`echo $' > 1.PDS\n 2.MuQSS\n 3.BMQ\n 4.CFS\nchoice[1-4?]: '`"
|
|
elif [ "$_basever" = "58" ]; then
|
|
prompt="`echo $' > 1.Undead PDS (TkG)\n 2.Project C / PDS\n 3.Project C / BMQ\n 4.CFS\nchoice[1-4?]: '`"
|
|
elif [ "$_basever" = "59" ] || [ "$_basever" = "510" ]; then
|
|
prompt="`echo $' > 1.Undead PDS (TkG)\n 2.Project C / PDS\n 3.Project C / BMQ\n 4.MuQSS\n 5.CFS\nchoice[1-5?]: '`"
|
|
elif [ "$_basever" = "511" ]; then
|
|
prompt="`echo $' > 1.Project C / PDS\n 2.Project C / BMQ\n 3.MuQSS\n 4.CFS\nchoice[1-4?]: '`"
|
|
else
|
|
prompt="`echo $' > 1.CFS\nchoice[1-1?]: '`"
|
|
fi
|
|
read -rp "$prompt" CONDITION;
|
|
if [ "$CONDITION" = "2" ];then
|
|
if [ "$_basever" = "54" ] || [ "$_basever" = "57" ]; then
|
|
echo "_cpusched=\"MuQSS\"" > "${_path}"/cpuschedset
|
|
elif [ "$_basever" = "58" ] || [ "$_basever" = "59" ] || [ "$_basever" = "510" ]; then
|
|
echo "_cpusched=\"pds\"" > "${_path}"/cpuschedset
|
|
else
|
|
echo "_cpusched=\"bmq\"" > "${_path}"/cpuschedset
|
|
fi
|
|
elif [ "$CONDITION" = "3" ]; then
|
|
if [ "$_basever" = "54" ] || [ "$_basever" = "57" ] || [ "$_basever" = "58" ] || [ "$_basever" = "59" ] || [ "$_basever" = "510" ]; then
|
|
echo "_cpusched=\"bmq\"" > "${_path}"/cpuschedset
|
|
else
|
|
echo "_cpusched=\"MuQSS\"" > "${_path}"/cpuschedset
|
|
fi
|
|
elif [ "$CONDITION" = "4" ]; then
|
|
if [ "$_basever" = "54" ] || [ "$_basever" = "57" ] || [ "$_basever" = "58" ] || [ "$_basever" = "511" ]; then
|
|
echo "_cpusched=\"cfs\"" > "${_path}"/cpuschedset
|
|
else
|
|
echo "_cpusched=\"MuQSS\"" > "${_path}"/cpuschedset
|
|
fi
|
|
elif [ "$CONDITION" = "5" ]; then
|
|
echo "_cpusched=\"cfs\"" > "${_path}"/cpuschedset
|
|
else
|
|
if [ "$_basever" = "58" ] || [ "$_basever" = "59" ] || [ "$_basever" = "510" ]; then
|
|
echo "_cpusched=\"upds\"" > "${_path}"/cpuschedset
|
|
else
|
|
echo "_cpusched=\"pds\"" > "${_path}"/cpuschedset
|
|
fi
|
|
fi
|
|
if [ -n "$_custom_pkgbase" ]; then
|
|
echo "_custom_pkgbase=\"${_custom_pkgbase}\"" >> "${_path}"/cpuschedset
|
|
fi
|
|
elif [ "$_cpusched" = "upds" ]; then
|
|
echo "_cpusched=\"upds\"" > "${_path}"/cpuschedset
|
|
elif [ "$_cpusched" = "pds" ]; then
|
|
echo "_cpusched=\"pds\"" > "${_path}"/cpuschedset
|
|
elif [ "$_cpusched" = "cfs" ]; then
|
|
echo "_cpusched=\"cfs\"" > "${_path}"/cpuschedset
|
|
elif [ "$_cpusched" = "bmq" ]; then
|
|
echo "_cpusched=\"bmq\"" > "${_path}"/cpuschedset
|
|
elif [ "$_cpusched" = "muqss" ] || [ "$_cpusched" = "MuQSS" ]; then
|
|
echo "_cpusched=\"MuQSS\"" > "${_path}"/cpuschedset
|
|
else
|
|
if [ "$_nofallback" != "true" ]; then
|
|
warning "Something is wrong with your cpusched selection. Do you want to fallback to CFS (default)?"
|
|
read -rp "`echo $' > N/y : '`" _fallback;
|
|
fi
|
|
if [[ "$_fallback" =~ [yY] ]] || [ "$_nofallback" = "true" ]; then
|
|
echo "_cpusched=\"cfs\"" > "${_path}"/cpuschedset
|
|
else
|
|
error "Exiting..."
|
|
exit 1
|
|
fi
|
|
fi
|
|
if [ -n "$_custom_pkgbase" ]; then
|
|
echo "_custom_pkgbase=\"${_custom_pkgbase}\"" >> "${_path}"/cpuschedset
|
|
fi
|
|
|
|
#if [ "$_basever" = "511" ] && [ "$_cpusched" != "cfs" ]; then
|
|
# warning "No support for alternative CPU schedulers on this kernel version. Defaulting to CFS."
|
|
# echo "_cpusched=\"cfs\"" > "${_path}"/cpuschedset
|
|
#fi
|
|
|
|
case $_compileroptlevel in
|
|
"2")
|
|
_compileropt="-O3"
|
|
;;
|
|
"3")
|
|
_compileropt="-Os"
|
|
;;
|
|
*)
|
|
_compileropt="-O2"
|
|
;;
|
|
esac
|
|
|
|
# Compiler selector
|
|
if [ -z "$_compiler" ] && [ ! -e "${_path}"/compilerset ]; then
|
|
plain "Which compiler do you want to use?"
|
|
read -rp "`echo $' > 1.GCC (recommended)\n 2.Clang/LLVM\nchoice[1-2?]: '`" _CONDITION_CMPLR;
|
|
if [ "$_CONDITION_CMPLR" = "2" ];then
|
|
echo "_compiler_name=\"-llvm\"" > ${_path}/compilerset
|
|
echo "llvm_opt=\"LLVM=1\"" >> ${_path}/compilerset
|
|
else
|
|
echo "_compiler_name=" >> ${_path}/compilerset
|
|
fi
|
|
elif [ "$_compiler" = "llvm" ]; then
|
|
echo "_compiler_name=\"-llvm\"" > ${_path}/compilerset
|
|
echo "llvm_opt=\"LLVM=1\"" >> ${_path}/compilerset
|
|
elif [ "$_compiler" = "gcc" ]; then
|
|
echo "_compiler_name=" >> ${_path}/compilerset
|
|
else
|
|
if [ "$_nofallback" != "true" ] && [ ! -e "${_path}"/compilerset ] && [ "$_compiler" != "llvm" ]; then
|
|
warning "Something is wrong with your compiler selection. Do you want to fallback to GCC (default)?"
|
|
read -rp "`echo $' > N/y : '`" _fallback;
|
|
fi
|
|
if [[ "$_fallback" =~ [yY] ]] || [ "$_nofallback" = "true" ]; then
|
|
echo "_compiler_name=" >> "${_path}"/compilerset
|
|
fi
|
|
if [ ! -e "${_path}"/compilerset ]; then
|
|
error "Exiting..."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
source "${_path}"/cpuschedset
|
|
source "${_path}"/compilerset
|
|
source "${_path}"/versel
|
|
}
|
|
|
|
user_patcher() {
|
|
for _f in "$_where"/*."${_userpatch_ext}patch" "$_where"/*."${_userpatch_ext}revert"; do
|
|
[ -e "${_f}" ] || continue
|
|
warning "Found userpatch file ${f##*/} in the PKGBUILD directory."
|
|
warning "Userpatches must now be placed in version-specific subdirectories (linux${_basever}-tkg-userpatches for this kernel version)."
|
|
warning "The patch will not be applied."
|
|
break
|
|
done
|
|
|
|
# To patch the user because all your base are belong to us
|
|
local _patches=("$_where"/linux"$_basever"-tkg-userpatches/*."${_userpatch_ext}revert")
|
|
if [ ${#_patches[@]} -ge 2 ] || [ -e "${_patches}" ]; then
|
|
if [ "$_user_patches_no_confirm" != "true" ]; then
|
|
msg2 "Found ${#_patches[@]} 'to revert' userpatches for ${_userpatch_target}:"
|
|
printf '%s\n' "${_patches[@]}"
|
|
read -rp "Do you want to install it/them? - Be careful with that ;)"$'\n> N/y : ' _CONDITION;
|
|
fi
|
|
if [[ "$_CONDITION" =~ [yY] ]] || [ "$_user_patches_no_confirm" = "true" ]; then
|
|
for _f in "${_patches[@]}"; do
|
|
if [ -e "${_f}" ]; then
|
|
msg2 "######################################################"
|
|
msg2 ""
|
|
msg2 "Reverting your own ${_userpatch_target} patch ${_f}"
|
|
msg2 ""
|
|
msg2 "######################################################"
|
|
patch -Np1 -R < "${_f}"
|
|
echo "Reverted your own patch ${_f}" >> "$_where"/last_build_config.log
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
|
|
_patches=("$_where"/linux"$_basever"-tkg-userpatches/*."${_userpatch_ext}patch")
|
|
if [ ${#_patches[@]} -ge 2 ] || [ -e "${_patches}" ]; then
|
|
if [ "$_user_patches_no_confirm" != "true" ]; then
|
|
msg2 "Found ${#_patches[@]} userpatches for ${_userpatch_target}:"
|
|
printf '%s\n' "${_patches[@]}"
|
|
read -rp "Do you want to install it/them? - Be careful with that ;)"$'\n> N/y : ' _CONDITION;
|
|
fi
|
|
if [[ "$_CONDITION" =~ [yY] ]] || [ "$_user_patches_no_confirm" = "true" ]; then
|
|
for _f in "${_patches[@]}"; do
|
|
if [ -e "${_f}" ]; then
|
|
msg2 "######################################################"
|
|
msg2 ""
|
|
msg2 "Applying your own ${_userpatch_target} patch ${_f}"
|
|
msg2 ""
|
|
msg2 "######################################################"
|
|
patch -Np1 < "${_f}"
|
|
echo "Applied your own patch ${_f}" >> "$_where"/last_build_config.log
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
}
|
|
|
|
_tkg_patcher() {
|
|
if [ -e "$tkgpatch" ]; then
|
|
echo -e "### Applying ${tkgpatch##*/}... ###" >> "$_where"/prepare.log
|
|
patch -Np1 -i "$tkgpatch" >> "$_where"/prepare.log || error "An error was encountered applying patches. It was logged to the prepare.log file."
|
|
echo -e "\n" >> "$_where"/prepare.log
|
|
else
|
|
msg2 "Patch either not found, not available for this kernel version or not needed. Skipping..."
|
|
fi
|
|
}
|
|
|
|
_tkg_srcprep() {
|
|
|
|
if [ "${_distro}" = "Void" ] && [ -e ${srcdir}/sum_failed ]; then
|
|
exit 1
|
|
fi
|
|
|
|
if [ "${_distro}" = "Arch" ]; then
|
|
msg2 "Setting version..."
|
|
scripts/setlocalversion --save-scmversion
|
|
echo "-$pkgrel-tkg-${_cpusched}${_compiler_name}" > localversion.10-pkgrel
|
|
echo -e "Version tail set to \"-$pkgrel-tkg-${_cpusched}${_compiler_name}\"\n" > "$_where"/prepare.log
|
|
echo "" > localversion.20-pkgname
|
|
|
|
# add upstream patch
|
|
if [ "$_sub" != "0" ]; then
|
|
msg2 "Patching from $_basekernel to $pkgver"
|
|
tkgpatch="$srcdir/patch-${pkgver}" && _tkg_patcher
|
|
fi
|
|
|
|
# ARCH Patches
|
|
if [ "${_configfile}" = "config_hardened.x86_64" ] && [ "${_cpusched}" = "cfs" ]; then
|
|
msg2 "Using linux hardened patchset"
|
|
tkgpatch="$srcdir/0012-linux-hardened.patch" && _tkg_patcher
|
|
else
|
|
tkgpatch="$srcdir/0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch" && _tkg_patcher
|
|
fi
|
|
fi
|
|
|
|
# Void
|
|
if [ "$_distro" = "Void" ] && [[ "$_sub" = rc* ]]; then
|
|
cd ${wrksrc}/linux-${_rc_kern_ver}
|
|
elif [ "$_distro" = "Void" ]; then
|
|
cd ${wrksrc}/linux-${_kern_ver}
|
|
fi
|
|
|
|
# graysky's cpu opts - https://github.com/graysky2/kernel_gcc_patch
|
|
|
|
msg2 "Applying graysky's cpu opts patch"
|
|
if [ "${_distro}" = "Arch" ]; then
|
|
tkgpatch="$srcdir/enable_additional_cpu_optimizations_for_gcc_v10.1%2B_kernel_v${opt_ver}.patch" && _tkg_patcher
|
|
elif [ "${_distro}" = "Void" ]; then
|
|
tkgpatch="${wrksrc}/enable_additional_cpu_optimizations_for_gcc_v10.1+_kernel_v${opt_ver}.patch" && _tkg_patcher
|
|
else
|
|
tkgpatch="$srcdir/enable_additional_cpu_optimizations_for_gcc_v10.1+_kernel_v${opt_ver}+.patch" && _tkg_patcher
|
|
fi
|
|
|
|
|
|
# TkG
|
|
msg2 "Applying clear linux patches"
|
|
tkgpatch="$srcdir/0002-clear-patches.patch" && _tkg_patcher
|
|
|
|
msg2 "Applying glitched base patch"
|
|
tkgpatch="$srcdir/0003-glitched-base.patch" && _tkg_patcher
|
|
|
|
if [ -z $_misc_adds ]; then
|
|
plain "Enable misc additions ? They may contain temporary fixes pending upstream, or some other changes that can break on non-Arch distros."
|
|
read -rp "`echo $' > [Y]/n : '`" _interactive_misc_adds;
|
|
if [ "$_interactive_misc_adds" != "n" ] && [ "$_interactive_misc_adds" != "N" ]; then
|
|
_misc_adds="true"
|
|
fi
|
|
fi
|
|
|
|
if [ "$_misc_adds" = "true" ]; then
|
|
msg2 "Applying misc additions patch"
|
|
tkgpatch="$srcdir/0012-misc-additions.patch" && _tkg_patcher
|
|
fi
|
|
|
|
# prjc/bmq patch rev
|
|
if [ "$_basever" = "58" ] || [ "$_basever" = "57" ]; then
|
|
rev=3
|
|
elif [ "$_basever" = "59" ]; then
|
|
rev=3
|
|
elif [ "$_basever" = "510" ]; then
|
|
rev=2
|
|
else
|
|
rev=0
|
|
fi
|
|
|
|
if [ "${_cpusched}" = "MuQSS" ]; then
|
|
# MuQSS
|
|
msg2 "Applying MuQSS base patch"
|
|
tkgpatch="$srcdir/0004-${_basekernel}-ck1.patch" && _tkg_patcher
|
|
|
|
if [ "${_aggressive_ondemand}" = "true" ]; then
|
|
msg2 "Applying MuQSS agressive ondemand governor patch"
|
|
tkgpatch="$srcdir/0004-glitched-ondemand-muqss.patch" && _tkg_patcher
|
|
fi
|
|
|
|
msg2 "Applying Glitched MuQSS patch"
|
|
tkgpatch="$srcdir/0004-glitched-muqss.patch" && _tkg_patcher
|
|
|
|
elif [ "${_cpusched}" = "upds" ] || [ "${_cpusched}" = "pds" ]; then
|
|
# upds naming quirk
|
|
if [ "${_cpusched}" = "upds" ];then
|
|
# is it dead or alive
|
|
doa="-undead"
|
|
fi
|
|
|
|
# PDS-mq
|
|
msg2 "Applying PDS base patch"
|
|
if [ "${_cpusched}" = "upds" ] || ( [ "$_basever" = "54" ] || [ "$_basever" = "57" ] && [ "${_cpusched}" = "pds" ] ); then
|
|
tkgpatch="$srcdir/0005-v${_basekernel}_undead-pds099o.patch" && _tkg_patcher
|
|
if [ "${_aggressive_ondemand}" = "true" ]; then
|
|
msg2 "Applying PDS agressive ondemand governor patch"
|
|
tkgpatch="$srcdir/0005${doa}-glitched-ondemand-pds.patch" && _tkg_patcher
|
|
fi
|
|
else
|
|
tkgpatch="$srcdir/0009-prjc_v${_basekernel}-r${rev}.patch" && _tkg_patcher
|
|
if [ "${_aggressive_ondemand}" = "true" ]; then
|
|
msg2 "Applying prjc PDS/BMQ agressive ondemand governor patch"
|
|
tkgpatch="$srcdir/0009-glitched-ondemand-bmq.patch" && _tkg_patcher
|
|
fi
|
|
fi
|
|
|
|
msg2 "Applying Glitched PDS patch"
|
|
tkgpatch="$srcdir/0005${doa}-glitched-pds.patch" && _tkg_patcher
|
|
|
|
elif [ "${_cpusched}" = "bmq" ]; then
|
|
# Project C / BMQ
|
|
msg2 "Applying Project C / BMQ base patch"
|
|
if [ "$_basever" != "54" ]; then
|
|
tkgpatch="$srcdir/0009-prjc_v${_basekernel}-r${rev}.patch" && _tkg_patcher
|
|
else
|
|
tkgpatch="$srcdir/0009-bmq_v5.4-r2.patch" && _tkg_patcher
|
|
fi
|
|
|
|
if [ "${_aggressive_ondemand}" = "true" ] && [ "$_basever" != "54" ]; then
|
|
msg2 "Applying BMQ agressive ondemand governor patch"
|
|
tkgpatch="$srcdir/0009-glitched-ondemand-bmq.patch" && _tkg_patcher
|
|
fi
|
|
|
|
msg2 "Applying Glitched BMQ patch"
|
|
tkgpatch="$srcdir/0009-glitched-bmq.patch" && _tkg_patcher
|
|
|
|
elif [ "${_cpusched}" = "cfs" ]; then
|
|
msg2 "Applying Glitched CFS patch"
|
|
tkgpatch="$srcdir/0003-glitched-cfs.patch" && _tkg_patcher
|
|
fi
|
|
|
|
if [ "$_distro" = "Void" ] && [[ "$_sub" = rc* ]]; then
|
|
cd ${wrksrc}/linux-${_rc_kern_ver}
|
|
elif [ "$_distro" = "Void" ] && [[ "$_sub" != rc* ]]; then
|
|
cd ${wrksrc}/linux-${_kern_ver}
|
|
fi
|
|
|
|
if [ "${_distro}" = "Arch" ] || [ "$_distro" = "Void" ]; then
|
|
if [ -z "${_configfile}" ]; then
|
|
_configfile="config.x86_64"
|
|
fi
|
|
|
|
cat "${srcdir}/${_configfile}" > ./.config
|
|
fi
|
|
|
|
# Set some -tkg defaults
|
|
echo "# CONFIG_DYNAMIC_FAULT is not set" >> ./.config
|
|
sed -i -e 's/CONFIG_DEFAULT_FQ_CODEL=y/# CONFIG_DEFAULT_FQ_CODEL is not set/' ./.config
|
|
echo "CONFIG_DEFAULT_CAKE=y" >> ./.config
|
|
if [ "$_basever" = "54" ]; then
|
|
echo "CONFIG_TP_SMAPI=m" >> ./.config
|
|
echo "CONFIG_RAID6_USE_PREFER_GEN=y" >> ./.config
|
|
fi
|
|
if [ "$_basever" = "54" ] || [ "$_basever" = "59" ]; then
|
|
sed -i -e 's/CONFIG_RCU_BOOST_DELAY=500/CONFIG_RCU_BOOST_DELAY=0/' ./.config
|
|
fi
|
|
echo "# CONFIG_NTP_PPS is not set" >> ./.config
|
|
sed -i -e 's/CONFIG_CRYPTO_LZ4=m/CONFIG_CRYPTO_LZ4=y/' ./.config
|
|
sed -i -e 's/CONFIG_CRYPTO_LZ4HC=m/CONFIG_CRYPTO_LZ4HC=y/' ./.config
|
|
sed -i -e 's/CONFIG_LZ4_COMPRESS=m/CONFIG_LZ4_COMPRESS=y/' ./.config
|
|
sed -i -e 's/CONFIG_LZ4HC_COMPRESS=m/CONFIG_LZ4HC_COMPRESS=y/' ./.config
|
|
sed -i -e 's/CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y/# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO is not set/' ./.config
|
|
sed -i -e 's/# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set/CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4=y/' ./.config
|
|
sed -i -e 's/CONFIG_ZSWAP_COMPRESSOR_DEFAULT="lzo"/CONFIG_ZSWAP_COMPRESSOR_DEFAULT="lz4"/' ./.config
|
|
sed -i -e 's/# CONFIG_CMDLINE_BOOL is not set/CONFIG_CMDLINE_BOOL=y/' ./.config
|
|
if [ "$_futex2" = "true" ] || [ "$_config_expert" = "true" ]; then
|
|
sed -i -e 's/# CONFIG_EXPERT is not set/CONFIG_EXPERT=y/' ./.config
|
|
echo -e "# CONFIG_DEBUG_RSEQ is not set\n
|
|
# CONFIG_PC104 is not set\n
|
|
# CONFIG_SLUB_MEMCG_SYSFS_ON is not set\n
|
|
# CONFIG_SLOB is not set\n
|
|
# CONFIG_PROCESSOR_SELECT is not set\n
|
|
# CONFIG_SUSPEND_SKIP_SYNC is not set\n
|
|
# CONFIG_DPM_WATCHDOG is not set\n
|
|
# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set\n
|
|
# CONFIG_PCI_CNB20LE_QUIRK is not set\n
|
|
# CONFIG_ISA_BUS is not set\n
|
|
CONFIG_KVM_WERROR=y\n
|
|
# CONFIG_GCC_PLUGIN_CYC_COMPLEXITY is not set\n
|
|
# CONFIG_CFG80211_CERTIFICATION_ONUS is not set\n
|
|
# CONFIG_PCIE_BUS_TUNE_OFF is not set\n
|
|
CONFIG_PCIE_BUS_DEFAULT=y\n
|
|
# CONFIG_PCIE_BUS_SAFE is not set\n
|
|
# CONFIG_PCIE_BUS_PERFORMANCE is not set\n
|
|
# CONFIG_PCIE_BUS_PEER2PEER is not set\n
|
|
# CONFIG_PATA_PLATFORM is not set\n
|
|
# CONFIG_TTY_PRINTK is not set\n
|
|
# CONFIG_GPIO_SYSFS is not set\n
|
|
# CONFIG_VIDEO_TDA1997X is not set\n
|
|
# CONFIG_VIDEO_TLV320AIC23B is not set\n
|
|
# CONFIG_VIDEO_ADV7180 is not set\n
|
|
# CONFIG_VIDEO_ADV7183 is not set\n
|
|
# CONFIG_VIDEO_ADV7604 is not set\n
|
|
# CONFIG_VIDEO_ADV7842 is not set\n
|
|
# CONFIG_VIDEO_BT819 is not set\n
|
|
# CONFIG_VIDEO_BT856 is not set\n
|
|
# CONFIG_VIDEO_BT866 is not set\n
|
|
# CONFIG_VIDEO_KS0127 is not set\n
|
|
# CONFIG_VIDEO_ML86V7667 is not set\n
|
|
# CONFIG_VIDEO_SAA7110 is not set\n
|
|
# CONFIG_VIDEO_TC358743 is not set\n
|
|
# CONFIG_VIDEO_TVP514X is not set\n
|
|
# CONFIG_VIDEO_TVP7002 is not set\n
|
|
# CONFIG_VIDEO_TW9910 is not set\n
|
|
# CONFIG_VIDEO_VPX3220 is not set\n
|
|
# CONFIG_VIDEO_SAA7185 is not set\n
|
|
# CONFIG_VIDEO_ADV7170 is not set\n
|
|
# CONFIG_VIDEO_ADV7175 is not set\n
|
|
# CONFIG_VIDEO_ADV7343 is not set\n
|
|
# CONFIG_VIDEO_ADV7393 is not set\n
|
|
# CONFIG_VIDEO_ADV7511 is not set\n
|
|
# CONFIG_VIDEO_AD9389B is not set\n
|
|
# CONFIG_VIDEO_AK881X is not set\n
|
|
# CONFIG_VIDEO_THS8200 is not set\n
|
|
# CONFIG_VIDEO_THS7303 is not set\n
|
|
# CONFIG_VIDEO_I2C is not set\n
|
|
# CONFIG_VIDEO_ST_MIPID02 is not set\n
|
|
# CONFIG_VIDEO_GS1662 is not set\n
|
|
# CONFIG_MEDIA_TUNER_MSI001 is not set\n
|
|
# CONFIG_DVB_S5H1432 is not set\n
|
|
# CONFIG_DVB_DIB9000 is not set\n
|
|
# CONFIG_DVB_CXD2880 is not set\n
|
|
# CONFIG_DVB_MN88443X is not set\n
|
|
# CONFIG_DVB_LNBH29 is not set\n
|
|
# CONFIG_DVB_LGS8GL5 is not set\n
|
|
# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set\n
|
|
# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set\n
|
|
# CONFIG_DRM_I915_WERROR is not set\n
|
|
# CONFIG_DRM_I915_DEBUG is not set\n
|
|
# CONFIG_DRM_I915_DEBUG_MMIO is not set\n
|
|
# CONFIG_DRM_I915_SW_FENCE_DEBUG_OBJECTS is not set\n
|
|
# CONFIG_DRM_I915_SW_FENCE_CHECK_DAG is not set\n
|
|
# CONFIG_DRM_I915_DEBUG_GUC is not set\n
|
|
# CONFIG_DRM_I915_SELFTEST is not set\n
|
|
# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set\n
|
|
# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set\n
|
|
# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set\n
|
|
# CONFIG_FB_INTEL is not set\n
|
|
# CONFIG_SND_SOC_SOF_DEVELOPER_SUPPORT is not set\n
|
|
# CONFIG_USB_KBD is not set\n
|
|
# CONFIG_USB_MOUSE is not set\n
|
|
# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set\n
|
|
# CONFIG_HARDENED_USERCOPY_PAGESPAN is not set\n
|
|
CONFIG_PAHOLE_HAS_SPLIT_BTF=y\n
|
|
CONFIG_DEBUG_INFO_BTF_MODULES=y\n
|
|
# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_32B is not set\n
|
|
# CONFIG_WIRELESS_WDS is not set\n
|
|
# CONFIG_UNWINDER_GUESS is not set" >> ./.config
|
|
fi
|
|
echo "CONFIG_CMDLINE=\"${_custom_commandline}\"" >> ./.config
|
|
echo "# CONFIG_CMDLINE_OVERRIDE is not set" >> ./.config
|
|
echo "# CONFIG_X86_P6_NOP is not set" >> ./.config
|
|
#echo "# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set" >> ./.config
|
|
echo "# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set" >> ./.config
|
|
echo "# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set" >> ./.config
|
|
|
|
# openrgb
|
|
echo "CONFIG_I2C_NCT6775=m" >> ./.config
|
|
|
|
# ccache fix
|
|
if [ "$_noccache" != "true" ]; then
|
|
if { [ "$_distro" = "Arch" ] && pacman -Qq ccache &> /dev/null; } || { [ "$_distro" = "Ubuntu" ] && dpkg -l ccache > /dev/null; }\
|
|
|| { [ "$_distro" = "Void" ] && xbps-query -s ccache > /dev/null; } ; then
|
|
sed -i -e 's/CONFIG_GCC_PLUGINS=y/# CONFIG_GCC_PLUGINS is not set/' ./.config
|
|
fi
|
|
fi
|
|
# Void uses LibreSSL
|
|
if [ "$_distro" = "Void" ]; then
|
|
sed -i -e 's/CONFIG_MODULE_SIG_SHA512=y/# CONFIG_MODULE_SIG_SHA512 is not set/' ./.config
|
|
sed -i -e 's/# CONFIG_MODULE_SIG_SHA1 is not set/CONFIG_MODULE_SIG_SHA1=y/' ./.config
|
|
sed -i -e 's/CONFIG_MODULE_SIG_HASH="sha512"/CONFIG_MODULE_SIG_HASH="sha1"/' ./.config
|
|
fi
|
|
# Skip dbg package creation on non-Arch
|
|
if [ "$_distro" != "Arch" ]; then
|
|
sed -i -e 's/CONFIG_DEBUG_INFO.*/CONFIG_DEBUG_INFO=n/' ./.config
|
|
fi
|
|
if [ "$_compiler_name" = "-llvm" ]; then
|
|
echo 'CONFIG_KCSAN=n' >> ./.config
|
|
if [ "$_basever" != "54" ] && [ "$_basever" != "57" ] && [ "$_basever" != "58" ]; then
|
|
echo 'CONFIG_INIT_STACK_ALL_PATTERN=n' >> ./.config
|
|
else
|
|
echo 'CONFIG_INIT_STACK_ALL=n' >> ./.config
|
|
fi
|
|
sed -i -e 's/# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set/CONFIG_INIT_ON_FREE_DEFAULT_ON=y/' ./.config
|
|
sed -i -e 's/CONFIG_INIT_STACK_NONE=y/CONFIG_INIT_STACK_NONE=n/' ./.config
|
|
echo "CONFIG_INIT_STACK_ALL_ZERO=y" >> ./.config
|
|
fi
|
|
|
|
if [ "$_font_autoselect" != "false" ]; then
|
|
sed -i -e 's/CONFIG_FONT_TER16x32=y/# CONFIG_FONT_TER16x32 is not set\nCONFIG_FONT_AUTOSELECT=y/' ./.config
|
|
fi
|
|
|
|
# cpu opt
|
|
|
|
if [ -n "$_processor_opt" ] && [ "$_processor_opt" != "native" ]; then
|
|
echo "# CONFIG_MNATIVE is not set" >> ./.config
|
|
fi
|
|
|
|
if [ -n "$_processor_opt" ] && [ "$_processor_opt" != "generic" ]; then
|
|
sed -i -e 's/CONFIG_GENERIC_CPU=y/# CONFIG_GENERIC_CPU is not set/' ./.config
|
|
fi
|
|
|
|
if [ "$_processor_opt" = "native" ]; then
|
|
echo "CONFIG_MNATIVE=y" >> ./.config
|
|
fi
|
|
|
|
_cpu_marchs=("k8" "k8sse3" "k10" "barcelona" "bobcat" "jaguar" "bulldozer" "piledriver")
|
|
_cpu_marchs+=("steamroller" "excavator" "zen" "zen2" "mpsc" "atom" "core2" "nehalem" "westmere")
|
|
_cpu_marchs+=("silvermont" "sandybridge" "ivybridge" "haswell" "broadwell" "skylake")
|
|
_cpu_marchs+=("skylakex" "cannonlake" "icelake" "goldmont" "goldmontplus" "cascadelake")
|
|
_cpu_marchs+=("cooperlake" "tigerlake")
|
|
|
|
for _march in "${_cpu_marchs[@]}"
|
|
do
|
|
_march_upper=`echo ${_march} | tr '[:lower:]' '[:upper:]'`
|
|
if [ "$_processor_opt" = "$_march" ]; then
|
|
echo "CONFIG_M${_march_upper}=y/" >> ./.config
|
|
else
|
|
echo "# CONFIG_M${_march_upper} is not set" >> ./.config
|
|
fi
|
|
done
|
|
|
|
# Disable some debugging
|
|
if [ "${_debugdisable}" = "true" ]; then
|
|
sed -i -e 's/CONFIG_SLUB_DEBUG=y/# CONFIG_SLUB_DEBUG is not set/' ./.config
|
|
sed -i -e 's/CONFIG_PM_DEBUG=y/# CONFIG_PM_DEBUG is not set/' ./.config
|
|
sed -i -e 's/CONFIG_PM_ADVANCED_DEBUG=y/# CONFIG_PM_ADVANCED_DEBUG is not set/' ./.config
|
|
sed -i -e 's/CONFIG_PM_SLEEP_DEBUG=y/# CONFIG_PM_SLEEP_DEBUG is not set/' ./.config
|
|
sed -i -e 's/CONFIG_ACPI_DEBUG=y/# CONFIG_ACPI_DEBUG is not set/' ./.config
|
|
sed -i -e 's/CONFIG_SCHED_DEBUG=y/# CONFIG_SCHED_DEBUG is not set/' ./.config
|
|
sed -i -e 's/CONFIG_LATENCYTOP=y/# CONFIG_LATENCYTOP is not set/' ./.config
|
|
sed -i -e 's/CONFIG_DEBUG_PREEMPT=y/# CONFIG_DEBUG_PREEMPT is not set/' ./.config
|
|
fi
|
|
|
|
if [ "${_cpusched}" = "MuQSS" ]; then
|
|
# MuQSS default config
|
|
echo "CONFIG_SCHED_MUQSS=y" >> ./.config
|
|
elif [ "${_cpusched}" = "pds" ]; then
|
|
# PDS default config
|
|
echo "CONFIG_SCHED_ALT=y" >> ./.config
|
|
echo "CONFIG_SCHED_PDS=y" >> ./.config
|
|
echo "# CONFIG_SCHED_BMQ is not set" >> ./.config
|
|
elif [ "${_cpusched}" = "upds" ]; then
|
|
# PDS default config
|
|
echo "CONFIG_SCHED_PDS=y" >> ./.config
|
|
elif [ "${_cpusched}" = "bmq" ]; then
|
|
# BMQ default config
|
|
echo "CONFIG_SCHED_ALT=y" >> ./.config
|
|
echo "CONFIG_SCHED_BMQ=y" >> ./.config
|
|
echo "# CONFIG_SCHED_PDS is not set" >> ./.config
|
|
fi
|
|
|
|
if [ "${_cpusched}" = "MuQSS" ] || [ "${_cpusched}" = "pds" ] || [ "${_cpusched}" = "bmq" ] || [ "${_cpusched}" = "upds" ]; then
|
|
# Disable CFS
|
|
sed -i -e 's/CONFIG_FAIR_GROUP_SCHED=y/# CONFIG_FAIR_GROUP_SCHED is not set/' ./.config
|
|
sed -i -e 's/CONFIG_CFS_BANDWIDTH=y/# CONFIG_CFS_BANDWIDTH is not set/' ./.config
|
|
# sched yield type
|
|
if [ -n "$_sched_yield_type" ]; then
|
|
CONDITION0="$_sched_yield_type"
|
|
# in customization.cfg for linux59-tkg _sched_yield_type is set to 0
|
|
elif [ "$_basever" = "59" ]; then
|
|
CONDITION0="0"
|
|
else
|
|
plain ""
|
|
plain "CPU sched_yield_type - Choose what sort of yield sched_yield will perform."
|
|
plain ""
|
|
plain "For PDS and MuQSS:"
|
|
plain "0: No yield."
|
|
plain "1: Yield only to better priority/deadline tasks."
|
|
plain "2: Expire timeslice and recalculate deadline."
|
|
plain ""
|
|
plain "For BMQ (experimental) - No recommended value yet, so try for yourself x) :"
|
|
plain "0: No yield."
|
|
plain "1: Deboost and requeue task. (default)"
|
|
plain "2: Set rq skip task."
|
|
if [ "${_cpusched}" = "MuQSS" ]; then
|
|
read -rp "`echo $'\n 0. Supposedly best option for gaming performance,\n but might lead to stability issues on some (AMD) platforms when combined with MuQSS\n > 1. Default and recommended option for MuQSS - could lead to stability issues on some (Intel) platforms\n 2. Can be a good option with low rr_interval on MuQSS\n [0-2?]: '`" CONDITION0;
|
|
else
|
|
read -rp "`echo $'\n > 0. Recommended option for gaming on PDS - "tkg" default\n 1. Default, but can lead to stability issues on some platforms\n 2. Can be a good option with low rr_interval on MuQSS\n [0-2?]: '`" CONDITION0;
|
|
fi
|
|
fi
|
|
if [ "${_cpusched}" = "upds" ] || ( [ "$_basever" = "54" ] || [ "$_basever" = "57" ] && [ "${_cpusched}" = "pds" ] ); then
|
|
_sched="pds"
|
|
elif [ "${_cpusched}" = "MuQSS" ] || ( [ "$_basever" != "54" ] && [ "$_cpusched" != "bmq" ] && [ "$_cpusched" != "pds" ] ) || ( [ "$_basever" = "54" ] && [ "$_cpusched" = "bmq" ] ); then
|
|
_sched="${_cpusched}"
|
|
else
|
|
_sched="alt_core"
|
|
fi
|
|
if [ "$CONDITION0" = "0" ]; then
|
|
sed -i -e 's/int sched_yield_type __read_mostly = 1;/int sched_yield_type __read_mostly = 0;/' ./kernel/sched/${_sched}.c
|
|
elif [ "$CONDITION0" = "1" ]; then
|
|
msg2 "Using default CPU sched yield type (1)"
|
|
elif [ "$CONDITION0" = "2" ]; then
|
|
sed -i -e 's/int sched_yield_type __read_mostly = 1;/int sched_yield_type __read_mostly = 2;/' ./kernel/sched/${_sched}.c
|
|
else
|
|
if [ "${_cpusched}" = "MuQSS" ]; then
|
|
msg2 "Using default CPU sched yield type (1)"
|
|
else
|
|
sed -i -e 's/int sched_yield_type __read_mostly = 1;/int sched_yield_type __read_mostly = 0;/' ./kernel/sched/${_sched}.c
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Round Robin interval
|
|
if [ "${_cpusched}" = "MuQSS" ] || [ "${_cpusched}" = "pds" ] || [ "${_cpusched}" = "bmq" ] || [ "${_cpusched}" = "upds" ]; then
|
|
if [ -n "$_rr_interval" ]; then
|
|
CONDITION1="$_rr_interval"
|
|
else
|
|
plain ""
|
|
plain "Round Robin interval is the longest duration two tasks with the same nice level will"
|
|
plain "be delayed for. When CPU time is requested by a task, it receives a time slice equal"
|
|
plain "to the rr_interval in addition to a virtual deadline. When using yield_type 2, a low"
|
|
plain "value can help offset the disadvantages of rescheduling a process that has yielded."
|
|
plain ""
|
|
plain "MuQSS default: 6ms"
|
|
plain "PDS default: 4ms"
|
|
plain "BMQ default: 2ms"
|
|
read -rp "`echo $'\n > 0.Keep defaults\n 1.2ms\n 2.4ms\n 3.6ms\n 4.8ms\n [0-4?]: '`" CONDITION1;
|
|
fi
|
|
if [ "$CONDITION1" = "1" ]; then
|
|
msg2 "Using 2ms rr_interval"
|
|
_rrvalue="2"
|
|
elif [ "$CONDITION1" = "2" ]; then
|
|
msg2 "Using 4ms rr_interval"
|
|
_rrvalue="4"
|
|
elif [ "$CONDITION1" = "3" ]; then
|
|
msg2 "Using 6ms rr_interval"
|
|
_rrvalue="6"
|
|
elif [ "$CONDITION1" = "4" ]; then
|
|
msg2 "Using 8ms rr_interval"
|
|
_rrvalue="8"
|
|
else
|
|
msg2 "Using default rr_interval"
|
|
_rrvalue="default"
|
|
fi
|
|
if [ "$_basever" != "54" ]; then
|
|
if [ "$_rrvalue" != "default" ]; then
|
|
if [ "${_cpusched}" = "MuQSS" ]; then
|
|
sed -i -e "s/int rr_interval __read_mostly = 6;/int rr_interval __read_mostly = ${_rrvalue};/" ./kernel/sched/"${_cpusched}".c
|
|
elif [ "${_cpusched}" = "upds" ]; then
|
|
sed -i -e "s/#define SCHED_DEFAULT_RR (4)/#define SCHED_DEFAULT_RR (${_rrvalue})/" ./kernel/sched/pds.c
|
|
elif [ "${_cpusched}" = "bmq" ] || [ "${_cpusched}" = "pds" ]; then
|
|
sed -i -e "s/u64 sched_timeslice_ns __read_mostly = (4 * 1000 * 1000);/u64 sched_timeslice_ns __read_mostly = (${_rrvalue} * 1000 * 1000);/" ./kernel/sched/${_sched}.c
|
|
fi
|
|
if [ "${_cpusched}" == "bmq" ]; then
|
|
echo "CONFIG_SCHED_TIMESLICE=2" >> ./.config
|
|
fi
|
|
else
|
|
if [ "${_cpusched}" = "bmq" ] || [ "${_cpusched}" = "pds" ]; then
|
|
sed -i -e "s/u64 sched_timeslice_ns __read_mostly = (4 * 1000 * 1000);/u64 sched_timeslice_ns __read_mostly = (2 * 1000 * 1000);/" ./kernel/sched/${_sched}.c
|
|
fi
|
|
fi
|
|
else
|
|
if [ "$_rrvalue" != "default" ]; then
|
|
if [ "${_cpusched}" == "MuQSS" ]; then
|
|
sed -i -e "s/int rr_interval __read_mostly = 6;/int rr_interval __read_mostly = ${_rrvalue};/" ./kernel/sched/"${_cpusched}".c
|
|
elif [ "${_cpusched}" == "pds" ]; then
|
|
sed -i -e "s/#define SCHED_DEFAULT_RR (4)/#define SCHED_DEFAULT_RR (${_rrvalue})/" ./kernel/sched/"${_cpusched}".c
|
|
elif [ "${_cpusched}" == "bmq" ]; then
|
|
echo "CONFIG_SCHED_TIMESLICE=${_rrvalue}" >> ./.config
|
|
fi
|
|
else
|
|
if [ "${_cpusched}" == "bmq" ]; then
|
|
echo "CONFIG_SCHED_TIMESLICE=2" >> ./.config
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# zenify
|
|
if [ "$_zenify" = "true" ]; then
|
|
echo "CONFIG_ZENIFY=y" >> ./.config
|
|
elif [ "$_zenify" = "false" ]; then
|
|
echo "# CONFIG_ZENIFY is not set" >> ./.config
|
|
fi
|
|
|
|
# compiler optimization level
|
|
if [ "$_compileroptlevel" = "1" ]; then
|
|
if [ "$_basever" != "54" ]; then
|
|
echo "# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3 is not set" >> ./.config
|
|
else
|
|
echo "# CONFIG_CC_OPTIMIZE_HARDER is not set" >> ./.config
|
|
fi
|
|
elif [ "$_compileroptlevel" = "2" ]; then
|
|
sed -i -e 's/CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y/# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set/' ./.config
|
|
if [ "$_basever" != "54" ]; then
|
|
echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=y" >> ./.config
|
|
else
|
|
echo "CONFIG_CC_OPTIMIZE_HARDER=y" >> ./.config
|
|
fi
|
|
elif [ "$_compileroptlevel" = "3" ]; then
|
|
sed -i -e 's/CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y/# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set/' ./.config
|
|
sed -i -e 's/# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set/CONFIG_CC_OPTIMIZE_FOR_SIZE=y/' ./.config
|
|
if [ "$_basever" != "54" ]; then
|
|
echo "# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3 is not set" >> ./.config
|
|
else
|
|
echo "# CONFIG_CC_OPTIMIZE_HARDER is not set" >> ./.config
|
|
fi
|
|
fi
|
|
|
|
# irq threading
|
|
if [ "$_irq_threading" = "true" ]; then
|
|
echo "CONFIG_FORCE_IRQ_THREADING=y" >> ./.config
|
|
elif [ "$_irq_threading" = "false" ]; then
|
|
echo "# CONFIG_FORCE_IRQ_THREADING is not set" >> ./.config
|
|
fi
|
|
|
|
# smt nice
|
|
if [ "$_smt_nice" = "true" ]; then
|
|
echo "CONFIG_SMT_NICE=y" >> ./.config
|
|
elif [ "$_smt_nice" = "false" ]; then
|
|
echo "# CONFIG_SMT_NICE is not set" >> ./.config
|
|
fi
|
|
|
|
# random trust cpu
|
|
if [ "$_random_trust_cpu" = "true" ]; then
|
|
sed -i -e 's/# CONFIG_RANDOM_TRUST_CPU is not set/CONFIG_RANDOM_TRUST_CPU=y/' ./.config
|
|
fi
|
|
|
|
# rq sharing
|
|
if [ "$_runqueue_sharing" = "none" ]; then
|
|
echo -e "CONFIG_RQ_NONE=y\n# CONFIG_RQ_SMT is not set\n# CONFIG_RQ_MC is not set\n# CONFIG_RQ_MC_LLC is not set\n# CONFIG_RQ_SMP is not set\n# CONFIG_RQ_ALL is not set" >> ./.config
|
|
elif [ -z "$_runqueue_sharing" ] || [ "$_runqueue_sharing" = "smt" ]; then
|
|
echo -e "# CONFIG_RQ_NONE is not set\nCONFIG_RQ_SMT=y\n# CONFIG_RQ_MC is not set\n# CONFIG_RQ_MC_LLC is not set\n# CONFIG_RQ_SMP is not set\n# CONFIG_RQ_ALL is not set" >> ./.config
|
|
elif [ "$_runqueue_sharing" = "mc" ]; then
|
|
echo -e "# CONFIG_RQ_NONE is not set\n# CONFIG_RQ_SMT is not set\nCONFIG_RQ_MC=y\n# CONFIG_RQ_MC_LLC is not set\n# CONFIG_RQ_SMP is not set\n# CONFIG_RQ_ALL is not set" >> ./.config
|
|
elif [ "$_runqueue_sharing" = "smp" ]; then
|
|
echo -e "# CONFIG_RQ_NONE is not set\n# CONFIG_RQ_SMT is not set\n# CONFIG_RQ_MC is not set\n# CONFIG_RQ_MC_LLC is not set\nCONFIG_RQ_SMP=y\n# CONFIG_RQ_ALL is not set" >> ./.config
|
|
elif [ "$_runqueue_sharing" = "all" ]; then
|
|
echo -e "# CONFIG_RQ_NONE is not set\n# CONFIG_RQ_SMT is not set\n# CONFIG_RQ_MC is not set\n# CONFIG_RQ_MC_LLC is not set\n# CONFIG_RQ_SMP is not set\nCONFIG_RQ_ALL=y" >> ./.config
|
|
elif [ "$_runqueue_sharing" = "mc-llc" ]; then
|
|
echo -e "# CONFIG_RQ_NONE is not set\n# CONFIG_RQ_SMT is not set\n# CONFIG_RQ_MC is not set\nCONFIG_RQ_MC_LLC=y\n# CONFIG_RQ_SMP is not set\n# CONFIG_RQ_ALL is not set" >> ./.config
|
|
fi
|
|
|
|
# timer freq
|
|
if [ -n "$_timer_freq" ] && [ "$_timer_freq" != "300" ]; then
|
|
sed -i -e 's/CONFIG_HZ_300=y/# CONFIG_HZ_300 is not set/' ./.config
|
|
sed -i -e 's/CONFIG_HZ_300_NODEF=y/# CONFIG_HZ_300_NODEF is not set/' ./.config
|
|
if [ "$_timer_freq" = "1000" ]; then
|
|
sed -i -e 's/# CONFIG_HZ_1000 is not set/CONFIG_HZ_1000=y/' ./.config
|
|
sed -i -e 's/CONFIG_HZ=300/CONFIG_HZ=1000/' ./.config
|
|
echo "# CONFIG_HZ_500 is not set" >> ./.config
|
|
echo "# CONFIG_HZ_500_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_750 is not set" >> ./.config
|
|
echo "# CONFIG_HZ_750_NODEF is not set" >> ./.config
|
|
echo "CONFIG_HZ_1000_NODEF=y" >> ./.config
|
|
echo "# CONFIG_HZ_250_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_300_NODEF is not set" >> ./.config
|
|
elif [ "$_timer_freq" = "750" ]; then
|
|
sed -i -e 's/CONFIG_HZ=300/CONFIG_HZ=750/' ./.config
|
|
echo "# CONFIG_HZ_500 is not set" >> ./.config
|
|
echo "# CONFIG_HZ_500_NODEF is not set" >> ./.config
|
|
echo "CONFIG_HZ_750=y" >> ./.config
|
|
echo "CONFIG_HZ_750_NODEF=y" >> ./.config
|
|
echo "# CONFIG_HZ_1000_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_250_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_300_NODEF is not set" >> ./.config
|
|
elif [ "$_timer_freq" = "500" ]; then
|
|
sed -i -e 's/CONFIG_HZ=300/CONFIG_HZ=500/' ./.config
|
|
echo "CONFIG_HZ_500=y" >> ./.config
|
|
echo "CONFIG_HZ_500_NODEF=y" >> ./.config
|
|
echo "# CONFIG_HZ_750 is not set" >> ./.config
|
|
echo "# CONFIG_HZ_750_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_1000_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_250_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_300_NODEF is not set" >> ./.config
|
|
elif [ "$_timer_freq" = "100" ]; then
|
|
sed -i -e 's/CONFIG_HZ=300/CONFIG_HZ=100/' ./.config
|
|
echo "# CONFIG_HZ_500 is not set" >> ./.config
|
|
echo "# CONFIG_HZ_750 is not set" >> ./.config
|
|
echo "# CONFIG_HZ_1000_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_750_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_500_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_250_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_300_NODEF is not set" >> ./.config
|
|
echo "CONFIG_HZ_100=y" >> ./.config
|
|
echo "CONFIG_HZ_100_NODEF=y" >> ./.config
|
|
fi
|
|
elif [ "${_cpusched}" = "MuQSS" ] && [ -z "$_timer_freq" ]; then
|
|
sed -i -e 's/CONFIG_HZ=300/CONFIG_HZ=100/' ./.config
|
|
echo "# CONFIG_HZ_500 is not set" >> ./.config
|
|
echo "# CONFIG_HZ_750 is not set" >> ./.config
|
|
echo "# CONFIG_HZ_1000_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_750_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_500_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_250_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_300_NODEF is not set" >> ./.config
|
|
echo "CONFIG_HZ_100=y" >> ./.config
|
|
echo "CONFIG_HZ_100_NODEF=y" >> ./.config
|
|
else
|
|
sed -i -e 's/CONFIG_HZ_300=y/# CONFIG_HZ_300 is not set/' ./.config
|
|
sed -i -e 's/CONFIG_HZ_300_NODEF=y/# CONFIG_HZ_300_NODEF is not set/' ./.config
|
|
sed -i -e 's/CONFIG_HZ=300/CONFIG_HZ=500/' ./.config
|
|
echo "CONFIG_HZ_500=y" >> ./.config
|
|
echo "CONFIG_HZ_500_NODEF=y" >> ./.config
|
|
echo "# CONFIG_HZ_250_NODEF is not set" >> ./.config
|
|
echo "# CONFIG_HZ_300_NODEF is not set" >> ./.config
|
|
fi
|
|
|
|
# default cpu gov
|
|
if [ "$_default_cpu_gov" = "performance" ]; then
|
|
sed -i -e 's/CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y/# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set/' ./.config
|
|
sed -i -e 's/# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set/CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y/' ./.config
|
|
elif [ "$_default_cpu_gov" = "ondemand" ]; then
|
|
sed -i -e 's/CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y/# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set/' ./.config
|
|
sed -i -e 's/# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set/CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y/' ./.config
|
|
sed -i -e 's/CONFIG_CPU_FREQ_GOV_ONDEMAND=m/CONFIG_CPU_FREQ_GOV_ONDEMAND=y/' ./.config
|
|
fi
|
|
|
|
# ACPI_CPUFREQ disablement
|
|
if [ "$_disable_acpi_cpufreq" = "true" ]; then
|
|
sed -i -e 's/CONFIG_X86_ACPI_CPUFREQ=m/# CONFIG_X86_ACPI_CPUFREQ is not set/' ./.config
|
|
fi
|
|
|
|
# ftrace
|
|
if [ -z "$_ftracedisable" ]; then
|
|
plain ""
|
|
plain "Disable FUNCTION_TRACER/GRAPH_TRACER? Lowers overhead but limits debugging"
|
|
plain "and analyzing of kernel functions."
|
|
read -rp "`echo $' > N/y : '`" CONDITION2;
|
|
fi
|
|
if [[ "$CONDITION2" =~ [yY] ]] || [ "$_ftracedisable" = "true" ]; then
|
|
sed -i -e 's/CONFIG_FUNCTION_TRACER=y/# CONFIG_FUNCTION_TRACER is not set/' ./.config
|
|
sed -i -e 's/CONFIG_FUNCTION_GRAPH_TRACER=y/# CONFIG_FUNCTION_GRAPH_TRACER is not set/' ./.config
|
|
fi
|
|
|
|
# disable numa
|
|
if [ -z "$_numadisable" ]; then
|
|
plain ""
|
|
plain "Disable NUMA? Lowers overhead, but breaks CUDA/NvEnc on Nvidia if disabled."
|
|
plain "https://bbs.archlinux.org/viewtopic.php?id=239174"
|
|
read -rp "`echo $' > N/y : '`" CONDITION3;
|
|
fi
|
|
if [[ "$CONDITION3" =~ [yY] ]] || [ "$_numadisable" = "true" ]; then
|
|
# disable NUMA since 99.9% of users do not have multiple CPUs but do have multiple cores in one CPU
|
|
sed -i -e 's/CONFIG_NUMA=y/# CONFIG_NUMA is not set/' \
|
|
-i -e '/CONFIG_AMD_NUMA=y/d' \
|
|
-i -e '/CONFIG_X86_64_ACPI_NUMA=y/d' \
|
|
-i -e '/CONFIG_NODES_SPAN_OTHER_NODES=y/d' \
|
|
-i -e '/# CONFIG_NUMA_EMU is not set/d' \
|
|
-i -e '/CONFIG_NODES_SHIFT=6/d' \
|
|
-i -e '/CONFIG_NEED_MULTIPLE_NODES=y/d' \
|
|
-i -e '/CONFIG_USE_PERCPU_NUMA_NODE_ID=y/d' \
|
|
-i -e '/CONFIG_ACPI_NUMA=y/d' ./.config
|
|
fi
|
|
|
|
# tickless
|
|
if [ -z "$_tickless" ]; then
|
|
plain ""
|
|
plain "Use CattaRappa mode (Tickless/Dynticks) ?"
|
|
plain "Can give higher performances in many cases but lower consistency on some hardware."
|
|
plain "Just tickless idle can perform better with some platforms (mostly AMD) or CPU schedulers (mostly MuQSS)."
|
|
if [ "${_cpusched}" = "MuQSS" ]; then
|
|
read -rp "`echo $'\n 0.No, use periodic ticks\n 1.Yes, full tickless baby!\n > 2.Just tickless idle plz\n [0-2?]: '`" CONDITION4;
|
|
else
|
|
read -rp "`echo $'\n 0.No, use periodic ticks\n > 1.Yes, full tickless baby!\n 2.Just tickless idle plz\n [0-2?]: '`" CONDITION4;
|
|
fi
|
|
fi
|
|
if [ "$CONDITION4" = "0" ] || [ "$_tickless" = "0" ]; then
|
|
echo "# CONFIG_NO_HZ_FULL_NODEF is not set" >> ./.config
|
|
sed -i -e 's/# CONFIG_HZ_PERIODIC is not set/CONFIG_HZ_PERIODIC=y/' ./.config
|
|
sed -i -e 's/CONFIG_NO_HZ_IDLE=y/# CONFIG_NO_HZ_IDLE is not set/' ./.config
|
|
sed -i -e 's/CONFIG_NO_HZ_FULL=y/# CONFIG_NO_HZ_FULL is not set/' ./.config
|
|
sed -i -e 's/CONFIG_NO_HZ=y/# CONFIG_NO_HZ is not set/' ./.config
|
|
sed -i -e 's/CONFIG_NO_HZ_COMMON=y/# CONFIG_NO_HZ_COMMON is not set/' ./.config
|
|
elif [ "$CONDITION4" = "2" ] || [ "$_tickless" = "2" ]; then
|
|
echo "# CONFIG_NO_HZ_FULL_NODEF is not set" >> ./.config
|
|
sed -i -e 's/CONFIG_HZ_PERIODIC=y/# CONFIG_HZ_PERIODIC is not set/' ./.config
|
|
sed -i -e 's/# CONFIG_NO_HZ_IDLE is not set/CONFIG_NO_HZ_IDLE=y/' ./.config
|
|
sed -i -e 's/CONFIG_NO_HZ_FULL=y/# CONFIG_NO_HZ_FULL is not set/' ./.config
|
|
sed -i -e 's/# CONFIG_NO_HZ is not set/CONFIG_NO_HZ=y/' ./.config
|
|
sed -i -e 's/# CONFIG_NO_HZ_COMMON is not set/CONFIG_NO_HZ_COMMON=y/' ./.config
|
|
else
|
|
if [ "${_cpusched}" = "MuQSS" ]; then
|
|
echo "# CONFIG_NO_HZ_FULL_NODEF is not set" >> ./.config
|
|
sed -i -e 's/CONFIG_HZ_PERIODIC=y/# CONFIG_HZ_PERIODIC is not set/' ./.config
|
|
sed -i -e 's/# CONFIG_NO_HZ_IDLE is not set/CONFIG_NO_HZ_IDLE=y/' ./.config
|
|
sed -i -e 's/CONFIG_NO_HZ_FULL=y/# CONFIG_NO_HZ_FULL is not set/' ./.config
|
|
sed -i -e 's/# CONFIG_NO_HZ is not set/CONFIG_NO_HZ=y/' ./.config
|
|
sed -i -e 's/# CONFIG_NO_HZ_COMMON is not set/CONFIG_NO_HZ_COMMON=y/' ./.config
|
|
else
|
|
echo "CONFIG_NO_HZ_FULL_NODEF=y" >> ./.config
|
|
sed -i -e 's/CONFIG_HZ_PERIODIC=y/# CONFIG_HZ_PERIODIC is not set/' ./.config
|
|
sed -i -e 's/CONFIG_NO_HZ_IDLE=y/# CONFIG_NO_HZ_IDLE is not set/' ./.config
|
|
sed -i -e 's/# CONFIG_NO_HZ_FULL is not set/CONFIG_NO_HZ_FULL=y/' ./.config
|
|
sed -i -e 's/# CONFIG_NO_HZ is not set/CONFIG_NO_HZ=y/' ./.config
|
|
sed -i -e 's/# CONFIG_NO_HZ_COMMON is not set/CONFIG_NO_HZ_COMMON=y/' ./.config
|
|
echo "CONFIG_CONTEXT_TRACKING=y" >> ./.config
|
|
echo "# CONFIG_CONTEXT_TRACKING_FORCE is not set" >> ./.config
|
|
fi
|
|
fi
|
|
|
|
# voluntary preempt
|
|
if [ -z "$_voluntary_preempt" ]; then
|
|
plain ""
|
|
plain "Use explicit preemption points?"
|
|
plain "It can improve latency on PDS (at the cost of throughput)"
|
|
plain "and improve throughput on other schedulers (at the cost of latency)"
|
|
read -rp "`echo $' > N/y : '`" CONDITION5;
|
|
fi
|
|
if [[ "$CONDITION5" =~ [yY] ]] || [ "$_voluntary_preempt" = "true" ]; then
|
|
sed -i -e 's/CONFIG_PREEMPT=y/# CONFIG_PREEMPT is not set/' ./.config
|
|
sed -i -e 's/CONFIG_PREEMPT_LL=y/# CONFIG_PREEMPT_LL is not set/' ./.config
|
|
sed -i -e 's/# CONFIG_PREEMPT_VOLUNTARY is not set/CONFIG_PREEMPT_VOLUNTARY=y/' ./.config
|
|
fi
|
|
|
|
# Open Firmware support
|
|
if [ -z "$_OFenable" ]; then
|
|
plain ""
|
|
plain "Enable Device Tree and Open Firmware support?"
|
|
read -rp "`echo $' > N/y : '`" CONDITION6;
|
|
fi
|
|
if [[ "$CONDITION6" =~ [yY] ]] || [ "$_OFenable" = "true" ]; then
|
|
sed -i -e 's/# CONFIG_OF is not set/CONFIG_OF=y/' ./.config
|
|
fi
|
|
|
|
# acs override
|
|
if [ -z "$_acs_override" ]; then
|
|
plain ""
|
|
plain "Use ACS override patch?"
|
|
plain "https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Bypassing_the_IOMMU_groups_.28ACS_override_patch.29"
|
|
read -rp "`echo $' > N/y : '`" CONDITION7;
|
|
fi
|
|
if [[ "$CONDITION7" =~ [yY] ]] || [ "$_acs_override" = "true" ]; then
|
|
msg2 "Patching ACS override"
|
|
tkgpatch="$srcdir/0006-add-acs-overrides_iommu.patch" && _tkg_patcher
|
|
fi
|
|
|
|
# bcachefs
|
|
if [ -z "$_bcachefs" ] && [ "$_basever" != "54" ]; then
|
|
plain ""
|
|
plain "Add Bcache filesystem support? You'll have to install bcachefs-tools-git from AUR for utilities."
|
|
plain "https://bcachefs.org/"
|
|
read -rp "`echo $' > N/y : '`" CONDITION8;
|
|
fi
|
|
if [[ "$CONDITION8" =~ [yY] ]] || [ "$_bcachefs" = "true" ]; then
|
|
msg2 "Patching Bcache filesystem support override"
|
|
tkgpatch="$srcdir/0008-${_basekernel}-bcachefs.patch" && _tkg_patcher
|
|
echo "CONFIG_BCACHEFS_FS=m" >> ./.config
|
|
echo "CONFIG_BCACHEFS_QUOTA=y" >> ./.config
|
|
echo "CONFIG_BCACHEFS_POSIX_ACL=y" >> ./.config
|
|
echo "# CONFIG_BCACHEFS_DEBUG is not set" >> ./.config
|
|
echo "# CONFIG_BCACHEFS_TESTS is not set" >> ./.config
|
|
echo "# CONFIG_DEBUG_CLOSURES is not set" >> ./.config
|
|
fi
|
|
|
|
# fsync support
|
|
if [ -z "$_fsync" ]; then
|
|
plain ""
|
|
plain "Enable support for fsync, an experimental replacement for esync in Valve Proton 4.11+"
|
|
plain "https://steamcommunity.com/games/221410/announcements/detail/2957094910196249305"
|
|
read -rp "`echo $' > N/y : '`" CONDITION9;
|
|
fi
|
|
if [[ "$CONDITION9" =~ [yY] ]] || [ "$_fsync" = "true" ]; then
|
|
msg2 "Patching Fsync support"
|
|
tkgpatch="$srcdir/0007-v${_basekernel}-fsync.patch" && _tkg_patcher
|
|
fi
|
|
|
|
# futex2 support
|
|
if [ -z "$_futex2" ]; then
|
|
plain ""
|
|
plain "Enable support for futex2, an experimental replacement for esync and fsync in Valve Proton 5.13 experimental"
|
|
plain "Can be enabled alongside regular fsync patchset to have a fallback option"
|
|
plain "https://gitlab.collabora.com/tonyk/linux/-/tree/futex2-dev"
|
|
plain "https://github.com/ValveSoftware/Proton/issues/4568"
|
|
read -rp "`echo $' > N/y : '`" CONDITION10;
|
|
fi
|
|
if [[ "$CONDITION10" =~ [yY] ]] || [ "$_futex2" = "true" ]; then
|
|
msg2 "Patching futex2 support"
|
|
tkgpatch="$srcdir/0007-v${_basekernel}-futex2_interface.patch" && _tkg_patcher
|
|
echo "CONFIG_FUTEX2=y" >> ./.config
|
|
fi
|
|
|
|
# ZFS fix
|
|
if [ "$_basever" = "54" ] || [ "$_basever" = "57" ] || [ "$_basever" = "58" ]; then
|
|
if [ -z "$_zfsfix" ]; then
|
|
plain ""
|
|
plain "Add back missing symbol for AES-NI/AVX support on ZFS"
|
|
plain "https://github.com/NixOS/nixpkgs/blob/master/pkgs/os-specific/linux/kernel/export_kernel_fpu_functions_5_3.patch"
|
|
read -rp "`echo $' > N/y : '`" CONDITION11;
|
|
fi
|
|
if [[ "$CONDITION11" =~ [yY] ]] || [ "$_zfsfix" = "true" ]; then
|
|
msg2 "Patching missing symbol for AES-NI/AVX support on ZFS"
|
|
tkgpatch="$srcdir/0011-ZFS-fix.patch" && _tkg_patcher
|
|
fi
|
|
fi
|
|
|
|
# Anbox modules
|
|
if [ "$_basever" != "54" ]; then
|
|
if [ -z "$_anbox" ]; then
|
|
plain ""
|
|
plain "Enable android modules for use with Anbox?"
|
|
plain "https://github.com/anbox/anbox"
|
|
read -rp "`echo $' > N/y : '`" CONDITION12;
|
|
fi
|
|
if [[ "$CONDITION12" =~ [yY] ]] || [ "$_anbox" = "true" ]; then
|
|
echo "CONFIG_ASHMEM=y" >> ./.config
|
|
echo "CONFIG_ION=y" >> ./.config
|
|
echo "# CONFIG_ION_SYSTEM_HEAP is not set" >> ./.config
|
|
echo "CONFIG_ANDROID=y" >> ./.config
|
|
echo "CONFIG_ANDROID_BINDER_IPC=y" >> ./.config
|
|
echo "CONFIG_ANDROID_BINDERFS=y" >>./.config
|
|
echo 'CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"' >>./.config
|
|
echo "# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set" >> ./.config
|
|
fi
|
|
fi
|
|
|
|
# Community patches
|
|
if [ -n "$_community_patches" ]; then
|
|
if [ ! -d "$_where/../community-patches" ]; then
|
|
cd "$_where/.." && git clone https://github.com/Frogging-Family/community-patches.git && cd "${srcdir}/${_srcpath}"
|
|
fi
|
|
_community_patches=($_community_patches)
|
|
mkdir -p "$_where"/linux"$_basever"-tkg-userpatches
|
|
for _p in ${_community_patches[@]}; do
|
|
ln -s "$_where"/../community-patches/linux"$_basever"-tkg/$_p "$_where"/linux"$_basever"-tkg-userpatches/$_p
|
|
done
|
|
fi
|
|
|
|
# userpatches
|
|
if [ "$_user_patches" = "true" ]; then
|
|
_userpatch_target="linux-${_basekernel}"
|
|
_userpatch_ext="my"
|
|
user_patcher
|
|
fi
|
|
|
|
# Community patches removal
|
|
for _p in ${_community_patches[@]}; do
|
|
rm -f "$_where"/linux"$_basever"-tkg-userpatches/$_p
|
|
done
|
|
|
|
if [ "$_distro" = "Arch" ] || [ "$_distro" = "Void" ]; then
|
|
# don't run depmod on 'make install'. We'll do this ourselves in packaging
|
|
sed -i '2iexit 0' scripts/depmod.sh
|
|
|
|
# get kernel version
|
|
make prepare ${llvm_opt}
|
|
fi
|
|
|
|
# modprobed-db
|
|
if [ -z "$_modprobeddb" ]; then
|
|
plain ""
|
|
plain "Use modprobed db to clean config from unneeded modules?"
|
|
plain "Speeds up compilation considerably. Requires root."
|
|
plain "https://wiki.archlinux.org/index.php/Modprobed-db"
|
|
plain "!!!! Make sure to have a well populated db !!!!"
|
|
read -rp "`echo $' > N/y : '`" CONDITIONMPDB;
|
|
fi
|
|
if [[ "$CONDITIONMPDB" =~ [yY] ]] || [ "$_modprobeddb" = "true" ]; then
|
|
if [ "$_futex2" = "true" ] || [ "$_config_expert" = "true" ];then
|
|
make LSMOD=${HOME}/.config/modprobed.db localmodconfig ${llvm_opt}
|
|
else
|
|
yes "" | make LSMOD=${HOME}/.config/modprobed.db localmodconfig ${llvm_opt}
|
|
fi
|
|
fi
|
|
|
|
if [ true = "$_config_fragments" ]; then
|
|
local fragments=()
|
|
mapfile -d '' -t fragments < <(find "$_where"/ -type f -name "*.myfrag" -print0)
|
|
|
|
if [ true = "$_config_fragments_no_confirm" ]; then
|
|
printf 'Using config fragment %s\n' "${fragments[@]#$_where/}"
|
|
else
|
|
for i in "${!fragments[@]}"; do
|
|
while true; do
|
|
read -r -p 'Found config fragment '"${fragments[$i]#$_where/}"', apply it? [y/N] ' CONDITIONMPDB
|
|
CONDITIONMPDB="$(printf '%s' "$CONDITIONMPDB" | tr '[:upper:]' '[:lower:]')"
|
|
case "$CONDITIONMPDB" in
|
|
y|yes)
|
|
break;;
|
|
n|no|'')
|
|
unset fragments[$i]
|
|
break;;
|
|
*)
|
|
echo 'Please answer with yes or no'
|
|
esac
|
|
done
|
|
done
|
|
fi
|
|
|
|
if [ 0 -lt "${#fragments[@]}" ]; then
|
|
scripts/kconfig/merge_config.sh -m .config "${fragments[@]}"
|
|
fi
|
|
fi
|
|
|
|
# set _menuconfig early for Void
|
|
if [ "$_distro" = "Void" ]; then
|
|
_menuconfig="Void"
|
|
fi
|
|
|
|
# menuconfig / nconfig
|
|
if [ -z "$_menunconfig" ] && [ "$_distro" != "Void" ]; then
|
|
plain ""
|
|
plain "*Optional* For advanced users - Do you want to use make menuconfig or nconfig"
|
|
plain "to configure the kernel before building it?"
|
|
plain "If you do, make sure your terminal is currently"
|
|
plain "at least 19 lines by 80 columns large or you'll get an error :D"
|
|
read -rp "`echo $' > 0. nope\n 1. menuconfig\n 2. nconfig\n 3. xconfig\n choice[0-3?]: '`" CONDITIONMNC;
|
|
_menunconfig="$CONDITIONMNC"
|
|
fi
|
|
if [ 1 = "$_menunconfig" ]; then
|
|
cp .config .config.orig
|
|
make menuconfig ${llvm_opt}
|
|
elif [ 2 = "$_menunconfig" ]; then
|
|
cp .config .config.orig
|
|
make nconfig ${llvm_opt}
|
|
elif [ 3 = "$_menunconfig" ]; then
|
|
cp .config .config.orig
|
|
make xconfig ${llvm_opt}
|
|
else
|
|
# rewrite configuration
|
|
yes "" | make config ${llvm_opt} >/dev/null
|
|
fi
|
|
if [ 1 = "$_menunconfig" ] || [ 2 = "$_menunconfig" ] || [ 3 = "$_menunconfig" ]; then
|
|
if [ -z "${_diffconfig}" ]; then
|
|
while true; do
|
|
read -r -p 'Generate a config fragment from your changes? [y/N] ' CONDITIONF
|
|
CONDITIONF="$(printf '%s' "$CONDITIONF" | tr '[:upper:]' '[:lower:]')"
|
|
case "$CONDITIONF" in
|
|
y|yes)
|
|
_diffconfig=true
|
|
break;;
|
|
n|no|'')
|
|
_diffconfig=false
|
|
break;;
|
|
*)
|
|
echo 'Please answer with yes or no'
|
|
esac
|
|
done
|
|
fi
|
|
if [ true = "$_diffconfig" ]; then
|
|
if [ -z "$_diffconfig_name" ]; then
|
|
IFS= read -r -p 'Filename for the config fragment [leave empty to not generate fragment]: ' _diffconfig_name
|
|
fi
|
|
if [ -z "$_diffconfig_name" ]; then
|
|
echo 'No file name given, not generating config fragment.'
|
|
else (
|
|
prev_pwd="${PWD:-$(pwd)}"
|
|
cd "$_where"
|
|
"${prev_pwd}/scripts/diffconfig" -m "${prev_pwd}/.config.orig" "${prev_pwd}/.config" > "$_diffconfig_name"
|
|
) fi
|
|
fi
|
|
rm .config.orig
|
|
fi
|
|
|
|
if [ "$_distro" = "Arch" ]; then
|
|
make -s kernelrelease > version
|
|
msg2 "Prepared %s version %s" "$pkgbase" "$(<version)"
|
|
fi
|
|
}
|
|
|
|
exit_cleanup() {
|
|
# Remove state tracker
|
|
rm -f "$_where"/cpuschedset
|
|
rm -f "$_where"/compilerset
|
|
rm -f "$_where"/versel
|
|
|
|
# Remove temporarily copied files
|
|
rm -rf "$_where"/*.patch
|
|
rm -rf "$_where"/*-profile.cfg
|
|
rm -f "$_where"/config*
|
|
rm -f "$_where"/*.hook
|
|
rm -f "$_where"/cleanup
|
|
rm -f "$_where"/prepare
|
|
|
|
# Remove RPM temporary files left
|
|
rm -rf ${HOME}/.cache/linux-tkg-rpmbuild
|
|
|
|
# Community patches removal in case of failure
|
|
for _p in ${_community_patches[@]}; do
|
|
rm -f "$_where"/linux"$_basever"-tkg-userpatches/"$_p"
|
|
done
|
|
|
|
if [ "$_NUKR" = "true" ] && [ "$_where" != "$srcdir" ]; then
|
|
rm -rf "$_where"/src/*
|
|
# Double tap
|
|
rm -rf "$srcdir"/linux-*
|
|
rm -rf "$srcdir"/*.xz
|
|
rm -rf "$srcdir"/*.patch
|
|
rm -rf "$srcdir"/*-profile.cfg
|
|
rm -f "$srcdir"/config.x86_64
|
|
rm -f "$srcdir"/customization.cfg
|
|
|
|
elif [ "$_distro" == "Arch" ]; then
|
|
rm -rf "$srcdir"/linux-${_basekernel}/Documentation/filesystems/aufs/*
|
|
rm -f "$srcdir"/linux-${_basekernel}/Documentation/ABI/testing/*-aufs
|
|
rm -rf "$srcdir"/linux-${_basekernel}/fs/aufs/*
|
|
rm -f "$srcdir"/linux-${_basekernel}/include/uapi/linux/aufs*
|
|
|
|
rm -f "$srcdir"/linux-${_basekernel}/mm/prfile.c
|
|
|
|
rm -f "$srcdir"/linux-${_basekernel}/block/bfq*
|
|
|
|
rm -rf "$srcdir"/linux-${_basekernel}/drivers/scsi/vhba/*
|
|
|
|
rm -rf "$srcdir"/linux-${_basekernel}/fs/exfat/*
|
|
rm -f "$srcdir"/linux-${_basekernel}/include/trace/events/fs.h
|
|
|
|
rm -f "$srcdir"/linux-${_basekernel}/Documentation/scheduler/sched-PDS-mq.txt
|
|
rm -f "$srcdir"/linux-${_basekernel}/include/linux/skip_list.h
|
|
rm -f "$srcdir"/linux-${_basekernel}/kernel/sched/pds.c
|
|
rm -f "$srcdir"/linux-${_basekernel}/kernel/sched/pds_sched.h
|
|
|
|
rm -f "$srcdir"/linux-${_basekernel}/Documentation/scheduler/sched-BMQ.txt
|
|
rm -f "$srcdir"/linux-${_basekernel}/kernel/sched/${_sched}.c
|
|
rm -f "$srcdir"/linux-${_basekernel}/kernel/sched/sched/alt_debug.c
|
|
rm -f "$srcdir"/linux-${_basekernel}/kernel/sched/alt_sched.h
|
|
|
|
rm -f "$srcdir"/linux-${_basekernel}/Documentation/scheduler/sched-BFS.txt
|
|
rm -f "$srcdir"/linux-${_basekernel}/Documentation/scheduler/sched-MuQSS.txt
|
|
rm -rf "$srcdir"/linux-${_basekernel}/arch/blackfin/*
|
|
rm -f "$srcdir"/linux-${_basekernel}/arch/powerpc/configs/c2k_defconfig
|
|
rm -f "$srcdir"/linux-${_basekernel}/arch/score/configs/spct6600_defconfig
|
|
rm -f "$srcdir"/linux-${_basekernel}/arch/tile/configs/tilegx_defconfig
|
|
rm -f "$srcdir"/linux-${_basekernel}/arch/tile/configs/tilepro_defconfig
|
|
rm -f "$srcdir"/linux-${_basekernel}/drivers/staging/lustre/lnet/lnet/lib-eq.c
|
|
rm -f "$srcdir"/linux-${_basekernel}/kernel/sched/MuQSS*
|
|
rm -f "$srcdir"/linux-${_basekernel}/kernel/skip_list.c
|
|
|
|
rm -f "$srcdir"/linux-${_basekernel}/Documentation/vm/uksm.txt
|
|
rm -f "$srcdir"/linux-${_basekernel}/include/linux/sradix-tree.h
|
|
rm -f "$srcdir"/linux-${_basekernel}/include/linux/uksm.h
|
|
rm -f "$srcdir"/linux-${_basekernel}/lib/sradix-tree.c
|
|
rm -f "$srcdir"/linux-${_basekernel}/mm/uksm.c
|
|
fi
|
|
|
|
if [ "${_distro}" = "Arch" ]; then
|
|
remove_deps || ( true && msg2 "remove_deps not found" )
|
|
fi
|
|
|
|
msg2 'exit cleanup done\n'
|
|
if [ -n "$_runtime" ]; then
|
|
msg2 "compilation time : \n$_runtime"
|
|
fi
|
|
}
|
|
if [ "$_distro" != "Void" ]; then
|
|
trap exit_cleanup EXIT
|
|
fi
|