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

zx_library("block-client") {
  sdk = "source"
  sdk_headers = [
    "block-client/client.h",
    "block-client/cpp/block-device.h",
    "block-client/cpp/block-group-registry.h",
    "block-client/cpp/client.h",
    "block-client/cpp/fake-device.h",
    "block-client/cpp/remote-block-device.h",
  ]
  sources = [
    "block-device.cc",
    "block-group-registry.cc",
    "client.c",
    "client.cc",
    "remote-block-device.cc",
  ]
  public_deps = [
    # <block-client/cpp/fake-device.h> has #include <range/range.h>.
    # <block-client/cpp/client.h> has #include <lib/zx/fifo.h>.
    "//zircon/system/ulib/range",

    # <block-client/cpp/fake-device.h> has #include <storage-metrics/block-metrics.h>.
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/storage-metrics",
    "//zircon/system/ulib/storage/buffer",

    # <block-client/cpp/block-device.h> has #include <.../fidl.h>
    "//sdk/fidl/fuchsia.device:fuchsia.device_c",
    "//sdk/fidl/fuchsia.device:fuchsia.device_llcpp",
    "//sdk/fidl/fuchsia.hardware.block:fuchsia.hardware.block_c",
    "//sdk/fidl/fuchsia.hardware.block.volume:fuchsia.hardware.block.volume_c",
  ]
  deps = [
    "//sdk/fidl/fuchsia.device:fuchsia.device_llcpp",
    "//sdk/fidl/fuchsia.hardware.block:fuchsia.hardware.block_c",
    "//sdk/fidl/fuchsia.hardware.block.volume:fuchsia.hardware.block.volume_c",
    "//sdk/fidl/fuchsia.io:fuchsia.io_llcpp",
    "//sdk/lib/fdio",
    "//sdk/lib/syslog/cpp",
    "//src/lib/ddk",
    "//src/lib/storage/vfs/cpp",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zx",
  ]

  # 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" ]
}

zx_library("fake-device") {
  sdk = "source"
  sdk_headers = [
    "block-client/client.h",
    "block-client/cpp/block-device.h",
    "block-client/cpp/remote-block-device.h",
    "block-client/cpp/fake-device.h",
    "block-client/cpp/block-group-registry.h",
    "block-client/cpp/client.h",
  ]
  testonly = true
  sources = [ "fake-device.cc" ]
  public_deps = [
    ":block-client",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/range",
    "//zircon/system/ulib/storage-metrics",
    "//zircon/system/ulib/storage/buffer",
  ]
  deps = [
    "//sdk/fidl/fuchsia.device:fuchsia.device_c",
    "//sdk/fidl/fuchsia.hardware.block:fuchsia.hardware.block_c",
    "//sdk/fidl/fuchsia.hardware.block.volume:fuchsia.hardware.block.volume_c",
    "//sdk/lib/syslog/cpp",
    "//src/storage/fvm",
    "//zircon/system/ulib/range",
    "//zircon/system/ulib/storage-metrics",
    "//zircon/system/ulib/storage/buffer",
  ]
}

group("tests") {
  testonly = true
  deps = [ "test:tests" ]
}
