#
# Copyright 2021 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=6

CROS_WORKON_REPO="https://cos.googlesource.com"
CROS_WORKON_PROJECT="third_party/kernel"
CROS_WORKON_LOCALNAME="kernel/v5.10"

CHROMEOS_KERNEL_CONFIG="${FILESDIR}/${CHROMEOS_KERNEL_CONFIG_FILE}"

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

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

CROS_WORKON_COMMIT="771286dc9ae939138bd04c39e73060c0e6bdd65c"
CROS_WORKON_TREE="b74e8447d2a80b323e4f824ceba4dd75a5f90a3b"
CROS_WORKON_REPO="https://cos.googlesource.com"
CROS_WORKON_PROJECT="third_party/kernel"
CROS_WORKON_LOCALNAME="kernel/v5.10"

DESCRIPTION="COS Linux Kernel 5.10"
HOMEPAGE="https://cloud.google.com/container-optimized-os"
KEYWORDS="*"
IUSE="module_sign lockdown gpu"

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"

src_configure() {
	cos-kernel_src_configure
}

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

src_install() {
	cos-kernel_src_install

}

# 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_10 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: 2
