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

driver_bind_rules("usb_composite_bind") {
  rules = "usb_composite.bind"
  bind_output = "usb-composite.bindbc"
  tests = "bind_tests.json"
  deps = [ "//src/devices/bind/fuchsia.usb" ]
}

group("tests") {
  testonly = true
  deps = [
    ":usb-composite-test",
    ":usb-interface-test",
    ":usb_composite_bind_test",
  ]
}

fuchsia_driver("usb-composite-driver") {
  output_name = "usb-composite"
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  sources = [
    "usb-composite.cc",
    "usb-interface.cc",
  ]
  deps = [
    ":usb_composite_bind",
    "//sdk/banjo/fuchsia.hardware.usb:fuchsia.hardware.usb_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.usb.composite:fuchsia.hardware.usb.composite_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.usb.request:fuchsia.hardware.usb.request_banjo_cpp",
    "//sdk/fidl/fuchsia.hardware.usb:fuchsia.hardware.usb_cpp",
    "//sdk/lib/component/outgoing/cpp",
    "//src/devices/lib/driver",
    "//src/devices/lib/driver:driver_runtime",
    "//src/devices/usb/lib/usb",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/sync",
  ]
}

fuchsia_driver_component("usb-composite") {
  visibility = [ ":*" ]
  info = "usb-composite-info.json"
  component_name = "usb-composite"
  deps = [ ":usb-composite-driver" ]
  manifest = "meta/usb-composite.cml"
}

fuchsia_driver_package("package") {
  package_name = "usb-composite"
  driver_components = [ ":usb-composite" ]
}

test("usb-interface-test-bin") {
  sources = [
    "usb-interface-test.cc",
    "usb-interface.cc",
  ]
  output_name = "usb-interface-test"
  deps = [
    ":usb_composite_bind",
    "//sdk/banjo/fuchsia.hardware.usb:fuchsia.hardware.usb_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.usb:fuchsia.hardware.usb_banjo_cpp_mock",
    "//sdk/banjo/fuchsia.hardware.usb.composite:fuchsia.hardware.usb.composite_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.usb.request:fuchsia.hardware.usb.request_banjo_cpp",
    "//sdk/fidl/fuchsia.hardware.usb:fuchsia.hardware.usb_cpp",
    "//sdk/lib/component/outgoing/cpp",
    "//src/devices/lib/driver",
    "//src/devices/testing/mock-ddk",
    "//src/devices/usb/lib/usb",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/zxtest",
  ]
}

fuchsia_unittest_package("usb-interface-test") {
  deps = [ ":usb-interface-test-bin" ]
  test_specs = {
    environments = basic_envs
  }
}

test("usb-composite-test-bin") {
  sources = [
    "usb-composite-test.cc",
    "usb-composite.cc",
    "usb-interface.cc",
  ]
  output_name = "usb-composite-test"
  deps = [
    ":usb_composite_bind",
    "//sdk/banjo/fuchsia.hardware.usb:fuchsia.hardware.usb_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.usb:fuchsia.hardware.usb_banjo_cpp_mock",
    "//sdk/banjo/fuchsia.hardware.usb.composite:fuchsia.hardware.usb.composite_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.usb.request:fuchsia.hardware.usb.request_banjo_cpp",
    "//sdk/fidl/fuchsia.hardware.usb:fuchsia.hardware.usb_cpp",
    "//sdk/lib/component/outgoing/cpp",
    "//sdk/lib/driver/runtime/testing/cpp",
    "//src/devices/lib/driver",
    "//src/devices/lib/driver:driver_runtime",
    "//src/devices/testing/mock-ddk",
    "//src/devices/usb/lib/usb",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/zxtest",
  ]
}

fuchsia_unittest_package("usb-composite-test") {
  deps = [ ":usb-composite-test-bin" ]
  test_specs = {
    environments = basic_envs
  }
}
