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

import("//build/board.gni")
import("//build/compiled_action.gni")
import("//build/config/build_api_module.gni")
import("//build/config/compiler.gni")
import("//build/drivers/check_included_drivers.gni")
import("//build/drivers/create_all_drivers_doc.gni")
import("//build/images/args.gni")
import("//build/info/info.gni")
import("//build/product.gni")
import("//build/rust/config.gni")
import("//build/security.gni")
import("//build/testing/platforms.gni")
import("//build/testing/validated_test_types_group.gni")
import("//build/toolchain/goma.gni")
import("//build/toolchain/rbe.gni")
import("//build/toolchain/zircon/clang.gni")
import("//build/zbi/zbi.gni")

declare_args() {
  ## NOTE:  The "legacy_*" versions of these args are part of multi-month
  #         transition to using product assembly and separate the definition of
  #         the platform from the definition of the product.
  #
  #         These args replace the use of the non-"legacy_" prefixed arg
  #         throughout the product definition files (//products/**/*.gni).
  #
  #  NOTE:  These "legacy_*" args will go away when the long-term transition to
  #         product assembly is complete, and they should not be relied upon
  #         within developer's own args.gn files or BUILD.gn files.

  # If you add fuchsia_driver_package labels to this variable, any drivers in these packages will
  # be visible to Driver Manager. These package labels are also considered to be in the
  # 'base' package set (for more info see 'base_package_labels').
  base_driver_package_labels = []

  # If you add package labels to this variable, the packages will be included in
  # the 'base' package set, which represents the set of packages that are part
  # of an OTA. These packages are updated as an atomic unit during an OTA
  # process and are immutable and are a superset of the TCB (Trusted Computing
  # Base) for a product. These packages are never evicted by the system.
  base_package_labels = []
  legacy_base_package_labels = []

  # If you add package labels to this variable, the packages will be included
  # in the 'cache' package set, which represents an additional set of software
  # that is made available on disk immediately after paving and in factory
  # flows. These packages are updated with an OTA, and can also be updated
  # ephemerally. This cache of software can be evicted by the system if storage
  # pressure arises or other policies indicate.
  cache_package_labels = []
  legacy_cache_package_labels = []

  # If you add package labels to this variable, the packages will be included
  # in the 'universe' package set, which represents all software that is
  # produced that is to be published to a package repository or to the SDK by
  # the build. The build system ensures that the universe package set includes
  # the base and cache package sets, which means you do not need to redundantly
  # include those labels in this variable.
  universe_package_labels = []

  # If you add package labels to this variable, the packages will be included in
  # the 'discoverable' package set, as defined by RFC-0212 "Package Sets":
  # https://fuchsia.dev/fuchsia-src/contribute/governance/rfcs/0212_package_sets
  #
  # They will be compiled, and published, but not added as dependencies of the
  # assembled images, and so will not be able to cause the inclusion of
  # 'config_data' or 'shell_command' entries.
  #
  # As these cannot be part of the legacy AIB for a product, there is no
  # "legacy" version of this argument.
  discoverable_package_labels = []

  # If you add labels to this variable the `exported_fuchsia_package_archive()`
  # targets captured by these labels will be collected and exposed in the
  # 'package_archives' build api module. Ordinary `fuchsia_package_archive()`
  # targets are not captured.
  #
  # Note: This variable is only used for metadata collection -- any package
  # labels added here will still need to be included in the build graph
  # elsewhere.
  #
  # It's usually advisable to use labels of well-defined, curated `group()`s of
  # packages instead of explicitly adding the labels of the
  # `exported_fuchsia_package_archive()` targets directly.
  exported_package_labels = []

  # These are arguments used by Infra (and 'fx set') to add tests to a build
  # configuration without necessarily adding them to the assembled product, and
  # validating that they only contain tests of the type in their name.

  # Fully hermetic tests (both by packaging and at runtime)
  hermetic_test_package_labels = []

  # Non-hermetic tests (at runtime).  Non-test packages found in this group will
  # be flagged as an error by the build.
  test_package_labels = []

  # Host-driven, "end-to-end" tests that run on a Fuchsia image (either real
  # hardware or emulated).
  e2e_test_labels = []

  # Host-only tests.  These cannot have any dependency on an assembled platform
  # image, or the compiled OS itself, not even for their host_test_data().
  #
  # These will be added to the build using the host toolchain.
  host_test_labels = []

  # A developer-only argument that is used to add tests to the build without
  # going through the test-type validate that the above sets of tests are.
  # These are always a dependency of the main product assembly.
  developer_test_labels = []

  # If you add labels to this variable, these will be included in the 'host'
  # artifact set, which represents an additional set of host-only software that
  # is produced by the build.
  #
  # These will be added to the build using the host toolchain.
  host_labels = []

  # A file containing historical test duration data for this build
  # configuration, used used by testsharder to evenly split tests across
  # shards. It should be set for any builds where testsharder will be run
  # afterwards.
  test_durations_file = ""

  # Extra idk_archive() labels to be uploaded to the artifacts store. This is an
  # extension mechanism for IDK bits outside of the main repository.
  sdk_archive_labels = []
}

if (host_os == "mac") {
  import("//build/config/mac/mac_sdk.gni")
}

assert(
    current_toolchain == default_toolchain,
    "The root build file (//BUILD.gn) can only be processed in the `default_toolchain`.")

###
### fx integration.
###

# Write a file that can be sourced by `fx`.  This file is produced
# by `gn gen` and is not known to Ninja at all, so it has nothing to
# do with the build itself.  Its sole purpose is to leave bread
# crumbs about the settings `gn gen` used for `fx` to use later.
_relative_build_dir = rebase_path(root_build_dir, "//", "//")
_host_out_dir = rebase_path(host_out_dir, root_build_dir)
_fx_config_lines = [
  "# Generated by `gn gen`.",
  "FUCHSIA_BUILD_DIR='${_relative_build_dir}'",
  "FUCHSIA_ARCH='${target_cpu}'",
  "FUCHSIA_PRODUCT_NAME=${build_info_product}",
  "FUCHSIA_BOARD_NAME=${board_name}",
  "FUCHSIA_ZBI_COMPRESSION=zstd",
  "HOST_OUT_DIR='${_host_out_dir}'",
  "USE_GOMA=$use_goma",
]
if (use_goma && goma_dir != prebuilt_goma_dir) {
  _fx_config_lines += [ "GOMA_DIR=" + rebase_path(goma_dir) ]
}
write_file("$root_build_dir/fx.config", _fx_config_lines)
generated_file("default_toolchain_name.txt") {
  outputs = [ "$root_build_dir/default_toolchain_name.txt" ]
  contents = default_toolchain
}

###
### Build API modules.
###

