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

# @ECLASS: cros-coreboot.eclass
# @MAINTAINER:
# The Chromium OS Authors
# @BLURB: Unifies logic for building coreboot images for Chromium OS.

[[ ${EAPI} != "4" ]] && die "Only EAPI=4 is supported"

inherit toolchain-funcs

DESCRIPTION="coreboot firmware"
HOMEPAGE="http://www.coreboot.org"
LICENSE="GPL-2"
SLOT="0"
IUSE="em100-mode memmaps quiet-cb"


RDEPEND="!sys-boot/chromeos-coreboot"

# Dependency shared by x86 and amd64.
DEPEND_X86="
	sys-power/iasl
	sys-boot/chromeos-mrc
	sys-apps/coreboot-utils
	"

DEPEND_ARM="
	sys-apps/coreboot-utils
	"

DEPEND="x86? ($DEPEND_X86)
	amd64? ($DEPEND_X86)
	arm? ($DEPEND_ARM)
	"

# @ECLASS-VARIABLE: COREBOOT_BOARD
# @DESCRIPTION:
# Coreboot Configuration name.
: ${COREBOOT_BOARD:=}

# @ECLASS-VARIABLE: COREBOOT_BUILD_ROOT
# @DESCRIPTION:
# Build directory root
: ${COREBOOT_BUILD_ROOT:=}

[[ -z ${COREBOOT_BOARD} ]] && die "COREBOOT_BOARD must be set"
[[ -z ${COREBOOT_BUILD_ROOT} ]] && die "COREBOOT_BUILD_ROOT must be set"

cros-coreboot_pre_src_prepare() {
	rm -rf 3rdparty

	if [[ -s "${FILESDIR}"/config ]]; then
		# Attempt to get config from overlay first
		cp -v "${FILESDIR}"/config .config
	elif [[ -s "configs/config.${COREBOOT_BOARD}" ]]; then
		# Otherwise use config from coreboot tree
		cp -v "configs/config.${COREBOOT_BOARD}" .config
	fi

	if [[ -d "${FILESDIR}"/3rdparty ]]; then
		cp -pPR "${FILESDIR}"/3rdparty ./ || die
	fi
}

cros-coreboot_src_compile() {
	tc-export CC
	local board="${COREBOOT_BOARD}"
	local build_root="${COREBOOT_BUILD_ROOT}"

	# Set KERNELREVISION (really coreboot revision) to the ebuild revision
	# number followed by a dot and the first seven characters of the git
	# hash. The name is confusing but consistent with the coreboot
	# Makefile.
	local sha1v="${VCSID/*-/}"
	export KERNELREVISION=".${PV}.${sha1v:0:7}"

	# Firmware related binaries are compiled with a 32-bit toolchain
	# on 64-bit platforms
	if use amd64 ; then
		export CROSS_COMPILE="i686-pc-linux-gnu-"
		export CC="${CROSS_COMPILE}gcc"
	else
		export CROSS_COMPILE=${CHOST}-
	fi

	elog "Toolchain:\n$(sh util/xcompile/xcompile)\n"

	if use quiet-cb; then
		# Suppress console spew if requested.
		cat >> .config <<EOF
CONFIG_DEFAULT_CONSOLE_LOGLEVEL=3
# CONFIG_DEFAULT_CONSOLE_LOGLEVEL_8 is not set
CONFIG_DEFAULT_CONSOLE_LOGLEVEL_3=y
EOF
	fi

	yes "" | emake obj="${build_root}" oldconfig
	emake obj="${build_root}"

	# Modify firmware descriptor if building for the EM100 emulator.
	if use em100-mode; then
		ifdtool --em100 "${build_root}/coreboot.rom" || die
		mv "${build_root}/coreboot.rom"{.new,} || die
	fi

	# Extract the coreboot ramstage file into the build_root.
	cbfstool "${build_root}/coreboot.rom" extract \
		-n "fallback/coreboot_ram" \
		-f "${build_root}/coreboot_ram.stage" || die

	# Build cbmem for the target
	cd util/cbmem
	emake clean
	CROSS_COMPILE="${CHOST}-" emake
}

cros-coreboot_src_install() {
	local mapfile
	dobin util/cbmem/cbmem
	insinto /firmware
	newins "${COREBOOT_BUILD_ROOT}/coreboot.rom" coreboot.rom
	newins "${COREBOOT_BUILD_ROOT}/coreboot_ram.stage" coreboot_ram.stage
	OPROM=$( awk 'BEGIN{FS="\""} /CONFIG_VGA_BIOS_FILE=/ { print $2 }' \
		configs/config.${COREBOOT_BOARD} )
	CBFSOPROM=pci$( awk 'BEGIN{FS="\""} /CONFIG_VGA_BIOS_ID=/ { print $2 }' \
		configs/config.${COREBOOT_BOARD} ).rom
	if [[ -n "${OPROM}" ]]; then
		newins ${OPROM} ${CBFSOPROM}
	fi
	if use memmaps; then
		for mapfile in ${COREBOOT_BUILD_ROOT}/cbfs/fallback/*.map
		do
			doins $mapfile
		done
	fi
	newins .config coreboot.config
}

EXPORT_FUNCTIONS src_compile src_install pre_src_prepare
