# 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("ram-nand-bind") {
  rules = "ram-nand.bind"
  tests = "bind-tests.json"
  deps = [ "//src/devices/bind/fuchsia.platform" ]
}

fuchsia_driver("ram-nand-driver") {
  output_name = "ram-nand"
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  sources = [
    "bind.cc",
    "ram-nand-ctl.cc",
    "ram-nand-ctl.h",
  ]
  deps = [
    ":common",
    ":ram-nand-bind",
    "//sdk/banjo/fuchsia.hardware.nand:fuchsia.hardware.nand_banjo_cpp",
    "//sdk/fidl/fuchsia.hardware.nand:fuchsia.hardware.nand_cpp",
    "//sdk/lib/fidl",
    "//src/devices/lib/driver",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/zircon-internal",
    "//zircon/system/ulib/zx",
  ]

  # TODO(https://fxbug.dev/42176699): This target uses mutable tables which are deprecated,
  # rather than builders.
  configs += [ "//build/cpp:fidl-wire-deprecated-mutable-tables" ]
}

fuchsia_driver_component("ram-nand") {
  component_name = "ram-nand"
  deps = [ ":ram-nand-driver" ]
  info = "ram-nand-info.json"
  manifest = "meta/ram-nand.cml"
}

source_set("common") {
  visibility = [ ":*" ]
  sources = [ "ram-nand.cc" ]
  deps = [
    "//sdk/banjo/fuchsia.hardware.nand:fuchsia.hardware.nand_banjo_cpp",
    "//sdk/fidl/fuchsia.hardware.nand:fuchsia.hardware.nand_cpp",
    "//src/devices/bind/fuchsia:fuchsia_cpp",
    "//src/devices/bind/fuchsia.nand:fuchsia.nand_cpp",
    "//src/lib/ddk",
    "//src/lib/ddk:ddk-metadata-headers",
    "//src/lib/ddktl",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/zircon-internal",
  ]
  public_deps = [ "//zircon/system/ulib/fbl" ]

  # TODO(https://fxbug.dev/42136089): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

test("test") {
  output_name = "ram-nand-test"
  sources = [
    "test/ram-nand-ctl.cc",
    "test/ram-nand.cc",
  ]
  include_dirs = [ "." ]
  deps = [
    ":common",
    "//sdk/banjo/fuchsia.hardware.nand:fuchsia.hardware.nand_banjo_cpp",
    "//sdk/fidl/fuchsia.driver.test:fuchsia.driver.test_cpp",
    "//sdk/fidl/fuchsia.hardware.nand:fuchsia.hardware.nand_cpp",
    "//sdk/lib/component/incoming/cpp",
    "//sdk/lib/device-watcher/cpp",
    "//sdk/lib/driver_test_realm",
    "//sdk/lib/fdio",
    "//src/devices/testing/mock-ddk",
    "//src/lib/ddk",
    "//src/lib/ddk:ddk-metadata-headers",
    "//src/lib/ddktl",
    "//src/storage/lib/ramdevice_client/cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/fdio-caller",
    "//zircon/system/ulib/fzl",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/zircon-internal",
    "//zircon/system/ulib/zx",
    "//zircon/system/ulib/zxtest",
  ]
  data_deps = [ ":ram-nand" ]

  # TODO(https://fxbug.dev/42176699): This target uses mutable tables which are deprecated,
  # rather than builders.
  configs += [ "//build/cpp:fidl-wire-deprecated-mutable-tables" ]
}

fuchsia_unittest_package("ram-nand-test") {
  manifest = "meta/ram-nand-test.cml"
  deps = [
    ":test",
    "//src/devices/board/drivers/integration-test",
    "//src/devices/bus/drivers/platform",
    "//src/devices/nand/drivers/nand",
    "//src/devices/nand/drivers/nandpart",
    "//src/devices/nand/drivers/ram-nand",
  ]

  # There's expected error logs that happen due to the test not waiting for drivers to finish enumerating.
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

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