# This is the top-level build API module that just lists all the others.
# Each element of the list is the simple name of the API module; the
# module's contents are found at "$root_build_dir/$target_name.json".
#
# Type: list(string)
#
build_api_module("api") {
  testonly = true
  data_keys = [ "build_api_modules" ]
  deps = [
    ":all_package_manifest_paths",
    ":archives",
    ":args",
    ":assembly_input_archives",
    ":assembly_manifests",
    ":bazel_build_events_logs",
    ":bazel_sdk_info",
    ":binaries",
    ":boards",
    ":build_info",
    ":checkout_artifacts",
    ":cipd_assembly_artifacts",
    ":clippy_target_mapping",
    ":delivery_blob_config",
    ":detailed_size_checker_data",
    ":fuzzers",
    ":generated_sources",
    ":gerrit_size_report",
    ":golden_files",
    ":images",
    ":licenses",
    ":package-repositories",
    ":package_archives",
    ":platforms",
    ":prebuilt_binaries",
    ":prebuilt_package_flavors",
    ":product_bundles",
    ":product_size_checker_output",
    ":rbe_config",
    ":sdk_archives",
    ":test_components",
    ":test_durations",
    ":test_list_location",
    ":tests",
    ":tool_paths",
    ":triage_sources",
    ":vnames_config",
    "//build/images/archive",
    "//sdk:sdk_source_set_list",
    "//sdk/ctf:ctf_artifacts",
  ]
}

if (current_toolchain == default_toolchain) {
  # This target is used to generate, at `gn gen` time a file
  # that is exclusively used by //build/api/client.py.
  # NOTE: nothing should depend on this target.
  generated_file("build_api_client_info") {
    deps = [ "//:api" ]
    outputs = [ "$root_build_dir/build_api_client_info" ]
    data_keys = [ "build_api_client_info" ]
    walk_keys = [ "build_api_client_info_barrier" ]
    testonly = true
    visibility = []  # Empty on purpose
  }

  # This target generates a file that contains the path to the build API client
  # script, relative to the build directory (e.g. '../../build/api/client').
  #
  # Many tools that process the build API files only have a path to the build
  # directory, and do not know where the Fuchsia source directory itself is
  # located. By reading this file, they can retrieve this information easily,
  # without relying on fragile heuristics. This file should always be
  # generated at `gn gen` time, and nothing should depend on it.
  generated_file("build_api_client_path") {
    # IMPORTANT: Do not include a newline at the end of "contents"
    contents = rebase_path("//build/api/client", root_build_dir)
    outputs = [ "$root_build_dir/build_api_client_path" ]
    visibility = []  # Empty on purpose.
  }
}

# This describes the location of the package repository, in:
#  "$root_build_dir/package-repositories.json"
#
# Type: list(scope)
#
#   path
#     Required: Path to the package repository, relative to $root_build_dir.
#     Type: path relative to $root_build_dir
#
#   targets
#     Required: Path to the targets.json file with the contents in this
#       package repository, relative to $root_build_dir.
#     Type: path relative to $root_build_dir
#
#   blobs
#     Required: Path to the blobs directory in this package repository,
#       relative to $root_build_dir.
#     Type: path relative to $root_build_dir
#
build_api_module("package-repositories") {
  testonly = true
  data_keys = [ "package_repository" ]
  deps = [ "//build/images/updates" ]
}

# This describes all the archives the build can produce, in:
# "$root_build_dir/archives.json"
#
# TODO(https://fxbug.dev/42119886): Delete me ASAP. Archives are targets that necessarily
# depend on 'everything'; targets like this should be migrated away from.
#
# Type: list(scope)
#
#   name
#     Required: The primary way that this archive is known to consumers.
#     The tuple of ($name, $type) should be unique.
#     Type: string
#
#   path
#     Required: Path to where the archive is found, relative to $root_build_dir.
#     Type: path relative to $root_build_dir
#
#   type
#     Required: "zip" or "tgz".
#     Type: string
#
build_api_module("archives") {
  testonly = true
  data_keys = [ "archives" ]
  deps = [
    "//build/gn:archives",
    "//build/images/archive",
  ]
}

# TODO(crbug.com/gn/132): Remove when GN emits the equivalent information
# itself.
#
# in file: "$root_build_dir/args.json"
#
# This just regurgitates the build arguments specified to `gn gen`.  This is
# the exact JSON representation of the settings in "$root_build_dir/args.gn".
# It does not include build arguments left to their default values.  So to
# reproduce the settings of this build, one could put in `args.gn`:
# ```
#   forward_variables_from(read_file("args.json", "json"), "*")
# ```
# Type: scope
#
build_api_module("args") {
  contents = read_file("$root_build_dir/args.gn", "scope")
}

# Describes the location where the Bazel SDK is generated.
#
# See //build/bazel:generate_fuchsia_sdk_repository for more details.
#
#
# Type: list(scope)
#
#  location
#    Required: Directory where the Bazel SDK is generated
#    Type: string
#
#
build_api_module("bazel_sdk_info") {
  testonly = true
  data_keys = [ "bazel_sdk_info" ]
  deps = [ "//build/bazel:generate_fuchsia_sdk_repository" ]
}

# Describes the location of Bazel build events log files
# for all Bazel invocations from Ninja. For context, see
# https://bazel.build/remote/bep
#
# Type: list(scope)
#
#  gn_label
#    Required: GN label of action invoking a Bazel build command.
#    Type: string
#
#  build_events_log
#    Required: Path to build event log file.
#    Type: Path relative to build directory.
#
#  format
#    Required: Format of log file, can be "binary", "text" or "json"
#    Type: string
#
#
build_api_module("bazel_build_events_logs") {
  testonly = true
  data_keys = [ "bazel_build_events_log" ]
  deps = [
    ":default",
    "//build/bazel/bazel_sdk:bazel_sdk_tests",
  ]
}

# This describes all the binaries linked by the build.
#
# This enumerates each linked binary (executable, shared library, or
# loadable/"plug-in" module) used by the build, or produced by the build.
#
# This includes host tools, kernels, boot loaders, drivers, as well as
# normal executables. This also includes prebuilt toolchain runtime
# libraries that end up in image files. It does not yet include any
# non-native binary formats.
#
# For non-prebuilts, this is meant to reach the entire dependency graph
# of all binaries that the build would ever produce.  Not every binary
# described is necessarily actually produced by any given Ninja run.  Either
# the $debug or the $dist file for any individual binary can be passed to
# Ninja as a specific target argument to ensure it's built and
# up to date before making use of that binary.  Like all build_api_module()
# targets, the top-level "binaries" target serves as a Ninja target to
# request that every binary described be built.
#
# Note that in certain cases, the paths in `debug` and `dist` will
# point out of the build tree, and thus cannot be used as Ninja targets.
# This happens for prebuilts or binaries produced by the Zircon build.
#
# Type: list(scope)
#
#   cpu
#     Required: CPU architecture the binary is for, e.g. "arm64" or "x64".
#     Type: string
#
#   os
#     Required: OS the binary is for, e.g. "fuchsia", "linux", or "mac".
#     Type: string
#
#   environment
#     Required: The ${toolchain_environment} name of what specific
#     execution this was built for, e.g. "user", "host", "guest".  The
#     tuple of ($cpu, $os, $environment) should indicate what hardware and
#     software environment this binary is compatible with.
#     Type: string
#
#   label
#     Required: The GN label of the binary target.
#     Type: label_with_toolchain
#
#   type
#     Required: The type of binary.
#     Type: "executable" or "shared_library" or "loadable_module"
#
#   debug
#     Required: Path to where the unstripped or separate debug file is
#     found, relative to $root_build_dir.  If $dist is omitted, this
#     is also the file that is used at runtime.
#     Type: path relative to $root_build_dir
#
#   dist
#     Optional: Path to where the stripped binary for deployment/execution is
#     found, relative to $root_build_dir.  This binary may be required for
#     some debugging tasks if $debug is a separate debug file rather than
#     an unstripped file.  It should exactly match the binary that will be
#     seen on devices or run directly on hosts.
#     Type: path relative to $root_build_dir
#
#   elf_build_id
#     Optional: Path to a file containing the lowercase ASCII hexadecimal
#     representation of the ELF build ID in this binary.  This is omitted
#     for OS environments that don't use ELF.  For an ELF binary that
#     doesn't have a build ID note, this key will be present but point to
#     an empty file.
#     Type: path relative to $root_build_dir
#
#   breakpad
#     Optional: Path to the breakpad symbol file for the debug binary.  This
#     will only be present if $output_breakpad_syms was set.
#     Type: path relative to $root_build_dir
build_api_module("binaries") {
  testonly = true
  data_keys = [ "binaries" ]
  deps = [ ":default" ]
}

