blob: afeb83581d3eef153dc7c0d53d6931650ac6f29e [file] [log] [blame]
# 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.
import("//build/dist/generated_resource.gni")
# Generate a list of package metadata exported from all packages in the
# transitive closure of declared dependencies.
#
# Parameters
#
# data_keys (required)
# [list of strings] A list of package target metadata keys to collect into a
# list. See gn help for data_keys for more information.
#
# Well known package metadata:
#
# package_names
#
# snapshot_entries
# The snapshot entries are consumed for the production of the snapshots
# that feed into `fx delta` for version to version OTA size computations.
#
# blob_manifests
# The blob manifests are aggregated by the image build process to produce
# manifests to publish to repositories and to produce manifests to write
# into blobfs images.
#
# meta_far_merkle_index_entries
# The metafar merkle index entries are aggregated in image builds to
# produce package server indices for base serving.
#
# package_output_manifests
# The path of each output manifest for each package.
#
# package_barrier
# Metadata barrier.
#
# data_deps (optional)
# data_keys (optional)
# deps (optional)
# output_conversion (optional)
# outputs (optional)
# public_deps (optional)
# rebase (optional)
# testonly (optional)
# visibility (optional)
# Same as for any GN `generated_file()` target.
template("generate_package_metadata") {
generated_file(target_name) {
forward_variables_from(invoker,
[
"data_deps",
"data_keys",
"deps",
"output_conversion",
"outputs",
"public_deps",
"rebase",
"testonly",
"visibility",
])
if (!defined(outputs)) {
outputs = [ target_gen_dir + "/" + target_name ]
}
walk_keys = [ "package_barrier" ]
}
}
# Defines package metadata.
#
# This metadata is collected by `generate_package_metadata`.
# The caller should add a dep on the given target name for the metadata to take effect.
#
# Parameters (see `generate_package_metadata` for full definitions)
#
# package_name (required)
# snapshot_entry (required)
# blob_manifest (required)
# meta_far_merkle_index_entry (required)
# package_output_manifest (required)
# testonly (optional)
# visibility (optional)
template("define_package_metadata") {
assert(defined(invoker.package_name), "Missing package_name")
assert(defined(invoker.snapshot_entry), "Missing snapshot_entry")
assert(defined(invoker.blob_manifest), "Missing blob_manifest")
assert(defined(invoker.meta_far_merkle_index_entry),
"Missing meta_far_merkle_index_entry")
assert(defined(invoker.package_output_manifest),
"Missing package_output_manifest")
group(target_name) {
forward_variables_from(invoker,
[
"testonly",
"visibility",
])
metadata = {
package_names = [ invoker.package_name ]
snapshot_entries = [ invoker.snapshot_entry ]
blob_manifests = [ rebase_path(invoker.blob_manifest, root_build_dir) ]
meta_far_merkle_index_entries = [ invoker.meta_far_merkle_index_entry ]
package_output_manifests = [ invoker.package_output_manifest ]
}
}
}
# Generate meta/package file.
#
# Parameters
#
# package_name (required)
# testonly
# visibility
template("generate_meta_package") {
generated_resource(target_name) {
forward_variables_from(invoker,
[
"testonly",
"visibility",
])
contents = "{\"name\":\"${invoker.package_name}\",\"version\":\"0\"}"
outputs = [ "meta/package" ]
}
}