blob: 6c654346a67ccaa6f7b222b65a66f5409b3baf43 [file] [log] [blame]
# Copyright 2018 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.
# Generate a signed, sealed package file from a prebuilt archive.
#
# Parameters
#
# archive (required)
# Path to archive containing a package.
#
# package_name (optional)
# Name of the package.
# Defaults to the target's name.
#
# testonly (optional)
# visibility (optional)
# Usual GN meanings.
#
template("prebuilt_package") {
pkg_target_name = target_name
pkg_name = target_name
if (defined(invoker.package_name)) {
pkg_name = invoker.package_name
}
meta_dir = target_out_dir + "/" + pkg_name + ".meta"
blobs_json = "$meta_dir/blobs.json"
pkg = {
package_name = pkg_name
package_version = 0
}
action(target_name) {
forward_variables_from(invoker,
[
"testonly",
"visibility",
])
archive = invoker.archive
script = "//build/packages/prebuilt_package.py"
system_rsp = "$target_out_dir/$pkg_name.system.rsp"
meta_merkle = "$meta_dir/meta.far.merkle"
blobs_manifest = "$meta_dir/blobs.manifest"
args = [
"--pm-tool",
rebase_path("$root_out_dir/host_$host_cpu/pm"),
"--name",
pkg_name,
"--archive",
rebase_path(archive),
"--workdir",
rebase_path(meta_dir, root_build_dir),
"--system-rsp",
rebase_path(system_rsp, root_build_dir),
]
inputs = [
archive,
]
outputs = [
blobs_manifest,
system_rsp,
blobs_json,
meta_merkle,
]
deps = [
"//garnet/go/src/pm:pm_bin($host_toolchain)",
]
blobs_json_path = rebase_path(blobs_json, root_build_dir)
# Package metadata must be kept in sync between package.gni and
# prebuilt_package.gni. The template package_metadata_list in package.gni
# documents the fields required to be implemented by both templates.
metadata = {
# We only ever want to collect the following package manifests from
# packages, not from dependencies of packages, so the barrier prevents us
# from walking any further in the dependency chain. See `gn help
# walk_keys` for more information on the mechanic.
package_barrier = []
package_names = [ pkg_name ]
snapshot_entries =
[ "${pkg.package_name}/${pkg.package_version}=$blobs_json_path" ]
blob_manifests = [ rebase_path(blobs_manifest, root_build_dir) ]
meta_far_index_entries =
[ "${pkg.package_name}/${pkg.package_version}=" +
rebase_path("$meta_dir/meta.far", root_build_dir) ]
meta_far_merkle_index_entries =
[ "${pkg.package_name}/${pkg.package_version}=" +
rebase_path("$meta_dir/meta.far.merkle", root_build_dir) ]
}
}
group(target_name + ".manifest") {
public_deps = [
":$pkg_target_name",
]
}
}