# Lists the board configurations that are defined in this build.
#
# Type: list (scope)
#
#  label
#    Required: The GN label for the board_configuration target
#
#  outdir
#    Required: The path (relative to the root out dir) of the directory that
#    contains the board configuration.
#
build_api_module("boards") {
  testonly = true
  data_keys = [ "board_configs" ]
  deps = [ "//boards" ]
}

# Lists the board input bundles that are defined in this build.
#
# Type: list (scope)
#
#  label
#    Required: The GN label for the board_configuration target
#
#  outdir
#    Required: The path (relative to the root out dir) of the directory that
#    contains the board input bundle.
#
build_api_module("board_input_bundles") {
  testonly = true
  data_keys = [ "board_input_bundles" ]
  deps = [ "//boards" ]
}

# Describes the configuration of the build in the file:
#  "$root_build_dir/build_info.json"
#
# Type: list(scope)
#
#   version
#     Optional: The version of the build. Present during official builds.
#     Type: string
#
#   configurations
#     Required: The list of product/board configurations within the build.
#     Each `configurations` entry is a scope that contains both a product
#     and board specification.
#     Type: list(scope)
#
build_api_module("build_info") {
  testonly = true
  contents = {
    version = build_info_version

    # A list to accommodate the future of a build that support building multiple
    # (board, product) pairs.
    configurations = [
      {
        board = build_info_board
        product = build_info_product
      },
    ]
  }
}

# Artifacts from the checkout. Though a priori unrelated to the build, they are
# useful to track here.
#
# in file: "$root_build_dir/checkout_artifacts.json"
#
# Type: list(scope)
#
#   name
#     Required: The primary way that this file is known to consumers.
#     The name should be unique among other entries.
#     Type: string
#
#   path
#     Required: Path to where the file is found, relative to $root_build_dir.
#     Type: path relative to $root_build_dir
#
#   type
#     Required: The file format (e.g., "txt" or "xml").
#     Type: string
#
build_api_module("checkout_artifacts") {
  testonly = true
  data_keys = [ "checkout_artifacts" ]
  deps = [ ":checkout_artifacts.metadata" ]
}

group("checkout_artifacts.metadata") {
  testonly = true
  visibility = [ ":checkout_artifacts" ]
  metadata = {
    checkout_artifacts = [
      {
        # TODO(https://fxbug.dev/42119886): Remove `archive` field. This is a signal to
        # include the this file in the archive.
        archive = true
        name = "jiri_snapshot"
        path = rebase_path("//.jiri_root/update_history/latest", root_build_dir)
        type = "xml"
      },
      {
        name = "ssh_authorized_key"
        path = rebase_path("//.ssh/authorized_keys", root_build_dir)
        type = "txt"
      },
      {
        name = "ssh_private_key"
        path = rebase_path("//.ssh/pkey", root_build_dir)
        type = "txt"
      },
    ]
  }
}

# This describes all the generated source files in the build.
#
# The intent is that telling Ninja to build all these individual files
# will be the minimal work sufficient for source code analysis of all
# the files described in the compilation database to be viable.
#
# Type: list(path relative to $root_build_dir)
#
build_api_module("generated_sources") {
  testonly = true
  data_keys = [ "generated_sources" ]
  deps = [
    "//build/images/updates:packages",
    "//sdk",
  ]
}

# This describes all golden files in the build, as defined by `golden_files()`.
#
# Type: list(scope)
#
#  * name
#    - Required: The name of the target defining the golden files.
#    - Type: string
#
#  * label
#    - Required: The label toolchain of the associated target.
#    - Type: label_with_toolchain
#
#  * stamp
#    - Required: The stamp file of the associated diff check.
#    - Type: build directory -relative path
#
#  * files
#    - Required: The associated golden file comparisons.
#    - Type: list(scope)
#
#    Each scope contains:
#
#    * golden
#      - Required: A golden file.
#      - Type: source-relative path
#
#    * candidate
#      - Required: The candidate version of the file, to be compared against the
#        golden.
#      - Type: build directory -relative path
#
build_api_module("golden_files") {
  testonly = true
  data_keys = [ "golden_files" ]
  deps = [ ":default" ]
}

# This exposes the value of delivery_blob_type to artifactory after the build.
#
# Type: scope
#
# * type
#   - Required: Value of delivery_blob_type for this build configuration.
#   - Type: integer
#
build_api_module("delivery_blob_config") {
  contents = {
    type = delivery_blob_type
  }
}

# Describes the "fuzzers" in the build, in the file:
#  "$root_build_dir/fuzzers.json"
#
# See //build/fuzzing/fuzzer.gni for more details.
#
#
# Type: list(scope)
#
#  fuzzer_package
#    Required: Name of a package containing fuzzers.
#    Type: string
#
#  fuzzers
#    Required: The fuzzer binaries included in the associated package.
#    Type: list of labels
#
#  fuzz_host
#    Required: Indicates whether the associated fuzzer binaries were built for
#    the host.
#    Type: boolean
#
build_api_module("fuzzers") {
  testonly = true
  data_keys = [ "fuzz_spec" ]
  deps = [ "//build/images/updates:packages" ]
}

