#!/bin/bash

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

# shellcheck source=common.sh
. "$(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]

build_sdk_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}

CREATE_SDK_BOARD_ROOT_ARGS=("--board" "${BOARD}")
if [[ ${FLAGS_force} -eq ${FLAGS_TRUE} ]]; then
  CREATE_SDK_BOARD_ROOT_ARGS+=("--force")
fi
info_run "${SCRIPTS_DIR}/create_sdk_board_root" \
  "${CREATE_SDK_BOARD_ROOT_ARGS[@]}"

# Locations we will need
BOARD_ROOT="/build/${BOARD}"

eval "$(portageq envvar -v CHOST PKGDIR)"

EMERGE_CMD="${CHROMITE_BIN}/parallel_emerge"
mapfile -t 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 )

run_emerge() {
  info_run sudo -E "${EMERGE_CMD}" "$@"
}

# 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.
run_emerge "${TOOLCHAIN_PACKAGES[@]}"

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

# Next, install our rebuilt packages into our separate root.
HOST_FLAGS=(
  "--root=${BOARD_ROOT}" --update --verbose --deep --root-deps
  --newuse --usepkgonly
)
run_emerge "${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.
run_emerge "${HOST_FLAGS[@]}" --with-bdeps=n --oneshot \
  virtual/target-sdk-nobdeps
# shellcheck disable=SC2154  # PKGDIR is defined via eval above
info_run sudo cp -a "${PKGDIR}" "${BOARD_ROOT}/packages"

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

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

# Remove wrapper scripts and any home directory contents left behind in the
# sysroot. These are not supposed to be part of the final filesystem.
info_run sudo rm -rf \
  "${BOARD_ROOT}/build" \
  "${BOARD_ROOT}"/run/* \
  "${BOARD_ROOT}"/home/* \
  "${BOARD_ROOT}"/etc/{,portage/}make.{conf,profile} \
  "${BOARD_ROOT}/etc/make.conf.user" \
  "${BOARD_ROOT}/var/cache/distfiles"

# Setup host make.conf. This includes any overlay that we may be using and a
# pointer to pre-built packages.
cros_overlay="${CHROOT_TRUNK_DIR}/src/third_party/chromiumos-overlay"
info_run sudo mkdir -p "${BOARD_ROOT}/etc/portage"
info_run sudo ln -sf \
  "${cros_overlay}/chromeos/config/make.conf.amd64-host" \
  "${BOARD_ROOT}/etc/make.conf"
info_run sudo ln -sf \
  "${cros_overlay}/profiles/default/linux/amd64/10.0/sdk" \
  "${BOARD_ROOT}/etc/portage/make.profile"

# Create make.conf.user.
cat <<\EOF | info_run sudo tee "${BOARD_ROOT}/etc/make.conf.user" >/dev/null
# This file is useful for doing global (chroot and all board) changes.
# Tweak emerge settings, ebuild env, etc...
#
# Make sure to append variables unless you really want to clobber all
# existing settings.  e.g. You most likely want:
#   FEATURES="${FEATURES} ..."
#   USE="${USE} foo"
# and *not*:
#   USE="foo"
#
# This also is a good place to setup ACCEPT_LICENSE.
EOF
info_run sudo chmod 0644 "${BOARD_ROOT}/etc/make.conf.user"

# Enable locale that some Chrome scripts assume exist.
info_run sudo sed -i -e '/^#en_US.UTF-8/s:#::' "${BOARD_ROOT}/etc/locale.gen"
info_run sudo mount --bind /dev "${BOARD_ROOT}/dev"
info_run sudo chroot "${BOARD_ROOT}" locale-gen -u
info_run sudo umount "${BOARD_ROOT}/dev"

# b/278101251: /build/amd64-host doesn't include ccache's link tree by default,
# which makes `FEATURES=ccache` quietly fail for host packages. Ensure it's
# built here.
info_run sudo ROOT="${BOARD_ROOT}" \
  "${BOARD_ROOT}/usr/bin/ccache-config" --install-links

# Add chromite into python path.
for python_path in "${BOARD_ROOT}/usr/lib/"python*.*/site-packages; do
  info_run sudo mkdir -p "${python_path}"
  info_run sudo ln -sfT "${CHROOT_TRUNK_DIR}"/chromite "${python_path}"/chromite
done

# Newer portage complains about bare overlays.  Create the file that crossdev
# will also create later on.
OVERLAYS_ROOT="/usr/local/portage"
CROSSDEV_OVERLAY="${OVERLAYS_ROOT}/crossdev"
CROSSDEV_METADATA="${BOARD_ROOT}/${CROSSDEV_OVERLAY}/metadata"
info_run sudo mkdir -p -m 755 "${CROSSDEV_METADATA}"
cat <<EOF | sudo tee "${CROSSDEV_METADATA}/layout.conf" >/dev/null
# Autogenerated and managed by crossdev
# Delete the above line if you want to manage this file yourself
masters = portage-stable eclass-overlay chromiumos
repo-name = crossdev
use-manifests = true
thin-manifests = true
EOF

PORTAGE_CACHE_DIRS=(
  "${BOARD_ROOT}/var/lib/portage/pkgs"
  "${BOARD_ROOT}/var/cache/"chromeos-{cache,chrome}
)

# Setup stable paths.
info_run sudo mkdir -p -m 755 \
  "${PORTAGE_CACHE_DIRS[@]}" \
  "${BOARD_ROOT}/var/cache" \
  "${BOARD_ROOT}/etc/profile.d" \
  "${BOARD_ROOT}/run" \
  "${BOARD_ROOT}/mnt/host" \
  "${BOARD_ROOT}/mnt/host/out" \
  "${BOARD_ROOT}/mnt/host/source"

info_run sudo ln -sfT \
  /mnt/host/source/src/chromium/depot_tools \
  "${BOARD_ROOT}/mnt/host/depot_tools"

info_run sudo ln -sfT \
  chromeos-cache/distfiles "${BOARD_ROOT}/var/cache/distfiles"

# Setup cache dirs.
info_run sudo chmod 775 "${PORTAGE_CACHE_DIRS[@]}"

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