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

declare_args() {
  # This is a build that imports a board (vs. sdk).  If a board is set
  # (fx set <product>.<board>) this is true.
  has_board = false

  # Board name used for paving and amber updates.
  board_name = ""

  # Human readable board description corresponding to the board name.
  board_description = ""

  # Amount of rotation in degrees to apply to a board. Expected values are 0,
  # 90, 180, or 270.
  board_display_rotation = 0

  # Configs that are added when targeting this board.
  board_configs = []

  # A list of driver package labels to include in the 'base' package set. Used
  # by the board definition rather than the product definition.
  board_driver_package_labels = []

  # A list of package labels to include in the 'base' package set. Used by the
  # board definition rather than the product definition.
  board_package_labels = []

  # A list of package labels to include in the recovery package set. Used by the
  # board definition rather than the product definition.
  board_recovery_package_labels = []

  # A list of binary labels to include in the ZBI.
  board_bootfs_labels = []

  # A list of binary host tool labels to also build.
  board_host_labels = []

  # List of kernel command line arguments to bake into the zedboot image that are
  # required by this board. See also zedboot_cmdline_args in
  # //build/images/zedboot/BUILD.gn
  board_zedboot_cmdline_args = []

  # A list of binary labels to include in the zedboot ZBI.
  board_zedboot_bootfs_labels = []

  # A list of binary labels to include in the recovery ZBI.
  board_recovery_bootfs_labels = []

  # A list of fshost options to add to the fshost config.
  board_fshost_config = {
  }

  # A list of fshost options to add to the fshost config in the zedboot image.
  board_zedboot_fshost_config = {
  }

  # A list of binary labels to include in the system_image package.
  board_system_image_deps = []

  # Core realm shards specific to this board. See //src/sys/core for more
  # context.
  board_core_realm_shards = []

  # A list of paths to the unlock credentials file necessary to unlock this
  # board's fastboot protocol.
  board_fastboot_unlock_credentials = []

  # List of paths to board-specific tools to include in the build output.
  #
  # Most development tools can just be used in-tree and do not need to be
  # included here. This arg is only meant for tools which may need to be
  # distributed along with the build files, for example tools for flashing
  # from SoC recovery mode.
  #
  # Assets included in this way are included best-effort only and do not form
  # any kind of stable contract for users of the archive.
  board_tools = []

  # The label for the board configuration target to use with Product Assembly
  board_configuration_label = false

  # Whether or not the board supports emulator/physical devices.
  # This is used to determine if product bundle metadata should generate a
  # physical/virtual device spec or both.
  board_is_emu = false
  board_is_phys = true

  # The partitions config information used to create an update package and
  # product bundle.
  partitions_config_label = false
  partitions_config_contents = []
}

# Ensure that partitions_config_label is default_toolchain-qualified.
if (partitions_config_label != false) {
  if (partitions_config_label ==
      get_label_info(partitions_config_label, "label_no_toolchain")) {
    partitions_config_label = "$partitions_config_label($default_toolchain)"
  } else {
    assert(
        get_label_info(partitions_config_label, "toolchain") ==
            default_toolchain,
        "partitions_config_label (\"$partitions_config_label\") should be a target in the default_toolchain")
  }
}
