Deprecate --test, --withdev, --factory, --factory_install from build_image.

Using these flags directly was deprecated a while back and is causing confusion
which way is the right way.  This CL removes all these FLAGS from build_image
(though keeps support of them in mod_image_for_test/image_to_usb invocations
in common.sh).  In this change I've also defaulted build_image to build the
developer image (and only the developer image).

BUG=chromium-os:27362
TEST=Been busy testing.  Have built the following combinations and verified them:

build_image base
build_image
build_image base dev test
build_image dev
build_image dev factory_test
build_image factory_install

Change-Id: Ie534c276a9ec571926964320ac176daa91b12a81
Reviewed-on: https://gerrit.chromium.org/gerrit/17386
Tested-by: Chris Sosa <sosa@chromium.org>
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
Commit-Ready: Chris Sosa <sosa@chromium.org>
This commit is contained in:
Chris Sosa 2012-03-05 15:58:07 -08:00 committed by Gerrit
parent 8e071cc2b1
commit c9422fa467
6 changed files with 67 additions and 134 deletions

View File

@ -23,19 +23,10 @@ DEFINE_string output_root "${DEFAULT_BUILD_ROOT}/images" \
"Directory in which to place image result directories (named by version)"
DEFINE_boolean replace ${FLAGS_FALSE} \
"Overwrite existing output, if any."
DEFINE_boolean withdev ${FLAGS_TRUE} \
"Include useful developer friendly utilities in the image."
DEFINE_integer jobs -1 \
"How many packages to build in parallel at maximum."
DEFINE_boolean statefuldev ${FLAGS_TRUE} \
"Install development packages on stateful partition rather than the rootfs"
DEFINE_boolean test ${FLAGS_FALSE} \
"Modify the image for automated testing"
DEFINE_boolean factory ${FLAGS_FALSE} \
"Modify the image for manufacturing testing"
DEFINE_boolean factory_install ${FLAGS_FALSE} \
"Build a smaller image to overlay the factory install shim on; this argument \
is also required in image_to_usb."
DEFINE_integer rootfs_partition_size 1024 \
"rootfs partition size in MiBs."
DEFINE_integer rootfs_size 850 \
@ -104,7 +95,6 @@ set -e
# Determine build version.
OVERLAY_CHROMEOS_DIR="${SRC_ROOT}/third_party/chromiumos-overlay/chromeos"
. "${OVERLAY_CHROMEOS_DIR}/config/chromeos_version.sh" || exit 1
# N.B. Ordering matters for some of the libraries below, because
# some of the files contain initialization used by later files.
. "${BUILD_LIBRARY_DIR}/board_options.sh" || exit 1
@ -117,11 +107,10 @@ OVERLAY_CHROMEOS_DIR="${SRC_ROOT}/third_party/chromiumos-overlay/chromeos"
. "${BUILD_LIBRARY_DIR}/test_image_content.sh" || exit 1
parse_build_image_args
# Tweak flags, configure extra USE flags, and add packages for the factory
# install shim.
EXTRA_PACKAGES=""
if [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ]; then
if should_build_image ${CHROMEOS_FACTORY_INSTALL_SHIM_NAME}; then
# TODO: Build a separated ebuild for the install shim to reduce size.
INSTALL_MASK="${FACTORY_SHIM_INSTALL_MASK}"
@ -160,21 +149,10 @@ fi
# If we are creating a developer image, also create a pristine image with a
# different name.
PRISTINE_IMAGE_NAME=
if [ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]; then
PRISTINE_IMAGE_NAME=${CHROMEOS_BASE_IMAGE_NAME}
# Rename pristine image for factory install shim.
elif [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ]; then
if should_build_image ${CHROMEOS_FACTORY_INSTALL_SHIM_NAME}; then
PRISTINE_IMAGE_NAME=${CHROMEOS_FACTORY_INSTALL_SHIM_NAME}
else
# No withdev and no factory_install set meaning we must be building just the
# base image.
PRISTINE_IMAGE_NAME=chromiumos_image.bin
# Verify our assertion is true.
if [ ${IMAGES_TO_BUILD} != ${CHROMEOS_BASE_IMAGE_NAME} ]; then
warn "${IMAGES_TO_BUILD} != ${CHROMEOS_BASE_IMAGE_NAME}"
die "Should only reach this condition if only building the base image."
fi
IMAGES_TO_BUILD="chromiumos_image.bin"
PRISTINE_IMAGE_NAME=${CHROMEOS_BASE_IMAGE_NAME}
fi
ROOT_FS_DIR="${BUILD_DIR}/rootfs"
@ -224,7 +202,7 @@ create_base_image ${PRISTINE_IMAGE_NAME}
BOOT_FLAG=
if [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ]; then
if should_build_image ${CHROMEOS_FACTORY_INSTALL_SHIM_NAME}; then
BOOT_FLAG="-b 1" # BOOT_FLAG_DEVELOPER value defined in load_kernel_fw.h
info "--factory_install set, pass BOOT_FLAG_DEVELOPER flag to" \
"load_kernel_test"
@ -236,20 +214,22 @@ if should_build_image "${PRISTINE_IMAGE_NAME}"; then
"${DEVKEYSDIR}/recovery_key.vbpubk" ${BOOT_FLAG}
fi
# Create a developer image based on the chromium os base image.
if [ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]; then
# Create a developer image if an image that is based on it is requested.
if should_build_image ${CHROMEOS_DEVELOPER_IMAGE_NAME} \
${CHROMEOS_TEST_IMAGE_NAME} ${CHROMEOS_FACTORY_TEST_IMAGE_NAME}; then
copy_image ${CHROMEOS_BASE_IMAGE_NAME} ${CHROMEOS_DEVELOPER_IMAGE_NAME}
install_dev_packages ${CHROMEOS_DEVELOPER_IMAGE_NAME}
install_dev_packages ${CHROMEOS_DEVELOPER_IMAGE_NAME}
fi
# Create a test or factory test image if desired.
if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ]; then
# From a developer image create a test|factory_test image.
if should_build_image ${CHROMEOS_TEST_IMAGE_NAME}; then
copy_image ${CHROMEOS_DEVELOPER_IMAGE_NAME} ${CHROMEOS_TEST_IMAGE_NAME}
mod_image_for_test ${CHROMEOS_TEST_IMAGE_NAME}
fi
if should_build_image ${CHROMEOS_FACTORY_TEST_IMAGE_NAME}; then
copy_image ${CHROMEOS_DEVELOPER_IMAGE_NAME} \
${CHROMEOS_FACTORY_TEST_IMAGE_NAME}
mod_image_for_test ${CHROMEOS_FACTORY_TEST_IMAGE_NAME}
elif [ ${FLAGS_test} -eq ${FLAGS_TRUE} ]; then
copy_image ${CHROMEOS_DEVELOPER_IMAGE_NAME} ${CHROMEOS_TEST_IMAGE_NAME}
mod_image_for_test ${CHROMEOS_TEST_IMAGE_NAME}
fi
rmdir "${ROOT_FS_DIR}" "${STATEFUL_FS_DIR}" "${ESP_FS_DIR}"
@ -261,14 +241,22 @@ generate_au_zip || echo "Failed generating AU zip file - ignoring Error..."
LINK_NAME="${FLAGS_output_root}/${BOARD}/${FLAGS_symlink}"
ln -sfT $(basename ${BUILD_DIR}) ${LINK_NAME}
echo "Done. Image created in ${BUILD_DIR}"
echo "Chromium OS image created as ${PRISTINE_IMAGE_NAME}"
if [ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]; then
echo "Done. Image(s) created in ${BUILD_DIR}"
# Print out the images we generated.
if should_build_image ${CHROMEOS_BASE_IMAGE_NAME}; then
echo "Non-developer Chromium OS image created as ${PRISTINE_IMAGE_NAME}"
fi
if should_build_image ${CHROMEOS_FACTORY_SHIM_NAME}; then
echo "Chromium OS Factory install shim created as ${PRISTINE_IMAGE_NAME}"
fi
if should_build_image ${CHROMEOS_DEVELOPER_IMAGE_NAME}; then
echo "Developer image created as ${CHROMEOS_DEVELOPER_IMAGE_NAME}"
fi
if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ]; then
if should_build_image ${CHROMEOS_FACTORY_TEST_IMAGE_NAME}; then
echo "Factory test image created as ${CHROMEOS_FACTORY_TEST_IMAGE_NAME}"
elif [ ${FLAGS_test} -eq ${FLAGS_TRUE} ]; then
fi
if should_build_image ${CHROMEOS_TEST_IMAGE_NAME}; then
echo "Test image created as ${CHROMEOS_TEST_IMAGE_NAME}"
fi

