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

# A collection of GN arguments that developers can manually set to alter the
# behavior of the build.

declare_args() {
  # List of labels for binaries to include in the system image.
  dev_system_image_deps = []

  # List of labels for targets that should be built but not included in any
  # build outputs that are part of the build API (e.g. zbi's, package servers).
  dev_build_only_deps = []

  # An optional golden file for fuchsia.zbi kernel cmdline args. If specified,
  # this golden file would be compared against fuchsia.zbi kernel cmdline during
  # build time.
  dev_fuchsia_zbi_kernel_cmdline_golden = ""

  # List of labels for objects to include in the ZBI.
  dev_bootfs_labels = []

  # List of binary labels to include in the zedboot ZBI.
  dev_zedboot_bootfs_labels = []

  # List of binary labels to include in the recovery ZBI.
  dev_recovery_bootfs_labels = []

  # Whether to allow testonly=true targets in fuchsia ZBI or base/cache packages.
  #
  # Possible values are
  #   "all": Allow testonly=true target in fuchsia ZBI and base/cache packages.
  #   "all_but_base_cache_packages": Do not allow testonly=true target in
  #      base/cache packages, but allow in other fuchsia ZBI dependencies.
  #   "none": Do not allow testonly=true target in all ZBI dependencies
  #      including base/cache packages.
  #
  # Default value is 'none', it is preferable to set to 'all' for production
  #   image to avoid accidental inclusion of testing targets.
  dev_testonly_in_containers = "all"
}

# Whether to allow testonly=true in base_packages/cache_packages.
base_cache_packages_testonly = false
if (dev_testonly_in_containers == "all") {
  # If we allow testonly=true for all containers, then we allow it for
  # base/cache packges.
  base_cache_packages_testonly = true
}

# Whether to allow testonly=true in zbi("fuchsia") and all its dependencies
# except base_packages/cache_packages.
fuchsia_zbi_testonly = false
if (dev_testonly_in_containers == "all" ||
    dev_testonly_in_containers == "all_but_base_cache_packages") {
  fuchsia_zbi_testonly = true
}
