blob: 5fc8f7b2075643fd56c9732d8f6fe67ce380c03d [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/images/args.gni")
# Generates a partitions config to be consued by the Image Assembler.
#
# Arguments:
# output_path (required)
# [path] Board config output location.
#
# hw_revision (required)
# [string] The name of the hardware revision.
# This is placed in the flash manifest to ensure partitions are not
# flashed to the wrong hardware.
#
# esp_image_path (optional)
# [string] The path on host to the ESP bootloader.
#
# bootstrap_partitions (optional)
# [list] List of OEM images to flash when using:
# ffx target flash --product fuchsia
#
# Each entry will have the following format. A file is only flashed to the
# partition if the conditional fastboot arg equals the specified value.
# {
# path = "path/to/image"
# partition = "partition_name"
# condition = {
# variable = "variable_name"
# value = "value
# }
# }
#
# unlock_credentials (optional)
# [list] List of zip files containing the credentials used to unlock
# a device in fastboot mode.
#
template("generated_partitions_config") {
assert(defined(invoker.output_path), "Need to define output_path")
assert(defined(invoker.hw_revision), "Need to define hw_revision")
bootstrap = []
if (defined(invoker.bootstrap_partitions)) {
foreach(part, invoker.bootstrap_partitions) {
bootstrap += [
{
image = rebase_path(part.path, root_build_dir)
name = part.partition
condition = part.condition
},
]
}
}
credentials = []
if (defined(invoker.unlock_credentials)) {
foreach(cred, invoker.unlock_credentials) {
credentials += [ rebase_path(cred, root_build_dir) ]
}
}
generated_file(target_name) {
forward_variables_from(invoker,
[
"deps",
"testonly",
"visibility",
])
outputs = [ invoker.output_path ]
output_conversion = "json"
# Aggregate all the bootloader partitions.
_bootloader_partitions = []
foreach(firmware, firmware_prebuilts) {
assert(defined(firmware.type), "Firmware type must be specified")
assert(defined(firmware.path), "Firmware path must be specified")
firmware_path =
rebase_path("${firmware.path}${firmware_prebuilts_path_suffix}",
root_build_dir)
partition = {
}
partition.type = firmware.type
partition.image = firmware_path
# If a partition is specified, then the flash manifest will include the bootloader.
if (defined(firmware.partition)) {
partition.name = firmware.partition
}
_bootloader_partitions += [ partition ]
}
# Add the ESP partition if necessary.
if (defined(invoker.esp_image_path)) {
_bootloader_partitions += [
{
name = "fuchsia-esp"
type = "esp"
image = rebase_path("${invoker.esp_image_path}", root_build_dir)
},
]
}
# Aggregate all the non-bootloader partitions.
_partitions = []
if (zircon_a_partition != "") {
_partitions += [
{
name = zircon_a_partition
type = "ZBI"
slot = "A"
},
]
}
if (zircon_b_partition != "") {
_partitions += [
{
name = zircon_b_partition
type = "ZBI"
slot = "B"
},
]
}
if (zircon_r_partition != "") {
_partitions += [
{
name = zircon_r_partition
type = "ZBI"
slot = "R"
},
]
}
if (vbmeta_a_partition != "") {
_partitions += [
{
name = vbmeta_a_partition
type = "VBMeta"
slot = "A"
},
]
}
if (vbmeta_b_partition != "") {
_partitions += [
{
name = vbmeta_b_partition
type = "VBMeta"
slot = "B"
},
]
}
if (vbmeta_r_partition != "") {
_partitions += [
{
name = vbmeta_r_partition
type = "VBMeta"
slot = "R"
},
]
}
if (fvm_partition != "") {
_partitions += [
{
name = fvm_partition
type = "FVM"
},
]
}
contents = {
hardware_revision = invoker.hw_revision
bootloader_partitions = _bootloader_partitions
partitions = _partitions
bootstrap_partitions = bootstrap
unlock_credentials = credentials
}
}
}