| # 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", |
| ] |
| } |
| } |