# This describes all the "image" files the build can produce, in the file:
#  "$root_build_dir/images.json"
#
# An "image file" is a binary file that typically ends up on a device
# partition (e.g. kernel, boot loader, partition image, etc).
#
# Consumers of the build should look here for the images to be built.
# The $cpu, $name, and $type fields identify the purpose of each image.
# Consumers are expected to ignore extra images they have no use for or
# whose fields they don't understand.
#
# The $path field indicates where the file is found in the build
# directory.  The presence of an image in the list means that the build
# *can* produce it, not that the build *will* produce it.  Hence,
# consumers should use $path as an explicit argument to Ninja to ensure
# that each needed image gets built.
#
# Type: list(scope)
#
#   cpu
#     Required: CPU architecture the image is for, e.g. "arm64" or "x64".
#     Type: string
#
#   name
#     Required: The primary way that this image is known to consumers.
#     Note that the name need not be unique within the images list.
#     The tuple of ($name, $type, $cpu) should be unique.
#     Type: string
#
#   fastboot_flash
#     Optional: the partition(s) to fastboot flash this image to. As a special
#     case, this can be an empty list to indicate a file that may be needed for
#     flashing but doesn't necessarily get flashed to a partition, for example
#     bootloader unlock credentials.
#     Type: list(string)
#
#   label
#     Required: The GN label of the image target.
#     Type: label_with_toolchain
#
#   path
#     Required: Path to where the file is found, relative to $root_build_dir.
#     This is also the argument to Ninja that ensures this image will be built.
#     Type: path relative to $root_build_dir
#
#   testonly
#     Optional: This image includes test code/data not meant for production.
#     Type: bool
#     Default: false
#
#   tags
#     Optional: Tags associated with the image.  Certain tags may indicate
#     to the build API consumer what should be done with the image.
#     Type: list(string)
#
#   type
#     Required: Type of file, e.g. "zbi".  This often corresponds to the
#     extension used on the image file name, but not always.  For many
#     miscellaneous formats, this is just "bin" and the consumer is
#     expected to understand what the particular format is for particular
#     $name, $cpu combinations.  Other types include:
#      * "zbi": the ZBI (<lib/zbi-format/zbi.h>) format
#      * "efi": an EFI executable that an EFI boot loader can load
#      * "kernel": some other format loaded by a boot loader or emulator
#      * "blk": contents to be written to a storage device or partition
#     Type: string
#
#   bootserver_pave, bootserver_pave_zedboot, bootserver_netboot
#     Optional: flag names under which the associated image should be passed to
#     the bootserver when paving, paving zedboot, or netbooting, respectively.
#     Type: list(string)
#
#   archive
#     Optional: Set to true to indicate this image should be part of
#     the build archives generated by //build/images/archive.
#     Type: bool
#     Default: false
#
build_api_module("images") {
  testonly = true
  walk_keys = [ "images_barrier" ]
  data_keys = [ "images" ]
  deps = [
    # XXX(46415): as the build is specialized by board (bootfs_only)
    # for bringup, it is not possible for this to be complete. As this
    # is used in the formation of the build API with infrastructure,
    # and infrastructure assumes that the board configuration modulates
    # the definition of `zircon-a` between bringup/non-bringup, we can
    # not in fact have a complete description. See the associated
    # conditional at this group also.
    "build/images",

    # Images who are pulled as part of host interaction tests.
    ":host",

    # There are standalone images outside of the main assembly dependency graph
    # which may be specified as data dependencies of select tests.
    ":tests",
  ]
}

# Describes the SDK archives that can be built, in the file:
# "$root_build_dir/sdk_archives.json"
#
#   * name
#     - Required: Name of the SDK.
#     - Type: string
#
#   * label
#     - Required: GN label of the associated `sdk` target.
#     - Type: label_with_toolchain
#
#   * path
#     - Required: Path to the built archive.
#     - Type: path relative to $root_build_dir
#
#   * os
#     - Required: OS is the operating system which the SDK is built for. A value
#       of "fuchsia" indicates the SDK is host OS agnostic.
#     - Type: string
#
#   * cpu
#     - Required: CPU architecture which the SDK is built for.
#     - Type: string
#
build_api_module("sdk_archives") {
  testonly = true
  data_keys = [ "sdk_archives" ]
  deps = [ "//sdk:final_fuchsia_idk" ] + sdk_archive_labels
}

# Describes the `exported_package_archive`s labels specified by the gn arg
# `exported_package_labels` in `$root_build_dir/package_archives.json`.
#
# Since some information (like the package's name) cannot be known during the
# GN gen phase, we instead collect that information during the action/ninja
# phase, meaning that the full metadata cannot be embed the directly inside
# `package_archives.json`.
#
# Thus, the metadata exposed by this build API module is simply a list of paths
# to other JSON files; each following this exact schema:
#
#   * name
#     - Required: The name of the archived package.
#     - Type: string
#
#   * label
#     - Required: GN label of the archived package.
#     - Type: label_with_toolchain
#
#   * path
#     - Required: Path to the built archive.
#     - Type: path relative to $root_build_dir
#
#   * cpu
#     - Required: The package's target CPU architecture.
#     - Type: string
#
#   * api_level
#     - Required: The package's minimum supported API level.
#     - Type: int
#
build_api_module("package_archives") {
  testonly = true
  data_keys = [ "exported_package_archives" ]
  deps = exported_package_labels
}

# Describes the platforms available for testing, in the file:
#  "$root_build_dir/platforms.json"
#
# TODO(https://fxbug.dev/42055429): the fuchsia platform should not know about such things.
#
# Type: list(scope)
#
build_api_module("platforms") {
  testonly = true
  contents = []
  foreach(platform, test_platforms) {
    if (!defined(platform.cpu) || platform.cpu == current_cpu) {
      contents += [ platform ]
    }
  }
}

# This describes where to find all prebuilt binaries, in the file:
#  "$root_build_dir/prebuilt_binaries.json"
#
# The `manifest` field will point to another JSON file that is almost a subset
# of the :binaries build API module: the only fields present are `cpu`,
# `debug`, `os`, and `elf_build_id`, which in this case is not a file pointer
# but instead the actual build ID.
#
#
# Type: list(scope)
#
#   name
#     Required: The name of the collection of prebuilt binaries.
#     Type: string
#
#   manifest
#     Required: The path to the manifest of prebuilt binaires. See note above
#     for its schema.
#     Type: string
#
build_api_module("prebuilt_binaries") {
  testonly = true
  data_keys = [ "prebuilt_binaries" ]
  deps = [
    "//build/images/updates:packages",
    "//build/prebuilt",
    "//sdk",
  ]
}

# This describes which flavor was used for each of the prebuilt packages
# which provide multiple flavors to choose from.
#
# in file:
#  "$root_build_dir/images.json"
#
# For more information, see:  //build/packages/prebuilt_package_with_flavors.gni
#
# Type: list(scope)
#
#   package
#     Required: The name of the package.
#
#   name
#     Required: The name of the flavor that is being used.
#
#   archive
#     Required: The path to the archive that was used.
#
#   production_safe
#     Required:  if 'true' then this flavor is valid for use in production
#     contexts.
#
build_api_module("prebuilt_package_flavors") {
  testonly = true
  data_keys = [ "prebuilt_package_with_flavors" ]
  deps = [ "//build/images/updates:packages" ]
}

# Tests in the build.
#
#  Below, the "testing root" refers to $root_build_dir on host, and the full
#  filesystem path from the root on device.
#
#  This rule outputs the tests.json file in the build directory,
#  which is aggregated at test time.
#
#  The format is documented at
#  https://fuchsia.dev/fuchsia-src/reference/testing/tests-json-format
#
# Type: list(scope)
#
#   * name
#     - Required: Name of test.
#     - Type: string
#
#   * label
#     - Required: GN label associated with the test
#     - Type: label_with_toolchain
#
#   * path
#     - Required: Path to the test's executable.
#     - Type: path relative to the testing root.
#
#   * cpu, os
#     - Required: cpu and os values, respectively, for which this test is
#       intended. Defaults to $current_cpu and $current_os if not manually
#       specified.
#     - Type: string
#
#   * disabled
#     - Optional: a free-form string indicating a reason for the test being
#       disabled.
#     - Type: string
#
#   * runtime_deps
#     - Optional: a JSON file containing a list of root_build_dir-relative
#       paths defining ascribed runtime dependencies of the test. These
#       dependencies are aggregated via the metadata graph of the associated
#       test target under a data key of "test_runtime_deps.
#     - Type: path relative to root_build_dir
#
#   * isolated
#     - Optional: whether the test needs to be run in isolation to other tests.
#     - Type: bool
#
#   * timeout_secs
#     - Optional: the timeout in seconds for the test.
#     - Type: int
#
build_api_module("tests") {
  testonly = true
  data_keys = [ "tests" ]
  walk_keys = [ "tests_barrier" ]
  deps = [
    # Pull in tests from host_labels.  This is deprecated, and tests should be
    # in //:host_tests instead.
    "//:host",

    # Pull in tests present in the assembled product image.  This is deprecated,
    # and tests should be in the various type-specific test groups below.
    "//build/images:main_assembly",

    # Pull in tests from the various type-specific on-device test groups
    "//:e2e_tests",
    "//:hermetic_test_packages",

    # Pull in tests from the non-device type-specific test groups.
    "//:host_tests",
    "//:test_packages",

    # Pull in tests from the developer
    "//:developer_specified_tests",

    # While these should be redundant with the above, they way in which they are
    # redundant (included via the main assembly) is quite opaque, and so they
    # are listed here for developers to be able to see (and to ensure that all
    # developer-chosen tests are in the build api, catching any failures to
    # include those tests in the assembly.
    #
    # This is deprecated, and the above type-specific groups should be used
    # instead.
    ":developer_base_packages",
    ":developer_cache_packages",
    ":developer_universe_packages",
  ]
}

