blob: b8027dc716cb1c00116eac6dafd462305500100d [file] [log] [blame]
# Copyright 2022 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")
# Generate a manifest that can be passed to 'ffx target flash' to flash
# images to a target device.
#
# Arguments
# partitions (required)
# [path] The path to the partitions config.
#
# system_a (optional)
# [path] The path to the images manifest that describes images intended
# for slot A.
#
# system_b (optional)
# [path] The path to the images manifest that describes images intended
# for slot B.
#
# system_r (optional)
# [path] The path to the images manifest that describes images intended
# for slot R.
#
template("flash_manifest") {
assert(defined(invoker.partitions), "Need to define partitions")
labels = {
hermetic_inputs = "${target_name}_hermetic_inputs"
}
files = {
hermetic_inputs = "${target_out_dir}/${target_name}_hermetic_inputs"
outdir = "$target_out_dir/$target_name"
flash_manifest = "$outdir/flash.json"
}
python_action(labels.hermetic_inputs) {
forward_variables_from(invoker,
[
"deps",
"testonly",
"visibility",
])
binary_label =
"//build/assembly/scripts:hermetic_inputs_for_update_and_flash"
inputs = [ invoker.partitions ]
outputs = [ files.hermetic_inputs ]
args = [
"--partitions",
rebase_path(invoker.partitions, root_build_dir),
"--output",
rebase_path(files.hermetic_inputs, 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
args = [
"--config",
"assembly_enabled=true",
"assembly",
"create-flash-manifest",
"--partitions",
rebase_path(invoker.partitions, root_build_dir),
"--outdir",
rebase_path(files.outdir, root_build_dir),
]
outputs = [ files.flash_manifest ]
inputs = [ invoker.partitions ]
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 ]
}
}
}