blob: b305dbee69d631b08a58f823d1f874ee1c5a9517 [file] [log] [blame]
# Copyright 2021 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/python/python_action.gni")
import("//src/developer/ffx/build/ffx_action.gni")
template("update_package") {
assert(defined(invoker.partitions), "Need to define partitions")
assert(defined(invoker.board_name), "Need to define board_name")
assert(defined(invoker.version_file), "Need to define version_file")
assert(defined(invoker.epoch), "Need to define epoch")
labels = {
hermetic_inputs = "${target_name}_hermetic_inputs"
ffx_tool = "//src/developer/ffx:ffx_bin($host_toolchain)"
}
files = {
hermetic_inputs = "${target_out_dir}/${target_name}_hermetic_inputs"
hermetic_inputs_depfile =
"${target_out_dir}/${target_name}_hermetic_inputs.d"
outdir = "$target_out_dir/$target_name"
gendir = "$outdir/gen"
subpackage_blobs_package = "$outdir/subpackage_blobs/meta.far"
subpackage_blobs_package_manifest =
"$outdir/subpackage_blobs/package_manifest.json"
update_package = "$outdir/update.far"
update_package_manifest = "$outdir/update_package_manifest.json"
update_images_fuchsia_package = "$outdir/update_images_fuchsia.far"
update_images_fuchsia_package_manifest =
"$outdir/update_images_fuchsia_package_manifest.json"
update_images_recovery_package = "$outdir/update_images_recovery.far"
update_images_recovery_package_manifest =
"$outdir/update_images_recovery_package_manifest.json"
update_images_firmware_package = "$outdir/update_images_firmware.far"
update_images_firmware_package_manifest =
"$outdir/update_images_firmware_package_manifest.json"
subpackage_blobs_meta_package = "$gendir/subpackage_blobs/meta/package"
subpackage_blobs_abi_revision =
"$gendir/subpackage_blobs/meta/fuchsia.abi/abi-revision"
update_meta_package = "$gendir/update/meta/package"
update_abi_revision = "$gendir/update/meta/fuchsia.abi/abi-revision"
update_images_fuchsia_meta_package =
"$gendir/update_images_fuchsia/meta/package"
update_images_fuchsia_abi_revision =
"$gendir/update_images_fuchsia/meta/fuchsia.abi/abi-revision"
update_images_recovery_meta_package =
"$gendir/update_images_recovery/meta/package"
update_images_recovery_abi_revision =
"$gendir/update_images_recovery/meta/fuchsia.abi/abi-revision"
update_images_firmware_meta_package =
"$gendir/update_images_firmware/meta/package"
update_images_firmware_abi_revision =
"$gendir/update_images_firmware/meta/fuchsia.abi/abi-revision"
board = "$gendir/board"
epoch = "$gendir/epoch.json"
images = "$gendir/images.json"
packages = "$gendir/packages.json"
}
python_action(labels.hermetic_inputs) {
forward_variables_from(invoker,
[
"deps",
"testonly",
"visibility",
])
binary_label =
"//build/assembly/scripts:hermetic_inputs_from_assembly_outputs"
inputs = [ invoker.partitions ]
outputs = [ files.hermetic_inputs ]
depfile = files.hermetic_inputs_depfile
args = [
"--partitions",
rebase_path(invoker.partitions, root_build_dir),
"--output",
rebase_path(files.hermetic_inputs, root_build_dir),
"--depfile",
rebase_path(files.hermetic_inputs_depfile, root_build_dir),
]
if (defined(invoker.system_a) || defined(invoker.system_b) ||
defined(invoker.system_r)) {
args += [ "--system" ]
if (defined(invoker.system_a)) {
args += [ rebase_path(invoker.system_a, root_build_dir) ]
inputs += [ invoker.system_a ]
}
if (defined(invoker.system_b)) {
args += [ rebase_path(invoker.system_b, root_build_dir) ]
inputs += [ invoker.system_b ]
}
if (defined(invoker.system_r)) {
args += [ rebase_path(invoker.system_r, root_build_dir) ]
inputs += [ invoker.system_r ]
}
}
}
ffx_action(target_name) {
forward_variables_from(invoker,
[
"deps",
"testonly",
"visibility",
])
if (!defined(deps)) {
deps = []
}
hermetic_inputs_target = ":${labels.hermetic_inputs}"
hermetic_inputs_file = files.hermetic_inputs
ffx_tool = "//src/developer/ffx/plugins/assembly:ffx_assembly_tool"
ffx_tool_output_name = "ffx-assembly"
args = [
"--config",
"assembly_enabled=true",
"assembly",
"create-update",
"--partitions",
rebase_path(invoker.partitions, root_build_dir),
"--outdir",
rebase_path(files.outdir, root_build_dir),
"--gendir",
rebase_path(files.gendir, root_build_dir),
"--board-name",
invoker.board_name,
"--epoch",
invoker.epoch,
"--version-file",
rebase_path(invoker.version_file, root_build_dir),
]
if (defined(invoker.rewrite_default_repo)) {
args += [
"--rewrite-default-repo",
invoker.rewrite_default_repo,
]
}
outputs = [
files.subpackage_blobs_package,
files.subpackage_blobs_package_manifest,
files.subpackage_blobs_meta_package,
files.subpackage_blobs_abi_revision,
files.update_package,
files.update_package_manifest,
files.update_images_fuchsia_package,
files.update_images_fuchsia_package_manifest,
files.update_images_recovery_package,
files.update_images_recovery_package_manifest,
files.update_images_firmware_package,
files.update_images_firmware_package_manifest,
files.update_meta_package,
files.update_abi_revision,
files.update_images_fuchsia_meta_package,
files.update_images_fuchsia_abi_revision,
files.update_images_recovery_meta_package,
files.update_images_recovery_abi_revision,
files.update_images_firmware_meta_package,
files.update_images_firmware_abi_revision,
files.board,
files.epoch,
files.images,
files.packages,
]
inputs = [
invoker.partitions,
invoker.version_file,
]
if (defined(invoker.system_a)) {
args += [
"--system-a",
rebase_path(invoker.system_a, root_build_dir),
]
inputs += [ invoker.system_a ]
}
if (defined(invoker.system_b)) {
args += [
"--system-b",
rebase_path(invoker.system_b, root_build_dir),
]
inputs += [ invoker.system_b ]
}
if (defined(invoker.system_r)) {
args += [
"--system-r",
rebase_path(invoker.system_r, root_build_dir),
]
inputs += [ invoker.system_r ]
}
if (defined(invoker.update_package_name)) {
args += [
"--update-package-name",
invoker.update_package_name,
]
}
if (defined(invoker.subpackage_blobs_package_name)) {
args += [
"--subpackage-blobs-package-name",
invoker.subpackage_blobs_package_name,
]
}
metadata = {
# We generated some PackageManifests. We need to declare them, so that
# these packages are published into TUF.
package_output_manifests = [
files.subpackage_blobs_package_manifest,
files.update_package_manifest,
files.update_images_fuchsia_package_manifest,
files.update_images_recovery_package_manifest,
files.update_images_firmware_package_manifest,
]
# But we don't want any of our own dependencies to contribute packages to
# any package lists created by metadata walks, those packages referenced
# in the `packages` file need to be published by publishing the assembly's
# base & cache packages (see //build/images/updates/BUILD.gn)
#
# Ideally, we'd include the assembly packages, and not the recovery image
# packages, but we can't which is which from within this template.
distribution_entries_barrier = []
package_barrier = []
assembly_package_barrier = []
system_image_package_barrier = []
driver_package_barrier = []
}
}
}