blob: 37c0864cd19443d2a75e5f4ce1c2b6561d2043f9 [file] [log] [blame]
# Copyright 2023 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/compiled_action.gni")
# Generate the transfer manifest of a given product bundle.
# This actually outputs four different files:
#
# all_blobs.json
# targets.json
# images.json
# transfer.json
#
# Arguments:
# product_bundle_target: (required)
# Target generating the product bundle.
# Type: GN label string.
#
# product_bundir_dir: (required)
# Input product bundle directory.
# Type: GN path string.
#
# outputs: (required)
# The usual GN meaning. Must be a singleton list.
# Type: GN path string.
#
# testonly, visibility
# Usual GN meaning.
#
template("product_bundle_transfer_manifest") {
assert(
defined(invoker.outputs),
"product_bundle_transfer_manifest(${target_name}) must define `outputs`")
_product_bundle_dir = invoker.product_bundle_dir
_product_bundle_target = invoker.product_bundle_target
compiled_action(target_name) {
forward_variables_from(invoker,
[
"outputs",
"testonly",
"visibility",
])
assert(outputs != [], "no outputs defined")
assert(outputs == [ outputs[0] ], "too many outputs defined")
tool = "//tools/pbtool"
# Constructing the transfer manifest requires walking the TUF metadata and
# reading meta.fars from the blobs directory. Determining exactly which
# files are read is quite difficult, therefore we ignore some entire
# directories.
hermetic_action_ignored_prefixes = [
"${_product_bundle_dir}/blobs",
"${_product_bundle_dir}/repository",
"${_product_bundle_dir}/recovery_repository",
"${_product_bundle_dir}/virtual_devices",
]
deps = [ _product_bundle_target ]
inputs = [ "${_product_bundle_dir}/product_bundle.json" ]
args = [
"generate-transfer-manifest",
"--product-bundle",
rebase_path(_product_bundle_dir, root_build_dir),
"--output",
rebase_path(outputs[0], root_build_dir),
]
}
}