blob: 686776f134ede84440330f3d96720c10f8331d56 [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="7"
CROS_WORKON_COMMIT="7a5d371ba3254b77bd073c5d32cc39f633606b03"
CROS_WORKON_TREE="ccade7d0ab8756b8f5752b85efbfd460cce591c6"
CROS_WORKON_PROJECT="chromiumos/platform/initramfs"
CROS_WORKON_LOCALNAME="platform/initramfs"
CROS_WORKON_OUTOFTREE_BUILD="1"
inherit cros-workon cros-board cros-constants
DESCRIPTION="Create Chrome OS initramfs"
HOMEPAGE="https://chromium.googlesource.com/chromiumos/platform/initramfs/"
LICENSE="BSD-Google"
SLOT="0"
KEYWORDS="*"
IUSE="+cros_ec_utils detachable device_tree +interactive_recovery"
IUSE="${IUSE} legacy_firmware_ui -mtd +power_management"
IUSE="${IUSE} unibuild +oobe_config no_factory_flow"
IUSE="${IUSE} manatee_performance_tools nvme ufs"
# Build Targets
TARGETS_IUSE="
factory_netboot_ramfs
factory_shim_ramfs
hypervisor_ramfs
recovery_ramfs
minios_ramfs
"
IUSE="${IUSE} test ${TARGETS_IUSE}"
# Allow absence of the build target when running tests via cros_run_unit_tests.
REQUIRED_USE="|| ( test ${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
sys-apps/flashrom
sys-apps/pv
virtual/assets
virtual/chromeos-regions
"
MINIOS_DEPENDS="
chromeos-base/chromeos-installer
chromeos-base/common-assets
chromeos-base/factory_installer
chromeos-base/minijail
chromeos-base/minios
chromeos-base/update-utils
chromeos-base/vboot_reference
chromeos-base/vpd
dev-util/strace
net-misc/curl
net-misc/dhcp
net-misc/dhcpcd
net-wireless/wpa_supplicant-cros
nvme? ( sys-apps/nvme-cli )
sys-apps/flashrom
sys-apps/pv
virtual/assets
virtual/chromeos-regions
"
# Packages required for building factory installer shim initramfs.
FACTORY_SHIM_DEPENDS="
chromeos-base/factory_installer
chromeos-base/vboot_reference
"
# Packages required for building factory netboot installer initramfs.
FACTORY_NETBOOT_DEPENDS="
app-arch/lbzip2
app-arch/pigz
app-arch/sharutils
app-misc/jq
app-shells/bash
chromeos-base/chromeos-base
chromeos-base/chromeos-installer
chromeos-base/chromeos-installshim
chromeos-base/chromeos-storage-info
chromeos-base/ec-utils
chromeos-base/factory_installer
ufs? ( chromeos-base/factory_ufs )
chromeos-base/vboot_reference
chromeos-base/vpd
dev-libs/openssl:0=
dev-util/shflags
dev-util/xxd
net-misc/curl
net-misc/htpdate
net-misc/uftp
net-misc/wget
sys-apps/coreutils
sys-apps/flashrom
sys-apps/iproute2
sys-apps/mosys
sys-apps/util-linux
sys-fs/dosfstools
sys-fs/e2fsprogs
sys-libs/ncurses
virtual/udev
"
# Packages required for building hypervisor initramfs.
HYPERVISOR_DEPENDS="
chromeos-base/crosvm
chromeos-base/sirenia
sys-apps/coreboot-utils
virtual/linux-sources
virtual/manatee-apps
manatee_performance_tools? (
app-admin/sysstat
dev-util/strace
dev-util/turbostat
dev-util/perf
dev-util/trace-cmd
sys-process/htop
chromeos-base/perfetto
)
"
DEPEND="
!no_factory_flow? (
factory_netboot_ramfs? ( ${FACTORY_NETBOOT_DEPENDS} )
factory_shim_ramfs? ( ${FACTORY_SHIM_DEPENDS} )
)
recovery_ramfs? ( ${RECOVERY_DEPENDS} )
hypervisor_ramfs? ( ${HYPERVISOR_DEPENDS} )
minios_ramfs? ( ${MINIOS_DEPENDS} )
sys-apps/busybox[-make-symlinks]
sys-fs/lvm2
virtual/chromeos-bsp-initramfs
chromeos-base/chromeos-init
sys-apps/frecon-lite
power_management? ( chromeos-base/power_manager )
unibuild? ( chromeos-base/chromeos-config )
chromeos-base/chromeos-config-tools
test? ( dev-util/shunit2 )"
RDEPEND=""
BDEPEND="
hypervisor_ramfs? ( chromeos-base/sirenia-tools )"
src_prepare() {
export BUILD_LIBRARY_DIR="${CHROOT_SOURCE_ROOT}/src/scripts/build_library"
export INTERACTIVE_COMPLETE="$(usex interactive_recovery true false)"
# Need the lddtree from the chromite dir.
export PATH="${CHROMITE_BIN_DIR}:${PATH}"
eapply_user
}
src_compile() {
local deps=()
use mtd && deps+=(/usr/bin/cgpt)
if use factory_netboot_ramfs; then
if ! use no_factory_flow; then
use power_management && deps+=(/usr/bin/backlight_tool)
fi
fi
local targets=()
for target in ${TARGETS_IUSE}; do
use "${target}" && targets+=("${target%_ramfs}")
done
einfo "Building targets: ${targets[*]:-(only running tests)}"
if [[ ${#targets[@]} -gt 0 ]]; then
emake SYSROOT="${SYSROOT}" \
BOARD="$(get_current_board_with_variant)" \
DETACHABLE="$(usex detachable 1 0)" \
INCLUDE_ECTOOL="$(usex cros_ec_utils 1 0)" \
INCLUDE_FACTORY_UFS="$(usex ufs 1 0)" \
INCLUDE_FIT_PICKER="$(usex device_tree 1 0)" \
INCLUDE_NVME_CLI="$(usex nvme 1 0)" \
LEGACY_UI="$(usex legacy_firmware_ui 1 0)" \
LIBDIR="$(get_libdir)" \
LOCALE_LIST="${RECOVERY_LOCALES:-}" \
MANATEE_PERFORMANCE_TOOLS="$(usex manatee_performance_tools 1 0)" \
OOBE_CONFIG="$(usex oobe_config 1 0)" \
OUTPUT_DIR="${WORKDIR}" EXTRA_BIN_DEPS="${deps[*]}" \
UNIBUILD="$(usex unibuild 1 0)" \
"${targets[@]}"
fi
}
src_test() {
local targets=()
for target in ${TARGETS_IUSE}; do
use "${target}" && targets+=("${target%_ramfs}_check")
done
einfo "Testing targets: ${targets[*]}"
if [[ ${#targets[@]} -gt 0 ]]; then
emake SYSROOT="${SYSROOT}" "${targets[@]}"
fi
}
src_install() {
insinto /var/lib/initramfs
for target in ${TARGETS_IUSE}; do
use "${target}" &&
doins "${WORKDIR}/${target}.cpio"
done
}