#!/bin/bash
# Copyright 2015 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.

# This script builds gpu drivers (mali-drivers[-*], img-ddk) for a list
# of boards. It uploads the binaries to Google storage and makes them available
# in the public repository.

# Loads script libraries.
CONTRIB_DIR=$(dirname "$(readlink -f "$0")")
. "${CONTRIB_DIR}/common.sh" || exit 1

DEFINE_string package "" \
  "selects which gpu drivers package to build"
DEFINE_boolean dryrun ${FLAGS_FALSE} \
  "dry run, don't upload anything and don't delete temporary dirs" n
DEFINE_boolean usebinpkg ${FLAGS_TRUE} \
  "use prebuilt binaries, instead of building driver locally" b
DEFINE_boolean clobber ${FLAGS_FALSE} \
  "overwrites the existing binaries when uploading" c

# Parse command line.
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"

# Script must run inside the chroot.
assert_inside_chroot

# The temp dir to use for scratch space.
TEMP_DIR=""

# All drivers are in media-libs/ portage category.
CATEGORY="media-libs"
# List of supported drivers
DRIVERS="arc-mali-drivers-bifrost arc-mali-drivers-valhall mali-drivers mali-drivers-bifrost mali-drivers-valhall img-ddk"

# List of parameters to pass to build_board, for a given package $pn:
#  - Build board names.
#  - Suffixes for tarball name.
#  - Overlay paths for each board.
#
# Variable name: "PARAMS_${pn//-/_}"

PARAMS_arc_mali_drivers_bifrost=(
  "kukui kukui chipset-mt8183"
)

PARAMS_arc_mali_drivers_valhall=(
  "asurada asurada chipset-mt8192"
  "cherry cherry chipset-mt8195"
)

PARAMS_mali_drivers=(
  "daisy daisy overlay-daisy"
  "kevin gru baseboard-gru"
  "peach_pit peach overlay-peach"
  "veyron_jerry veyron overlay-veyron"
)

PARAMS_mali_drivers_bifrost=(
  "kukui kukui chipset-mt8183"
)

PARAMS_mali_drivers_valhall=(
  "asurada asurada chipset-mt8192"
  "cherry cherry chipset-mt8195"
)

PARAMS_img_ddk=(
  "elm oak chipset-mt8173"
)

create_run_script() {
  local script="$1"
  local outputtarball="$2"

  cat > "${script}" <<\__HDREOF__
#!/bin/sh
#
# Copyright 2015 The Chromium OS Authors. All rights reserved.
#
# Usage is subject to the enclosed license agreement.
# To be generated by Makeself 1.5.3
skip=@HDRSZ@
echo
echo The license for this software will now be displayed.
echo You must agree to this license before using this software.
echo

more << __EOF__
__HDREOF__

  cat "${SRC_ROOT}/third_party/chromiumos-overlay/licenses/Google-TOS" >> "${script}"
  echo __EOF__ >> "${script}"
  cat >> "${script}" <<\__BODYEOF__
if [ $? != 0 ]; then
  echo "ERROR: Couldn't display license file" 1>&2
  exit 1
fi

echo

printf 'Type "y" if you agree to the terms of the license: '
read typed

if [ "${typed}" != y ]; then
  echo
  echo "You didn't accept the license. Extraction aborted."
  exit 2
fi

echo

tail -n +${skip} "$0" | tar xjv 2>/dev/null

if [ $? -ne 0 ]; then
  echo
  echo "ERROR: Couldn't extract files." 1>&2
  exit 3
else
  echo
  echo "Files extracted successfully."
fi
exit 0
__BODYEOF__

  local hdrsize=$(wc -l < "${script}")

  sed -i "s/@HDRSZ@/$(( hdrsize + 1 ))/g" "${script}"

  cat "${outputtarball}" >> "${script}"

  chmod +x "${script}"
  du -b "${script}"
}

# arguments:
# $1 board name (Chrome OS board name to build)
# $2 binary package suffix (suffix added to tar package name)
# $3 overlay path

