# 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/config.gni")
import("//build/test.gni")
import("//build/testing/environments.gni")
import("//src/sys/build/components.gni")
import("//zircon/system/ulib/devmgr-integration-test/isolated_devmgr.gni")

source_set("lib") {
  sources = [
    "factory_reset.cc",
    "factory_reset.h",
  ]

  public_deps = [
    # <factory_reset.h> has #include <fuchsia/recovery/cpp/fidl.h>
    "//sdk/fidl/fuchsia.recovery",

    # <factory_reset.h> has #include <fuchsia/hardware/power/statecontrol/cpp/fidl.h>
    "//sdk/fidl/fuchsia.hardware.power.statecontrol",

    # <factory_reset.h> has #include <fbl/unique_fd.h>
    "//zircon/public/lib/fbl",
  ]

  deps = [
    "//sdk/fidl/fuchsia.device:fuchsia.device_c",
    "//sdk/fidl/fuchsia.hardware.block:fuchsia.hardware.block_c",
    "//sdk/fidl/fuchsia.hardware.block.encrypted:fuchsia.hardware.block.encrypted_c",
    "//sdk/fidl/fuchsia.sysinfo:fuchsia.sysinfo_c",
    "//sdk/lib/fdio",
    "//src/lib/storage/fs_management",
    "//src/security/kms-stateless",
    "//src/security/zxcrypt:zxcrypt-fdio",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/fdio-caller",
    "//zircon/system/ulib/fzl",
  ]
}

executable("bin") {
  output_name = "factory_reset"

  sources = [ "main.cc" ]

  deps = []
  public_deps = [
    ":lib",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

executable("fdr") {
  sources = [ "cli_main.cc" ]

  public_deps = [
    "//sdk/fidl/fuchsia.recovery",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_package_with_single_component("factory_reset_pkg") {
  package_name = "factory_reset"
  manifest = "meta/factory_reset.cmx"
  deps = [ ":bin" ]
}

group("factory_reset") {
  deps = [
    ":factory_reset_config",
    ":factory_reset_pkg",
  ]
}

fuchsia_shell_package("fdr_cli") {
  deps = [ ":fdr" ]
}

config_data("factory_reset_config") {
  for_pkg = "sysmgr"
  outputs = [ "factory_reset.config" ]
  sources = [ "service.config" ]
}

# TODO(fxbug.dev/45780): Remove this forwarding target once out of tree users are removed.
group("configs") {
  deps = [ ":factory_reset_config" ]
}

group("tools") {
  deps = [ ":fdr_cli" ]
}

group("tests") {
  testonly = true
  deps = [ ":factory-reset-tests" ]
}

test("factory_reset_unittests") {
  testonly = true
  sources = [ "factory_reset_unittest.cc" ]

  deps = [
    ":lib",
    "//sdk/fidl/fuchsia.device:fuchsia.device_llcpp",
    "//sdk/fidl/fuchsia.hardware.block.volume:fuchsia.hardware.block.volume_c",
    "//sdk/fidl/fuchsia.hardware.power.statecontrol",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/storage/fs_management",
    "//src/security/zxcrypt:zxcrypt-fdio",
    "//zircon/public/lib/fbl",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/devmgr-integration-test",
    "//zircon/system/ulib/fdio-caller",
    "//zircon/system/ulib/fzl",
    "//zircon/system/ulib/ramdevice-client",
  ]

  # TODO(fxbug.dev/69585): This target uses raw zx::channel with LLCPP which is deprecated.
  # Please migrate to typed channel APIs (fidl::ClientEnd<T>, fidl::ServerEnd<T>).
  # See linked bug for details.
  configs += [ "//build/cpp:fidl-llcpp-deprecated-raw-channels" ]
}

isolated_devmgr_unittest_package("factory-reset-tests") {
  executable_path = "test/factory_reset_unittests"

  test_specs = {
    environments = [
      astro_env,
      emu_env,
    ]
  }

  deps = [
    ":factory_reset_unittests",
    "//src/devices/block/drivers/core",
    "//src/devices/block/drivers/ftl",
    "//src/devices/block/drivers/ramdisk",
    "//src/devices/block/drivers/zxcrypt",
    "//src/devices/misc/drivers/test",
    "//src/devices/tests/sysdev",
    "//src/storage/fvm/driver",
  ]
}

group("factory_reset_tests") {
  testonly = true
  deps = [ ":factory-reset-tests" ]
}
