# 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("as370-thermal-bind") {
  rules = "as370-thermal.bind"
  output = "as370-thermal-bind.h"
  tests = "as370-thermal-bind-test.json"
  deps = [
    "//src/devices/bind/fuchsia.composite",
    "//src/devices/bind/fuchsia.synaptics.platform",
  ]
}

driver_module("as370-thermal") {
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "as370-thermal.cc" ]
  deps = [
    ":as370-thermal-bind",
    "//sdk/banjo/ddk.protocol.clock",
    "//sdk/banjo/ddk.protocol.composite",
    "//sdk/banjo/ddk.protocol.platform.device",
    "//sdk/banjo/ddk.protocol.power",
    "//sdk/fidl/fuchsia.hardware.thermal:fuchsia.hardware.thermal_llcpp",
    "//src/devices/bus/lib/device-protocol-pdev",
    "//src/devices/lib/as370",
    "//src/devices/lib/driver",
    "//src/devices/lib/mmio",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hwreg",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/fidl-utils",
  ]
}

test("as370-thermal-test") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  output_name = "as370-thermal-test"
  sources = [
    "as370-thermal-test.cc",
    "as370-thermal.cc",
  ]
  deps = [
    ":as370-thermal-bind",
    "//sdk/banjo/ddk.protocol.clock",
    "//sdk/banjo/ddk.protocol.clock:ddk.protocol.clock_mock",
    "//sdk/banjo/ddk.protocol.composite",
    "//sdk/banjo/ddk.protocol.platform.device",
    "//sdk/banjo/ddk.protocol.power",
    "//sdk/banjo/ddk.protocol.power:ddk.protocol.power_mock",
    "//sdk/fidl/fuchsia.hardware.thermal:fuchsia.hardware.thermal_c",
    "//sdk/fidl/fuchsia.hardware.thermal:fuchsia.hardware.thermal_llcpp",
    "//src/devices/bus/lib/device-protocol-pdev",
    "//src/devices/lib/as370",
    "//src/devices/lib/mmio",
    "//src/devices/testing/fake_ddk",
    "//src/devices/testing/mock-mmio-reg",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hwreg",
    "//zircon/public/lib/mock-function",
    "//zircon/public/lib/zircon-internal",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/async-loop",
    "//zircon/system/ulib/fidl-utils",
  ]
}

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

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

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