# Copyright 2019 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/board.gni")
import("//build/images/assemble_system.gni")
import("//build/images/recovery/recovery_args.gni")
import("//build/images/ta.gni")
import("//build/images/zedboot/zedboot_args.gni")
import("//build/testing/host_test_data.gni")

group("recovery") {
  testonly = true
  public_deps = [
    ":recovery-eng",
    ":recovery-fdr",
  ]
}

recovery_packages = [
  "//build/info:build-info",
  "//garnet/bin/network_time_service",
  "//garnet/bin/sysmgr",
  "//garnet/packages/prod:sysmem_connector",
  "//garnet/packages/prod:broadcom",
  "//src/connectivity/management:network_config_default",
  "//src/connectivity/network:config",
  "//src/connectivity/wlan/config:default",
  "//src/connectivity/wlan/wlancfg",
  "//src/connectivity/wlan/wlanstack",
  "//src/recovery/system",
  "//src/recovery/system:config",
  "//src/security/root_ssl_certificates",
  "//src/sys/appmgr",
  "//src/sys/appmgr:appmgr_scheme_config",
  "//src/sys/core",
  "//src/sys/pkg:recovery",
  "//src/sys/stash",
  "//src/sys/timekeeper",
  "//src/connectivity/network/http_client",
]

recovery_eng_packages =
    recovery_packages + [
      # So components can be launched:
      "//src/sys/tools/run",

      # Basic command-line tools:
      "//garnet/packages/prod:sbase",

      # Command-line interface to wlan stack:
      "//src/connectivity/wlan/wlancfg/tool:donut",

      # Device side of zxdb & fidlcat, including required policies:
      "//src/developer/debug/debug_agent",
      "//src/security/policy:appmgr_root_job_allowlist_eng",

      # The SWD stack for OTAs.
      "//src/sys/pkg/lib/isolated-ota:isolated-swd",

      # Eng allowlists for SWD (for OTAs):
      "//src/security/policy:appmgr_package_cache_allowlist_eng",
      "//src/security/policy:appmgr_package_resolver_allowlist_eng",
    ]

assemble_system("recovery-eng") {
  base_packages = recovery_eng_packages

  # We avoid compressing blobs in the blobfs image so that they can be more
  # effectively compressed by the ZBI compressor that is tuned to zstd max.
  compress_blobs = false
  netboot = true
  devmgr_config = [ "virtcon.disable=true" ] + zedboot_devmgr_config
  cmdline = [
              "console.shell=true",
              "netsvc.disable=false",
              "kernel.enable-debugging-syscalls=true",
              "kernel.enable-serial-syscalls=true",
            ] + zedboot_cmdline_args + board_zedboot_cmdline_args
  cmdline_inputs = zedboot_cmdline_files

  # XXX(comfoltey): Disable bootfs_allowlist_recovery while build
  # unification is in progress
  bootfs_allowlist = []
  ta_uuids = recovery_ta_uuids
  sysmgr_golden = "sysmgr-eng-golden.json"
}

assemble_system("recovery-fdr") {
  base_packages = recovery_packages

  # We avoid compressing blobs in the blobfs image so that they can be more
  # effectively compressed by the ZBI compressor that is tuned to zstd max.
  compress_blobs = false
  netboot = true
  devmgr_config = [ "virtcon.disable=true" ]
  cmdline = []

  # XXX(comfoltey): Disable bootfs_allowlist_recovery while build
  # unification is in progress
  bootfs_allowlist = []
  ta_uuids = recovery_ta_uuids
  sysmgr_golden = "sysmgr-fdr-golden.json"
}

if (is_host) {
  host_test_data("test_data") {
    out_dir = get_label_info(":anything($target_toolchain)", "target_out_dir")
    sources = [
      "${out_dir}/recovery-eng.zbi",
      "${out_dir}/recovery-fdr.zbi",
    ]
    deps = [
      ":recovery-eng($target_toolchain)",
      ":recovery-fdr($target_toolchain)",
    ]
  }
}
