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

bind_rules("fragment-bind") {
  output = "fragment-bind.h"
  rules = "fragment.bind"
}

driver_module("fragment") {
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  sources = [ "fragment.cc" ]
  data_deps = [ ":fragment.proxy" ]
  deps = [
    ":fragment-bind",
    "//sdk/banjo/fuchsia.hardware.amlogiccanvas",
    "//sdk/banjo/fuchsia.hardware.audio",
    "//sdk/banjo/fuchsia.hardware.buttons",
    "//sdk/banjo/fuchsia.hardware.camera.sensor",
    "//sdk/banjo/fuchsia.hardware.clock:fuchsia.hardware.clock_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.dsi",
    "//sdk/banjo/fuchsia.hardware.dsiimpl",
    "//sdk/banjo/fuchsia.hardware.ethernet.board",
    "//sdk/banjo/fuchsia.hardware.gdc",
    "//sdk/banjo/fuchsia.hardware.ge2d",
    "//sdk/banjo/fuchsia.hardware.goldfish.addressspace",
    "//sdk/banjo/fuchsia.hardware.goldfish.pipe",
    "//sdk/banjo/fuchsia.hardware.goldfish.sync",
    "//sdk/banjo/fuchsia.hardware.gpio:fuchsia.hardware.gpio_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.hdmi:fuchsia.hardware.hdmi_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.i2c",
    "//sdk/banjo/fuchsia.hardware.isp",
    "//sdk/banjo/fuchsia.hardware.mipicsi",
    "//sdk/banjo/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.power",
    "//sdk/banjo/fuchsia.hardware.powerimpl",
    "//sdk/banjo/fuchsia.hardware.pwm",
    "//sdk/banjo/fuchsia.hardware.registers",
    "//sdk/banjo/fuchsia.hardware.rpmb",
    "//sdk/banjo/fuchsia.hardware.scpi",
    "//sdk/banjo/fuchsia.hardware.sdio",
    "//sdk/banjo/fuchsia.hardware.shareddma",
    "//sdk/banjo/fuchsia.hardware.spi:fuchsia.hardware.spi_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.sysmem",
    "//sdk/banjo/fuchsia.hardware.tee",
    "//sdk/banjo/fuchsia.hardware.thermal",
    "//sdk/banjo/fuchsia.hardware.usb.modeswitch",
    "//sdk/banjo/fuchsia.hardware.usb.phy",
    "//sdk/banjo/fuchsia.hardware.vreg",
    "//sdk/fidl/fuchsia.hardware.thermal:fuchsia.hardware.thermal_llcpp",
    "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_c",
    "//src/devices/lib/driver",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/trace:trace-driver",
  ]
}

bind_rules("fragment-proxy-bind") {
  output = "fragment-proxy-bind.h"
  rules = "fragment-proxy.bind"
}

driver_module("fragment.proxy") {
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  sources = [ "fragment-proxy.cc" ]
  deps = [
    ":fragment-proxy-bind",
    "//sdk/banjo/fuchsia.hardware.amlogiccanvas",
    "//sdk/banjo/fuchsia.hardware.audio",
    "//sdk/banjo/fuchsia.hardware.buttons",
    "//sdk/banjo/fuchsia.hardware.clock:fuchsia.hardware.clock_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.dsi",
    "//sdk/banjo/fuchsia.hardware.ethernet.board",
    "//sdk/banjo/fuchsia.hardware.goldfish.addressspace",
    "//sdk/banjo/fuchsia.hardware.goldfish.pipe",
    "//sdk/banjo/fuchsia.hardware.goldfish.sync",
    "//sdk/banjo/fuchsia.hardware.gpio:fuchsia.hardware.gpio_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.hdmi:fuchsia.hardware.hdmi_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.i2c",
    "//sdk/banjo/fuchsia.hardware.platform.device:fuchsia.hardware.platform.device_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.power",
    "//sdk/banjo/fuchsia.hardware.pwm",
    "//sdk/banjo/fuchsia.hardware.registers",
    "//sdk/banjo/fuchsia.hardware.rpmb",
    "//sdk/banjo/fuchsia.hardware.spi:fuchsia.hardware.spi_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.sysmem",
    "//sdk/banjo/fuchsia.hardware.tee",
    "//sdk/banjo/fuchsia.hardware.usb.modeswitch",
    "//sdk/banjo/fuchsia.hardware.vreg",
    "//src/devices/lib/driver",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/trace:trace-driver",
  ]
}
