# 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")

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

config("rndis") {
  defines = [ "ENABLE_RNDIS=1" ]
}

bind_rules("sherlock-bind") {
  rules = "sherlock.bind"
  output = "sherlock-bind.h"
  tests = "sherlock-bind-tests.json"
  deps = [
    "//src/devices/bind/fuchsia.google.platform",
    "//src/devices/bind/fuchsia.platform",
  ]
}

bind_rules("luis-bind") {
  rules = "luis.bind"
  output = "luis-bind.h"
  tests = "luis-bind-tests.json"
  deps = [
    "//src/devices/bind/fuchsia.google.platform",
    "//src/devices/bind/fuchsia.platform",
  ]
}

template("sherlock_driver") {
  driver_module(target_name) {
    forward_variables_from(invoker, "*")

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

    sources = [
      "luis-cpu.cc",
      "luis-power.cc",
      "luis-thermal.cc",
      "sherlock-audio.cc",
      "sherlock-backlight.cc",
      "sherlock-bluetooth.cc",
      "sherlock-board.cc",
      "sherlock-buttons.cc",
      "sherlock-camera.cc",
      "sherlock-canvas.cc",
      "sherlock-clk.cc",
      "sherlock-cpu.cc",
      "sherlock-display.cc",
      "sherlock-dsi.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-touch.cc",
      "sherlock-usb.cc",
      "sherlock-video-enc.cc",
      "sherlock-video.cc",
      "sherlock.cc",
    ]

    deps = [
      ":luis-bind",
      ":sherlock-bind",
      "//sdk/banjo/fuchsia.hardware.clock:fuchsia.hardware.clock_banjo_cpp",
      "//sdk/banjo/fuchsia.hardware.clockimpl",
      "//sdk/banjo/fuchsia.hardware.gpio",
      "//sdk/banjo/fuchsia.hardware.gpioimpl:fuchsia.hardware.gpioimpl_banjo_cpp",
      "//sdk/banjo/fuchsia.hardware.iommu",
      "//sdk/banjo/fuchsia.hardware.platform.bus",
      "//sdk/banjo/fuchsia.hardware.platform.device",
      "//sdk/banjo/fuchsia.hardware.sdmmc",
      "//sdk/banjo/fuchsia.hardware.serial",
      "//sdk/banjo/fuchsia.sysmem",
      "//sdk/fidl/fuchsia.hardware.gpu.amlogic:fuchsia.hardware.gpu.amlogic_llcpp",
      "//sdk/fidl/fuchsia.hardware.serial:fuchsia.hardware.serial_c",
      "//sdk/fidl/fuchsia.hardware.thermal:fuchsia.hardware.thermal_c",
      "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_c",
      "//src/connectivity/openthread/lib/ot-radio",
      "//src/devices/bind/fuchsia.ams.platform:bind.fuchsia.ams.platform",
      "//src/devices/lib/amlogic",
      "//src/devices/lib/broadcom",
      "//src/devices/lib/driver",
      "//src/devices/lib/focaltech",
      "//src/devices/lib/metadata:llcpp",
      "//src/devices/lib/mmio",
      "//src/devices/lib/thermal",
      "//src/devices/lib/ti",
      "//src/devices/usb/lib/usb",
      "//src/graphics/display/lib/device-protocol-display",
      "//src/lib/ddk",
      "//src/lib/ddk:ddk-metadata-headers",

      # TODO(fxb/38132): Migrate to the new bind rules and delete the below
      "//src/lib/ddk:ddk-deprecated-binding-headers",
      "//src/lib/ddktl",
      "//zircon/public/lib/fbl",
      "//zircon/public/lib/hwreg",
      "//zircon/public/lib/zircon-internal",
      "//zircon/public/lib/zx",
    ]
  }
}

sherlock_driver("sherlock") {
  use_factory = false
  enable_rndis = false
}

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

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

sherlock_driver("luis") {
  use_factory = false
  enable_rndis = false
  defines = [ "IS_LUIS=1" ]
}

sherlock_driver("luis-factory") {
  use_factory = true
  enable_rndis = false
  defines = [ "IS_LUIS=1" ]
}

sherlock_driver("luis-factory-rndis") {
  use_factory = true
  enable_rndis = true
  defines = [ "IS_LUIS=1" ]
}

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