# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2

EAPI=6

CROS_WORKON_COMMIT="96e577734c8c2c62bf64cca930d1036473d3b9aa"
CROS_WORKON_TREE="4b4e2c8d1281389ea345f0fbf4bd7fb93be9c3a4"
CROS_WORKON_REPO="https://cos.googlesource.com"
CROS_WORKON_PROJECT="third_party/kernel"
CROS_WORKON_LOCALNAME="kernel/v5.4"

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

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

DESCRIPTION="COS Linux Kernel 5.4"
HOMEPAGE="https://cloud.google.com/container-optimized-os"
KEYWORDS="*"

COS_KERNEL_X509_GENKEY="${FILESDIR}/x509.genkey"
COS_KERNEL_ROOT_CERT="${FILESDIR}/lakitu_root_cert.pem"
COS_KERNEL_GPU_ROOT_CERT="${FILESDIR}/lakitu_gpu_root_cert.pem"
GMEC_KERNEL_SUFFIX=""

src_configure() {
	gmec-kernel_src_configure
}

# Change for EAPI=6
src_prepare() {
	default
	cos-kernel_src_prepare
}

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
}

# Change the following (commented out) number to the next prime number
# when you change base.config.  This workaround will force the
# ChromeOS CQ to uprev sys-kernel/kernel-5_4 ebuild and pick up the
# configuration changes.  In absence of this workaround the config changes
# would not be picked up unless there was a code change in kernel source tree.
#
# NOTE: There's nothing magic keeping this number prime but you just need to
# make _any_ change to this file.  ...so why not keep it prime?
#
# The coolest prime number is: 1 
