# 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/config/fuchsia/rules.gni")
import("//build/test.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/fuchsia.hardware.block",
    "//sdk/banjo/fuchsia.hardware.sdhci",
    "//sdk/banjo/fuchsia.hardware.sdmmc",
    "//src/devices/block/lib/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-bin") {
  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/fuchsia.hardware.block",
    "//sdk/banjo/fuchsia.hardware.sdhci",
    "//sdk/banjo/fuchsia.hardware.sdhci:fuchsia.hardware.sdhci_mock",
    "//sdk/banjo/fuchsia.hardware.sdmmc",
    "//src/devices/block/lib/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",
  ]
}

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

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