blob: 44a33689b6f45539c6b5b0ff5a187abb80ca67a3 [file] [log] [blame]
# Copyright 2012 The Chromium OS Authors.
# Distributed under the terms of the GNU General Public License v2
# Change this version number when any change is made to configs/files under
# libpayload and an auto-revbump is required.
# VERSION=REVBUMP-0.0.17
EAPI=7
CROS_WORKON_COMMIT="01c94632684ca8aff242b1d6ac33344a9cb668d1"
CROS_WORKON_TREE="70d95067ff553c10f1585a11f0c3fa52080c5222"
CROS_WORKON_PROJECT="chromiumos/third_party/coreboot"
CROS_WORKON_EGIT_BRANCH="chromeos-2016.05"
DESCRIPTION="coreboot's libpayload library"
HOMEPAGE="http://www.coreboot.org"
LICENSE="GPL-2"
KEYWORDS="*"
IUSE="coreboot-sdk verbose"
CROS_WORKON_LOCALNAME="coreboot"
# Don't strip to ease remote GDB use (cbfstool strips final binaries anyway)
STRIP_MASK="*"
inherit cros-workon cros-board toolchain-funcs coreboot-sdk
src_compile() {
local src_root="payloads/libpayload"
local board=$(get_current_board_with_variant)
if ! use coreboot-sdk; then
tc-getCC
# Export the known cross compilers so there isn't a reliance
# on what the default profile is for exporting a compiler. The
# reasoning is that the firmware may need more than one to build
# and boot.
export CROSS_COMPILE_i386="i686-pc-linux-gnu-"
# For coreboot.org upstream architecture naming.
export CROSS_COMPILE_x86="i686-pc-linux-gnu-"
export CROSS_COMPILE_mipsel="mipsel-cros-linux-gnu-"
export CROSS_COMPILE_arm64="aarch64-cros-linux-gnu-"
export CROSS_COMPILE_arm="armv7a-cros-linux-gnu- armv7a-cros-linux-gnueabihf-"
else
export CROSS_COMPILE_x86=${COREBOOT_SDK_PREFIX_x86_32}
export CROSS_COMPILE_mipsel=${COREBOOT_SDK_PREFIX_mips}
export CROSS_COMPILE_arm64=${COREBOOT_SDK_PREFIX_arm64}
export CROSS_COMPILE_arm=${COREBOOT_SDK_PREFIX_arm}
fi
# we have all kinds of userland-cruft in CFLAGS that has no place in firmware.
# coreboot ignores CFLAGS, libpayload doesn't, so prune it.
unset CFLAGS
if [[ ! -s "${FILESDIR}/configs/config.${board}" ]]; then
board=$(get_current_board_no_variant)
fi
local board_config="$(realpath "${FILESDIR}/configs/config.${board}")"
[ -f "${board_config}" ] || die "${board_config} does not exist"
# get into the source directory
pushd "${src_root}"
# nuke build artifacts potentially present in the source directory
rm -rf build build_gdb .xcompile
local OPTS=( objutil="objutil" )
use verbose && OPTS+=( "V=1" )
# Configure and build
cp "${board_config}" .config
yes "" | \
emake "${OPTS[@]}" obj="build" oldconfig
emake "${OPTS[@]}" obj="build"
# Build a second set of libraries with GDB support for developers
( cat .config; echo "CONFIG_LP_REMOTEGDB=y" ) > .config.gdb
yes "" | \
emake "${OPTS[@]}" obj="build_gdb" DOTCONFIG=.config.gdb oldconfig
emake "${OPTS[@]}" obj="build_gdb" DOTCONFIG=.config.gdb
popd
}
src_install() {
local src_root="payloads/libpayload"
pushd "${src_root}"
emake obj="build_gdb" DESTDIR="${D}/firmware" DOTCONFIG=.config.gdb install
mv "${D}/firmware/libpayload" "${D}/firmware/libpayload_gdb"
emake obj="build" DESTDIR="${D}/firmware" install
}