# Copyright 2018 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/components.gni")
import("//build/drivers.gni")

fuchsia_driver_package("qmi-usb-transport") {
  driver_components = [ ":qmi_driver" ]
}

driver_bind_rules("qmi_usb_bind") {
  rules = "qmi_usb.bind"
  tests = "bind_tests.json"
  deps = [
    "//src/devices/bind/fuchsia.sierra.platform.usb",
    "//src/devices/bind/fuchsia.usb",
  ]
}

group("tests") {
  testonly = true
  deps = [ ":qmi_usb_bind_test" ]
}

fuchsia_driver("qmi_driver-driver") {
  output_name = "qmi-transport"

  deps = [ ":qmi_driver_src" ]

  configs += [ "//build/config/fuchsia:enable_zircon_asserts" ]
}

fuchsia_driver_component("qmi_driver") {
  component_name = "qmi-transport"
  deps = [ ":qmi_driver-driver" ]
  info = "qmi_driver-info.json"
  manifest = "meta/qmi_driver.cml"
}

source_set("qmi_driver_src") {
  sources = [
    "qmi-usb-transport.cc",
    "qmi-usb-transport.h",
  ]

  public_deps = [
    ":qmi_usb_bind",
    "//sdk/banjo/fuchsia.hardware.ethernet:fuchsia.hardware.ethernet_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.usb:fuchsia.hardware.usb_banjo_cpp",
    "//sdk/fidl/fuchsia.hardware.telephony.transport:fuchsia.hardware.telephony.transport_cpp",
    "//sdk/fidl/fuchsia.telephony.snoop:fuchsia.telephony.snoop_cpp",
    "//src/devices/lib/driver",
    "//src/devices/usb/lib/usb",
    "//src/devices/usb/lib/usb:cdc",
    "//src/lib/ddk",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/zx",
  ]

  configs += [
    # TODO(https://fxbug.dev/42136089): delete below and fix conversion warnings.
    "//build/config:Wno-conversion",

    # TODO(https://fxbug.dev/42085293): delete below and fix VLA warnings.
    "//build/config:Wno-vla-cxx-extension",
  ]
}
