#!/bin/bash

# Copyright 2018 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.

# The host (chroot) specific "setup_board" process. This separates the chroot
# specific setup from the generic board setup.

. "$(dirname "$0")/common.sh" || exit 1

# Script must run inside the chroot
restart_in_chroot_if_needed "$@"

assert_not_root_user

# Developer-visible flags.
DEFINE_string board "amd64-host" \
  "The name of the board to set up."
DEFINE_boolean force $FLAGS_FALSE \
  "Force re-creating board root."

FLAGS_HELP="usage: $(basename $0) [flags]

setup_host_board builds the chroot for the amd64-host (chroot) board.
This should not need to be called except by the SDK Builder.
"

# Parse command line flags
FLAGS "$@" || exit 1
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

BOARD=${FLAGS_board}

# Locations we will need
BOARD_ROOT="/build/${BOARD}"
CROSSDEV_OVERLAY="/usr/local/portage/crossdev"
CHROMIUMOS_OVERLAY="/usr/local/portage/chromiumos"
CHROMIUMOS_CONFIG="${CHROMIUMOS_OVERLAY}/chromeos/config"
CHROMIUMOS_PROFILES="${CHROMIUMOS_OVERLAY}/profiles"
BOARD_ETC="${BOARD_ROOT}/etc"
BOARD_SETUP="${BOARD_ETC}/make.conf.board_setup"
BOARD_PROFILE="${BOARD_ETC}/portage/profile"

eval $(portageq envvar -v CHOST PKGDIR)

SYSROOT_EXISTS=false
if [ -d "${BOARD_ROOT}" ]; then
  if [[ ${FLAGS_force} -eq ${FLAGS_TRUE} ]]; then
    echo "--force set.  Re-creating ${BOARD_ROOT}..."
    # Removal takes long. Make it asynchronous.
    TEMP_DIR=`mktemp -d`
    sudo mv "${BOARD_ROOT}" "${TEMP_DIR}"
    sudo rm -rf --one-file-system "${TEMP_DIR}" &
  else
    # The sysroot exists. Take note so that we can exit early once the
    # configuration has been updated.
    SYSROOT_EXISTS=true
  fi
fi

# Setup the make.confs. We use the following:
#    make.conf             <- Overall target make.conf [arm, x86, etc. version]
#    make.conf.board_setup <- Declares CHOST, ROOT, etc.
#    make.conf.board       <- Optional board-supplied make.conf.
#    make.conf.user        <- User specified parameters.
cmds=(
  "mkdir -p '${BOARD_ROOT}' '${BOARD_ETC}' '${BOARD_PROFILE}' /usr/local/bin"
  "ln -sf /etc/make.conf.user '${BOARD_ROOT}/etc/make.conf.user'"
  "mkdir -p '${BOARD_ROOT}/etc/portage/hooks'"
)
for d in "${SCRIPTS_DIR}"/hooks/*; do
  cmds+=( "ln -sfT '${d}' '${BOARD_ROOT}/etc/portage/hooks/${d##*/}'" )
done
sudo_multi "${cmds[@]}"

# Generating the standard configuration file (make.conf.board_setup) for the
# sysroot.
cros_sysroot_utils generate-config --sysroot="${BOARD_ROOT}" \
  --board="${BOARD}" --out-file="${BOARD_SETUP}"

# Generate wrappers for portage helpers (equery, portageq, emerge, etc...).
# Those are used to generate make.conf.board.
cros_sysroot_utils create-wrappers --sysroot="${BOARD_ROOT}" \
  --friendlyname="${BOARD}"

# Choose the default profile.
if ! cros_choose_profile --profile "" \
      --board-root "${BOARD_ROOT}" --board "${BOARD}"; then
  sudo rm -rf --one-file-system "${BOARD_ROOT}"
  die "Selecting profile failed, removing incomplete board directory!"
fi

cmds=(
  "ln -sf '${CHROMIUMOS_CONFIG}/make.conf.${BOARD}' \
    '${BOARD_ETC}/make.conf'"
  "cp -f '/etc/make.conf.host_setup' '${BOARD_ETC}/'"

  # Setting up symlinks for bootstrapping multilib.
  # See http://crosbug.com/14498
  "mkdir -p '${BOARD_ROOT}'{/usr,}/lib64"
  "ln -sfT lib64 '${BOARD_ROOT}/lib'"
  "rm -r '${BOARD_ROOT}/usr/lib'"
  "ln -sfT lib64 '${BOARD_ROOT}/usr/lib'"

  # Copying some files for bootstrapping empty chroot.
  # See http://crosbug.com/14499
  "mkdir -p '${BOARD_ETC}'/{init.d,xml}"
  "cp /etc/xml/catalog '${BOARD_ETC}'/xml/"
  "cp /etc/init.d/functions.sh '${BOARD_ETC}'/init.d/"
)
sudo_multi "${cmds[@]}"

EMERGE_CMD="${CHROMITE_BIN}/parallel_emerge"
TOOLCHAIN_PACKAGES=(
  $("${CHROMITE_BIN}/cros_setup_toolchains" --show-packages host)
)
# Sanity check we got some valid results.
if [[ ${#TOOLCHAIN_PACKAGES[@]} -eq 0 ]]; then
  die_notrace "cros_setup_toolchains failed"
fi
PACKAGES=( system virtual/target-sdk world )

# First, rebuild all packages from scratch. This is needed to make sure
# we rebuild all chroot packages.

# We build the toolchain by hand to avoid race conditions where the toolchain
# is used by other packages that we're building.  See https://crbug.com/906289.
sudo -E ${EMERGE_CMD} "${TOOLCHAIN_PACKAGES[@]}"

# Then build everything else.
sudo -E $EMERGE_CMD --emptytree --with-bdeps=y \
  --exclude "${TOOLCHAIN_PACKAGES[*]}" \
  "${PACKAGES[@]}" virtual/target-sdk-nobdeps
sudo eclean -d packages

# Next, install our rebuilt packages into our separate root.
HOST_FLAGS="--root=$BOARD_ROOT --update --verbose --deep --root-deps"
HOST_FLAGS+=" --newuse --usepkgonly"
sudo -E $EMERGE_CMD $HOST_FLAGS --with-bdeps=y "${PACKAGES[@]}"
# Install our rebuilt packages from the nobdeps target into our separate root
# without their build-time deps.  We also avoid adding this target to the
# world set so that subsequent update_chroot commands won't re-import the
# build deps.
sudo -E $EMERGE_CMD $HOST_FLAGS --with-bdeps=n --oneshot \
  virtual/target-sdk-nobdeps
sudo cp -a "${PKGDIR}" $BOARD_ROOT/packages

# Copy our chroot version into the newly packaged chroot.
sudo cp -a "${CHROOT_VERSION_FILE}" "${BOARD_ROOT}${CHROOT_VERSION_FILE}"

# Now cleanup paths referencing the ROOT from the *.la files.
sudo find "${BOARD_ROOT}" -type f -name '*.la' -exec \
  sed -i -e "s|${BOARD_ROOT}/|/|g" {} +

command_completed
echo "Done!"
echo "The SYSROOT is: ${BOARD_ROOT}"
