#!/usr/bin/env bash

# Copyright 2017 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT

set -eo pipefail

CMDLINE=
EXTRA_ARGS=()

SCRIPTS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
ZIRCON_DIR="${SCRIPTS_DIR}/.."

help() {
    echo "usage: ${0} [options]"
    echo "  -b [build-dir]  Use specified build directory."
    echo "                  Defaults to build-kirin970/."
    echo "  -d [ramdisk]    Use specified ramdisk file."
    echo "                  Defaults to BUILD_DIR/bootdata.bin."
    echo "  -m              Add mexec option to kernel command line to enable netboot."
    echo "  -h              Show this help message."
    exit 1
}

help_fastboot() {
    echo
    echo "Check that the device is in fastboot mode:"
    echo "  Auto Power up(Switch 1)   closed/ON"
    echo "  Recovery(Switch 2)        open/OFF"
    echo "  Fastboot(Switch 3)        closed/ON"

    read -p "Proceed (y|n)? " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        exit 1
    fi
}

git_clone() {
    git clone --depth 1 $@
}

flash_kernel() {
    "${ZIRCON_DIR}/kernel/target/arm64/board/hikey960/package-image.sh" -B "${BUILD_DIR}" "${EXTRA_ARGS[@]}"

    fastboot flash boot $OUT_IMAGE
    # Can't guarantee that the target has written image to flash before the
    # fastboot command completes, so short delay here before reboot.
    sleep 1
    fastboot reboot
}

while getopts "b:d:fmnp:ruh" FLAG; do
    case $FLAG in
    b) BUILD_DIR="${OPTARG}";;
    d) RAMDISK="${OPTARG}";;
    f) FLAG_FIRMWARE=true;;
    m) CMDLINE+=" netsvc.netboot=true";;
    *) help;;
    esac
done
shift $((OPTIND-1))

BUILD_DIR="${BUILD_DIR:-build-gcc}"
RAMDISK="${RAMDISK:-${BUILD_DIR}/kirin970-bootdata.bin}"
OUT_IMAGE="${BUILD_DIR}/kirin970-boot.img"

if [[ -n "${CMDLINE}" ]]; then
    EXTRA_ARGS+=(-c "${CMDLINE}")
fi

flash_kernel
