-
-
Save graysky2/7ec57242e97d2495a0189e7da641e993 to your computer and use it in GitHub Desktop.
build with clang
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Maintainer: graysky <graysky AT archlinux DOT us> | |
# Contributor: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com> | |
### BUILD OPTIONS | |
# Set the next two variables to ANYTHING that is not null to enable them | |
# Tweak kernel options prior to a build via nconfig | |
_makenconfig= | |
# Only compile select modules to reduce the number of modules built | |
# | |
# To keep track of which modules are needed for your specific system/hardware, | |
# give module_db a try: https://aur.archlinux.org/packages/modprobed-db | |
# This PKGBUILD reads the database kept if it exists | |
# More at this wiki page ---> https://wiki.archlinux.org/index.php/Modprobed-db | |
_localmodcfg= | |
# Optionally select a sub architecture by number or leave blank which will | |
# require user interaction during the build. Note that the generic (default) | |
# option is 36. | |
# | |
# 1. AMD Opteron/Athlon64/Hammer/K8 (MK8) | |
# 2. AMD Opteron/Athlon64/Hammer/K8 with SSE3 (MK8SSE3) (NEW) | |
# 3. AMD 61xx/7x50/PhenomX3/X4/II/K10 (MK10) (NEW) | |
# 4. AMD Barcelona (MBARCELONA) (NEW) | |
# 5. AMD Bobcat (MBOBCAT) (NEW) | |
# 6. AMD Jaguar (MJAGUAR) (NEW) | |
# 7. AMD Bulldozer (MBULLDOZER) (NEW) | |
# 8. AMD Piledriver (MPILEDRIVER) (NEW) | |
# 9. AMD Steamroller (MSTEAMROLLER) (NEW) | |
# 10. AMD Excavator (MEXCAVATOR) (NEW) | |
# 11. AMD Zen (MZEN) (NEW) | |
# 12. AMD Zen 2 (MZEN2) (NEW) | |
# 13. AMD Zen 3 (MZEN3) (NEW) | |
# 14. Intel P4 / older Netburst based Xeon (MPSC) | |
# 15. Intel Core 2 (MCORE2) | |
# 16. Intel Atom (MATOM) | |
# 17. Intel Nehalem (MNEHALEM) (NEW) | |
# 18. Intel Westmere (MWESTMERE) (NEW) | |
# 19. Intel Silvermont (MSILVERMONT) (NEW) | |
# 20. Intel Goldmont (MGOLDMONT) (NEW) | |
# 21. Intel Goldmont Plus (MGOLDMONTPLUS) (NEW) | |
# 22. Intel Sandy Bridge (MSANDYBRIDGE) (NEW) | |
# 23. Intel Ivy Bridge (MIVYBRIDGE) (NEW) | |
# 24. Intel Haswell (MHASWELL) (NEW) | |
# 25. Intel Broadwell (MBROADWELL) (NEW) | |
# 26. Intel Skylake (MSKYLAKE) (NEW) | |
# 27. Intel Skylake X (MSKYLAKEX) (NEW) | |
# 28. Intel Cannon Lake (MCANNONLAKE) (NEW) | |
# 29. Intel Ice Lake (MICELAKE) (NEW) | |
# 30. Intel Cascade Lake (MCASCADELAKE) (NEW) | |
# 31. Intel Cooper Lake (MCOOPERLAKE) (NEW) | |
# 32. Intel Tiger Lake (MTIGERLAKE) (NEW) | |
# 33. Intel Sapphire Rapids (MSAPPHIRERAPIDS) (NEW) | |
# 34. Intel Rocket Lake (MROCKETLAKE) (NEW) | |
# 35. Intel Alder Lake (MALDERLAKE) (NEW) | |
# 36. Generic-x86-64 (GENERIC_CPU) | |
# 37. Generic-x86-64-v2 (GENERIC_CPU2) (NEW) | |
# 38. Generic-x86-64-v3 (GENERIC_CPU3) (NEW) | |
# 39. Generic-x86-64-v4 (GENERIC_CPU4) (NEW) | |
# 40. Intel-Native optimizations autodetected by GCC (MNATIVE_INTEL) (NEW) | |
# 41. AMD-Native optimizations autodetected by GCC (MNATIVE_AMD) (NEW) | |
_subarch= | |
### IMPORTANT: Do no edit below this line unless you know what you're doing | |
pkgbase=linux-ck | |
pkgver=5.17.3 | |
pkgrel=2 | |
arch=(x86_64) | |
url="https://wiki.archlinux.org/index.php/Linux-ck" | |
license=(GPL2) | |
depends=(coreutils kmod initramfs) | |
makedepends=( | |
bc libelf cpio perl tar xz clang llvm lld | |
) | |
options=('!strip') | |
# https://ck-hack.blogspot.com/2021/08/514-and-future-of-muqss-and-ck-once.html | |
# thankfully xanmod keeps the hrtimer patches up to date | |
_commit=bc1b55888981e44698a1dfccc06821522e6be010 | |
_xan=linux-5.17.y-xanmod | |
_gcc_more_v=20220315 | |
source=( | |
"https://www.kernel.org/pub/linux/kernel/v5.x/linux-$pkgver.tar".{xz,sign} | |
config # the main kernel config file | |
"more-uarches-$_gcc_more_v.tar.gz::https://github.com/graysky2/kernel_compiler_patch/archive/$_gcc_more_v.tar.gz" | |
#"xanmod-patches-from-ck-$_commit.tar.gz::https://github.com/xanmod/linux-patches/archive/$_commit.tar.gz" | |
"xanmod-patches-from-ck-$_commit.tar.gz::https://github.com/graysky2/linux-patches/archive/$_commit.tar.gz" | |
0001-ZEN-Add-sysctl-and-CONFIG-to-disallow-unprivileged-C.patch | |
0002-random-treat-bootloader-trust-toggle-the-same-way-as.patch | |
0003-tick-Detect-and-fix-jiffies-update-stall.patch | |
0004-tick-rcu-Remove-obsolete-rcu_needs_cpu-parameters.patch | |
0005-tick-rcu-Stop-allowing-RCU_SOFTIRQ-in-idle.patch | |
0006-lib-irq_poll-Declare-IRQ_POLL-softirq-vector-as-ksof.patch | |
) | |
validpgpkeys=( | |
'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds | |
'647F28654894E3BD457199BE38DBBDC86092693E' # Greg Kroah-Hartman | |
) | |
b2sums=('03fd68cd2a9c70fcb20dbec8b62f524f032924cf3ba555d78a2348b80bbe61735e6140d0d38d74bf3051ac19a67be7c62c67dfc9ef697097ed24637427e72dc7' | |
'SKIP' | |
'3d1e2c1dff1e828c655b449962fb47c49fdf77d58c65c8af41ee8c56fbb2d8fdb7d0b963c775b26ac4022c6e0f9c8d19c11bc1e0e358580396520e9261bc8eeb' | |
'20674a8fcc0a85726e06460a7dbccfe731c46bf377cc3bf511b7591175e7df892f271bc1909e77d9a02913c753d241493502c5ab15d9f78e95f31aa4399c2c27' | |
'96a893b65eb7f87c133b7a8d069c776950d41589e89096aad08601acaa3d67e3cad00c1611de526797d9f8785996ceb7c083aeb9aa248b5151fdc45b34764fba' | |
'576fcf6c4aa7a34af4c613e6bf9b2311bf60f328435e3ebfff292b5fcf5e6db30305396346ac71473cd7ee1efa44bb28019b9db1e0c4f705682aff77b77e7f9f' | |
'2e1fb80e3058241341b3d1b1f92c045a9d05308315e132bc8675e6a0f6ea693a0a826b160027d5db37cfab9dd4490c2288fe0dfe60f22f13f0758e0f9525320f' | |
'd81e1336f760290cc93112162d0d5a1ff8443f552e7a6ef35a27838b0b2f7705f974846a148dfe3dad51de63084f6390e2c4ce70ab03dab31963198c82449c24' | |
'e603f7f460f0e9ca69b7c94a81941cfe91c21cc1a2d2dae14487010c9935b7bd1bb458dc2286a5365995cdeec3f28f3c0e4271995b74cd89bf0673c4dd65362a' | |
'a6ae40cbf866d3d8add726a262b67818f0348897896e50e112523ad8e72f2bfde57afbfbd02c863661200f9b5caa389d49eac9aa8cbcffa8e52acb5a69fe7f02' | |
'fd94c5e3e186c1c953008190b2c913eab0d1b1bc410993fc6995ebdbcc82404c7b352805ee8cff9dfdbbddd5f9bd51b1a63fbaac00bd1552c630b8c9b48eca22') | |
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 linux-${pkgver} | |
echo "Setting version..." | |
scripts/setlocalversion --save-scmversion | |
echo "-$pkgrel" > localversion.10-pkgrel | |
echo "${pkgbase#linux}" > localversion.20-pkgname | |
local src | |
for src in "${source[@]}"; do | |
src="${src%%::*}" | |
src="${src##*/}" | |
[[ $src = 0*.patch ]] || continue | |
echo "Applying patch $src..." | |
patch -Np1 < "../$src" | |
done | |
echo "Setting config..." | |
cp ../config .config | |
# disable CONFIG_DEBUG_INFO=y at build time otherwise memory usage blows up | |
# and can easily overwhelm a system with 32 GB of memory using a tmpfs build | |
# partition ... this was introduced by FS#66260, see: | |
# https://git.archlinux.org/svntogit/packages.git/commit/trunk?h=packages/linux&id=663b08666b269eeeeaafbafaee07fd03389ac8d7 | |
scripts/config --disable CONFIG_DEBUG_INFO | |
scripts/config --disable CONFIG_CGROUP_BPF | |
scripts/config --disable CONFIG_BPF_LSM | |
scripts/config --disable CONFIG_BPF_PRELOAD | |
scripts/config --disable CONFIG_BPF_LIRC_MODE2 | |
scripts/config --disable CONFIG_BPF_KPROBE_OVERRIDE | |
# https://bbs.archlinux.org/viewtopic.php?pid=1824594#p1824594 | |
scripts/config --enable CONFIG_PSI_DEFAULT_DISABLED | |
# https://bbs.archlinux.org/viewtopic.php?pid=1863567#p1863567 | |
scripts/config --disable CONFIG_LATENCYTOP | |
scripts/config --disable CONFIG_SCHED_DEBUG | |
# FS#66613 | |
# https://bugzilla.kernel.org/show_bug.cgi?id=207173#c6 | |
scripts/config --disable CONFIG_KVM_WERROR | |
# ck recommends 1000 Hz tick and the hrtimer patches in lieu of ck1 | |
scripts/config --enable CONFIG_HZ_1000 | |
# these are ck's htrimer patches | |
echo "Patching with ck hrtimer patches..." | |
for i in ../linux-patches-"$_commit"/"$_xan"/ck-hrtimer/0*.patch; do | |
patch -Np1 -i $i | |
done | |
# non-interactively apply ck1 default options | |
# this isn't redundant if we want a clean selection of subarch below | |
make olddefconfig | |
diff -u ../config .config || : | |
# https://github.com/graysky2/kernel_gcc_patch | |
# make sure to apply after olddefconfig to allow the next section | |
echo "Patching to enable GCC optimization for other uarchs..." | |
patch -Np1 -i "$srcdir/kernel_compiler_patch-$_gcc_more_v/more-uarches-for-kernel-5.17+.patch" | |
if [ -n "$_subarch" ]; then | |
# user wants a subarch so apply choice defined above interactively via 'yes' | |
yes "$_subarch" | make oldconfig | |
else | |
# no subarch defined so allow user to pick one | |
make oldconfig | |
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 | |
make LLVM=1 LLVM_IAS=1 olddefconfig | |
make LLVM=1 LLVM_IAS=1 -s kernelrelease > version | |
echo "Prepared $pkgbase version $(<version)" | |
[[ -z "$_makenconfig" ]] || make nconfig | |
# save configuration for later reuse | |
cat .config > "${startdir}/config.last" | |
# uncomment if you want to build with distcc | |
### sed -i '/HAVE_GCC_PLUGINS/d' arch/x86/Kconfig | |
} | |
build() { | |
cd linux-${pkgver} | |
make LLVM=1 LLVM_IAS=1 all | |
} | |
_package() { | |
pkgdesc="The ${pkgbase/linux/Linux} kernel and modules with ck's hrtimer patches" | |
depends=(coreutils kmod initramfs) | |
optdepends=('wireless-regdb: to set the correct wireless channels of your country' | |
'linux-firmware: firmware images needed for some devices') | |
provides=(VIRTUALBOX-GUEST-MODULES WIREGUARD-MODULE) | |
#groups=('ck-generic') | |
cd linux-${pkgver} | |
local kernver="$(<version)" | |
local modulesdir="$pkgdir/usr/lib/modules/$kernver" | |
echo "Installing boot image..." | |
# systemd expects to find the kernel here to allow hibernation | |
# https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344 | |
#install -Dm644 "$(make -s image_name)" "$modulesdir/vmlinuz" | |
# | |
# hard-coded path in case user defined CC=xxx for build which causes errors | |
# see this FS https://bugs.archlinux.org/task/64315 | |
install -Dm644 "$(make LLVM=1 LLVM_IAS=1 -s image_name)" "$modulesdir/vmlinuz" | |
# Used by mkinitcpio to name the kernel | |
echo "$pkgbase" | install -Dm644 /dev/stdin "$modulesdir/pkgbase" | |
echo "Installing modules..." | |
make LLVM=1 LLVM_IAS=1 INSTALL_MOD_PATH="$pkgdir/usr" INSTALL_MOD_STRIP=1 \ | |
DEPMOD=/doesnt/exist modules_install # Suppress depmod | |
# remove build and source links | |
rm "$modulesdir"/{source,build} | |
} | |
_package-headers() { | |
pkgdesc="Headers and scripts for building modules for ${pkgbase/linux/Linux} kernel" | |
depends=("$pkgbase") # added to keep kernel and headers packages matched | |
#groups=('ck-generic') | |
cd linux-${pkgver} | |
local builddir="$pkgdir/usr/lib/modules/$(<version)/build" | |
echo "Installing build files..." | |
install -Dt "$builddir" -m644 .config Makefile Module.symvers System.map \ | |
localversion.* version vmlinux | |
install -Dt "$builddir/kernel" -m644 kernel/Makefile | |
install -Dt "$builddir/arch/x86" -m644 arch/x86/Makefile | |
cp -t "$builddir" -a scripts | |
# required when STACK_VALIDATION is enabled | |
install -Dt "$builddir/tools/objtool" tools/objtool/objtool | |
# required when DEBUG_INFO_BTF_MODULES is enabled | |
#install -Dt "$builddir/tools/bpf/resolve_btfids" tools/bpf/resolve_btfids/resolve_btfids | |
echo "Installing headers..." | |
cp -t "$builddir" -a include | |
cp -t "$builddir/arch/x86" -a arch/x86/include | |
install -Dt "$builddir/arch/x86/kernel" -m644 arch/x86/kernel/asm-offsets.s | |
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/{}" \; | |
echo "Removing unneeded architectures..." | |
local arch | |
for arch in "$builddir"/arch/*/; do | |
[[ $arch = */x86/ ]] && continue | |
echo "Removing $(basename "$arch")" | |
rm -r "$arch" | |
done | |
echo "Removing documentation..." | |
rm -r "$builddir/Documentation" | |
echo "Removing broken symlinks..." | |
find -L "$builddir" -type l -printf 'Removing %P\n' -delete | |
echo "Removing loose objects..." | |
find "$builddir" -type f -name '*.o' -printf 'Removing %P\n' -delete | |
echo "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) | |
#echo "Stripping vmlinux..." | |
#strip -v $STRIP_STATIC "$builddir/vmlinux" | |
# not needed since not building with CONFIG_DEBUG_INFO=y | |
echo "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: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment