# Copyright 2020 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("network-device_bind") {
  rules = "network_device.bind"
  bind_output = "network-device.bindbc"
  tests = "bind-tests.json"
  deps = [
    "//sdk/fidl/fuchsia.hardware.network.driver:fuchsia.hardware.network.driver_bindlib",
    "//src/devices/bind/fuchsia.network",
  ]
}

source_set("src") {
  sources = [
    "network_device.cc",
    "network_device.h",
  ]
  public_deps = [
    ":network-device_bind",
    "device:banjo_shims_ddk",
    "device:device_ddk",
    "//sdk/fidl/fuchsia.hardware.network.driver:fuchsia.hardware.network.driver_cpp",
    "//src/devices/lib/driver:driver_runtime",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/sync:sync-cpp",
  ]
}

fuchsia_driver("network-device-driver") {
  output_name = "network-device"
  configs += [ "//build/config/fuchsia:enable_zircon_asserts" ]

  deps = [
    ":src",
    "//src/devices/lib/driver",
  ]
}

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

fuchsia_driver_package("package") {
  package_name = "network-device"
  driver_components = [ ":network-device" ]
}

group("tests") {
  testonly = true

  deps = [
    ":network-device-test",
    ":network-device_bind_test",
    "device:tests",
    "mac:tests",
  ]
}

test("driver-test") {
  output_name = "network-device-test"
  sources = [
    "device/test_session.cc",
    "device/test_session.h",
    "device/test_util.h",
    "device/test_util_banjo.cc",
    "device/test_util_banjo.h",
    "mac/test_util.h",
    "mac/test_util_banjo.cc",
    "mac/test_util_banjo.h",
    "network_device_test.cc",
  ]
  deps = [
    ":src",
    "//src/devices/lib/driver",
    "//src/devices/testing/fake-bti",
    "//src/devices/testing/mock-ddk",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/predicates",
    "//zircon/system/ulib/zx",
  ]

  # TODO(https://fxbug.dev/42176699): This target uses mutable tables which are deprecated,
  # rather than builders.
  configs += [ "//build/cpp:fidl-wire-deprecated-mutable-tables" ]
}

fuchsia_unittest_package("network-device-test") {
  deps = [ ":driver-test" ]
}
