blob: 33d0a3ca9ad0f48d812734313fbae1add3d9337d [file] [log] [blame]
# 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
}