#!/bin/bash
# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

### run bootserver in zedboot disk paver mode

## usage: fx boot-paver <machine type> [--no-data] [bootserver arguments]
##   --no-data  Use FVM images without a /data partition (preserve existing data)

set -e

source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"/lib/image_build_vars.sh

if [[ $# == 0 ]]; then
  fx-command-help
  fx-machine-types
  exit 1
fi

declare -a disks=()
ramdisk="${FUCHSIA_BUILD_DIR}/${ramdisk_bin}"

machine_type="$1"
shift
case "${machine_type}" in
  # TODO(raggi): ramdisk isn't a paver, but, this script will replace `fx boot` at which point this is correct behavior
  ram)
    netbootbin="netboot-${ZIRCON_PROJECT}.bin"
    ramdisk="${FUCHSIA_BUILD_DIR}/${netbootbin}"
    # TODO(raggi): temporary build invocation until build produces all boot
    # volumes by default
    fx-command-run build "${netbootbin}"
    disks=()
  ;;
  efi|acer|nuc)
    disks=("${disks[@]}" --efi "${FUCHSIA_BUILD_DIR}/${efi_block}")
  ;;
  cros|pixel|vboot)
    disks=("${disks[@]}" --kernc "${FUCHSIA_BUILD_DIR}/${kernc_vboot}")
  ;;
  *)
  echo "Unsupported machine type: \"${machine_type}\""
  fx-machine-types
  exit 1
esac

# XXX(raggi): this is ugly, but we want to retain argument pass-through to
# bootserver
bootserver_args=()
if [[ "${machine_type}" == "ram" ]]; then
  bootserver_args=("$@")
else
  disks=("${disks[@]}" --fvm "${FUCHSIA_BUILD_DIR}/${fvm_sparse_block}")
  add_data=true

  while [[ $# -gt 0 ]]; do
    case "$1" in
      --no-data)
        echo "##"
        echo "## Note: if the target has no pre-existing data partition, then"
        echo "## none will be created. The resultant system will behave in a"
        echo "## kind of 'incognito' fashion, as /data will be backed by ram."
        echo "##"
        add_data=false
        shift
        ;;
      *)
        bootserver_args=("${bootserver_args[@]}" "$1")
        shift
        ;;
    esac
  done

  if $add_data; then
    disks=("${disks[@]}" --fvm "${FUCHSIA_BUILD_DIR}/${fvm_data_sparse_block}")
  fi
fi

fx-command-run build-paver

exec "${ZIRCON_TOOLS_DIR}/bootserver" \
  "${disks[@]}" \
  "${ZIRCON_BUILD_DIR}/${zircon_bin}" \
  "${ramdisk}" \
  "${bootserver_args[@]}"