# Test components in the build.
#
#  Creates list of test components and the realm to run them in if not running
#  in the default hermetic realm.
#
# Type: list(scope)
#
#   * label
#     - Required: GN label associated with the test component
#     - Type: label_with_toolchain
#
#   * realm
#     - Optional: Moniker of the realm to run the test in.
#     - Type: Moniker inside the system topology.
#
build_api_module("test_components") {
  testonly = true
  data_keys = [ "test_components" ]
  walk_keys = [ "test_components_barrier" ]
  deps = [
    # Pull in tests present in the assembled product image.  This is deprecated,
    # and tests should be in the various type-specific test groups below.
    "//build/images:main_assembly",

    # Pull in tests from the various type-specific on-device test groups
    "//:hermetic_test_packages",
    "//:test_packages",

    # Pull in tests from the developer
    "//:developer_specified_tests",

    # While these should be redundant with the above, they way in which they are
    # redundant (included via the main assembly) is quite opaque, and so they
    # are listed here for developers to be able to see (and to ensure that all
    # developer-chosen tests are in the build api, catching any failures to
    # include those tests in the assembly.
    #
    # This is deprecated, and the above type-specific groups should be used
    # instead.
    ":developer_base_packages",
    ":developer_cache_packages",
    ":developer_universe_packages",
  ]
}

# The output location of test-list.json.
#
#   Creates a stable build API that users can use to programmatically retrieve
#   test-list.json without having to hardcode the location of the file.
#
# Type: list(string): Each entry will be the location of a test-list.json file.
build_api_module("test_list_location") {
  testonly = true
  data_keys = [ "test_list" ]
  deps = [
    # Pull in the actual test-list target.
    "//:test-list",
  ]
}

# test-list.json contains the set of tests in the build along with arbitrary
# test metadata attached to each test.
compiled_action("test-list") {
  testonly = true
  tool = "//tools/test_list_tool"
  tool_output_name = "test_list_tool"
  test_list_file = "$root_build_dir/test-list.json"
  test_config_file = "$root_build_dir/test-config.json"
  inputs = [
    "$root_build_dir/tests.json",
    "$root_build_dir/test_components.json",
  ]
  outputs = [
    test_list_file,
    test_config_file,
  ]
  depfile = "$root_build_dir/test-list.json.d"

  metadata = {
    test_list = [ rebase_path(outputs[0], root_build_dir) ]
  }

  deps = [
    ":test_components",
    ":tests",
  ]

  args = [
    "--build-dir",
    ".",
    "--input",
    "tests.json",
    "--test-components",
    "test_components.json",
    "--output",
    rebase_path(test_list_file, root_build_dir),
    "--experimental-test-config",
    rebase_path(test_config_file, root_build_dir),
    "--depfile",
    "test-list.json.d",
  ]
}

# test_durations.json contains historical test durations data to be used for
# scheduling tests.
#
# It contains a list of JSON objects with the following fields:
#
#   name
#     Required: The name of the test. For Fuchsia tests, this will correspond to
#     the test package URL; for host-side tests, the installation path.
#     Type: string
#
#   median_duration_ms
#     Required: The median historical duration for this test over some period of
#     time, in milliseconds.
#     Type: int
#
build_api_module("test_durations") {
  testonly = true
  contents = []
  if (test_durations_file != "") {
    contents = read_file(test_durations_file, "json")
  }
}

# Tools provided by the build or as prebuilts, to be used outside the build.
#
# Type: list(scope)
#
#   * name
#     - Required: Name of a host tool.
#     - Type: string
#
#   * label
#     - Required: GN label associated with the tool.
#     - Type: label_with_toolchain
#
#   * path
#     - Required: Path to the tool's executable for the build host.
#     - Type: path relative to $root_build_dir
#
#   * cpu, os
#     - Required: $current_cpu and $current_os values, respectively, for
#       which this tool is intended.
#     - Type: string
#
#   * runtime_files
#     - Optional: Path to files that are also required for the tool to function
#       (must also be built by `label`).
#     - Type: path relative to $root_build_dir
build_api_module("tool_paths") {
  testonly = true
  data_keys = [ "tool_paths" ]
  walk_keys = [ "tool_barrier" ]

  # Disable automatic sorting and grouping to ensure comments are associated
  # with only the intended lines.
  #
  # NOSORT
  deps = [
    # Pull in tools from host_labels.
    ":host",

    # ffx is used as part of the top-level build for every product configuration
    # so should always be included in the tools manifest.
    "//src/developer/ffx($host_toolchain)",

    "//build/rust:tool_paths.llvm-profdata-rust($host_toolchain)",
    ":tool_paths.llvm-tools",
    ":tool_paths.metadata",
    "//build/images/updates:packages",
    "//src/sys/pkg/tests/system-tests:system_tests_tools($host_toolchain)",
    "//src/storage/bin/fvm($host_toolchain)",
    "//third_party/cobalt/src/bin/config_change_validator/src:bin($host_toolchain)",
    "//third_party/cobalt/src/bin/config_parser/src:bin($host_toolchain)",
    "//tools/doc_checker($host_toolchain)",
    "//tools/fidl:fidl-lint($host_toolchain)",
    "//tools/fidl:fidlfmt($host_toolchain)",
    "//tools/fidl/fidlc:host($host_toolchain)",
    "//zircon/third_party/uapp/mkfs-msdosfs($host_toolchain)",
    "//src/storage/blobfs/tools:blobfs($host_toolchain)",
    "//zircon/tools/ktrace-dump($host_toolchain)",
    "//zircon/tools/lz4($host_toolchain)",
    "//zircon/tools/merkleroot($host_toolchain)",
    "//src/storage/minfs/tools:minfs($host_toolchain)",
    "//zircon/tools/xdc-server($host_toolchain)",
    "//zircon/tools/zbi($host_toolchain)",
    "//zircon/tools/zither($host_toolchain)",
  ]
}

