# Copyright 2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI="8"
ETYPE="sources"
K_WANT_GENPATCHES="base extras"
K_GENPATCHES_VER="16"
K_SECURITY_UNSUPPORTED="1"
K_NOSETEXTRAVERSION="1"

inherit check-reqs kernel-2
detect_version
detect_arch

MY_KV="${KV_MAJOR}.${KV_MINOR}"
AUFS_V="20250106"
GIT_COMMIT_CACHYOS="3216bcc085f66090b5a9c891e16b8516c6760856"

DESCRIPTION="Full Cachyos sources including the Gentoo patchset for the ${MY_KV} kernel tree"
HOMEPAGE="https://cachyos.org"
CACHYOS_URI="https://raw.githubusercontent.com/CachyOS/kernel-patches/${GIT_COMMIT_CACHYOS}/${MY_KV}"
SRC_URI="
	${KERNEL_URI} ${GENPATCHES_URI} ${ARCH_URI}
	${CACHYOS_URI}/0003-cachy.patch -> ${P}-0003-cachy.patch
	amd-cache-optimizer? ( ${CACHYOS_URI}/0001-amd-cache-optimizer.patch -> ${P}-0001-amd-cache-optimizer.patch )
	bbr3? ( ${CACHYOS_URI}/0002-bbr3.patch -> ${P}-0002-bbr3.patch )
	fixes? ( ${CACHYOS_URI}/0004-fixes.patch -> ${P}-0004-fixes.patch )
	ntsync? ( ${CACHYOS_URI}/0005-ntsync.patch -> ${P}-0005-ntsync.patch )
	perf-per-core? ( ${CACHYOS_URI}/0006-perf-per-core.patch -> ${P}-0006-perf-per-core.patch )
	t2? ( ${CACHYOS_URI}/0007-t2.patch -> ${P}-0007-t2.patch )
	zstd? ( ${CACHYOS_URI}/0008-zstd.patch -> ${P}-0008-zstd.patch )
	bore? ( ${CACHYOS_URI}/sched/0001-bore-cachy.patch -> ${P}-0001-bore-cachy.patch )
	prjc? ( ${CACHYOS_URI}/sched/0001-prjc-cachy.patch -> ${P}-0001-prjc-cachy.patch )
	hardened? ( ${CACHYOS_URI}/misc/0001-hardened.patch -> ${P}-0001-hardened.patch )
	rt? ( ${CACHYOS_URI}/misc/0001-rt.patch -> ${P}-0001-rt.patch )
	dkms-clang? ( ${CACHYOS_URI}/misc/dkms-clang.patch -> ${P}-dkms-clang.patch )
	clang-polly? ( ${CACHYOS_URI}/misc/0001-clang-polly.patch -> ${P}-0001-clang-polly.patch )
	preempt-lazy? ( ${CACHYOS_URI}/misc/0001-preempt-lazy.patch -> ${P}-0001-preempt-lazy.patch )
	aufs? ( ${CACHYOS_URI}/misc/0001-aufs-${MY_KV}-merge-v${AUFS_V}.patch
		-> ${P}-0001-aufs-${MY_KV}-merge-v${AUFS_V}.patch )
	deckify? (
		${CACHYOS_URI}/misc/0001-acpi-call.patch -> ${P}-0001-acpi-call.patch
		${CACHYOS_URI}/misc/0001-handheld.patch -> ${P}-0001-handheld.patch
	)
"
KEYWORDS="~amd64"
IUSE="amd-cache-optimizer bbr3 +fixes ntsync perf-per-core t2 +zstd +bore prjc hardened rt dkms-clang clang-polly preempt-lazy aufs deckify"
REQUIRED_USE="?? ( bore prjc )"

pkg_pretend() {
	CHECKREQS_DISK_BUILD="4G"
	check-reqs_pkg_pretend
}

src_unpack() {
	use fixes && UNIPATCH_EXCLUDE="2980_GCC15-gnu23-to-gnu11-fix.patch"
	kernel-2_src_unpack
}

src_prepare() {
	use amd-cache-optimizer && eapply "${DISTDIR}/${P}-0001-amd-cache-optimizer.patch"
	use bbr3 && eapply "${DISTDIR}/${P}-0002-bbr3.patch"
	eapply "${DISTDIR}/${P}-0003-cachy.patch"
	use fixes && eapply "${DISTDIR}/${P}-0004-fixes.patch"
	use ntsync && eapply "${DISTDIR}/${P}-0005-ntsync.patch"
	use perf-per-core && eapply "${DISTDIR}/${P}-0006-perf-per-core.patch"
	use t2 && eapply "${DISTDIR}/${P}-0007-t2.patch"
	use zstd && eapply "${DISTDIR}/${P}-0008-zstd.patch"
	use bore && eapply "${DISTDIR}/${P}-0001-bore-cachy.patch"
	use prjc && eapply "${DISTDIR}/${P}-0001-prjc-cachy.patch"
	use hardened && eapply "${DISTDIR}/${P}-0001-hardened.patch"
	use rt && eapply "${DISTDIR}/${P}-0001-rt.patch"
	use dkms-clang && eapply "${DISTDIR}/${P}-dkms-clang.patch"
	use clang-polly && eapply "${DISTDIR}/${P}-0001-clang-polly.patch"
	use preempt-lazy && eapply "${DISTDIR}/${P}-0001-preempt-lazy.patch"
	use aufs && eapply "${DISTDIR}/${P}-0001-aufs-${MY_KV}-merge-v${AUFS_V}.patch"

	if use deckify; then
		eapply "${DISTDIR}/${P}-0001-acpi-call.patch"
		eapply "${DISTDIR}/${P}-0001-handheld.patch"
	fi

	kernel-2_src_prepare
	rm "${S}/tools/testing/selftests/tc-testing/action-ebpf"
}

pkg_setup() {
	ewarn
	ewarn "${PN} is *not* supported by the Gentoo Kernel Project in any way."
	ewarn "If you need support, please contact https://github.com/microcai/gentoo-zh and ${HOMEPAGE} directly."
	ewarn "Do *not* open bugs in Gentoo's bugzilla unless you have issues with"
	ewarn "the ebuilds. Thank you."
	ewarn
	kernel-2_pkg_setup
}

pkg_postinst() {
	kernel-2_pkg_postinst
	einfo "For more info on this patchset, and how to report problems, see:"
	einfo "${HOMEPAGE}"
}

pkg_postrm() {
	kernel-2_pkg_postrm
}