View File

@ -146,21 +146,13 @@ create_base_image() {
--strip-components=3 --exclude=usr/include --exclude=sys-include \
--exclude=*.a --exclude=*.o
# If it's a developer image, also copy over the libc debug info so that gdb
# works with threads and also for a better debugging experience.
if [[ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]] ; then
sudo mkdir -p "${ROOT_FS_DIR}/usr/local/lib/debug"
sudo tar jxpf "${LIBC_PATH}" -C "${ROOT_FS_DIR}/usr/local/lib/debug" \
./usr/lib/debug/usr/${CHOST} --strip-components=6
fi
. "${SRC_ROOT}/platform/dev/toolchain_utils.sh"
board_ctarget=$(get_ctarget_from_board "${BOARD}")
for atom in $(portageq match / cross-$board_ctarget/gcc); do
copy_gcc_libs "${ROOT_FS_DIR}" $atom
done
if [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ]; then
if should_build_image ${CHROMEOS_FACTORY_INSTALL_SHIM_NAME}; then
# Install our custom factory install kernel with the appropriate use flags
# to the image.
emerge_custom_kernel "${ROOT_FS_DIR}"
@ -186,8 +178,7 @@ create_base_image() {
# not support verified boot yet (see create_legacy_bootloader_templates.sh)
# so rootfs verification is disabled if we are building with --factory_install
local enable_rootfs_verification=
if [[ ${FLAGS_enable_rootfs_verification} -eq ${FLAGS_TRUE} ]] &&
[[ ${FLAGS_factory_install} -eq ${FLAGS_FALSE} ]] ; then
if [[ ${FLAGS_enable_rootfs_verification} -eq ${FLAGS_TRUE} ]]; then
enable_rootfs_verification="--enable_rootfs_verification"
fi
@ -198,7 +189,7 @@ create_base_image() {
${enable_rootfs_verification}
# Don't test the factory install shim
if [ ${FLAGS_factory_install} -eq ${FLAGS_FALSE} ]; then
if ! should_build_image ${CHROMEOS_FACTORY_INSTALL_SHIM_NAME}; then
# Check that the image has been correctly created.
test_image_content "$ROOT_FS_DIR"
fi
@ -234,7 +225,7 @@ create_base_image() {
trap - EXIT
USE_DEV_KEYS=
if [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ]; then
if should_build_image ${CHROMEOS_FACTORY_INSTALL_SHIM_NAME}; then
USE_DEV_KEYS="--use_dev_keys"
fi

View File

@ -47,80 +47,32 @@ get_images_to_build() {
esac
done
# Set default if none specified.
if [ -z "${IMAGES_TO_BUILD}" ]; then
IMAGES_TO_BUILD=${CHROMEOS_DEVELOPER_IMAGE_NAME}
fi
info "The following images will be built ${IMAGES_TO_BUILD}."
}
# Look at flags to determine which image types we should build.
parse_build_image_args() {
# If argv is specified, we use the new parsing method to determine exactly
# which images we need to build and the flags to set.
if [ -n "${FLAGS_ARGV}" ]; then
info "Ignoring image flags since image(s) in $FLAGS_ARGV specified."
get_images_to_build ${FLAGS_ARGV}
# Start at ground zero with all image flags set to False.
FLAGS_withdev=${FLAGS_FALSE}
FLAGS_test=${FLAGS_FALSE}
FLAGS_factory=${FLAGS_FALSE}
FLAGS_factory_install=${FLAGS_FALSE}
if should_build_image ${CHROMEOS_DEVELOPER_IMAGE_NAME}; then
FLAGS_withdev=${FLAGS_TRUE}
fi
if should_build_image ${CHROMEOS_TEST_IMAGE_NAME}; then
FLAGS_withdev=${FLAGS_TRUE}
FLAGS_test=${FLAGS_TRUE}
if should_build_image "${CHROMEOS_FACTORY_TEST_IMAGE_NAME}"; then
die "Cannot build both the test and factory_test images."
fi
fi
if should_build_image ${CHROMEOS_FACTORY_TEST_IMAGE_NAME}; then
FLAGS_withdev=${FLAGS_TRUE}
FLAGS_factory=${FLAGS_TRUE}
fi
if should_build_image ${CHROMEOS_FACTORY_INSTALL_SHIM_NAME}; then
for image in ${CHROMEOS_BASE_IMAGE_NAME} ${CHROMEOS_DEVELOPER_IMAGE_NAME}\
${CHROMEOS_TEST_IMAGE_NAME} ${CHROMEOS_FACTORY_TEST_IMAGE_NAME}; do
should_build_image ${image} && die "Can't build both $image" \
"and ${CHROMEOS_FACTORY_INSTALL_SHIM_NAME}."
done
FLAGS_factory_install=${FLAGS_TRUE}
fi
else
# Legacy method for tweaking flags to do the right thing.
if [ ${FLAGS_factory_install} -eq ${FLAGS_TRUE} ]; then
if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ]; then
info "Incompatible flags: --factory and --factory_install cannot both" \
"be set to True. Resetting --factory to False."
FLAGS_factory=${FLAGS_FALSE}
fi
if [ ${FLAGS_test} -eq ${FLAGS_TRUE} ]; then
info "Incompatible flags: --test and --factory_install cannot both be" \
"set to True. Resetting --test to False."
FLAGS_test=${FLAGS_FALSE}
fi
# Disable --withdev flag when --factory_install is set to True. Otherwise,
# the dev image produced will be based on install shim, rather than a
# pristine image.
if [ ${FLAGS_withdev} -eq ${FLAGS_TRUE} ]; then
info "Incompatible flags: --withdev and --factory_install cannot both" \
"be set to True. Resetting --withdev to False."
FLAGS_withdev=${FLAGS_FALSE}
fi
fi
if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ]; then
if [ ${FLAGS_test} -eq ${FLAGS_FALSE} ]; then
info "Incompatible flags: --factory implies --test. Resetting --test" \
"to True."
FLAGS_test=${FLAGS_TRUE}
fi
fi
if [ ${FLAGS_test} -eq ${FLAGS_TRUE} ]; then
if [ ${FLAGS_withdev} -eq ${FLAGS_FALSE} ]; then
info "Incompatible flags: --test implies --withdev. Resetting" \
"--withdev to True."
FLAGS_withdev=${FLAGS_TRUE}
fi
get_images_to_build ${FLAGS_ARGV}
if should_build_image ${CHROMEOS_TEST_IMAGE_NAME}; then
if should_build_image "${CHROMEOS_FACTORY_TEST_IMAGE_NAME}"; then
die "Cannot build both the test and factory_test images."
fi
fi
if should_build_image ${CHROMEOS_BASE_IMAGE_NAME} \
${CHROMEOS_DEVELOPER_IMAGE_NAME} ${CHROMEOS_TEST_IMAGE_NAME} \
${CHROMEOS_FACTORY_TEST_IMAGE_NAME} &&
should_build_image ${CHROMEOS_FACTORY_INSTALL_SHIM_NAME}; then
die "Can't build ${CHROMEOS_FACTORY_INSTALL_SHIM_NAME} with any other" \
"image."
fi
if should_build_image ${CHROMEOS_FACTORY_INSTALL_SHIM_NAME}; then
FLAGS_enable_rootfs_verification=${FLAGS_FALSE}
fi
}
check_blacklist() {

View File

@ -27,6 +27,12 @@ install_dev_packages() {
# Install developer packages described in chromeos-dev.
emerge_to_image --root="${root_dev_dir}" chromeos-dev
# Copy over the libc debug info so that gdb
# works with threads and also for a better debugging experience.
sudo mkdir -p "${ROOT_FS_DIR}/usr/local/lib/debug"
sudo tar jxpf "${LIBC_PATH}" -C "${ROOT_FS_DIR}/usr/local/lib/debug" \
./usr/lib/debug/usr/${CHOST} --strip-components=6
# Install the bare necessary files so that the "emerge" command works
if [ ${FLAGS_statefuldev} -eq ${FLAGS_TRUE} ]; then
sudo cp -a ${root_dev_dir}/share/portage ${ROOT_FS_DIR}/usr/share
@ -82,12 +88,6 @@ install_dev_packages() {
done
fi
# Check that the image has been correctly created. Only do it if not
# building a factory install shim, as the INSTALL_MASK for it will make
# test_image fail.
if [ ${FLAGS_factory_install} -eq ${FLAGS_FALSE} ]; then
test_image_content "$ROOT_FS_DIR"
fi
info "Developer image built and stored at ${image_name}"
unmount_image

View File

@ -53,17 +53,18 @@ emerge_to_image() {
"$@" ${EMERGE_JOBS}
}
# Returns 0 if this image was requested to be built, 1 otherwise.
# $1 The name of the image to build.
# Returns 0 if any of the images was requested to be built, 1 otherwise.
# $@ The name(s) of the images to check.
should_build_image() {
# Fast pass back if we should build all incremental images.
local image_name=$1
local images="$@"
local image_name
local image_to_build
[ -z "${IMAGES_TO_BUILD}" ] && return 0
for image_to_build in ${IMAGES_TO_BUILD}; do
[ ${image_to_build} = ${image_name} ] && return 0
for image_name in ${images}; do
for image_to_build in ${IMAGES_TO_BUILD}; do
[ ${image_to_build} = ${image_name} ] && return 0
done
done
return 1
@ -120,7 +121,8 @@ mod_image_for_test () {
STATEFUL_DIR="${STATEFUL_FS_DIR}" ARCH="${ARCH}" BACKDOOR="${BACKDOOR}" \
"${mod_test_script}"
if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ]; then
if [ ${FLAGS_factory} -eq ${FLAGS_TRUE} ] ||
should_build_image ${CHROMEOS_FACTORY_IMAGE_NAME}; then
emerge_to_image --root="${ROOT_FS_DIR}" factorytest-init
INSTALL_MASK="${FACTORY_TEST_INSTALL_MASK}"
emerge_to_image --root="${ROOT_FS_DIR}/usr/local" \

View File

@ -257,7 +257,7 @@ FACTORY_TEST_INSTALL_MASK="
/usr/local/autotest/client/site_tests/realtimecomm_GTalk*
"
# Mask for factory install shim (build_image --factory_install)
# Mask for factory install shim (build_image factory_install)
FACTORY_SHIM_INSTALL_MASK="
$DEFAULT_INSTALL_MASK
/opt/[^g]*