group("tool_paths.metadata") {
  visibility = [ ":tool_paths" ]
  prebuilt_tools = [
    "$rustc_prefix/bin/cargo",
    "$rustc_prefix/bin/rustc",
    "$rustc_prefix/bin/rustdoc",
    "$rustc_prefix/bin/rustfmt",
    "//src/testing/perfcompare",

    # reclient is using fairly generic names (bootstrap, dumpstats). We may
    # need to move these into their own group() at some point to namespace
    # them.
    "//prebuilt/proprietary/third_party/reclient/$host_platform/bootstrap",
    "//prebuilt/proprietary/third_party/reclient/$host_platform/dumpstats",
    "//prebuilt/proprietary/third_party/reclient/$host_platform/reproxy",
    "//prebuilt/proprietary/third_party/reclient/$host_platform/rewrapper",
    "//prebuilt/sdk/bazel/bazel",
    "//prebuilt/third_party/buildifier/$host_platform/buildifier",
    "//prebuilt/third_party/clang/$host_platform/share/clang/clang-format-diff.py",
    "//prebuilt/third_party/clang/$host_platform/share/clang/clang-tidy-diff.py",
    "//prebuilt/third_party/dart/$host_platform/bin/dart",
    "//prebuilt/third_party/gn/$host_platform/gn",
    "//prebuilt/third_party/go/$host_platform/bin/go",
    "//prebuilt/third_party/go/$host_platform/bin/gofmt",
    "//prebuilt/third_party/goma/$host_platform/goma_ctl.py",
    "//prebuilt/third_party/ninja/$host_platform/ninja",
    "//prebuilt/third_party/python3/$host_platform/bin/python3",
    "//prebuilt/tools/shac/shac",
    "//third_party/catapult/tracing/bin/trace2html",
  ]
  metadata = {
    tool_paths = []
    foreach(tool, prebuilt_tools) {
      tool_paths += [
        {
          cpu = host_cpu
          label = get_label_info(":$target_name", "label_with_toolchain")
          name = get_path_info(tool, "name")
          os = host_os
          path = rebase_path(tool, root_build_dir)
        },
      ]
    }

    # Add SSH prebuilts to the tool paths. We need both architectures regardless
    # of the host architectures since it's used on test bots that may be running
    # ARM64 (even if we built on x64).
    foreach(arch,
            [
              "arm64",
              "x64",
            ]) {
      tool_paths += [
        {
          cpu = arch
          label = get_label_info(
                  "//prebuilt/third_party/openssh-portable/linux-${arch}/bin/ssh",
                  "label_with_toolchain")
          name = get_path_info(
                  "//prebuilt/third_party/openssh-portable/linux-${arch}/bin/ssh",
                  "name")
          os = "linux"
          path = rebase_path(
                  "//prebuilt/third_party/openssh-portable/linux-${arch}/bin/ssh",
                  root_build_dir)
        },
      ]
    }
  }
}

group("tool_paths.llvm-tools") {
  visibility = [ ":tool_paths" ]
  _llvm_tools = [
    "clang",
    "clang++",
    "clang-doc",
    "clang-format",
    "clang-include-fixer",
    "clang-refactor",
    "clang-tidy",
    "clangd",
    "llvm-cov",
    "llvm-cxxfilt",
    "llvm-dwp",
    "llvm-objcopy",
    "llvm-profdata",
    "llvm-readelf",
    "llvm-size",
    "llvm-strip",
    "llvm-symbolizer",
    "llvm-xray",
    "sancov",
  ]
  metadata = {
    tool_paths = []
    foreach(tool, _llvm_tools) {
      tool_paths += [
        {
          cpu = host_cpu
          label = get_label_info(":$target_name", "label_with_toolchain")
          name = tool
          os = host_os
          path = rebase_path("$clang_tool_dir/$tool", root_build_dir)
        },
      ]
    }
  }
}

# The "triage_sources.json" build API file contains a list of paths to
# `<foo>.triage` configuration files that are used by the
# `fx triage` command. These paths are relative to the $root_build_dir.
# in file: "$root_build_dir/triage_sources.json".
#
# Type: list(string)
#
build_api_module("triage_sources") {
  testonly = true
  data_keys = [ "triage_sources" ]
  deps = [
    "//build/images/updates:packages",
    "//src/diagnostics/config/triage",
  ]
}

# Describes the path to a list of all the package manifests, the same
# list that is used for the pm_publish step.
#
# The path is relative to the root build dir.
#
# Type: List of strings
#
build_api_module("all_package_manifest_paths") {
  testonly = true

  deps = [ "//build/images/updates:all_package_manifests.list" ]

  contents = [ "all_package_manifests.list" ]
}

# Describes the path to the Fuchsia RBE config file.
# in file: "$root_build_dir/rbe_config.json"
#
# Paths are relative to $root_build_dir.
#
# Type: list(scope)
#
#   * path
#     - Required: Path to where the file is found, relative to $root_build_dir.
#     - Type: path relative to $root_build_dir
#
build_api_module("rbe_config") {
  testonly = true
  data_keys = [ "rbe_config" ]
  rebase = root_build_dir
  deps = [ ":rbe_config.metadata" ]
}

group("rbe_config.metadata") {
  testonly = true
  visibility = [ ":rbe_config" ]
  metadata = {
    rbe_config = [
      {
        path = reproxy_config_file
      },
    ]
  }
}

# Provides a mapping from rust source files to their corresponding clippy targets.
# See `//build/rust/clippy.gni` and `//tools/devshell/contrib/lib/rust/clippy.py`
# for more details.
#
# Type: list(scope)
#
#   clippy
#     - Required: The label of a clippy target.
#     - Type: label_with_toolchain
#
#   output
#     - Required: The path to the clippy output relative to $root_build_dir
#     - Type: path
#
#   src
#     - Required: The list of rust source files for that target.
#     - Type: List[path] (all relative to $root_build_dir)
#
build_api_module("clippy_target_mapping") {
  testonly = true
  data_keys = [ "rust_source_map" ]
  walk_keys = [ "clippy_barrier" ]
  deps = [ "//:default" ]
}

# Check that all of the drivers included in the image and packages.
# are components and in the all-drivers-list
check_included_drivers("drivers-check") {
  testonly = true
  deps = [
    "//build/images:default-images",
    "//build/images/updates:packages",
  ]
}

# Provides a flat list of the artifacts needed for assembly, which should be
# uploaded to CIPD.
#
# Type: list(scope)
#
#   * path
#     - Required: Path to the artifacts file
#     - Type: path relative to $root_build_dir
#
# An artifacts file has the JSON format:
#
# [
#   {
#     "source": "/path/on/host/file.txt",
#     "destination": "path/in/cipd/package/file.txt"
#   },
# ]
#
build_api_module("cipd_assembly_artifacts") {
  testonly = true
  data_keys = [ "assembly_inputs" ]
  walk_keys = [ "assembly_inputs_barrier" ]

  deps = cipd_assembly_artifact_targets
}

# This describes the locations of archives for the out-of-tree assembly inputs
#
# Type: list(scope)
#
#   path
#     Required: Path to the archive file
#     Type: path relative to $root_build_dir
#
#   label
#     Required: label that created the archive
#     Type: GN Label
#
build_api_module("assembly_input_archives") {
  testonly = true
  data_keys = [ "assembly_input_archives" ]
  walk_keys = [ "assembly_input_archives_barrier" ]
  deps = [
    # The platform bundles
    "//bundles/assembly",

    # The legacy bundle for the main product assembly.
    "//build/images:main_assembly",
  ]
}

