#
# Copyright 2024 Google LLC
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# version 2 as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#

EAPI=7

CROS_WORKON_COMMIT="c79ff94de84a87731644978e739656ed62f75ada"
CROS_WORKON_TREE="8ba5ce1c667e3968558bbbe31cb12749becac8bc"
CROS_WORKON_REPO="https://cos.googlesource.com"
CROS_WORKON_PROJECT="third_party/kernel"
CROS_WORKON_LOCALNAME="kernel/v6.6"

# This must be inherited *after* EGIT/CROS_WORKON variables defined
inherit cros-workon cros-kernel2

# Copied verbatim from the lakitu-kernel ebuild.
cos_kernel_config_arch() {
	case ${ARCH} in
	amd64) echo "x86";;
	arm64) echo "arm64";;
	*)     die "Unknown architecture: ${ARCH}";;
	esac
}

STRIP_MASK+=" /usr/src/${P}/build/vmlinux"
STRIP_MASK+=" *.ko"

DESCRIPTION="A dump capture kernel for kdump functionality"
HOMEPAGE="https://cloud.google.com/container-optimized-os"
KEYWORDS="*"

# shellcheck disable=SC2154
CHROMEOS_KERNEL_CONFIG="arch/$(cos_kernel_config_arch)/configs/lakitu_dump_defconfig"

src_prepare() {
	default
	# This has the same behavior as cos-kernel_src_prepare.
	cros_allow_gnu_build_tools
	cros-kernel2_src_prepare
}

# Use stripped-down version of cros-kernel2 configure routine
# to avoid dragging in all fragments enabled by USE flags.
src_configure() {
	# Combination of two lines from cros-kernel2_src_configure
	local config="${CHROMEOS_KERNEL_CONFIG}"

	# All lines below taken verbatim from cros-kernel2_src_configure
	local build_cfg="$(get_build_cfg)"
	elog "Using kernel config: ${config}"
	cp -f "${config}" "${build_cfg}" || die

	local old_defconfig="$(cros-workon_get_build_dir)/cros-old-defconfig"
	kmake olddefconfig
	cp -a "${build_cfg}" "${old_defconfig}" || die
}

src_install() {
	dodir /boot/kdump
	kmake INSTALL_PATH="${D}/boot/kdump" INSTALL_MOD_PATH="${D}" \
		INSTALL_MOD_STRIP=1 install
	local version
	version=$(kmake -s --no-print-directory kernelrelease)
	ln -sf "vmlinuz-${version}" "${D}/boot/kdump/vmlinuz" || die

	# We also strips the symbol table /boot/kdump/System.map-* at:
	# overlay-lakitu/scripts/board_specific_setup.sh
}
