# Copyright 2020 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")

bind_rules("vs680-evk-bind") {
  rules = "vs680-evk.bind"
  output = "vs680-evk-bind.h"
  tests = "vs680-evk-bind-test.json"
  deps = [
    "//src/devices/bind/fuchsia.google.platform",
    "//src/devices/bind/fuchsia.platform",
  ]
}

driver_module("vs680-evk") {
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  sources = [
    "vs680-evk-clock.cc",
    "vs680-evk-emmc.cc",
    "vs680-evk-gpio.cc",
    "vs680-evk-i2c.cc",
    "vs680-evk-power.cc",
    "vs680-evk-sdio.cc",
    "vs680-evk-spi.cc",
    "vs680-evk-thermal.cc",
    "vs680-evk-usb.cc",
    "vs680-evk.cc",
  ]
  deps = [
    ":vs680-evk-bind",
    "//sdk/banjo/fuchsia.hardware.gpioimpl:fuchsia.hardware.gpioimpl_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.i2cimpl",
    "//sdk/banjo/fuchsia.hardware.platform.bus",
    "//sdk/fidl/fuchsia.hardware.thermal:fuchsia.hardware.thermal_llcpp",
    "//src/devices/lib/as370",
    "//src/devices/lib/driver",
    "//src/devices/lib/mmio",
    "//src/devices/usb/lib/usb",
    "//src/lib/ddk",
    "//src/lib/ddk:ddk-metadata-headers",
    "//src/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hwreg",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
  ]
}

group("tests") {
  testonly = true
  deps = [ ":vs680-evk-bind_test" ]
}
