# 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/drivers.gni")

config("factory") {
  defines = [ "FACTORY_BUILD" ]
}

driver_bind_rules("sherlock-bind") {
  rules = "sherlock.bind"
  bind_output = "sherlock.bindbc"
  tests = "sherlock-bind-tests.json"
  deps = [
    "//sdk/fidl/fuchsia.hardware.platform.bus:fuchsia.hardware.platform.bus_bindlib",
    "//src/devices/bind/fuchsia.google.platform",
  ]
}

template("sherlock_driver") {
  fuchsia_driver(target_name + "-driver") {
    output_name = invoker.target_name
    forward_variables_from(invoker, "*")

    configs += [
      "//build/config:all_source",
      "//build/config/fuchsia:enable_zircon_asserts",
    ]
    if (use_factory) {
      configs += [ ":factory" ]
    }

    sources = [
      "sherlock-adc.cc",
      "sherlock-audio.cc",
      "sherlock-backlight.cc",
      "sherlock-bluetooth.cc",
      "sherlock-buttons.cc",
      "sherlock-camera.cc",
      "sherlock-canvas.cc",
      "sherlock-clk.cc",
      "sherlock-cpu.cc",
      "sherlock-emmc.cc",
      "sherlock-gpio.cc",
      "sherlock-hevc-enc.cc",
      "sherlock-i2c.cc",
      "sherlock-light.cc",
      "sherlock-mali.cc",
      "sherlock-nna.cc",
      "sherlock-ot-radio.cc",
      "sherlock-pwm.cc",
      "sherlock-ram.cc",
      "sherlock-registers.cc",
      "sherlock-sdio.cc",
      "sherlock-securemem.cc",
      "sherlock-spi.cc",
      "sherlock-sysmem.cc",
      "sherlock-tee.cc",
      "sherlock-thermal.cc",
      "sherlock-thermistor.cc",
      "sherlock-usb.cc",
      "sherlock-video-enc.cc",
      "sherlock-video.cc",
      "sherlock.cc",
    ]

    deps = [
      "//sdk/banjo/fuchsia.hardware.iommu:fuchsia.hardware.iommu_banjo_cpp",
      "//sdk/banjo/fuchsia.hardware.sdmmc:fuchsia.hardware.sdmmc_banjo_cpp",
      "//sdk/fidl/fuchsia.hardware.adc:fuchsia.hardware.adc_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.amlogiccanvas:fuchsia.hardware.amlogiccanvas_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.audio:fuchsia.hardware.audio_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.clock:fuchsia.hardware.clock_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.clockimpl:fuchsia.hardware.clockimpl_cpp",
      "//sdk/fidl/fuchsia.hardware.gpio:fuchsia.hardware.gpio_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.gpioimpl:fuchsia.hardware.gpioimpl_cpp",
      "//sdk/fidl/fuchsia.hardware.gpt.metadata:fuchsia.hardware.gpt.metadata_cpp",
      "//sdk/fidl/fuchsia.hardware.gpu.amlogic:fuchsia.hardware.gpu.amlogic_cpp",
      "//sdk/fidl/fuchsia.hardware.gpu.mali:fuchsia.hardware.gpu.mali_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.i2c:fuchsia.hardware.i2c_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.platform.bus:fuchsia.hardware.platform.bus_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.platform.bus:fuchsia.hardware.platform.bus_cpp",
      "//sdk/fidl/fuchsia.hardware.pwm:fuchsia.hardware.pwm_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.pwm:fuchsia.hardware.pwm_cpp",
      "//sdk/fidl/fuchsia.hardware.registers:fuchsia.hardware.registers_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.rpmb:fuchsia.hardware.rpmb_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.sdio:fuchsia.hardware.sdio_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.sdmmc:fuchsia.hardware.sdmmc_cpp",
      "//sdk/fidl/fuchsia.hardware.serial:fuchsia.hardware.serial_cpp",
      "//sdk/fidl/fuchsia.hardware.spi:fuchsia.hardware.spi_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.sysmem:fuchsia.hardware.sysmem_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.sysmem:fuchsia.hardware.sysmem_cpp",
      "//sdk/fidl/fuchsia.hardware.tee:fuchsia.hardware.tee_bindlib_cpp",
      "//sdk/fidl/fuchsia.hardware.thermal:fuchsia.hardware.thermal_cpp",
      "//sdk/fidl/fuchsia.hardware.usb.phy:fuchsia.hardware.usb.phy_bindlib_cpp",
      "//sdk/lib/driver/component/cpp:cpp",
      "//sdk/lib/driver/outgoing/cpp",
      "//src/connectivity/openthread/lib/ot-radio",
      "//src/devices/bind/fuchsia:fuchsia_cpp",
      "//src/devices/bind/fuchsia.adc:fuchsia.adc_cpp",
      "//src/devices/bind/fuchsia.amlogic.platform:fuchsia.amlogic.platform_cpp",
      "//src/devices/bind/fuchsia.amlogic.platform.meson:fuchsia.amlogic.platform.meson_cpp",
      "//src/devices/bind/fuchsia.amlogic.platform.t931:fuchsia.amlogic.platform.t931_cpp",
      "//src/devices/bind/fuchsia.ams.platform:fuchsia.ams.platform_cpp",
      "//src/devices/bind/fuchsia.arm.platform:fuchsia.arm.platform_cpp",
      "//src/devices/bind/fuchsia.broadcom.platform:fuchsia.broadcom.platform_cpp",
      "//src/devices/bind/fuchsia.broadcom.platform.sdio:fuchsia.broadcom.platform.sdio_cpp",
      "//src/devices/bind/fuchsia.camera:fuchsia.camera_cpp",
      "//src/devices/bind/fuchsia.clock:fuchsia.clock_cpp",
      "//src/devices/bind/fuchsia.google.platform:fuchsia.google.platform_cpp",
      "//src/devices/bind/fuchsia.gpio:fuchsia.gpio_cpp",
      "//src/devices/bind/fuchsia.i2c:fuchsia.i2c_cpp",
      "//src/devices/bind/fuchsia.isp:fuchsia.isp_cpp",
      "//src/devices/bind/fuchsia.nordic.platform:fuchsia.nordic.platform_cpp",
      "//src/devices/bind/fuchsia.platform:fuchsia.platform_cpp",
      "//src/devices/bind/fuchsia.pwm:fuchsia.pwm_cpp",
      "//src/devices/bind/fuchsia.register:fuchsia.register_cpp",
      "//src/devices/bind/fuchsia.sdio:fuchsia.sdio_cpp",
      "//src/devices/bind/fuchsia.sony.platform:fuchsia.sony.platform_cpp",
      "//src/devices/bind/fuchsia.thermal:fuchsia.thermal_cpp",
      "//src/devices/bind/fuchsia.ti.platform:fuchsia.ti.platform_cpp",
      "//src/devices/bind/fuchsia.usb.phy:fuchsia.usb.phy_cpp",
      "//src/devices/lib/amlogic",
      "//src/devices/lib/broadcom",
      "//src/devices/lib/driver",
      "//src/devices/lib/driver:driver_runtime",
      "//src/devices/lib/fidl-metadata",
      "//src/devices/lib/mmio",
      "//src/devices/lib/thermal",
      "//src/devices/lib/ti",
      "//src/devices/usb/lib/usb",
      "//src/devices/usb/lib/usb:cdc",
      "//src/devices/usb/lib/usb:dwc2",
      "//src/lib/ddk",
      "//src/lib/ddk:ddk-metadata-headers",

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

    # TODO(https://fxbug.dev/42176699): This target uses mutable tables which are deprecated,
    # rather than builders.
    configs += [ "//build/cpp:fidl-wire-deprecated-mutable-tables" ]
  }

  fuchsia_driver_component("${invoker.target_name}-component") {
    deps = [ ":${invoker.target_name}-driver" ]
    info = "${invoker.target_name}-info.json"
    manifest = "meta/${invoker.target_name}.cml"
  }

  fuchsia_driver_package("${invoker.target_name}-package") {
    package_name = "${invoker.target_name}"
    driver_components = [
      ":${invoker.target_name}-component",
      "post-init",
    ]
  }

  group(target_name) {
    deps = [
      ":${invoker.target_name}-component",
      "post-init",
    ]
  }
}

sherlock_driver("sherlock") {
  use_factory = false
}

sherlock_driver("sherlock-factory") {
  use_factory = true
}

group("tests") {
  testonly = true
  deps = [
    ":sherlock-bind_test",
    "post-init:tests",
  ]
}
