# 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/bazel/export_fuchsia_package_to_bazel.gni")
import("//build/bind/bind.gni")
import("//build/components.gni")
import("//build/drivers.gni")
import("//build/test.gni")

group("platform") {
  deps = [ ":platform-bus" ]
}

driver_bind_rules("platform-bus-bind") {
  bind_output = "platform-bus.bindbc"
  disable_autobind = true
}

fuchsia_driver("platform-bus-driver") {
  output_name = "platform-bus"
  sources = [
    "node-util.cc",
    "platform-bus.cc",
    "platform-device.cc",
    "platform-interrupt.cc",
  ]
  deps = [
    ":platform-bus-bind",
    "//sdk/banjo/fuchsia.hardware.iommu:fuchsia.hardware.iommu_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_banjo_cpp",
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_cpp",
    "//sdk/fidl/fuchsia.hardware.interrupt:fuchsia.hardware.interrupt_cpp",
    "//sdk/fidl/fuchsia.hardware.platform.bus:fuchsia.hardware.platform.bus_cpp",
    "//sdk/fidl/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_cpp",
    "//sdk/fidl/fuchsia.sysinfo:fuchsia.sysinfo_cpp",
    "//sdk/lib/component/outgoing/cpp",
    "//sdk/lib/driver/component/cpp:cpp",
    "//sdk/lib/zbi-format",
    "//src/devices/bind/fuchsia:fuchsia_cpp",
    "//src/devices/bind/fuchsia.platform:fuchsia.platform_cpp",
    "//src/devices/lib/driver",
    "//src/devices/lib/driver:driver_runtime",
    "//src/lib/ddk",

    # TODO(https://fxbug.dev/42113849): Migrate to the new bind rules and delete the below
    "//src/lib/ddk:ddk-deprecated-binding-headers",
    "//src/lib/ddktl",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/zircon-internal",
    "//zircon/system/ulib/zx",
  ]
}

fuchsia_driver_component("platform-bus") {
  visibility = [ ":*" ]
  component_name = "platform-bus"
  deps = [ ":platform-bus-driver" ]
  info = "platform-bus-info.json"
  manifest = "meta/platform-bus.cml"
}

fuchsia_driver_package("package") {
  package_name = "platform-bus"
  driver_components = [ ":platform-bus" ]
}

# Define Bazel input resource so it can be used
export_fuchsia_package_to_bazel("platform-bus-package-bazel") {
  package = ":package"
  package_name = "platform-bus"
}

test("platform-bus-unittest") {
  sources = [
    "node-util.cc",
    "platform-bus-unittest.cc",
    "platform-bus.cc",
    "platform-device.cc",
    "platform-interrupt.cc",
  ]
  deps = [
    ":platform-bus-bind",
    "//sdk/banjo/fuchsia.hardware.iommu:fuchsia.hardware.iommu_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.powerimpl:fuchsia.hardware.powerimpl_banjo_cpp",
    "//sdk/fidl/fuchsia.boot:fuchsia.boot_cpp",
    "//sdk/fidl/fuchsia.hardware.interrupt:fuchsia.hardware.interrupt_cpp",
    "//sdk/fidl/fuchsia.hardware.platform.bus:fuchsia.hardware.platform.bus_cpp",
    "//sdk/fidl/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_cpp",
    "//sdk/fidl/fuchsia.sysinfo:fuchsia.sysinfo_cpp",
    "//sdk/lib/component/outgoing/cpp",
    "//sdk/lib/driver/component/cpp:cpp",
    "//sdk/lib/zbi-format",
    "//src/devices/bind/fuchsia:fuchsia_cpp",
    "//src/devices/bind/fuchsia.platform:fuchsia.platform_cpp",
    "//src/devices/lib/driver",
    "//src/devices/lib/driver:driver_runtime",
    "//src/devices/testing/fake-bti",
    "//src/devices/testing/no_ddk",
    "//src/lib/ddk",

    # TODO(https://fxbug.dev/42113849): Migrate to the new bind rules and delete the below
    "//src/devices/testing/driver-runtime-main:zxtest",
    "//src/lib/ddk:ddk-deprecated-binding-headers",
    "//src/lib/ddktl",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/zircon-internal",
    "//zircon/system/ulib/zx",
    "//zircon/system/ulib/zxtest",
  ]
}

fuchsia_unittest_package("platform-bus-unittest-package") {
  package_name = "platform-bus-unittest"
  deps = [ ":platform-bus-unittest" ]
}

group("tests") {
  testonly = true
  deps = [
    ":platform-bus-unittest-package",
    "test:platform-bus-test",
    "test/power-integration-test:power-integration-tests-package",
  ]
}