# size_report.json contains a list (size 0 or 1) of gerrit size reports
# produced by the build. The gerrit size reports have the format described in:
#   https://chromium.googlesource.com/infra/gerrit-plugins/binary-size/+/HEAD/README.md
#
# Type: list(scope)
#
#   path
#     Required: Path to the gerrit size report
#     Type: path relative to $root_build_dir
#
build_api_module("gerrit_size_report") {
  testonly = true
  data_keys = [ "gerrit_size_reports" ]
  deps = [ "//build/images:default-images" ]
}

# Contains the paths to all assembly manifests.
# Used by Artifactory to find and upload all assembly manifests.
#
# Type: list(scope)
#   assembly_manifest_path
#     Required: Path to the assembly manifest.
#   image_name
#     Required: Name of the image for which the assembly manifest was generated.
#   label
#     Required: Label (with toolchain) that generated this assembly manifest.
build_api_module("assembly_manifests") {
  testonly = true
  data_keys = [ "assembly_manifests" ]
  deps = [ "//build/images:default-images" ]
}

# Contains information about 0 or 1 product size checker outputs produced by the build.
#
# Type: list(scope)
#   size_breakdown
#     Required: Path to the size breakdown text file.
#   visualization
#     Required: Path to the directory containing the size visualization.
build_api_module("product_size_checker_output") {
  testonly = true
  data_keys = [ "product_size_checker_output" ]
  deps = [ "//build/images:default-images" ]
}

# Contains details about the size checker output
#
# This is informational only, as a debugging aid.
#
# Type: list(scope) (0 or more)
#  size_budgets
#    Optional:  Path to the breakdown of packages to size budgets.
#
build_api_module("detailed_size_checker_data") {
  testonly = true
  data_keys = [ "detailed_size_checker_data" ]
  deps = [ "//build/images:default-images" ]
}

# Contains information about the product bundles produced by the build.
#
# Type: list(scope)
#   name
#     Required: The name of the product bundle. The main product bundle is
#               expected to have the name $product.$board.
#   path
#     Required: Path to the product bundle directory
#   cpu
#     Required: The target CPU architecture of the associated images.
#   product_version
#     Required: A string indicating the version of the product bundle.
#   transfer_manifest_path
#     Required: Path to the transfer manifest listing the product bundle
#               artifacts.
#   transfer_manifest_url
#     Required: 'transfer_manifest_path' with a "file://" prefix if the file is
#               local, otherwise it's the remote location of the transfer.json.
#   label
#     Required: Label (with toolchain) that generated this product bundle.
#   json
#     Required: Path the JSON representation of the product bundle.
#
build_api_module("product_bundles") {
  testonly = true
  data_keys = [ "product_bundles" ]
  walk_keys = [ "product_bundles_barrier" ]

  # Product bundles are not built in SDK-only builds.
  if (has_board) {
    deps = [
      "//build/images:default-images",
      "//bundles/boot_tests",
    ]
  }
}

# Checks that product bundle names are unique.
action("product_bundles.check") {
  testonly = true

  inputs = get_target_outputs(":product_bundles")
  outputs = [ "${root_build_dir}/$target_name.stamp" ]

  script = "//build/check_product_bundles_manifest.py"
  args = [
    "--product-bundle-json",
    rebase_path(inputs[0], root_build_dir),
    "--stamp",
    rebase_path(outputs[0], root_build_dir),
  ]

  deps = [ ":product_bundles" ]
}

# licenses.json enumerates the output artifacts of //tools/check-licenses
# which need to be saved after completion of a check-licenses run.
#
#
# Type: list(scope)
#
#   compliance_file
#     - Required: Path to the generated compliance file.
#     - Type: string
#
#   license_files
#     - Optional: Path to a root folder containing license text files.
#     - Type: string
#
#   run_files_archive
#     - Optional: Path to a root folder containing check-licenses output files.
#     - Type: string
#
build_api_module("licenses") {
  testonly = true
  data_keys = [ "licenses" ]

  # No need to save license artifacts for SDK-only builds.
  if (has_board) {
    deps = [ "//build/images:default-images" ]
  }
}

# Describes the path to the Fuchsia `vnames.json` file.
# in file: "$root_build_dir/vnames_config.json"
#
# Paths are relative to $root_build_dir.
#
# Type: list(scope)
#
#   * path
#     - Required: Path to where the file is found, relative to $root_build_dir.
#     - Type: path relative to $root_build_dir
#
build_api_module("vnames_config") {
  testonly = true
  data_keys = [ "vnames_config" ]
  rebase = root_build_dir
  deps = [ ":vnames_config.metadata" ]
}

group("vnames_config.metadata") {
  testonly = true
  visibility = [ ":vnames_config" ]
  metadata = {
    vnames_config = [
      {
        path = "//infra/vnames.json"
      },
    ]
  }
}

###
### Top-level targets.
###
group("default") {
  testonly = true
  deps = [
    "//:host",
    "//:product_bundles.check",
    "//:test-list",
    "//build/assembly:validate_product_defs",
    "//bundles/assembly",

    # TODO(https://fxbug.dev/42067746) has_board check not working
    "//build/images:default-images",
    "//build/images/updates:packages",
    "//build/input:build_only",
    "//bundles/boot_tests",
    "//sdk",
  ]

  # SDK-only builds must not attempt to build images.
  if (has_board) {
    deps += [
      "//:drivers-check",
      "//build/images:default-images",
    ]
  }
}

###
# GN-Argument configured groups for product definitions.
#

##
# "Developer-Added" package groups
#
# These groups exist at the root of the build so relative labels specified
# through GN args are interpreted as if they were absolute.  e.g.
#
# public_deps = [ "build/images/fuchsia:fuchsia" ]
#
# is the same as
#
# public_deps = [ "//build/images/fuchsia:fuchsia" ]
#
# For any target in this file, but only in this file.
#

# Base driver packages added by the developer, using `fx set` or `fx args`
group("developer_base_driver_packages") {
  testonly = base_cache_packages_testonly
  visibility = [ "//build/images/*" ]
  public_deps = base_driver_package_labels
}

# Base packages added by the developer, using `fx set` or `fx args`
group("developer_base_packages") {
  testonly = base_cache_packages_testonly
  visibility = [
    ":test_components",
    ":tests",
    "//build/images/*",
  ]

  public_deps = base_package_labels

  # the buildbot host tests should only be added via `--with-host`, to the
  # `host_labels` GN arg.
  assert_no_deps = [ "//bundles/buildbot/host/*" ]
}

# Cache packages added by the developer, using `fx set --with <foo>` or
# `fx args`
group("developer_cache_packages") {
  testonly = base_cache_packages_testonly
  visibility = [
    ":test_components",
    ":tests",
    "//build/images/*",
  ]
  public_deps = cache_package_labels

  # the buildbot host tests should only be added via `--with-host`, to the
  # `host_labels` GN arg.
  assert_no_deps = [ "//bundles/buildbot/host/*" ]
}

# Universe packages added by the developer, using `fx set` or `fx args`
group("developer_universe_packages") {
  testonly = fuchsia_zbi_testonly
  visibility = [
    ":test_components",
    ":tests",
    "//build/images/*",
  ]
  public_deps = universe_package_labels

  # the buildbot host tests should only be added via `--with-host`, to the
  # `host_labels` GN arg.
  assert_no_deps = [ "//bundles/buildbot/host/*" ]

  # During validation of the test types, ignore any tests that are found via
  # a path from the test groups back to this group, as it's likely due to e2e
  # tests having a dependency on the main assembly, which has a dependency on
  # this group while tests are being transitioned out of the universe set and
  # to the test groups.
  metadata = {
    test_type_validation_barrier = []
  }
}

