# 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/bind/bind.gni")
import("//build/components.gni")
import("//build/drivers.gni")
import("//build/test.gni")

driver_bind_rules("sdmmc-bind") {
  rules = "sdmmc.bind"
  header_output = "sdmmc-bind.h"
  bind_output = "sdmmc.bindbc"
  tests = "sdmmc-bind-test.json"
  deps = [ "//src/devices/bind/fuchsia.sdmmc" ]
}

fuchsia_driver("sdmmc-driver") {
  output_name = "sdmmc"
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  sources = [
    "mmc.cc",
    "sd.cc",
    "sdio-controller-device.cc",
    "sdio-function-device.cc",
    "sdmmc-block-device.cc",
    "sdmmc-device.cc",
    "sdmmc-root-device.cc",
  ]
  deps = [
    ":sdmmc-bind",
    "//sdk/banjo/fuchsia.hardware.block:fuchsia.hardware.block_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.block.partition:fuchsia.hardware.block.partition_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.sdio:fuchsia.hardware.sdio_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.sdmmc:fuchsia.hardware.sdmmc_banjo_cpp",
    "//sdk/fidl/fuchsia.hardware.rpmb:fuchsia.hardware.rpmb_llcpp",
    "//sdk/fidl/fuchsia.hardware.sdio:fuchsia.hardware.sdio_llcpp",
    "//sdk/fidl/fuchsia.io:fuchsia.io_llcpp",
    "//sdk/lib/fdio",
    "//src/devices/block/lib/sdio",
    "//src/devices/block/lib/sdmmc",
    "//src/devices/lib/dev-operation",
    "//src/devices/lib/driver",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/fzl",
    "//zircon/system/ulib/inspect",
    "//zircon/system/ulib/pretty",
    "//zircon/system/ulib/svc",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/trace:trace-driver",
    "//zircon/system/ulib/zircon-internal",
    "//zircon/system/ulib/zx",
    "//zircon/system/ulib/zxc",
  ]

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

fuchsia_driver_component("sdmmc") {
  component_name = "sdmmc"
  deps = [ ":sdmmc-driver" ]
  info = "sdmmc-info.json"
}

test("sdmmc-test-bin") {
  configs += [ "//build/config:all_source" ]
  output_name = "sdmmc-test"
  sources = [
    "fake-sdmmc-device.cc",
    "mmc.cc",
    "sd.cc",
    "sdio-controller-device-test.cc",
    "sdio-controller-device.cc",
    "sdio-function-device.cc",
    "sdmmc-block-device-test.cc",
    "sdmmc-block-device.cc",
    "sdmmc-device.cc",
  ]
  deps = [
    ":sdmmc-bind",
    "//sdk/banjo/fuchsia.hardware.block:fuchsia.hardware.block_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.block.partition:fuchsia.hardware.block.partition_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.sdio:fuchsia.hardware.sdio_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.sdmmc:fuchsia.hardware.sdmmc_banjo_cpp",
    "//sdk/fidl/fuchsia.hardware.rpmb:fuchsia.hardware.rpmb_llcpp",
    "//sdk/fidl/fuchsia.hardware.sdio:fuchsia.hardware.sdio_llcpp",
    "//sdk/fidl/fuchsia.io:fuchsia.io_llcpp",
    "//sdk/lib/fit",
    "//sdk/lib/inspect/testing/cpp:zxtest",
    "//src/devices/block/lib/sdio",
    "//src/devices/block/lib/sdmmc",
    "//src/devices/lib/dev-operation",
    "//src/devices/testing/mock-ddk",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//src/lib/vmo_store",
    "//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/inspect",
    "//zircon/system/ulib/mock-function",
    "//zircon/system/ulib/pretty",
    "//zircon/system/ulib/svc",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/trace:trace-driver",
    "//zircon/system/ulib/zircon-internal",
    "//zircon/system/ulib/zx",
    "//zircon/system/ulib/zxc",
    "//zircon/system/ulib/zxtest",
  ]

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

fuchsia_unittest_package("sdmmc-test") {
  deps = [ ":sdmmc-test-bin" ]
  test_specs = {
    environments = basic_envs
  }
}

group("tests") {
  testonly = true
  deps = [
    ":sdmmc-bind_test",
    ":sdmmc-test",
    "hardware-test",
  ]
}
