# Copyright 2024 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/sdk/idk.gni")
import("//build/sdk/idk_archive.gni")
import("//build/sdk/sdk_collection.gni")
import("//build/sdk/sdk_final_manifest_golden.gni")

visibility = [ ":*" ]

group("firmware") {
  visibility += [ "//build/input:build_only" ]
  deps = [
    ":firmware.archive",
    ":firmware.exported",
    ":firmware_manifest_golden",
  ]
}

idk("firmware.exported") {
  output_name = "firmware"
  sdk_collection_label = ":firmware_collection"
  target_cpus = idk_target_cpus

  # TODO(https://fxbug.dev/331991540): Define how the Firmware SDK is versioned and update.
  api_levels = []
}

idk_archive("firmware.archive") {
  idk = ":firmware.exported"
  idk_output_name = "firmware"
}

sdk_final_manifest_golden("firmware_manifest_golden") {
  golden = "//sdk/manifests/firmware.manifest"
  idk_name = "firmware"
  idk_exported_label = ":firmware.exported"
}

sdk_collection("firmware_collection") {
  visibility += [ "*" ]

  # The "Firmware SDK" is unrelated to the Fuchsia SDK but uses the same GN templates and thus must
  # set a category. See https://fxbug.dev/331962496.
  category = "excluded"

  deps = [
    "//sdk/docs:firmware",
    "//sdk/lib/zbi-format:zbi-format_sdk",
    "//src/firmware/lib/abr:abr_sdk",
    "//src/firmware/lib/storage:storage_sdk",
    "//src/firmware/lib/zbi:zbi_sdk",
    "//src/firmware/lib/zircon_boot:zircon_boot_sdk",
    "//third_party/android/platform/external/avb:avb_sdk",
    "//zircon/public/sysroot/sdk:sysroot_sdk",
  ]
}
