commit:     8fbafcbda119ea44a75bfd8b29cf8631d5aff80e
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Mon Dec 25 08:07:23 2023 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Mon Dec 25 15:47:32 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8fbafcbd

kernel-{build,install}.eclass: Support XZ module compression

When KERNEL_IUSE_GENERIC_UKI is set (to gatekeep for new ebuilds),
enable XZ module compression in kernel and add IUSE=module-compress.
When the flag is enabled, the modules are installed .xz compressed
per the config.  When it is disabled, they are installed uncompressed
but the kernel retains module compression support.

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 eclass/kernel-build.eclass   | 22 +++++++++++++++++++++-
 eclass/kernel-install.eclass |  5 ++++-
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/eclass/kernel-build.eclass b/eclass/kernel-build.eclass
index 70eb1243fcbc..69a2689601fa 100644
--- a/eclass/kernel-build.eclass
+++ b/eclass/kernel-build.eclass
@@ -283,9 +283,18 @@ kernel-build_src_install() {
        # Modules were already stripped by the kernel build system
        dostrip -x /lib/modules
 
+       local compress=()
+       if [[ ${KERNEL_IUSE_GENERIC_UKI} ]] && ! use module-compress; then
+               compress+=(
+                       # force installing uncompressed modules even if 
compression
+                       # is enabled via config
+                       suffix-y=
+               )
+       fi
+
        emake O="${WORKDIR}"/build "${MAKEARGS[@]}" \
                INSTALL_MOD_PATH="${ED}" INSTALL_MOD_STRIP="${strip_args}" \
-               INSTALL_PATH="${ED}/boot" "${targets[@]}"
+               INSTALL_PATH="${ED}/boot" "${compress[@]}" "${targets[@]}"
 
        # note: we're using mv rather than doins to save space and time
        # install main and arch-specific headers first, and scripts
@@ -547,6 +556,17 @@ kernel-build_merge_configs() {
                fi
        fi
 
+       # Only semi-related but let's use that to avoid changing stable ebuilds.
+       if [[ ${KERNEL_IUSE_GENERIC_UKI} ]]; then
+               # NB: we enable this even with USE=-module-compress, in order
+               # to support both uncompressed and compressed modules in 
prebuilt
+               # kernels
+               cat <<-EOF > "${WORKDIR}/module-compress.config" || die
+                       CONFIG_MODULE_COMPRESS_XZ=y
+               EOF
+               merge_configs+=( "${WORKDIR}/module-compress.config" )
+       fi
+
        if [[ ${#user_configs[@]} -gt 0 ]]; then
                elog "User config files are being applied:"
                local x

diff --git a/eclass/kernel-install.eclass b/eclass/kernel-install.eclass
index 9612700a1431..c04a21789a7c 100644
--- a/eclass/kernel-install.eclass
+++ b/eclass/kernel-install.eclass
@@ -79,7 +79,7 @@ _IDEPEND_BASE="
 
 LICENSE="GPL-2"
 if [[ ${KERNEL_IUSE_GENERIC_UKI} ]]; then
-       IUSE+=" generic-uki"
+       IUSE+=" generic-uki module-compress"
        # https://github.com/AndrewAmmerlaan/dist-kernel-log-to-licenses
        # This script can help with generating the array below, keep in mind
        # that it is not a fully automatic solution, i.e. use flags will
@@ -200,6 +200,9 @@ if [[ ${KERNEL_IUSE_GENERIC_UKI} ]]; then
                generic-uki? ( ${INITRD_PACKAGES[@]} )
        "
 
+       RDEPEND+="
+               sys-apps/kmod[lzma]
+       "
        IDEPEND="
                generic-uki? (
                        || (

Reply via email to