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

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

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

test("mtk-thermal-test") {
  configs += [ "//build/unification/config:zircon-migrated" ]
  output_name = "mtk-thermal-test"
  configs += [ "//build/config:all_source" ]
  sources = [
    "mtk-thermal-test.cc",
    "mtk-thermal.cc",
  ]
  deps = [
    ":mtk-thermal-bind",
    "//sdk/banjo/ddk.protocol.clock",
    "//sdk/banjo/ddk.protocol.composite",
    "//sdk/banjo/ddk.protocol.gpio",
    "//sdk/banjo/ddk.protocol.i2c",
    "//sdk/banjo/ddk.protocol.platform.device",
    "//sdk/fidl/fuchsia.hardware.thermal:fuchsia.hardware.thermal_c",
    "//sdk/lib/fdio",
    "//src/devices/bus/lib/device-protocol-pdev",
    "//src/devices/bus/lib/device-protocol-platform-device",
    "//src/devices/lib/mmio",
    "//src/devices/lib/mt8167",
    "//src/devices/testing/mock-mmio-reg",
    "//src/devices/testing/no_ddk",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//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/fidl-utils",
    "//zircon/system/ulib/mmio-ptr:mmio-ptr-fake",
  ]
}

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

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

test("mtk-thermal-integration-test") {
  output_name = "mtk-thermal-integration-test"
  configs += [ "//build/unification/config:zircon-migrated" ]
  sources = [ "mtk-thermal-integration-test.cc" ]
  deps = [
    "//sdk/fidl/fuchsia.hardware.thermal:fuchsia.hardware.thermal_c",
    "//sdk/fidl/fuchsia.sysinfo:fuchsia.sysinfo_c",
    "//sdk/lib/fdio",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/test-utils",
  ]
}

bootfs_test("mtk-thermal-integration-bootfs-test") {
  name = "mtk-thermal-integration-test"
  environments = basic_envs
  deps = [ ":mtk-thermal-integration-test" ]
}

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