# 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/components.gni")

expect_includes("storage_test_includes") {
  includes = [ "meta/storage_test.shard.cml" ]
}

group("storage_drivers") {
  testonly = true
  deps = [
    "//src/devices/block/drivers/core",
    "//src/devices/block/drivers/ftl",
    "//src/devices/block/drivers/gpt",
    "//src/devices/block/drivers/ramdisk:ramdisk",
    "//src/devices/block/drivers/zxcrypt",
    "//src/devices/nand/drivers/ram-nand",
    "//src/storage/fvm/driver",
  ]
}

group("storage_driver_test_realm") {
  testonly = true
  deps = [ "driver_test_realm" ]
}

source_set("storage_driver_test_support") {
  testonly = true
  sources = [
    "fvm.cc",
    "fvm.h",
    "ram_disk.cc",
    "ram_disk.h",
    "zxcrypt.cc",
    "zxcrypt.h",
  ]
  deps = [
    "//sdk/fidl/fuchsia.device",
    "//sdk/fidl/fuchsia.device:fuchsia.device_llcpp",
    "//sdk/fidl/fuchsia.sys2",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/syslog/cpp",
    "//src/lib/storage/fs_management/cpp:fs-management",
    "//src/security/zxcrypt:zxcrypt-client",
    "//src/storage/lib/utils:topological_path",
    "//zircon/system/ulib/fdio-caller",
    "//zircon/system/ulib/sync",
  ]
  public_deps = [
    "//src/lib/storage/ramdevice_client/cpp",
    "//zircon/system/ulib/zxc",
  ]

  # TODO(fxbug.dev/95833): This target uses the deprecated C bindings.
  # Consider switching to the C++ bindings. See linked bug for details.
  configs += [ "//build/c:fidl-deprecated-c-bindings" ]
}

source_set("fake-paver") {
  sources = [ "fake-paver.cc" ]
  public_deps = [
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_llcpp",
    "//sdk/fidl/fuchsia.device:fuchsia.device_llcpp",
    "//sdk/fidl/fuchsia.paver:fuchsia.paver_llcpp",
    "//src/lib/storage/vfs/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/fzl",
    "//zircon/system/ulib/zircon-internal",
    "//zircon/system/ulib/zx",
    "//zircon/system/ulib/zxtest",
  ]
}
