# 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.

declare_args() {
  # If true, replaces netstack with netstack3.
  #
  # When set as a GN argument, requires that sysmgr_config_warn_override be set
  # to true to avoid build failures. See that flag's documentation for details.
  use_netstack3 = false

  # If true, uses a netstack tailored for network conformance testing.
  conformance_testing_netstack = false
}

group("config") {
  if (use_netstack3) {
    deps = [
      "netstack3",
      "netstack3/sysmgr:config",
    ]
  } else if (conformance_testing_netstack) {
    deps = [
      "netstack:netstack-conformance-testing",
      "netstack/sysmgr:config",
    ]
  } else {
    deps = [
      "netstack",
      "netstack/sysmgr:config",
    ]
  }

  deps += [
    "dhcpv6/client",
    "dhcpv6/client/sysmgr:config",
    "dns:dns-resolver",
    "dns/sysmgr:config",
    "http-client",
  ]
}

group("drivers") {
  deps = [ "drivers/network-device" ]
}

group("tests") {
  testonly = true
  deps = [
    "dhcp:tests",
    "dhcpd-cli:tests",
    "dhcpv6:tests",
    "dns:tests",
    "drivers:tests",
    "http-client:tests",
    "lib:tests",
    "mdns:tests",
    "net-cli:tests",
    "netcfg:tests",
    "netdump:tests",
    "netstack:tests",
    "netstack3:tests",
    "ping3:tests",
    "testing/netemul:tests",
    "testing/netemul-v2:tests",
    "tests",
    "tools:tests",
    "tun:tests",
  ]
}
