#!/bin/bash

# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Script to build a bootable keyfob-based chromeos system image from within
# a chromiumos setup. This assumes that all needed packages have been built into
# the given target's root with binary packages turned on. This script will
# build the Chrome OS image using only pre-built binary packages.

SCRIPT_ROOT=$(dirname $(readlink -f "$0"))
. "${SCRIPT_ROOT}/build_library/build_common.sh" || exit 1

# Developer-visible flags.
DEFINE_string adjust_part "" \
  "Adjustments to apply to partition table (LABEL:[+-=]SIZE) e.g. ROOT-A:+1G"
DEFINE_string board "${DEFAULT_BOARD}" \
  "The board to build an image for."
DEFINE_string boot_args "noinitrd" \
  "Additional boot arguments to pass to the commandline"
DEFINE_boolean enable_bootcache ${FLAGS_FALSE} \
  "Default all bootloaders to NOT use boot cache."
DEFINE_boolean enable_rootfs_verification ${FLAGS_TRUE} \
  "Default all bootloaders to use kernel-based root fs integrity checking."
DEFINE_string output_root "${DEFAULT_BUILD_ROOT}/images" \
  "Directory in which to place image result directories (named by version)"
DEFINE_string disk_layout "default" \
  "The disk layout type to use for this image."
DEFINE_boolean standard_backdoor ${FLAGS_TRUE} \
  "Install standard backdoor credentials for testing"
DEFINE_string usb_disk /dev/sdb3 \
  "Path syslinux should use to do a usb boot. Default: /dev/sdb3"
DEFINE_string enable_serial "" \
  "Enable serial port for printks. Example values: ttyS0"

FLAGS_HELP="USAGE: build_image [flags] [list of images to build].
This script is used to build a Chromium OS image. Chromium OS comes in many
different forms.  This scripts can be used to build the following:

base - Pristine Chromium OS image. As similar to Chrome OS as possible.
dev - Developer image. Like base but with additional developer packages.
test - Like dev, but with additional test specific packages and can be easily
  used for automated testing using scripts like run_remote_tests, etc.
factory_test - Like test but with extra packages and modifications used to
  test images in a factory setting.  Cannot be built along with a test image.
factory_install - Install shim for bootstrapping the factory test process.
  Cannot be built along with any other image.

Examples:

build_image --board=<board> dev test - builds developer and test images.
build_image --board=<board> factory_install - builds a factory install shim.

Note if you want to build an image with custom size partitions, either consider
adding a new disk layout in build_library/legacy_disk_layout.json OR use
adjust_part. See the help above but here are a few examples:

adjust_part='STATE:+1G' -- add one GB to the size the stateful partition
adjust_part='ROOT-A:-1G' -- remove one GB from the primary rootfs partition
adjust_part='STATE:=1G' --  make the stateful partition 1 GB
...
"
show_help_if_requested "$@"

# The following options are advanced options, only available to those willing
# to read the source code. They are not shown in help output, since they are
# not needed for the typical developer workflow.
DEFINE_integer build_attempt 1 \
  "The build attempt for this image build."
DEFINE_integer jobs -1 \
  "How many packages to build in parallel at maximum."
DEFINE_boolean replace ${FLAGS_FALSE} \
  "Overwrite existing output, if any."
DEFINE_string symlink "latest" \
  "Symlink name to use for this image."
DEFINE_string version "" \
  "Overrides version number in name to this version."

# Parse command line.
FLAGS "$@" || exit 1

# See if we want to default the bootcache flag before we clobber
# the user's command line.  We want to default to false if the
# user explicitly disabled rootfs verification otherwise they
# have to manually specify both.
FLAGS_bootcache_use_board_default=${FLAGS_enable_rootfs_verification}
case " $* " in
  *" --enable_bootcache "*|\
  *" --noenable_bootcache "*)
    FLAGS_bootcache_use_board_default=${FLAGS_FALSE}
    ;;
esac

eval set -- "${FLAGS_ARGV}"

# Only now can we die on error.  shflags functions leak non-zero error codes,
# so will die prematurely if 'switch_to_strict_mode' is specified before now.
switch_to_strict_mode

