# Copyright 2012 The Chromium OS Authors.
# Distributed under the terms of the GNU General Public License v2

EAPI=4
CROS_WORKON_COMMIT="fe4795e66b515c2523df09a8800ecac9a3f63557"
CROS_WORKON_TREE="075c8039d02e2f9b590b980616d57aa17640ad63"
CROS_WORKON_PROJECT="chromiumos/third_party/coreboot"

DESCRIPTION="coreboot's libpayload library"
HOMEPAGE="http://www.coreboot.org"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="amd64 x86 arm"
IUSE=""

RDEPEND=""
DEPEND=""

CROS_WORKON_LOCALNAME="coreboot"

inherit cros-workon cros-board toolchain-funcs

src_compile() {
	tc-getCC
	local board=$(get_current_board_with_variant)

	# 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

	local extra_flags=""
	if use x86 || use amd64 ; then
		extra_flags="-mpreferred-stack-boundary=2 \
					 -mregparm=3 \
					 -ffunction-sections"
	elif use arm ; then
		extra_flags="-ffunction-sections"
	fi

	local libpayloaddir="payloads/libpayload"
	cp "${libpayloaddir}"/configs/config.${board} "${libpayloaddir}"/.config
	emake -C "${libpayloaddir}" oldconfig || \
		die "libpayload make oldconfig failed"
	emake -C "${libpayloaddir}" \
		EXTRA_CFLAGS="${extra_flags}" || \
		die "libpayload build failed"
}

src_install() {
	local src_root="payloads/libpayload/"
	local build_root="${src_root}/build"
	local destdir="/firmware/libpayload"

	local archdir=""
	if use x86 || use amd64 ; then
		archdir="x86"
	elif use arm ; then
		archdir="arm"
	fi

	insinto "${destdir}"/lib
	doins "${build_root}"/libpayload.a
	if [ -f "${src_root}"/lib/libpayload.ldscript ]; then
		doins "${src_root}"/lib/libpayload.ldscript
	fi
	if [ -f "${src_root}"/arch/${archdir}/libpayload.ldscript ]; then
		doins "${src_root}"/arch/${archdir}/libpayload.ldscript
	fi

	insinto "${destdir}"/lib/"${archdir}"
	doins "${build_root}"/head.o

	insinto "${destdir}"/include
	doins "${build_root}"/libpayload-config.h
	for file in `cd ${src_root} && find include -name *.h -type f`; do \
		insinto "${destdir}"/`dirname ${file}`; \
		doins "${src_root}"/"${file}"; \
	done

	exeinto "${destdir}"/bin
	insinto "${destdir}"/bin
	doexe "${src_root}"/bin/lpgcc
	doexe "${src_root}"/bin/lpas
	doins "${src_root}"/bin/lp.functions

	insinto "${destdir}"
	newins "${src_root}"/.config libpayload.config
}
