# 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/config/fuchsia/rules.gni")
import("//build/test.gni")
import("//build/unification/images/migrated_manifest.gni")

driver_module("usb-bus") {
  defines = [ "_ALL_SOURCE" ]
  configs += [ "//build/config/fuchsia:enable_zircon_asserts" ]
  configs -= [ "//build/config/fuchsia:no_cpp_standard_library" ]
  configs += [ "//build/config/fuchsia:static_cpp_standard_library" ]
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  sources = [ "usb-bus.cc" ]
  deps = [
    ":common",
    "//src/devices/lib/driver",
  ]
}

source_set("common") {
  defines = [ "_ALL_SOURCE" ]
  sources = [ "usb-device.cc" ]
  deps = [
    "//sdk/banjo/ddk.protocol.usb.composite",
    "//sdk/banjo/ddk.protocol.usb.hub",
    "//src/lib/ddk",
    "//zircon/public/lib/fbl",
    "//zircon/system/ulib/utf_conversion",
  ]
  public_deps = [
    "//sdk/banjo/ddk.protocol.usb",
    "//sdk/banjo/ddk.protocol.usb.bus",
    "//sdk/banjo/ddk.protocol.usb.hci",
    "//sdk/banjo/ddk.protocol.usb.request",
    "//sdk/fidl/fuchsia.hardware.usb.device:fuchsia.hardware.usb.device_llcpp",
    "//src/devices/usb/lib/usb",
    "//src/lib/ddktl",
    "//zircon/public/lib/sync",
  ]
}

group("tests") {
  testonly = true
  deps = [ ":usb-device" ]
}

test("usb-device") {
  # Dependent manifests unfortunately cannot be marked as `testonly`.
  # TODO(44278): Remove when converting this file to proper GN build idioms.
  if (is_fuchsia) {
    testonly = false
  }
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  sources = [ "tests/usb-device.cc" ]
  deps = [
    ":common",
    "//src/devices/testing/fake-bti",
    "//src/devices/testing/fake_ddk",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/utf_conversion",
  ]
}

migrated_manifest("usb-bus-manifest") {
  deps = [ ":usb-bus" ]
}

migrated_manifest("usb-device-manifest") {
  deps = [ ":usb-device" ]
}
