#!/usr/bin/env bash # shellcheck disable=SC2034 disable=SC2048 disable=SC2086 disable=SC2154 # Maintainer: JeremyStarTM # Maintainer: Josip Ponjavic # Contributor: yarost12 ### BUILD OPTIONS # You can modify these settings by executing "env _= makepkg" # instead of modifying the PKGBUILD file. Here's an example: # env _makemenuconfig=y _copyfinalconfig=y _subarch=30 makepkg # Tweak kernel options prior to a build via menuconfig. # # Set to anything but null to activate. : "${_makemenuconfig:=""}" # Tweak kernel options prior to a build via nconfig. # # Set to anything but null to activate. : "${_makenconfig:=""}" # Tweak kernel options prior to a build via xconfig. # # Set to anything but null to activate. : "${_makexconfig:=""}" # Use the current kernel's .config file # Enabling this option will use the .config of the currently # running kernel rather than the Arch Linux defaults. Useful # when the package gets updated and you already went through # the trouble of customizing your config options. NOT recommended # when a new kernel is released, but again, convenient # for package bumps. # # Set to anything but null to activate. : "${_use_current:=""}" # Apply selected optimizations chosen by # the package maintainers to the config. # # Only takes effect if '_use_current' # is enabled. Keep disabled if you want # to reuse your existing kernel configuration # without any changes being applied to it. # # Set to anything but null to activate. : "${_optimize_defconfig:=""}" # Determines whether the kernel configuration should be # copied into the source tree before compilation starts. # # Set to anything but null to activate. : "${_copyfinalconfig:=""}" # Only compile active 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 modprobed-db a try: https://aur.archlinux.org/packages/modprobed-db # # More at this wiki page ---> https://wiki.archlinux.org/index.php/Modprobed-db # Set to anything but null to activate. : "${_localmodcfg:=""}" # Optionally select a sub architecture by number or # leave blank, which will require user interaction during the build. # Note that the default option is 41. # # 1. AMD Opteron/Athlon64/Hammer/K8 (MK8) # 2. AMD Opteron/Athlon64/Hammer/K8 with SSE3 (MK8SSE3) # 3. AMD 61xx/7x50/PhenomX3/X4/II/K10 (MK10) # 4. AMD Barcelona (MBARCELONA) # 5. AMD Bobcat (MBOBCAT) # 6. AMD Jaguar (MJAGUAR) # 7. AMD Bulldozer (MBULLDOZER) # 8. AMD Piledriver (MPILEDRIVER) # 9. AMD Steamroller (MSTEAMROLLER) # 10. AMD Excavator (MEXCAVATOR) # 11. AMD Zen (MZEN) # 12. AMD Zen 2 (MZEN2) # 13. AMD Zen 3 (MZEN3) # 14. AMD Zen 4 (MZEN4) # 15. AMD Zen 5 (MZEN5) # 16. Intel P4 / older Netburst based Xeon (MPSC) # 17. Intel Atom (MATOM) # 18. Intel Core 2 (MCORE2) # 19. Intel Nehalem (MNEHALEM) # 20. Intel Westmere (MWESTMERE) # 21. Intel Silvermont (MSILVERMONT) # 22. Intel Goldmont (MGOLDMONT) # 23. Intel Goldmont Plus (MGOLDMONTPLUS) # 24. Intel Sandy Bridge (MSANDYBRIDGE) # 25. Intel Ivy Bridge (MIVYBRIDGE) # 26. Intel Haswell (MHASWELL) # 27. Intel Broadwell (MBROADWELL) # 28. Intel Skylake (MSKYLAKE) # 29. Intel Skylake X (MSKYLAKEX) # 30. Intel Cannon Lake (MCANNONLAKE) # 31. Intel Ice Lake (MICELAKE) # 32. Intel Cascade Lake (MCASCADELAKE) # 33. Intel Cooper Lake (MCOOPERLAKE) # 34. Intel Tiger Lake (MTIGERLAKE) # 35. Intel Sapphire Rapids (MSAPPHIRERAPIDS) # 36. Intel Rocket Lake (MROCKETLAKE) # 37. Intel Alder Lake (MALDERLAKE) # 38. Intel Raptor Lake (MRAPTORLAKE) # 39. Intel Meteor Lake (MMETEORLAKE) # 40. Intel Emerald Rapids (MEMERALDRAPIDS) # 41. Generic-x86-64 (GENERIC_CPU) # 42. Intel-Native optimizations autodetected by the compiler (MNATIVE_INTEL) # 43. AMD-Native optimizations autodetected by the compiler (MNATIVE_AMD) : "${_subarch:=""}" # Selects the x86-64 microarchitecture to compile for. # This value is only used by the GENERIC_CPU # subarchitecture and is required. # Can be either '1', '2', '3' or '4' # # Set to '1' by default # # For more information see: # https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels : "${_subarch_microarch:="1"}" # Enable compilation with LLVM # Be warned, this is largely untested by me (JeremyStarTM). It *should* work, # but if it doesn't, write a comment and I'll fix it. # # Set to anything but null to activate. : "${_use_llvm_lto:=""}" # Debug options # This allows you to enable or disable debug options. # Set to 'y' to force enable, 'n' to force disable or '' to ignore debug options. # Leaving the setting empty will use the kernel configuration setting to determine # if debug options shall be enabled/disabled. # # Set to anything but null to activate. : "${_debug:=""}" ### BUILD OPTIONS END # Kernel version _kernel_major=6.12 _kernel_minor=4 # Clear Linux patches version _clr=4-1518 # kernel_compiler_patch version _kernelcompilerpatch="20241018" # Source directory names _src_linux=linux-${_kernel_major} _src_clr=${_kernel_major}.${_clr} # Package information pkgbase=linux-clear pkgver=${_kernel_major}.${_kernel_minor} pkgrel=1 pkgdesc="Linux kernel with patches from Clear Linux which allow for higher performance." arch=("x86_64") url="https://git.staropensource.de/JeremyStarTM/aur-linux-clear" license=(GPL-2.0-only) makedepends=("bc" "cpio" "gettext" "git" "libelf" "pahole" "perl" "python" "tar" "xz" "zstd") [[ -n "${_use_llvm_to}" ]] && makedepends+=("clang" "llvm" "lld") options=("!strip" "!debug") [[ "${_debug}" == "y" ]] && options=("!strip") source=( "https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-${_kernel_major}.tar.xz" "https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-${_kernel_major}.tar.sign" "https://cdn.kernel.org/pub/linux/kernel/v6.x/patch-${_kernel_major}.${_kernel_minor}.xz" "cl-linux::git+https://github.com/clearlinux-pkgs/linux.git#tag=${_src_clr}" "more-uarches-${_kernelcompilerpatch}.tar.gz::https://github.com/graysky2/kernel_compiler_patch/archive/${_kernelcompilerpatch}.tar.gz" ) [[ -n "${_use_llvm_lto}" ]] && BUILD_FLAGS=("LLVM=1" "LLVM_IAS=1") export "KBUILD_BUILD_HOST=archlinux" export "KBUILD_BUILD_USER=${pkgbase}" export "KBUILD_BUILD_TIMESTAMP=$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})" # Applies all patches apply_patches() { # Patch with kernel version patches patch -Np1 -i ../patch-${_kernel_major}.${_kernel_minor} || true # Set version echo "-${pkgrel}" > localversion.10-pkgrel echo "${pkgbase#linux}" > localversion.20-pkgname # Patch with Clear Linux patches for i in $(grep '^Patch' "${srcdir}"/cl-linux/linux.spec|grep -Ev '^Patch0132|^Patch0109|^Patch0118|^Patch0113|^Patch0138|^Patch0139|^Patch0147' | sed -n 's/.*: //p'); do if [ -n "${_use_llvm_lto}" ]; then if [ "${i}" == "0133-novector.patch" ] ; then continue fi fi patch -Np1 -i "${srcdir}/cl-linux/${i}" || true done # Patch with kernel_compiler_patch patches. # Do this before any defconfig invocations so we # have all of the extra selectable uarches ready and selectable patch -Np1 -i "$srcdir/kernel_compiler_patch-$_kernelcompilerpatch/more-ISA-levels-and-uarches-for-kernel-6.1.79+.patch" } # Allows user to modify the kernel config modify_defconfig() { [[ -n "$_makemenuconfig" ]] && make ${BUILD_FLAGS[*]} menuconfig [[ -n "$_makexconfig" ]] && make ${BUILD_FLAGS[*]} xconfig [[ -n "$_makenconfig" ]] && make ${BUILD_FLAGS[*]} nconfig # Don't crash if all three are false true } # Copies the kernel config copy_defconfig() { local "_cur_major_ver=$(zcat /proc/config.gz | grep Linux | grep -o '[0-9]*[0-9]\.[0-9]*[0-9]')" [[ "${_cur_major_ver}" != "${_kernel_major}" ]] && warning "Major version was updated, you should regen the defconfig" if [[ -s /proc/config.gz ]]; then # modprobe configs zcat /proc/config.gz > ./.config make ${BUILD_FLAGS[*]} olddefconfig else warning "Your kernel was not compiled with IKCONFIG_PROC." warning "Unable to read kernel configuration, aborting." exit fi } # Updates the kernel config update_defconfig() { # Copy configuration file (if found) if [ -f "${startdir}/kconfig" ]; then echo ":: Using configuration file \"${startdir}/kconfig\"" cp -Tf "${startdir}/kconfig" ./.config else echo ":: Using configuration file \"${srcdir}/${pkgbase}/config\"" cp -Tf $srcdir/cl-linux/config ./.config fi # Extra configuration # General setup scripts/config --set-str DEFAULT_HOSTNAME archlinux \ -e IKCONFIG \ -e IKCONFIG_PROC \ -u RT_GROUP_SCHED # Power management and ACPI options scripts/config -e ACPI_REV_OVERRIDE_POSSIBLE \ -e ACPI_TABLE_UPGRADE # Virtualization scripts/config -e KVM_SMM # General architecture-dependent options scripts/config -e KPROBES # Enable loadable module support scripts/config -u MODULE_SIG_FORCE # Networking support scripts/config -e NETFILTER_INGRESS # Device Drivers scripts/config -e FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER \ -e DELL_SMBIOS_SMM \ -m PATA_JMICRON \ -E SOUND SOUND_OSS_CORE \ -e SND_OSSEMUL \ -M SND_OSSEMUL SND_MIXER_OSS \ -M SND_MIXER_OSS SND_PCM_OSS \ -E SND_PCM_OSS SND_PCM_OSS_PLUGINS \ -m AGP -M AGP AGP_INTEL -M AGP_INTEL AGP_VIA # Kernel hacking -> Compile-time checks and compiler options -> Make section mismatch errors non-fatal scripts/config -e SECTION_MISMATCH_WARN_ONLY # File systems scripts/config -m NTFS3_FS \ -e NTFS3_LZX_XPRESS \ -e NTFS3_FS_POSIX_ACL scripts/config -m SMB_SERVER \ -e SMB_SERVER_SMBDIRECT \ -e SMB_SERVER_CHECK_CAP_NET_ADMIN \ -e SMB_SERVER_KERBEROS5 # Security options scripts/config -e SECURITY_SELINUX \ -e SECURITY_SELINUX_BOOTPARAM \ -e SECURITY_SMACK \ -e SECURITY_SMACK_BRINGUP \ -e SECURITY_SMACK_NETFILTER \ -e SECURITY_SMACK_APPEND_SIGNALS \ -e SECURITY_TOMOYO \ -e SECURITY_APPARMOR \ -e SECURITY_YAMA # Security options -> Landlock options scripts/config -e SECURITY_LANDLOCK # Library routines scripts/config -k -e FONT_TER16x32 # Enable LLVM compilation [[ -n "${_use_llvm_lto}" ]] && scripts/config -d LTO_NONE \ -e LTO \ -e LTO_CLANG \ -e ARCH_SUPPORTS_LTO_CLANG \ -e ARCH_SUPPORTS_LTO_CLANG_THIN \ -e HAS_LTO_CLANG \ -e LTO_CLANG_THIN \ -e HAVE_GCC_PLUGINS # Enable or disable debug settings [[ "${_debug}" == "y" ]] && scripts/config -e DEBUG_INFO \ -e DEBUG_INFO_BTF \ -e DEBUG_INFO_DWARF4 \ -e PAHOLE_HAS_SPLIT_BTF \ -e DEBUG_INFO_BTF_MODULES [[ "${_debug}" == "n" ]] && scripts/config -d DEBUG_INFO \ -d DEBUG_INFO_BTF \ -d DEBUG_INFO_DWARF4 \ -d PAHOLE_HAS_SPLIT_BTF \ -d DEBUG_INFO_BTF_MODULES # Run olddefconfig make ${BUILD_FLAGS[*]} olddefconfig diff -u $srcdir/cl-linux/config .config || : # Set subarch automatically if [ -n "${_subarch}" ]; then if [ "${_subarch}" == "41" ]; then yes "${_subarch} ${_subarch_microarch}" | make ${BUILD_FLAGS[*]} oldconfig else yes "${_subarch}" | make ${BUILD_FLAGS[*]} oldconfig fi else # Ask for subarch make ${BUILD_FLAGS[*]} oldconfig fi } # Prepares the installation prepare() { cd "${_src_linux}" || exit 1 apply_patches [[ -n "${_use_current}" ]] && copy_defconfig [[ -n "${_optimize_defconfig}" ]] || [[ -z "${_use_current}" ]] && update_defconfig # Read and apply modprobed database # See https://aur.archlinux.org/packages/modprobed-db [[ -n "${_localmodcfg}" ]] && if [ -e "${HOME}/.config/modprobed.db" ]; then make ${BUILD_FLAGS[*]} LSMOD=${HOME}/.config/modprobed.db localmodconfig else echo ":: No modprobed.db file was found at ${HOME}/.config, skipping" fi # Open configuration editors modify_defconfig # Save configuration # shellcheck disable=SC2015 [[ -n "${_copyfinalconfig}" ]] && cp -Tf ./.config "${startdir}/kconfig-new" || true # Write kernel version make -s kernelrelease > version } # Build kernel build() { cd "${_src_linux}" || exit 1 make ${BUILD_FLAGS[*]} all } # Packages the kernel package _package() { pkgdesc="${pkgdesc} This package includes the kernel and compiled modules." depends=("coreutils" "kmod" "initramfs") optdepends=("wireless-regdb: to set the correct wireless channels of your country" "linux-firmware: firmware images needed for some devices") provides=(VIRTUALBOX-GUEST-MODULES WIREGUARD-MODULE KSMBD-MODULE) install=linux.install cd "${_src_linux}" || exit 1 local "modulesdir=${pkgdir}/usr/lib/modules/$(