| # 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_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 |
| } |