# 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")
import("//build/images/paths.gni")

# A list of partitions for the flash json manifest that will be
# generated.  The first item should be the partition name and the
# second should be the path to the image for the partition.
parts = []
if (zircon_a_partition != "") {
  parts += [
    {
      name = zircon_a_partition
      path = rebase_path(files.final_zbi, root_build_dir)
    },
  ]
}
if (zircon_b_partition != "") {
  parts += [
    {
      name = zircon_b_partition
      path = rebase_path(files.final_zbi, root_build_dir)
    },
  ]
}
if (zircon_r_partition != "") {
  parts += [
    {
      name = zircon_r_partition
      path = rebase_path(files.final_recovery_zbi, root_build_dir)
    },
  ]
}
if (vbmeta_a_partition != "") {
  parts += [
    {
      name = vbmeta_a_partition
      path = rebase_path(files.final_vbmeta, root_build_dir)
    },
  ]
}
if (vbmeta_b_partition != "") {
  parts += [
    {
      name = vbmeta_b_partition
      path = rebase_path(files.final_vbmeta, root_build_dir)
    },
  ]
}
if (vbmeta_r_partition != "") {
  parts += [
    {
      name = vbmeta_r_partition
      path = rebase_path(files.final_recovery_vbmeta, root_build_dir)
    },
  ]
}

recovery_parts = []
if (zircon_a_partition != "") {
  recovery_parts += [
    {
      name = zircon_a_partition
      path = rebase_path(files.final_recovery_zbi, root_build_dir)
    },
  ]
}
if (zircon_b_partition != "") {
  recovery_parts += [
    {
      name = zircon_b_partition
      path = rebase_path(files.final_recovery_zbi, root_build_dir)
    },
  ]
}
if (zircon_r_partition != "") {
  recovery_parts += [
    {
      name = zircon_r_partition
      path = rebase_path(files.final_recovery_zbi, root_build_dir)
    },
  ]
}
if (vbmeta_a_partition != "") {
  recovery_parts += [
    {
      name = vbmeta_a_partition
      path = rebase_path(files.final_recovery_vbmeta, root_build_dir)
    },
  ]
}
if (vbmeta_b_partition != "") {
  recovery_parts += [
    {
      name = vbmeta_b_partition
      path = rebase_path(files.final_recovery_vbmeta, root_build_dir)
    },
  ]
}
if (vbmeta_r_partition != "") {
  recovery_parts += [
    {
      name = vbmeta_r_partition
      path = rebase_path(files.final_recovery_vbmeta, root_build_dir)
    },
  ]
}

archive_image_suffix = "zbi"
if (sign_zbi) {
  archive_image_suffix = "signed.zbi.signed"
}

archive_image = "zircon-a.${archive_image_suffix}"
archive_vbmeta = "zircon-a.vbmeta"

archive_recovery_image = "zircon-r.zbi"
if (recovery_is_zedboot) {
  archive_recovery_image = "zircon-r.${archive_image_suffix}"
}

archive_recovery_vbmeta = "zircon-r.vbmeta"

# A list of partitions for the flash json manifest that will be
# generated.  The first item should be the partition name and the
# second should be the path to the image for the partition.
archive_parts = [
  {
    name = zircon_a_partition
    path = archive_image
  },
  {
    name = zircon_b_partition
    path = archive_image
  },
  {
    name = zircon_r_partition
    path = archive_recovery_image
  },
  {
    name = vbmeta_a_partition
    path = archive_vbmeta
  },
  {
    name = vbmeta_b_partition
    path = archive_vbmeta
  },
  {
    name = vbmeta_r_partition
    path = archive_recovery_vbmeta
  },
]

archive_recovery_parts = [
  {
    name = zircon_a_partition
    path = archive_recovery_image
  },
  {
    name = zircon_b_partition
    path = archive_recovery_image
  },
  {
    name = zircon_r_partition
    path = archive_recovery_image
  },
  {
    name = vbmeta_a_partition
    path = archive_recovery_vbmeta
  },
  {
    name = vbmeta_b_partition
    path = archive_recovery_vbmeta
  },
  {
    name = vbmeta_r_partition
    path = archive_recovery_vbmeta
  },
]
