# 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/config/fuchsia/rules.gni")
import("//build/test.gni")
import("//build/test/test_package.gni")

bind_rules("sdhci-bind") {
  rules = "sdhci.bind"
  output = "sdhci-bind.h"
  tests = "sdhci-bind-test.json"
  deps = [ "//src/devices/bind/fuchsia.sdmmc" ]
}

driver_module("sdhci") {
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "sdhci.cc" ]
  deps = [
    ":sdhci-bind",
    "//sdk/banjo/ddk.protocol.block",
    "//sdk/banjo/ddk.protocol.sdhci",
    "//sdk/banjo/ddk.protocol.sdmmc",
    "//src/devices/lib/driver",
    "//src/devices/lib/mmio",
    "//src/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hwreg",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
  ]
}

test("sdhci-test") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  output_name = "sdhci-test"
  configs += [ "//build/config:all_source" ]
  sources = [
    "sdhci-test.cc",
    "sdhci.cc",
  ]
  deps = [
    ":sdhci-bind",
    "//sdk/banjo/ddk.protocol.block",
    "//sdk/banjo/ddk.protocol.sdhci",
    "//sdk/banjo/ddk.protocol.sdhci:ddk.protocol.sdhci_mock",
    "//sdk/banjo/ddk.protocol.sdmmc",
    "//src/devices/lib/mmio",
    "//src/devices/testing/fake-bti",
    "//src/devices/testing/fake_ddk",
    "//src/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hwreg",
    "//zircon/public/lib/mock-function",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/mmio-ptr:mmio-ptr-fake",
  ]
}

unittest_package("sdhci-test-package") {
  package_name = "sdhci-test"
  deps = [ ":sdhci-test" ]

  tests = [
    {
      name = "sdhci-test"
      environments = basic_envs
    },
  ]
}

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