# 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
. "${BUILD_LIBRARY_DIR}/disk_layout_util.sh" || exit 1
. "${BUILD_LIBRARY_DIR}/mount_gpt_util.sh" || exit 1
. "${BUILD_LIBRARY_DIR}/build_image_util.sh" || exit 1
. "${BUILD_LIBRARY_DIR}/base_image_util.sh" || exit 1
. "${BUILD_LIBRARY_DIR}/dev_image_util.sh" || exit 1
. "${BUILD_LIBRARY_DIR}/test_image_util.sh" || exit 1
. "${BUILD_LIBRARY_DIR}/test_image_content.sh" || exit 1

parse_build_image_args

load_board_specific_script "${FLAGS_board}" "board_specific_setup.sh"

# TODO: <prebuild hook>

BASE_PACKAGE="chromeos-base/chromeos"
# Tweak flags, configure extra USE flags, and set base packages for the factory
# install shim.
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}"

  # Add the cros_factory_install boot arg.
  FLAGS_boot_args="${FLAGS_boot_args} cros_factory_install"

  BASE_PACKAGE="chromeos-base/chromeos-installshim"

  export USE="${USE} initramfs vfat tpm i2cdev"

  # On ARM, fbconsole is required to fix a display driver bug.
  if [ "${ARCH}" = "arm" ] ; then
    export USE="${USE} fbconsole"
  fi
fi

if should_build_image ${CHROMEOS_FACTORY_TEST_IMAGE_NAME}; then
  # Disable module restrictions on factory test image to allow for
  # external third party drivers in /usr/local.
  FLAGS_boot_args="${FLAGS_boot_args} lsm.module_locking=0"
fi

# TODO: </prebuild hook>

# If we are creating a developer image, also create a pristine image with a
# different name.
PRISTINE_IMAGE_NAME=
if should_build_image ${CHROMEOS_FACTORY_INSTALL_SHIM_NAME}; then
  PRISTINE_IMAGE_NAME=${CHROMEOS_FACTORY_INSTALL_SHIM_NAME}
else
  PRISTINE_IMAGE_NAME=${CHROMEOS_BASE_IMAGE_NAME}
fi

DEVKEYSDIR="/usr/share/vboot/devkeys"

eclean-$BOARD -d packages

if [[ ${skip_blacklist_check} -ne 1 ]]; then
  check_blacklist
fi

# Check that the build root is sane.
if [[ ${skip_test_build_root} -ne 1 ]]; then
  "${BUILD_LIBRARY_DIR}/test_build_root" --root="${BOARD_ROOT}"
fi

# Hack to fix bug where x86_64 CHOST line gets incorrectly added.
# ToDo(msb): remove this hack.
PACKAGES_FILE="${BOARD_ROOT}/packages/Packages"
sudo sed -e "s/CHOST: x86_64-pc-linux-gnu//" -i "${PACKAGES_FILE}"

# Handle existing directory.
if [[ -e "${BUILD_DIR}" ]]; then
  if [[ ${FLAGS_replace} -eq ${FLAGS_TRUE} ]]; then
    sudo rm -rf "${BUILD_DIR}"
  else
    error "Directory ${BUILD_DIR} already exists."
    error "Use --build_attempt option to specify an unused attempt."
    error "Or use --replace if you want to overwrite this directory."
    die "Unwilling to overwrite ${BUILD_DIR}."
  fi
fi

# Create the output directory and temporary mount points.
mkdir -p "${BUILD_DIR}"

# Create the base image.
create_base_image ${PRISTINE_IMAGE_NAME} ${FLAGS_enable_rootfs_verification} \
  ${FLAGS_enable_bootcache}

# Running board-specific setup if any exists.
if type board_setup &>/dev/null; then
  board_setup "${BUILD_DIR}/${PRISTINE_IMAGE_NAME}"
fi

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

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

# Create a named symlink.
LINK_NAME="${FLAGS_output_root}/${BOARD}/${FLAGS_symlink}"
ln -sfT $(basename ${BUILD_DIR}) ${LINK_NAME}

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 should_build_image ${CHROMEOS_FACTORY_TEST_IMAGE_NAME}; then
  echo "Factory test image created as ${CHROMEOS_FACTORY_TEST_IMAGE_NAME}"
fi
if should_build_image ${CHROMEOS_TEST_IMAGE_NAME}; then
  echo "Test image created as ${CHROMEOS_TEST_IMAGE_NAME}"
fi

command_completed

cat << EOF
To copy the image to a USB key, use:
  ./image_to_usb.sh --from=${OUTSIDE_OUTPUT_DIR}
To convert it to a VMWare image, use:
  ./image_to_vm.sh --from=${OUTSIDE_OUTPUT_DIR} --board=${BOARD}
EOF
