# Copyright 2020 The Chromium OS 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("//common-mk/deps.gni")
import("//common-mk/pkg_config.gni")

group("all") {
  deps = [ ":libshill-net" ]
  if (use.fuzzer) {
    deps += [
      ":arp_client_fuzzer",
      ":nl80211_message_fuzzer",
      ":rtnl_handler_fuzzer",
    ]
  }
  if (use.test) {
    deps += [ ":shill_net_test" ]
  }
}

pkg_config("target_defaults") {
  cflags_cc = [
    "-fno-strict-aliasing",
    "-Woverloaded-virtual",
    "-Wno-missing-field-initializers",  # for LAZY_INSTANCE_INITIALIZER
  ]
  cflags = [
    "-Wextra",
    "-Werror",
    "-Wno-unused-parameter",
  ]
  pkg_deps = [ "libchrome" ]
}

write_deps("libshill-net_deps") {
  pkg_deps = []
  target = "libshill-net"
}

net_sources = [
  "../logging.cc",
  "arp_client.cc",
  "arp_packet.cc",
  "attribute_list.cc",
  "byte_string.cc",
  "control_netlink_attribute.cc",
  "event_history.cc",
  "generic_netlink_message.cc",
  "ieee80211.cc",
  "io_handler_factory.cc",
  "io_handler_factory_container.cc",
  "io_input_handler.cc",
  "io_ready_handler.cc",
  "ip_address.cc",
  "netlink_attribute.cc",
  "netlink_fd.cc",
  "netlink_manager.cc",
  "netlink_message.cc",
  "netlink_packet.cc",
  "netlink_sock_diag.cc",
  "netlink_socket.cc",
  "nl80211_attribute.cc",
  "nl80211_message.cc",
  "rtnl_handler.cc",
  "rtnl_listener.cc",
  "rtnl_message.cc",
  "shill_time.cc",
  "sockets.cc",
]

shared_library("libshill-net") {
  configs += [ ":target_defaults" ]
  defines = [ "SLOG_MEANS_VLOG=1" ]
  sources = net_sources
  cflags_cc = [
    # for shill::Logging declarations
    "-Wno-unused-variable",
    "-Wno-unused-function",
  ]
  deps = [ ":${target_name}_deps" ]
}

if (use.fuzzer) {
  pkg_config("fuzzed_data_config") {
    pkg_deps = [ "libchrome-test" ]
  }
  executable("arp_client_fuzzer") {
    configs += [
      "//common-mk:test",
      "//common-mk/common_fuzzer",
      ":fuzzed_data_config",
      ":target_defaults",
    ]
    sources = [ "arp_client_fuzzer.cc" ]
    deps = [ ":libshill-net" ]
  }
  executable("nl80211_message_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    sources = [ "nl80211_message_fuzzer.cc" ]
    deps = [ ":libshill-net" ]
  }
  executable("rtnl_handler_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    sources = [ "rtnl_handler_fuzzer.cc" ]
    deps = [ ":libshill-net" ]
  }
}

if (use.test) {
  pkg_config("shill_net_test_config") {
    pkg_deps = [ "libchrome-test" ]
  }

  executable("shill_net_test") {
    configs += [
      "//common-mk:test",
      ":shill_net_test_config",
    ]
    sources = [
      "../mock_log.cc",
      "arp_client_test.cc",
      "arp_packet_test.cc",
      "attribute_list_test.cc",
      "byte_string_test.cc",
      "event_history_test.cc",
      "ip_address_test.cc",
      "netlink_attribute_test.cc",
      "nl80211_message_test.cc",
      "rtnl_handler_test.cc",
      "rtnl_listener_test.cc",
      "rtnl_message_test.cc",
      "shill_time_test.cc",
    ]
    if (use.wifi) {
      sources += [
        "netlink_manager_test.cc",
        "netlink_message_test.cc",
        "netlink_packet_test.cc",
        "netlink_socket_test.cc",
        "nl80211_attribute_test.cc",
      ]
    }
    deps = [
      ":libshill-net",
      "//common-mk/testrunner",
    ]
  }
}
