blob: 477edeb860ff91e7ebd26d6db6a326d15e69165c [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.
import("//build/config/fuchsia/zircon.gni")
import("//build/gn/packages.gni")
import("//build/images/manifest.gni")
import("//build/packages/package_internal.gni")
# 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_label = get_label_info(":$pkg_target_name", "label_no_toolchain")
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"
action(target_name) {
forward_variables_from(invoker,
[
"testonly",
"visibility",
])
archive = invoker.archive
script = "//build/packages/prebuilt_package.py"
manifest = "$target_out_dir/$pkg_name.manifest"
system_rsp = "$target_out_dir/$pkg_name.system.rsp"
ids_txt = "$target_out_dir/$pkg_name.final.manifest.ids.txt"
meta_merkle = "$meta_dir/meta.far.merkle"
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),
"--manifest",
rebase_path(manifest, root_build_dir),
"--system-rsp",
rebase_path(system_rsp, root_build_dir),
"--ids-txt",
rebase_path(ids_txt, root_build_dir),
]
inputs = [
archive,
]
outputs = [
manifest,
ids_txt,
system_rsp,
blobs_json,
meta_merkle,
]
deps = [
"//garnet/go/src/pm:pm_bin($host_toolchain)",
]
}
group(target_name + ".manifest") {
public_deps = [
":$pkg_target_name",
]
}
group(target_name + ".final.manifest.ids.txt") {
public_deps = [
":$pkg_target_name",
]
}
generate_response_file("${pkg_target_name}.blobs.rsp") {
response_file_contents = ["--input=" + rebase_path(blobs_json, root_build_dir)]
}
pkg = {
package_name = target_name
package_version = 0
}
generate_system_index(target_name + ".system_index.rsp") {
deprecated_system_image = false
meta_target = ":$pkg_target_name"
foreach(name, available_packages) {
if (name == pkg_label) {
package_set = "available"
}
}
foreach(name, preinstall_packages) {
if (name == pkg_label) {
package_set = "preinstall"
}
}
foreach(name, monolith_packages) {
if (name == pkg_label) {
package_set = "monolith"
}
}
package_name = pkg.package_name
package_version = pkg.package_version
blobs_json = blobs_json
}
generate_response_file("${pkg_target_name}.shell_commands.rsp") {
response_file_contents = []
}
foreach(index,
[
{
name = "pkgsvr_index"
file = "meta.far.merkle"
},
{
name = "amber_index"
file = "meta.far"
},
]) {
generate_index("${pkg_target_name}.${index.name}.rsp") {
deprecated_system_image = false
index_file = "${meta_dir}/${index.file}"
package_name = pkg.package_name
package_version = pkg.package_version
pkg_label = pkg_label
deps = [
":$pkg_target_name",
]
}
}
}