Install this version:
emerge -a =sys-kernel/cachyos-sources-7.2.4
If this version is masked, you can unmask it using the autounmask tool or standard emerge options:
autounmask =sys-kernel/cachyos-sources-7.2.4
Or alternatively:
emerge --autounmask-write -a =sys-kernel/cachyos-sources-7.2.4
| Version | EAPI | Keywords | Slot |
|---|---|---|---|
| 7.2.4 | 8 | ~amd64 |
# Copyright 2023-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI="8"
ETYPE="sources"
EXTRAVERSION="-cachyos"
K_NOSETEXTRAVERSION="1"
# Pin patch and config inputs so Manifest checks cover exact upstream bytes.
CACHYOS_PATCHES_COMMIT="c3555d2ea83e22259652d5ad4b42036fd57b94f4"
CACHYOS_CONFIGS_COMMIT="bf83c8e65c1e801fb6ed4734824dbee4a73031be"
CACHYOS_PR="1"
# Apply Gentoo base and extras fixes on top of the CachyOS release tree.
K_WANT_GENPATCHES="base extras"
K_GENPATCHES_VER="5"
# CachyOS already contains point-release updates and genpatch 2700.
UNIPATCH_EXCLUDE="10 2700"
# The release tarball already carries the exact ${PV} tree.
K_NO_VERSION_CHECK="1"
K_SECURITY_UNSUPPORTED="1"
CJKTTY_PV="7.2"
ZFS_COMMIT="71a9f9578616a90c3c14bb59629fb4d31bfd68d1"
CKV="$(ver_cut 1-3)"
CACHYOS_SERIES="$(ver_cut 1-2)"
CACHYOS_PATCH_URI="https://github.com/CachyOS/kernel-patches/raw/${CACHYOS_PATCHES_COMMIT}/${CACHYOS_SERIES}"
CACHYOS_CONFIG_URI="https://github.com/CachyOS/linux-cachyos/raw/${CACHYOS_CONFIGS_COMMIT}"
CACHYOS_PATCH_PREFIX="cachyos-kernel-patches-${CACHYOS_PATCHES_COMMIT}-${CACHYOS_SERIES}"
CACHYOS_CONFIG_PREFIX="linux-cachyos-${CACHYOS_CONFIGS_COMMIT}"
inherit check-reqs kernel-2 optfeature cjktty
# Initialize kernel-2 version variables before constructing the CachyOS URL.
detect_version
KERNEL_URI="https://github.com/CachyOS/linux/releases/download/cachyos-${CKV}-${CACHYOS_PR}/cachyos-${CKV}-${CACHYOS_PR}.tar.gz"
# CachyOS supplies the complete kernel tree; disable kernel.org incrementals.
UNIPATCH_LIST_DEFAULT=""
DESCRIPTION="Archlinux kernel based on different schedulers and performance improvements"
HOMEPAGE="
https://cachyos.org
https://github.com/CachyOS/linux-cachyos
https://github.com/CachyOS/linux
https://github.com/CachyOS/kernel-patches
https://github.com/gentoo-zh/cjktty-patches
"
SRC_URI+="
${KERNEL_URI}
${GENPATCHES_URI}
${CACHYOS_CONFIG_URI}/linux-cachyos/config
-> ${CACHYOS_CONFIG_PREFIX}-config
bore? (
${CACHYOS_PATCH_URI}/sched/0001-bore-cachy.patch
-> ${CACHYOS_PATCH_PREFIX}-bore.patch
)
bmq? (
${CACHYOS_PATCH_URI}/sched/0001-prjc-cachy.patch
-> ${CACHYOS_PATCH_PREFIX}-prjc.patch
)
muqss? (
${CACHYOS_PATCH_URI}/sched/0001-muqss-cachy.patch
-> ${CACHYOS_PATCH_PREFIX}-muqss.patch
)
deckify? (
${CACHYOS_PATCH_URI}/misc/0001-acpi-call.patch
-> ${CACHYOS_PATCH_PREFIX}-acpi-call.patch
${CACHYOS_PATCH_URI}/misc/0001-handheld.patch
-> ${CACHYOS_PATCH_PREFIX}-handheld.patch
)
rt? (
${CACHYOS_PATCH_URI}/misc/0001-rt-i915.patch
-> ${CACHYOS_PATCH_PREFIX}-rt-i915.patch
)
rt-bore? (
${CACHYOS_PATCH_URI}/sched/0001-bore-cachy.patch
-> ${CACHYOS_PATCH_PREFIX}-bore.patch
${CACHYOS_PATCH_URI}/misc/0001-rt-i915.patch
-> ${CACHYOS_PATCH_PREFIX}-rt-i915.patch
)
${CACHYOS_PATCH_URI}/misc/dkms-clang.patch
-> ${CACHYOS_PATCH_PREFIX}-dkms-clang.patch
kernel-builtin-zfs? (
https://github.com/cachyos/zfs/archive/${ZFS_COMMIT}.tar.gz
-> zfs-${ZFS_COMMIT}.tar.gz
)
"
LICENSE+=" kernel-builtin-zfs? ( BSD-2 CDDL GPL-3 MIT )"
KEYWORDS="~amd64"
IUSE+="
+bore bmq muqss rt rt-bore eevdf
server deckify kcfi cjk
+autofdo +propeller
+llvm-lto-thin llvm-lto-full llvm-lto-thin-dist llvm-lto-none
kernel-builtin-zfs
hz-ticks-100 hz-ticks-250 hz-ticks-300 hz-ticks-500 hz-ticks-600 hz-ticks-750 +hz-ticks-1000
+per-gov tickrate-periodic tickrate-idle +tickrate-full +preempt-full preempt-lazy
+o3 os debug +bbr3
+hugepage-always hugepage-madvise
mgeneric mgeneric-v1 mgeneric-v2 mgeneric-v3 mgeneric-v4
+mnative mzen4
"
# OpenZFS does not support Clang CFI: https://github.com/openzfs/zfs/issues/15911
# Scheduler patches carried in kernel-patches but unavailable for 7.2:
# - hardened remains on 7.1.8
# - PRJC-LFBMQ has no 7.2 patch family
# - bare non-Cachy BORE is not used by packaged CachyOS variants
REQUIRED_USE+="
^^ ( bore bmq muqss rt rt-bore eevdf )
server? (
eevdf
hz-ticks-300 tickrate-full preempt-lazy !per-gov
llvm-lto-none !autofdo !propeller
o3 hugepage-always
)
propeller? ( !llvm-lto-full !llvm-lto-none )
autofdo? ( || ( llvm-lto-thin llvm-lto-full llvm-lto-thin-dist ) )
kernel-builtin-zfs? ( !kcfi )
^^ ( llvm-lto-thin llvm-lto-full llvm-lto-thin-dist llvm-lto-none )
^^ ( hz-ticks-100 hz-ticks-250 hz-ticks-300 hz-ticks-500 hz-ticks-600 hz-ticks-750 hz-ticks-1000 )
^^ ( tickrate-periodic tickrate-idle tickrate-full )
^^ ( preempt-full preempt-lazy )
?? ( o3 os debug )
^^ ( hugepage-always hugepage-madvise )
?? ( mgeneric mgeneric-v1 mgeneric-v2 mgeneric-v3 mgeneric-v4 mnative mzen4 )
"
RDEPEND+="
dev-util/pahole
autofdo? ( dev-util/perf[libpfm] )
!llvm-lto-none? (
llvm-core/clang
llvm-core/lld
)
llvm-lto-none? (
kernel-builtin-zfs? (
llvm-core/clang
llvm-core/lld
)
!kernel-builtin-zfs? (
propeller? (
llvm-core/clang
llvm-core/lld
)
!propeller? (
kcfi? ( llvm-core/clang )
)
)
)
"
_set_hztick_rate() {
local hertz=$1
if [[ ${hertz} == 300 ]]; then
scripts/config -e HZ_300 --set-val HZ 300 || die
else
scripts/config -d HZ_300 -e "HZ_${hertz}" --set-val HZ "${hertz}" || die
fi
}
universal_unpack() {
# Rename the pre-patched CachyOS release directory to kernel-2.eclass's ${S}.
cd "${WORKDIR}" || die
unpack "cachyos-${CKV}-${CACHYOS_PR}.tar.gz"
mv "cachyos-${CKV}-${CACHYOS_PR}" "${S}" || die
cd "${S}" || die
}
src_unpack() {
# kernel-2_src_unpack calls the universal_unpack override above.
kernel-2_src_unpack
if use kernel-builtin-zfs; then
# Place pinned ZFS sources inside the installed kernel source tree.
unpack "zfs-${ZFS_COMMIT}.tar.gz"
mv "zfs-${ZFS_COMMIT}" zfs || die
cp "${FILESDIR}/kernel-build.sh" . || die
chmod +x kernel-build.sh || die
fi
}
src_prepare() {
local patches_prefix="${DISTDIR}/${CACHYOS_PATCH_PREFIX}"
local configs_prefix="${DISTDIR}/${CACHYOS_CONFIG_PREFIX}"
local march_flag march=""
local -a march_flags=(
mgeneric mgeneric-v1 mgeneric-v2 mgeneric-v3 mgeneric-v4 mnative mzen4
)
# Add distributed ThinLTO handling omitted by the upstream AutoFDO/Propeller makefiles.
# https://github.com/Szowisz/CachyOS-kernels/issues/35
# Included upstream since the CachyOS 7.2.3 patch series.
if ! ver_test -ge 7.2.3; then
eapply "${FILESDIR}/6.19.0/misc/0002-fix-autofdo-propeller-lto-thin-dist.patch"
fi
# 7.2.3 changed code that PRJC and MuQSS replace; restore their expected preimage.
if use bmq || use muqss; then
eapply "${FILESDIR}/cachyos-sources-7.2.3-revert-empty-cpuset-floor.patch"
fi
if use bore || use rt-bore; then
eapply "${patches_prefix}-bore.patch"
elif use bmq; then
eapply "${patches_prefix}-prjc.patch"
elif use muqss; then
eapply "${patches_prefix}-muqss.patch"
fi
if use rt || use rt-bore; then
eapply "${patches_prefix}-rt-i915.patch"
fi
cp "${configs_prefix}-config" .config || die
if use deckify; then
eapply "${patches_prefix}-acpi-call.patch"
eapply "${patches_prefix}-handheld.patch"
fi
if use kcfi || use propeller || ! use llvm-lto-none; then
eapply "${patches_prefix}-dkms-clang.patch"
fi
cjktty_apply_patches
eapply_user
# CachyOS ships this generated BPF object; remove it so sources remain rebuildable.
rm -f tools/testing/selftests/tc-testing/action-ebpf || die
# Take the suffix from KV_FULL so the source directory, the slot and
# kernelrelease cannot drift apart across revisions.
echo "${KV_FULL#${PV}}" > localversion.20-pkgname || die
if use server; then
scripts/config -d CACHY || die
else
scripts/config -e CACHY || die
fi
if use cjk; then
# cjktty symbols are mixed-case; scripts/config upper-cases them without --keep-case.
scripts/config --keep-case -e FONT_CJK_16x16 || die
# The cjk32 data patch has no effect until its font symbol is explicitly selected.
use cjk32 && { scripts/config --keep-case -e FONT_CJK_32x32 || die; }
fi
if use bore; then
scripts/config -e SCHED_BORE || die
elif use bmq; then
scripts/config -e SCHED_ALT -e SCHED_BMQ || die
elif use muqss; then
scripts/config -e SCHED_MUQSS -e MUQSS_IOTIME || die
elif use rt; then
scripts/config -e PREEMPT_RT || die
elif use rt-bore; then
scripts/config -e SCHED_BORE -e PREEMPT_RT || die
elif use eevdf; then
scripts/config -e SCHED_POC_SELECTOR || die
fi
if use deckify; then
scripts/config \
-d RCU_LAZY_DEFAULT_OFF \
-e AMD_PRIVATE_COLOR \
-m SENSORS_STEAMDECK \
-m MFD_STEAMDECK \
-m SND_SOC_AW87XXX \
-m HID_ASUS_ALLY \
-m HID_LENOVO_GO \
-m HID_LENOVO_GO_S \
-m HID_MSI_CLAW \
-m ZOTAC_ZONE_HID \
-m LEDS_STEAMDECK \
-m LEDS_VALVE \
-e ACPI_CALL \
-m ZOTAC_ZONE_PLATFORM \
-m EXTCON_STEAMDECK \
-m HID_MSI || die
fi
if use kcfi; then
scripts/config -e ARCH_SUPPORTS_CFI_CLANG -e CFI -e CFI_CLANG -e CFI_AUTO_DEFAULT || die
else
# OpenZFS does not support Clang CFI: https://github.com/openzfs/zfs/issues/15911
scripts/config -d CFI -d CFI_CLANG -e CFI_PERMISSIVE || die
fi
# Select exactly one LLVM LTO mode from REQUIRED_USE.
if use llvm-lto-thin; then
scripts/config -d LTO_NONE -d LTO_CLANG_FULL -d LTO_CLANG_THIN_DIST \
-e LTO_CLANG_THIN || die
elif use llvm-lto-thin-dist; then
scripts/config -d LTO_NONE -d LTO_CLANG_FULL -d LTO_CLANG_THIN \
-e LTO_CLANG_THIN_DIST || die
elif use llvm-lto-full; then
scripts/config -d LTO_NONE -d LTO_CLANG_THIN -d LTO_CLANG_THIN_DIST \
-e LTO_CLANG_FULL || die
elif use llvm-lto-none; then
scripts/config -d LTO_CLANG_FULL -d LTO_CLANG_THIN -d LTO_CLANG_THIN_DIST \
-e LTO_NONE || die
fi
if use llvm-lto-none; then
scripts/config --set-str DRM_PANIC_SCREEN qr_code -e DRM_PANIC_SCREEN_QR_CODE \
--set-str DRM_PANIC_SCREEN_QR_CODE_URL "https://panic.archlinux.org/panic_report#" \
--set-val DRM_PANIC_SCREEN_QR_VERSION 40 || die
fi
if use hz-ticks-100; then
_set_hztick_rate 100
elif use hz-ticks-250; then
_set_hztick_rate 250
elif use hz-ticks-300; then
_set_hztick_rate 300
elif use hz-ticks-500; then
_set_hztick_rate 500
elif use hz-ticks-600; then
_set_hztick_rate 600
elif use hz-ticks-750; then
_set_hztick_rate 750
elif use hz-ticks-1000; then
_set_hztick_rate 1000
else
die "Invalid HZ_TICKS use flag. Please select a valid option."
fi
if use per-gov; then
scripts/config -d CPU_FREQ_DEFAULT_GOV_SCHEDUTIL -e CPU_FREQ_DEFAULT_GOV_PERFORMANCE || die
fi
if use tickrate-periodic; then
scripts/config -d NO_HZ_IDLE -d NO_HZ_FULL -d NO_HZ -d NO_HZ_COMMON -e HZ_PERIODIC || die
fi
if use tickrate-idle; then
scripts/config -d HZ_PERIODIC -d NO_HZ_FULL -e NO_HZ_IDLE -e NO_HZ -e NO_HZ_COMMON || die
fi
if use tickrate-full; then
scripts/config \
-d HZ_PERIODIC -d NO_HZ_IDLE -d CONTEXT_TRACKING_FORCE \
-e NO_HZ_FULL_NODEF -e NO_HZ_FULL -e NO_HZ -e NO_HZ_COMMON \
-e CONTEXT_TRACKING || die
fi
if ! use rt && ! use rt-bore; then
scripts/config -e PREEMPT_DYNAMIC || die
if use preempt-full; then
scripts/config -e PREEMPT -d PREEMPT_LAZY || die
elif use preempt-lazy; then
scripts/config -d PREEMPT -e PREEMPT_LAZY || die
fi
fi
if use o3; then
scripts/config -d CC_OPTIMIZE_FOR_PERFORMANCE -e CC_OPTIMIZE_FOR_PERFORMANCE_O3 || die
elif use os; then
scripts/config -d CC_OPTIMIZE_FOR_PERFORMANCE -e CC_OPTIMIZE_FOR_SIZE || die
elif use debug; then
scripts/config -d CC_OPTIMIZE_FOR_PERFORMANCE \
-d CC_OPTIMIZE_FOR_PERFORMANCE_O3 \
-e CC_OPTIMIZE_FOR_SIZE \
-d SLUB_DEBUG \
-d PM_DEBUG \
-d PM_ADVANCED_DEBUG \
-d PM_SLEEP_DEBUG \
-d ACPI_DEBUG \
-d LATENCYTOP \
-d SCHED_DEBUG \
-d DEBUG_PREEMPT || die
fi
if use bbr3; then
# Keep vanilla BBR modular while selecting actual BBR3, avoiding duplicate
# tcp_bbr_check_kfunc_ids BTF sets in vmlinux.
scripts/config -m TCP_CONG_CUBIC \
-d DEFAULT_CUBIC \
-m TCP_CONG_BBR \
-d DEFAULT_BBR \
-e TCP_CONG_BBR3 \
-e DEFAULT_BBR3 \
--set-str DEFAULT_TCP_CONG bbr3 \
-m NET_SCH_FQ_CODEL \
-e NET_SCH_FQ \
-d DEFAULT_FQ_CODEL \
-e DEFAULT_FQ || die
fi
if use hugepage-always; then
scripts/config -d TRANSPARENT_HUGEPAGE_MADVISE -e TRANSPARENT_HUGEPAGE_ALWAYS || die
fi
if use hugepage-madvise; then
scripts/config -d TRANSPARENT_HUGEPAGE_ALWAYS -e TRANSPARENT_HUGEPAGE_MADVISE || die
fi
for march_flag in "${march_flags[@]}"; do
if use "${march_flag}"; then
march=${march_flag#?}
march=${march^^}
# The USE flag spells the ISA level with a hyphen, the Kconfig
# symbol with an underscore.
march=${march//-/_}
case ${march} in
GENERIC_V[1-4])
scripts/config -e GENERIC_CPU -d MZEN4 -d X86_NATIVE_CPU \
--set-val X86_64_VERSION "${march#GENERIC_V}" || die
;;
ZEN4)
scripts/config -d GENERIC_CPU -e MZEN4 -d X86_NATIVE_CPU || die
;;
NATIVE)
scripts/config -d GENERIC_CPU -d MZEN4 -e X86_NATIVE_CPU || die
;;
esac
break
fi
done
if [[ -z ${march} ]]; then
scripts/config -d GENERIC_CPU -d MZEN4 -e X86_NATIVE_CPU || die
fi
use autofdo && { scripts/config -e AUTOFDO_CLANG || die; }
use propeller && { scripts/config -e PROPELLER_CLANG || die; }
scripts/config --set-str DEFAULT_HOSTNAME "gentoo" || die
# CachyOS lowers this for silent systemd boot; restore Gentoo/OpenRC's default.
scripts/config --set-val CONSOLE_LOGLEVEL_DEFAULT 7 || die
}
pkg_pretend() {
CHECKREQS_DISK_BUILD="4G"
check-reqs_pkg_pretend
}
pkg_setup() {
ewarn ""
ewarn "${PN} is *not* supported by the Gentoo Kernel Project in any way."
ewarn "Do *not* open bugs in Gentoo's bugzilla. Report problems to"
ewarn "https://github.com/gentoo-zh/overlay. Thank you."
ewarn ""
kernel-2_pkg_setup
}
pkg_postinst() {
kernel-2_pkg_postinst
elog "For more information about CachyOS kernels, see https://wiki.cachyos.org/features/kernel/."
if use mnative; then
ewarn "USE=mnative builds the kernel with -march=native, which optimizes for your"
ewarn "specific CPU. Binary packages built this way are NOT portable to other machines."
ewarn "Use USE=mgeneric-v3 or similar for portable builds."
fi
optfeature "userspace KSM helper" sys-process/uksmd
optfeature "NVIDIA open-source module" "x11-drivers/nvidia-drivers[kernel-open]"
optfeature "NVIDIA module" x11-drivers/nvidia-drivers
optfeature "Realtek RTL8125 2.5GbE driver" net-misc/r8125
optfeature "ZFS support" sys-fs/zfs
optfeature "sched_ext schedulers" sys-kernel/scx-loader
if use kernel-builtin-zfs; then
ewarn "USE=kernel-builtin-zfs builds ZFS into the kernel."
ewarn "sys-fs/zfs is the supported path: it tracks kernel updates without a rebuild"
ewarn "of the kernel itself."
fi
if use autofdo || use propeller; then
ewarn "AutoFDO/Propeller requires profile data to affect optimization."
ewarn "Without a profile the Kconfig symbols are enabled but nothing is optimized."
fi
}
pkg_postrm() {
kernel-2_pkg_postrm
}
Manage flags for this package:
euse -i <flag> -p sys-kernel/cachyos-sources |
euse -E <flag> -p sys-kernel/cachyos-sources |
euse -D <flag> -p sys-kernel/cachyos-sources
dev-util/pahole autofdo? ( dev-util/perf[libpfm] ) !llvm-lto-none? ( llvm-core/clang llvm-core/lld ) llvm-lto-none? ( kernel-builtin-zfs? ( llvm-core/clang llvm-core/lld ) !kernel-builtin-zfs? ( propeller? ( llvm-core/clang llvm-core/lld ) !propeller? ( kcfi? ( llvm-core/clang ) ) ) )