# Copyright 2022 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("crg_udc_bind") {
  rules = "crg_udc.bind"
  bind_output = "crg_udc.bindbc"
  tests = "tests.json"
  deps = [
    "//src/devices/bind/fuchsia.amlogic.platform",
    "//src/devices/bind/fuchsia.platform",
  ]
}

fuchsia_driver("crg-udc-driver") {
  output_name = "crg-udc"
  configs += [
    "//build/config:all_source",
    "//build/config/fuchsia:enable_zircon_asserts",
  ]
  sources = [ "crg-udc.cc" ]
  deps = [
    ":crg_udc_bind",
    "//sdk/banjo/fuchsia.hardware.usb:fuchsia.hardware.usb_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.usb.dci:fuchsia.hardware.usb.dci_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.usb.phy:fuchsia.hardware.usb.phy_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.usb.request:fuchsia.hardware.usb.request_banjo_cpp",
    "//sdk/lib/fit",
    "//src/devices/bus/lib/device-protocol-pdev",
    "//src/devices/lib/driver",
    "//src/devices/lib/mmio",
    "//src/devices/usb/lib/usb",
    "//src/devices/usb/lib/usb:dwc2",
    "//src/devices/usb/lib/usb-phy",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/hwreg",
    "//zircon/system/ulib/pretty",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/zx",
  ]
}

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

test("crg-udc-test-bin") {
  configs += [ "//build/config:all_source" ]
  sources = [
    "crg-udc-test.cc",
    "crg-udc.cc",
  ]
  output_name = "crg-udc-test"
  deps = [
    ":crg_udc_bind",
    "//sdk/banjo/fuchsia.hardware.usb:fuchsia.hardware.usb_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.usb.dci:fuchsia.hardware.usb.dci_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.usb.phy:fuchsia.hardware.usb.phy_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.usb.request:fuchsia.hardware.usb.request_banjo_cpp",
    "//src/devices/bus/lib/device-protocol-pdev",
    "//src/devices/lib/driver",
    "//src/devices/lib/mmio",
    "//src/devices/testing/mock-ddk",
    "//src/devices/usb/lib/usb",
    "//src/devices/usb/lib/usb:dwc2",
    "//src/devices/usb/lib/usb-phy",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/system/ulib/fbl",
    "//zircon/system/ulib/hwreg",
    "//zircon/system/ulib/pretty",
    "//zircon/system/ulib/sync",
    "//zircon/system/ulib/zxtest",
  ]
}

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

group("tests") {
  testonly = true
  deps = [
    ":crg-udc-test",
    ":crg_udc_bind_test",
  ]
}
