#!/bin/bash
# Copyright 2017 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_ROOT=$(dirname "$(readlink -f "$0")")
. "${SCRIPT_ROOT}/build_library/build_common.sh" || exit 1

assert_inside_chroot "$@"

DEFINE_string board "${DEFAULT_BOARD}" \
  "The board to build an image for."
DEFINE_boolean dev "${FLAGS_FALSE}" \
  "Include dev packages and allow serial login."
DEFINE_boolean test "${FLAGS_FALSE}" \
  "Include test and dev packages, and allow serial login."
DEFINE_string output_root "${DEFAULT_BUILD_ROOT}/images" \
  "Directory in which to place image result directories (named by version)"

FLAGS_HELP="USAGE: ${SCRIPT_NAME} [flags]

To build a tatl dev image, try:
$ ${SCRIPT_NAME} --board=tatl --dev
"
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"
switch_to_strict_mode

IMAGE_TYPE_BASE="base"
IMAGE_TYPE_DEV="dev"
IMAGE_TYPE_TEST="test"

# Produce the VM image.
build_vm_image() {
  local image_name="$1"
  local image_type="$2"
  local extra=()
  local ROOTDIR="${OUTPUT_DIR}/rootfs"
  local image_suffix=""

  case "${image_type}" in
    "${IMAGE_TYPE_TEST}")
      extra+=( "virtual/target-termina-os-dev" )
      extra+=( "virtual/target-termina-os-test" )
      image_suffix="-test"
      ;;
    "${IMAGE_TYPE_DEV}")
      extra+=( "virtual/target-termina-os-dev" )
      image_suffix="-dev"
      ;;
  esac

  export INSTALL_MASK="${DEFAULT_INSTALL_MASK}"

  mkdir -p "${OUTPUT_DIR}"

  install_with_root_deps "${ROOTDIR}" "virtual/target-termina-os" \
                                      "sys-libs/gcc-libs" \
                                      "${extra[@]}"

  info "Installing C library ... "
  install_libc "${ROOTDIR}"

  info "Cleaning excess files ... "
  sudo rm -rf "${ROOTDIR}"/var "${ROOTDIR}"/usr/lib*/gconv/ \
    "${ROOTDIR}"/sbin/ldconfig "${ROOTDIR}"/boot "${ROOTDIR}"/lib/firmware
  # Remove empty directories from the rootfs.
  sudo find "${ROOTDIR}"/ -type d -depth -exec rmdir {} + 2>/dev/null || :

  info "Creating top level dirs and socket dirs ... "
  sudo mkdir -p "${ROOTDIR}"/{dev,proc,root,sys,home/user,run,tmp,var}

  info "Creating container mounts ..."
  sudo mkdir -p "${ROOTDIR}"/mnt/{container_rootfs,container_private}

  info "Installing container pubkey ..."
  "${VBOOT_SIGNING_DIR}"/insert_container_publickey.sh \
    "${ROOTDIR}" \
    "${VBOOT_DEVKEYS_DIR}"/cros-oci-container-pub.pem

  info "Generating squashfs file ... "
  local args=(
    -all-root
    -noappend
  )
  local img="${OUTPUT_DIR}/rootfs${image_suffix}.bin"
  sudo mksquashfs "${ROOTDIR}" "${img}" "${args[@]}"
  sudo chown $(id -u):$(id -g) "${img}"

  info "Copying in kernel ..."
  cp /build/"${FLAGS_board}"/boot/vmlinuz \
     "${OUTPUT_DIR}/termina-kernel${image_suffix}.bin"

  info "Cleaning up ... "
  sudo rm -rf "${ROOTDIR}"
}

run_emerge() {
  emerge-${BOARD} \
    --quiet --jobs ${NUM_JOBS} \
    --usepkgonly \
    "$@"
}

# Emerge with root deps.
install_with_root_deps() {
  local root_dir="$1"
  shift
  info "Installing '$*' with root deps ... "
  run_emerge --root="${root_dir}" "$@" --root-deps=rdeps
}

main() {
  OVERLAY_CHROMEOS_DIR="${SRC_ROOT}/third_party/chromiumos-overlay/chromeos"
  . "${OVERLAY_CHROMEOS_DIR}/config/chromeos_version.sh" || exit 1
  . "${BUILD_LIBRARY_DIR}/board_options.sh" || exit 1
  . "${BUILD_LIBRARY_DIR}/base_image_util.sh" || exit 1
  . "${BUILD_LIBRARY_DIR}/build_image_util.sh" || exit 1

  local image_name="${FLAGS_board}"
  info "Building '${image_name}' ..."
  build_vm_image "${image_name}" "${IMAGE_TYPE_BASE}"

  if [[ ${FLAGS_dev} -eq ${FLAGS_true} ]]; then
    info "Building '${image_name}-dev' ..."
    build_vm_image "${image_name}-dev" "${IMAGE_TYPE_DEV}"
  fi

  if [[ ${FLAGS_test} -eq ${FLAGS_true} ]]; then
    info "Building '${image_name}-test' ..."
    build_vm_image "${image_name}-test" "${IMAGE_TYPE_TEST}"
  fi

  # Set up symlink to latest image directory.
  LINK_NAME="${FLAGS_output_root}/${BOARD}/latest"
  ln -sfT $(basename ${OUTPUT_DIR}) ${LINK_NAME}
}

main "$@"