##
# "Legacy Product Definition" package groups.  These are only manipulated by
# product definitions, not changed by developer options like
# `fx set --with <foo>` or `fx args`
#
# Product+Board base driver packages
group("legacy_base_driver_packages") {
  testonly = base_cache_packages_testonly
  visibility = [ "//build/images/*" ]
  public_deps = board_driver_package_labels
}

# Product+Board base packages
group("legacy_base_packages") {
  testonly = base_cache_packages_testonly
  visibility = [
    "//build/assembly/*",
    "//build/images/*",
  ]
  public_deps = legacy_base_package_labels + board_package_labels
  assert_no_deps = [ "//build/validate:shell_command_tag" ]
}

# Product+Board cache packages
group("legacy_cache_packages") {
  testonly = base_cache_packages_testonly
  visibility = [
    "//build/assembly/*",
    "//build/images/*",
  ]
  public_deps = legacy_cache_package_labels
  assert_no_deps = [ "//build/validate:shell_command_tag" ]
}

###
# GN-Argument configured groups for adding tests to a build.
#

# Fully hermetic tests (both by packaging and at runtime)
validated_test_types_group("hermetic_test_packages") {
  visibility = [ ":*" ]
  allowed_test_types = [ "hermetic" ]
  deps = hermetic_test_package_labels
}

# Non-hermetic tests (at runtime).  Non-test packages found in this group will
# be flagged as an error by the build.
group("test_packages") {
  testonly = true
  visibility = [ ":*" ]
  public_deps = test_package_labels
  assert(
      test_package_labels == [],
      "test_package_labels cannot be used before adding validation of test type.")
}

# These are all tests that are to be published in the 'discoverable' package
# set.
group("discoverable_tests") {
  testonly = true
  visibility = [
    ":*",
    "//build/images/*",
  ]
  public_deps = [
    "//:hermetic_test_packages",
    "//:test_packages",
  ]
}

# Host-driven, "end-to-end" tests that run on a Fuchsia image (either real
# hardware or emulated).
validated_test_types_group("e2e_tests") {
  testonly = true
  visibility = [ ":*" ]
  allowed_test_types = [ "end_to_end" ]
  deps = e2e_test_labels
}

# Host-only tests.  These cannot have any dependency on an assembled platform
# image, or the compiled OS itself, not even for their host_test_data().
validated_test_types_group("host_tests") {
  testonly = true
  visibility = [ ":*" ]
  allowed_test_types = [ "host_only" ]

  deps = []
  foreach(label, host_test_labels) {
    # Strip any toolchain that is provided, and replace with the host toolchain.
    full_label = get_label_info(label, "label_no_toolchain")
    deps += [ "$full_label($host_toolchain)" ]
  }
}

# Can be any test-type. This is for local-developer use only.  It is not for use
# by infra or products.
group("developer_specified_tests") {
  testonly = true
  visibility = [
    ":*",
    "//build/images/updates:universe_packages",
  ]
  public_deps = developer_test_labels
}

###
# GN-Argument configured groups other package sets
#

# Packages that are compiled and published, but unable to contribute to the
# product in any way.
group("discoverable_packages") {
  testonly = true
  visibility = [ "//build/images/updates:universe_packages" ]
  public_deps = discoverable_package_labels + [ ":discoverable_tests" ]
  assert_no_deps = [
    "//build/validate:config_data_tag",
    "//build/validate:shell_command_tag",
  ]
}

###
# GN-Argument configured groups for host binaries and tools
#

group("host") {
  # TODO(https://fxbug.dev/42160904) investigate removing testonly here
  testonly = true
  public_deps = [
    "//build/input/board:host($host_toolchain)",
    "//build/input/product:host($host_toolchain)",

    # Static analysis tools used by shac should always be built so that
    # `fx format-code` and other static analysis entrypoints can be run on any
    # build configuration.
    "//bundles/tools/shac:shac_tools",

    # Host tests for //build/api/client
    "//build/api:tests",

    # Tools & tests added by the developer
    ":developer_host_tools",
  ]

  if (has_board) {
    # This indicates that we're building a product, rather than the SDK. In
    # this case it is likely useful to have fx tools pre-compiled for testing as
    # an optimization. That way fx commands can assume the executables exist
    # instead of running ninja, which is costly even if it's a no-op.
    public_deps += [ "//tools/devshell:fx($host_toolchain)" ]
  }
}

# WARNING: Known to infrastructure
#
# This group creates a single ninja build target that can create all targets
# specified by `host_labels` with `fx build :developer_host_tools`
group("developer_host_tools") {
  testonly = true
  public_deps = []

  foreach(label, host_labels) {
    # Strip any toolchain that is provided, and replace with the host toolchain.
    full_label = get_label_info(label, "label_no_toolchain")
    public_deps += [ "$full_label($host_toolchain)" ]
  }
}

group("package_archive") {
  testonly = true
  public_deps = [ "//build/gn:package_archive" ]
}

# IMPORTANT: This target is only provided for the benefit of the `fx bazel`
# command, and nothing should depend on it, its definition may change over
# time.
#
# Targets that need to depend on the Bazel workspace should instead depend
# directly on //build/bazel:generate_main_workspace and other targets
# instead (e.g. see the definition of `bazel_action()`).
#
group("bazel_workspace") {
  deps = [
    "//build/bazel:generate_main_workspace",

    # For the @fuchsia_sdk Bazel repository content.
    "//sdk:core",
  ]
}

# IMPORTANT: Nothing should depend on this target. It is here
# to ensure that its dependencies are always in the GN build graph,
# which is critical for a few generated_file() dependencies that
# need to write their output at `gn gen` time.
group("root_targets") {
  testonly = true
  deps = [
    "//build/bazel:legacy_ninja_build_outputs",

    # These are only required by the core.x64-sdk_source_sets_and_shlibs-apiXX-build_only
    # builders. TODO(https://fxbug.dev/42082833): Remove these lines once these builders are
    # removed since they seem no longer necessary.
    "//build/sdk:sdk_versioned_shared_libraries",
    "//build/sdk:sdk_versioned_source_sets",

    # This target is listed explicitly by multiple CI bot build configurations.
    # See https://fxbug.dev/42162374 for context.
    "//build/images:record_filesystem_sizes",

    # Required by `fx fidldoc` as well as the Fuchsia controller ffx plugin
    # at runtime!
    "//build/fidl:all_fidl_json",
  ]

  # Required by `fx publish` at runtime. Only included when package serving processes are needed.
  if (has_board && !use_bringup_assembly) {
    deps += [ "//build/images/updates:prepare_publish" ]
  }
}

# A GN pool matching the special Ninja 'console' pool. Any action() that
# uses this pool will be able to send its stdout/stderr directly to the
# output terminal, instead of being buffered by Ninja until the command
# completes.
#
# This is very useful for long-running commands, e.g. bazel build invocations
# that can take several dozen seconds to complete, or any other command that
# prints a _lot_ of output, because our infra bots will timeout if Ninja tries
# to print too much data at once after command completion for some undetermined
# reason.
#
pool("console") {
  depth = 1
}