build_board() {
  local board=$1
  local suffix=$2
  local opath=$3
  echo "Board is ${board}"

  # Source PVR (e.g. 13.0-r6)
  local pvr
  local inputtarball

  local temp="${TEMP_DIR}/${suffix}"
  mkdir "${temp}"
  pushd "${temp}" > /dev/null

  if [[ ${FLAGS_usebinpkg} -eq ${FLAGS_TRUE} ]]; then
    # Fetch binary package from Google Storage.
    local partner_overlay="${SRC_ROOT}/private-overlays/chromeos-partner-overlay"

    # Fetch latest preflight prebuilt version.
    git --git-dir "${partner_overlay}/.git" fetch --all
    local binhost_gs="$(git --git-dir "${partner_overlay}/.git" show \
        "m/master:chromeos/binhost/target/${board}-POSTSUBMIT_BINHOST.conf" | \
      sed -nE 's/POSTSUBMIT_BINHOST=\"(.*)\"/\1/p')"

    # Parse Packages file to find GS path of the latest ${pn} prebuilt.
    local prebuilt_path="$(gsutil cat "${binhost_gs}/Packages" | \
      awk '
        $1 == "CPV:" && $2 ~ /'"${CATEGORY}"'\/'"${pn}"'-[0-9]/ { m = 1 }
        m && $1 == "PATH:" { print $2 }
        m && $1 == "" { exit }
      ')"
    local package_gs="gs://chromeos-prebuilt/${prebuilt_path}"

    gsutil cp "${package_gs}" .

    inputtarball="${temp}/${package_gs##*/}"
    pvr="${package_gs%.*}"
    pvr="${pvr##*${pn}-}"
  else
    # Build from source.
    setup_board --board="${board}"
    if [[ $? != 0 ]]; then
      die "Setting up board ${board} failed."
    fi

    # Make sure we are not building -9999 ebuild.
    # This could fail if cros_workon is already stopped so ignore return code.
    cros_workon --board="${board}" stop "${pn}"

    "emerge-${board}" "${pn}"

    if [[ $? != 0 ]]; then
      die "Emerging ${pn} for ${board} failed."
    fi

    pvr="$("equery-${board}" -q list -p -o --format="\$fullversion" "${pn}" | \
           sort -V | head -n 1)"
    inputtarball="/build/${board}/packages/${CATEGORY}/${pn}-${pvr}.tbz2"
  fi

  # Binary PV (e.g. 13.0_p6)
  local pv="${pvr/-r/_p}"
  local outputtarball="${pn}-${suffix}-${pv}.tbz2"
  local script="${pn}-${suffix}-${pv}.run"
  local gspath="gs://chromeos-localmirror/distfiles"

  echo "Current version is ${pvr}"
  echo "Input tarball is ${inputtarball}"
  echo "Output tarball is ${outputtarball}"
  echo "Script is ${script}"

  mkdir work
  if [[ $? != 0 ]]; then
    die "Couldn't create work directory."
  fi

  tar -C work -xpjvf "${inputtarball}"
  if [[ $? != 0 ]]; then
    die "Couldn't decompress package tarball ${inputtarball}."
  fi

  tar -C work --exclude=usr/lib/debug -cpjvf "${outputtarball}" ./
  if [[ $? != 0 ]]; then
    die "Couldn't create ${outputtarball}."
  fi

  create_run_script "${script}" "${outputtarball}"

  echo "Uploading tarball to ${gspath}/${script}"
  if [[ ${FLAGS_dryrun} -eq ${FLAGS_TRUE} ]]; then
    echo "Would run: gsutil cp -n -a public-read \"${script}\" \"${gspath}/${script}\""
  else
    local extra_args=""

    if [[ ${FLAGS_clobber} -eq ${FLAGS_FALSE} ]]; then
      if gsutil ls -a "${gspath}/${script}" 2>/dev/null; then
        echo "WARNING: ${gspath}/${script} exists."
        echo "Retry with -c or --clobber to overwrite the existing binaries."
        exit 1
      fi
      extra_args="${extra_args} -n"
    fi

    gsutil cp ${extra_args} -a public-read "${script}" "${gspath}/${script}"
    if [[ $? != 0 ]]; then
      die "Couldn't upload ${script} to ${gspath}/${script}."
    fi
  fi

  # Uprev ebuild in git if it exists.
  if [[ -d "${SRC_ROOT}/overlays/${opath}/${CATEGORY}/${pnbin}" ]]; then
    cd "${SRC_ROOT}/overlays/${opath}/${CATEGORY}/${pnbin}"

    # Grab the version of the current release of the binary package.
    local pvbin="$(printf '%s\n' *.ebuild | \
                   sed -nE "s/^${pnbin}-(.*)\.ebuild\$/\1/p" | \
                   sort -V | tail -n 1)"
    echo "New binary version: ${pv} (current binary version: ${pvbin})"

    # following git commands may fail if they have been issued previously
    git checkout -b "gpudriverbinupdate-${pnbin}-${pv}"
    git mv "${pnbin}-${pvbin}.ebuild" "${pnbin}-${pv}.ebuild"

    ebuild "${pnbin}-${pv}.ebuild" manifest
  fi

  popd > /dev/null
}

cleanup() {
  trap - INT TERM ERR EXIT

  rm -rf "${TEMP_DIR}"
}

main() {
  if [[ -z ${FLAGS_package} ]]; then
    die "Please select a package using --package [${DRIVERS// /|}]"
  fi

  local params
  local typed

  trap cleanup INT TERM ERR EXIT

  echo 'This script builds gpu drivers for a list of boards. It uploads the'
  echo 'binaries to Google storage and makes them available in the public'
  echo 'repository. It expects you have configured gsutil.'
  echo

  if [[ ${FLAGS_dryrun} -eq ${FLAGS_TRUE} ]]; then
    echo "Running with --dryrun, moving forward."
  else
    printf 'Type "y" if you know what you are doing and want to go ahead: '
    read typed

    if [[ "${typed}" != y ]]; then
      echo
      echo "Good choice."
      exit 2
    fi
  fi

  if [[ ! -f "${HOME}/.boto" ]]; then
    die "You did not configure gsutil after all."
  fi

  local pn="${FLAGS_package}"
  local pnbin="${pn}-bin"

  local array="PARAMS_${pn//-/_}[@]"

  if [[ -z "${!array}" ]]; then
    echo
    echo "Nothing to do for ${pn}, you probably chose an incorrect package name."
    echo "Supported packages: ${DRIVERS}"
    exit 1
  fi

  TEMP_DIR="$(mktemp -d)"
  echo "Temp dir is ${TEMP_DIR}"

  for params in "${!array}"; do
    build_board ${params}
  done
}

main "$@"
