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

# Defines a core realm shard.
#
# This template defines a core realm shard, a cml manifest that
# is optionally included in the core component.
#
# The shard target must be included in one of the following GN argument arrays:
#
#   * core_realm_shards
#   * board_core_realm_shards
#   * fuchsia_base.extra_core_realm_shards
#
# Example:
#
# BUILD.gn
# ```
# core_shard("foo") {
#   shard_file = "foo.core_shard.cml"
# }
# ```
#
# product.gni
# ```
# core_realm_shards += [ "//path/to/foo" ]
# ```
#
# See https://fuchsia.dev/fuchsia-src/contribute/governance/rfcs/0089_core_realm_variations
# for more details.
#
# Parameters
#
#   shard_file (required)
#     Component manifest file.
#     Type: path
#
# All other parameters are forwarded to the generated `group` target.
#
template("core_shard") {
  assert(
      defined(invoker.shard_file),
      "The `shard_file` argument was missing when calling core_shard($target_name)")

  if ("cml" != get_path_info(invoker.shard_file, "extension")) {
    assert(
        false,
        "Unknown manifest format for \"${invoker.shard_file)\", must be \".cml\"")
  }

  group(target_name) {
    forward_variables_from(invoker, "*", [ "shard_file" ])
    metadata = {
      shard_files = [ rebase_path(invoker.shard_file, root_build_dir) ]
    }
  }
}
