blob: e67c3eff5553ae8aae103cd134da086901201b71 [file] [log] [blame]
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2
EAPI=4
CROS_WORKON_COMMIT="4427a2504f4976da9ad450b6210efbf303d113f9"
CROS_WORKON_TREE="573c628a72f7036db969f9ae5ffee8aa531a0026"
CROS_WORKON_PROJECT="chromiumos/platform/initramfs"
CROS_WORKON_LOCALNAME="initramfs"
CROS_WORKON_OUTOFTREE_BUILD="1"
inherit cros-workon cros-board
DESCRIPTION="Create Chrome OS initramfs"
HOMEPAGE="http://www.chromium.org/"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="*"
IUSE="device_tree frecon +interactive_recovery -mtd +power_management"
# Build Targets
TARGETS_IUSE="
factory_shim_ramfs
loader_kernel_ramfs
netboot_ramfs
recovery_ramfs
"
IUSE+=" ${TARGETS_IUSE}"
REQUIRED_USE="|| ( ${TARGETS_IUSE} )"
# Packages required for building recovery initramfs.
RECOVERY_DEPENDS="
chromeos-base/chromeos-installer
chromeos-base/common-assets
chromeos-base/vboot_reference
chromeos-base/vpd
media-gfx/ply-image
sys-apps/flashrom
sys-apps/pv
sys-fs/lvm2
virtual/assets
virtual/chromeos-regions
"
# Packages required for building factory installer shim initramfs.
FACTORY_SHIM_DEPENDS="
chromeos-base/vboot_reference
"
# Packages required for building factory netboot installer initramfs.
FACTORY_NETBOOT_DEPENDS="
app-arch/sharutils
app-shells/bash
chromeos-base/chromeos-base
chromeos-base/chromeos-factoryinstall
chromeos-base/chromeos-installer
chromeos-base/chromeos-installshim
chromeos-base/ec-utils
chromeos-base/memento_softwareupdate
chromeos-base/vboot_reference
chromeos-base/vpd
dev-libs/openssl
dev-util/shflags
dev-util/xxd
net-misc/htpdate
net-misc/wget
sys-apps/coreutils
sys-apps/flashrom
sys-apps/util-linux
sys-block/parted
sys-fs/dosfstools
sys-fs/e2fsprogs
sys-libs/ncurses
sys-apps/iproute2
"
# Packages required for building the loader kernel initramfs.
LOADER_KERNEL_DEPENDS="
chromeos-base/vboot_reference
device_tree? ( sys-apps/fitpicker )
sys-apps/kexec-tools
"
DEPEND="
factory_shim_ramfs? ( ${FACTORY_SHIM_DEPENDS} )
loader_kernel_ramfs? ( ${LOADER_KERNEL_DEPENDS} )
netboot_ramfs? ( ${FACTORY_NETBOOT_DEPENDS} )
recovery_ramfs? ( ${RECOVERY_DEPENDS} )
sys-apps/busybox[-make-symlinks]
virtual/chromeos-bsp-initramfs
chromeos-base/chromeos-init
frecon? ( sys-apps/frecon )
power_management? ( chromeos-base/power_manager ) "
RDEPEND=""
src_prepare() {
local srcroot='/mnt/host/source'
export BUILD_LIBRARY_DIR="${srcroot}/src/scripts/build_library"
export INTERACTIVE_COMPLETE="$(usex interactive_recovery true false)"
# Need the lddtree from the chromite dir.
local chromite_bin="${srcroot}/chromite/bin"
export PATH="${chromite_bin}:${PATH}"
}
src_compile() {
local deps=()
# TODO(hungte) Enable frecon when it can really run inside initramfs.
# Currently it simply won't run and may exceed kernel size limit on some
# boards.
# use frecon && deps+=(/sbin/frecon)
use mtd && deps+=(/usr/bin/cgpt.bin)
if use netboot_ramfs; then
use power_management && deps+=(/usr/bin/backlight_tool)
fi
local targets=()
use factory_shim_ramfs && targets+=(factory_shim)
use loader_kernel_ramfs && targets+=(loader_kernel)
use netboot_ramfs && targets+=(factory_netboot)
use recovery_ramfs && targets+=(recovery)
einfo "Building targets: ${targets[*]}"
emake SYSROOT="${SYSROOT}" BOARD="$(get_current_board_with_variant)" \
INCLUDE_FIT_PICKER="$(usex device_tree 1 0)" \
OUTPUT_DIR="${WORKDIR}" EXTRA_BIN_DEPS="${deps[*]}" \
LOCALE_LIST="${RECOVERY_LOCALES}" ${targets[*]}
}
src_install() {
insinto /var/lib/initramfs
use factory_shim_ramfs && doins "${WORKDIR}"/factory_shim_ramfs.cpio.xz
use loader_kernel_ramfs && doins "${WORKDIR}"/loader_kernel_ramfs.cpio.xz
use netboot_ramfs && doins "${WORKDIR}"/netboot_ramfs.cpio.xz
use recovery_ramfs && doins "${WORKDIR}"/recovery_ramfs.cpio.xz
}