blob: 98a63b24499274bede4389a449f67808db00f10e [file] [log] [blame]
# 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
#
# includes (optional)
# [list of paths to shards] List paths to all cml files which are included
# in the shard cml using cml `include`, so that they can be included
# in the Assembly Input Bundle.
#
# 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",
"includes",
])
metadata = {
shard_files = [ rebase_path(invoker.shard_file, root_build_dir) ]
# TODO(https://fxbug.dev/42055992): Make shard_includes required
if (defined(invoker.includes)) {
shard_includes = []
foreach(include, invoker.includes) {
shard_includes += [
{
source = rebase_path(include, root_build_dir)
destination = rebase_path(include, "//")
},
]
}
}
}
}
}