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

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

driver_module("vs680-power") {
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "vs680-power.cc" ]
  deps = [
    ":vs680-power-bind",
    "//sdk/banjo/ddk.protocol.composite",
    "//sdk/banjo/ddk.protocol.powerimpl",
    "//src/devices/i2c/lib/device-protocol-i2c",
    "//src/devices/lib/as370",
    "//src/devices/lib/driver",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hwreg",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
  ]
}

test("vs680-power-test") {
  output_name = "vs680-power-test"
  sources = [
    "vs680-power-test.cc",
    "vs680-power.cc",
  ]
  deps = [
    ":vs680-power-bind",
    "//sdk/banjo/ddk.protocol.composite",
    "//sdk/banjo/ddk.protocol.powerimpl",
    "//sdk/lib/fdio",
    "//src/devices/i2c/lib/device-protocol-i2c",
    "//src/devices/i2c/testing/fake-i2c",
    "//src/devices/lib/as370",
    "//src/devices/lib/driver",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hwreg",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
  ]
}

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

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

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