# 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:fuchsia.hardware.amlogiccanvas_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.audio",
    "//sdk/banjo/fuchsia.hardware.buttons",
    "//sdk/banjo/fuchsia.hardware.camera.sensor:fuchsia.hardware.camera.sensor_banjo_cpp",
    "//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:fuchsia.hardware.gdc_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.ge2d:fuchsia.hardware.ge2d_banjo_cpp",
    "//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:fuchsia.hardware.isp_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.mipicsi:fuchsia.hardware.mipicsi_banjo_cpp",
    "//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:fuchsia.hardware.registers_banjo_cpp",
    "//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:fuchsia.hardware.sysmem_banjo_cpp",
    "//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:fuchsia.hardware.amlogiccanvas_banjo_cpp",
    "//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:fuchsia.hardware.registers_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.rpmb",
    "//sdk/banjo/fuchsia.hardware.spi:fuchsia.hardware.spi_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.sysmem:fuchsia.hardware.sysmem_banjo_cpp",
    "//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",
  ]
}
