# Copyright 2018 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/generate-dbus-adaptors.gni")
import("//common-mk/generate-dbus-proxies.gni")
import("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")
import("//common-mk/protoctxt.gni")

group("all") {
  deps = [
    ":libshill",
    ":mobile_operator_db",
    ":mobile_operator_db-db",
    ":mobile_operator_db-protos",
    ":openvpn-script",
    ":shill",
    ":shill-chromeos-dbus-adaptors",
  ]
  if (use.cellular) {
    deps += [
      ":cellular_mobile_operator_info_tester",
      ":set-apn-helper",
    ]
  }
  if (use.cellular || use.vpn) {
    deps += [ ":shill-pppd-plugin" ]
  }
  if (use.fuzzer) {
    deps += [
      ":cellular_pco_fuzzer",
      ":dhcpv4_static_routes_fuzzer",
      ":shill_http_url_fuzzer",
      ":shill_profile_fuzzer",
      ":shill_service_fuzzer",
      ":shill_technology_fuzzer",
      ":verizon_subscription_state_fuzzer",
      ":wifi_ies_fuzzer",
      ":wifi_service_fuzzer",
    ]
    if (use.vpn) {
      deps += [
        ":openvpn_management_server_fuzzer",
        ":vpn_ipsec_connection_fuzzer",
        ":vpn_l2tp_ipsec_driver_fuzzer",
      ]
    }
  }
  if (use.test) {
    deps += [ ":shill_unittest" ]
  }
}

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",  # for pppd_plugin.c, base/tuple.h

    # TODO(crbug.com/1047566): Remove the warning when libchrome fixes the issue.
    "-Wno-deprecated-copy",
  ]
  defines = [
    "PKCS11_LIB=\"${libdir}/libchaps.so\"",
    "RUNDIR=\"/run/shill\"",
    "SHIMDIR=\"${libdir}/shill/shims\"",
  ]
  if (!use.cellular) {
    defines += [ "DISABLE_CELLULAR" ]
  }

  if (use.test || use.fuzzer) {
    # For the "mockable" keyword.
    defines += [ "TEST_BUILD" ]
  }

  if (!use.vpn) {
    defines += [ "DISABLE_VPN" ]
  }

  if (!use.wake_on_wifi) {
    defines += [ "DISABLE_WAKE_ON_WIFI" ]
  }

  if (!use.wifi) {
    defines += [ "DISABLE_WIFI" ]
  }

  if (!use.wired_8021x) {
    defines += [ "DISABLE_WIRED_8021X" ]
  }

  if (!use.wpa3_sae) {
    defines += [ "DISABLE_WPA3_SAE" ]
  }

  pkg_deps = [
    "dbus-1",
    "libbrillo",
    "libchrome",
    "libpatchpanel-client",
    "libshill-net",
    "libtirpc",
    "re2",

    # system_api depends on protobuf (or protobuf-lite). It must appear
    # before protobuf here or the linker flags won't be in the right
    # order.
    "system_api",
    "uuid",
  ]
  if (use.fuzzer) {
    pkg_deps += [ "protobuf" ]
  } else {
    pkg_deps += [ "protobuf-lite" ]
  }
}

proto_library("mobile_operator_db-protos") {
  proto_in_dir = "mobile_operator_db"
  proto_out_dir = "include/shill/mobile_operator_db"
  sources = [ "${proto_in_dir}/mobile_operator_db.proto" ]
}

protoc_text_to_bin("mobile_operator_db-db") {
  protoc_proto_def = "mobile_operator_db.proto"
  protoc_message_name = "shill.mobile_operator_db.MobileOperatorDB"
  protoc_text_dir = "mobile_operator_db"
  protoc_proto_dir = "mobile_operator_db"
  protoc_bin_dir = "${root_out_dir}"
  sources = [ "${protoc_text_dir}/serviceproviders.prototxt" ]
}

protoc_text_to_bin("mobile_operator_db-test-db") {
  protoc_proto_def = "mobile_operator_db.proto"
  protoc_message_name = "shill.mobile_operator_db.MobileOperatorDB"
  protoc_text_dir = "mobile_operator_db/test_protos"
  protoc_proto_dir = "mobile_operator_db"
  protoc_bin_dir = "${root_out_dir}"
  sources = [
    "${protoc_text_dir}/data_test.prototxt",
    "${protoc_text_dir}/init_test_empty_db_init.prototxt",
    "${protoc_text_dir}/init_test_multiple_db_init_1.prototxt",
    "${protoc_text_dir}/init_test_multiple_db_init_2.prototxt",
    "${protoc_text_dir}/init_test_override_db_init_1.prototxt",
    "${protoc_text_dir}/init_test_override_db_init_2.prototxt",
    "${protoc_text_dir}/init_test_successful_init.prototxt",
    "${protoc_text_dir}/main_test.prototxt",
  ]
}

static_library("mobile_operator_db") {
  configs += [ ":target_defaults" ]
  deps = [
    ":mobile_operator_db-db",
    ":mobile_operator_db-protos",
  ]
}

generate_dbus_adaptors("shill-chromeos-dbus-adaptors") {
  dbus_adaptors_out_dir = "include/dbus_bindings"
  sources = [
    "dbus_bindings/org.chromium.flimflam.Device.dbus-xml",
    "dbus_bindings/org.chromium.flimflam.IPConfig.dbus-xml",
    "dbus_bindings/org.chromium.flimflam.Manager.dbus-xml",
    "dbus_bindings/org.chromium.flimflam.Profile.dbus-xml",
    "dbus_bindings/org.chromium.flimflam.Service.dbus-xml",
    "dbus_bindings/org.chromium.flimflam.Task.dbus-xml",
    "dbus_bindings/org.chromium.flimflam.ThirdPartyVpn.dbus-xml",
  ]
}

pkg_config("libshill_config") {
  pkg_deps = [
    "libcares",
    "libshill-client",
  ]
}

if (use.cellular) {
  pkg_config("libshill_cellular_config") {
    pkg_deps = [ "ModemManager" ]
  }
}

generate_dbus_proxies("generate_cellular_proxies") {
  modemmanager_in_dir = "${sysroot}/usr/share/dbus-1/interfaces/"
  proxy_output_file = "include/cellular/dbus-proxies.h"
  sources = [
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Modem.Location.xml",
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Modem.Modem3gpp.ProfileManager.xml",
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml",
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Modem.ModemCdma.xml",
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Modem.Signal.xml",
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Modem.Simple.xml",
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Modem.xml",
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Sim.xml",
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.xml",
    "dbus_bindings/dbus-objectmanager.dbus-xml",
    "dbus_bindings/dbus-properties.dbus-xml",
  ]
}

generate_dbus_proxies("generate_dhcpcd_proxies") {
  proxy_output_file = "include/dhcpcd/dbus-proxies.h"
  sources = [ "dbus_bindings/dhcpcd.dbus-xml" ]
}

generate_dbus_proxies("generate_upstart_proxies") {
  proxy_output_file = "include/upstart/dbus-proxies.h"
  sources = [
    "dbus_bindings/upstart-job-shill-event.dbus-xml",
    "dbus_bindings/upstart.dbus-xml",
  ]
}

generate_dbus_proxies("generate_supplicant_proxies") {
  proxy_output_file = "include/supplicant/dbus-proxies.h"
  sources = [
    "dbus_bindings/supplicant-bss.dbus-xml",
    "dbus_bindings/supplicant-interface.dbus-xml",
    "dbus_bindings/supplicant-network.dbus-xml",
    "dbus_bindings/supplicant-process.dbus-xml",
  ]
}

static_library("libshill") {
  sources = [
    "certificate_file.cc",
    "connection.cc",
    "connection_diagnostics.cc",
    "daemon_task.cc",
    "dbus/dbus_adaptor.cc",
    "dbus/dbus_control.cc",
    "dbus/dbus_service_watcher.cc",
    "dbus/dbus_service_watcher_factory.cc",
    "dbus/device_dbus_adaptor.cc",
    "dbus/dhcpcd_listener.cc",
    "dbus/dhcpcd_proxy.cc",
    "dbus/ipconfig_dbus_adaptor.cc",
    "dbus/manager_dbus_adaptor.cc",
    "dbus/power_manager_proxy.cc",
    "dbus/profile_dbus_adaptor.cc",
    "dbus/rpc_task_dbus_adaptor.cc",
    "dbus/service_dbus_adaptor.cc",
    "dbus/third_party_vpn_dbus_adaptor.cc",
    "dbus/upstart_proxy.cc",
    "default_profile.cc",
    "device.cc",
    "device_claimer.cc",
    "device_id.cc",
    "device_info.cc",
    "dns_client.cc",
    "dns_util.cc",
    "ephemeral_profile.cc",
    "error.cc",
    "ethernet/ethernet.cc",
    "ethernet/ethernet_provider.cc",
    "ethernet/ethernet_service.cc",
    "ethernet/ethernet_temporary_service.cc",
    "ethernet/virtio_ethernet.cc",
    "event_dispatcher.cc",
    "external_task.cc",
    "file_io.cc",
    "geolocation_info.cc",
    "hook_table.cc",
    "http_request.cc",
    "http_url.cc",
    "icmp.cc",
    "icmp_session.cc",
    "ipconfig.cc",
    "logging.cc",
    "mac_address.cc",
    "manager.cc",
    "metrics.cc",
    "network/dhcp_controller.cc",
    "network/dhcp_provider.cc",
    "network/dhcpv4_config.cc",
    "portal_detector.cc",
    "power_manager.cc",
    "process_manager.cc",
    "profile.cc",
    "resolver.cc",
    "result_aggregator.cc",
    "routing_policy_entry.cc",
    "routing_table.cc",
    "routing_table_entry.cc",
    "rpc_task.cc",
    "scope_logger.cc",
    "service.cc",
    "shill_ares.cc",
    "shill_config.cc",
    "shill_daemon.cc",
    "shill_test_config.cc",
    "static_ip_parameters.cc",
    "store/crypto.cc",
    "store/key_file_store.cc",
    "store/key_value_store.cc",
    "store/pkcs11_data_store.cc",
    "store/property_store.cc",
    "technology.cc",
    "tethering.cc",
    "throttler.cc",
    "upstart/upstart.cc",
    "virtual_device.cc",
    "vpn/vpn_driver.cc",
    "vpn/vpn_provider.cc",
    "vpn/vpn_service.cc",
  ]
  configs += [
    ":libshill_config",
    ":target_defaults",
  ]
  libs = [
    "bootstat",
    "chaps",
    "rootdev",
    "rt",
  ]

  all_dependent_pkg_deps = [
    "libcares",
    "libmetrics",
    "libpasswordprovider",
    "libpower_manager-client",
  ]
  deps = [
    ":generate_dhcpcd_proxies",
    ":generate_upstart_proxies",
    ":mobile_operator_db",
    ":shill-chromeos-dbus-adaptors",
    "//metrics/structured:libstructuredmetrics",
  ]

  if (use.cellular) {
    sources += [
      "cellular/apn_list.cc",
      "cellular/cellular.cc",
      "cellular/cellular_bearer.cc",
      "cellular/cellular_capability.cc",
      "cellular/cellular_capability_3gpp.cc",
      "cellular/cellular_capability_cdma.cc",
      "cellular/cellular_error.cc",
      "cellular/cellular_helpers.cc",
      "cellular/cellular_pco.cc",
      "cellular/cellular_service.cc",
      "cellular/cellular_service_provider.cc",
      "cellular/mobile_operator_info.cc",
      "cellular/mobile_operator_info_impl.cc",
      "cellular/modem.cc",
      "cellular/modem_info.cc",
      "cellular/pending_activation_store.cc",
      "cellular/subscription_state.cc",
      "cellular/verizon_subscription_state.cc",
      "dbus/dbus_objectmanager_proxy.cc",
      "dbus/dbus_properties_proxy.cc",
      "dbus/mm1_modem_location_proxy.cc",
      "dbus/mm1_modem_modem3gpp_profile_manager_proxy.cc",
      "dbus/mm1_modem_modem3gpp_proxy.cc",
      "dbus/mm1_modem_modemcdma_proxy.cc",
      "dbus/mm1_modem_proxy.cc",
      "dbus/mm1_modem_signal_proxy.cc",
      "dbus/mm1_modem_simple_proxy.cc",
      "dbus/mm1_sim_proxy.cc",
      "protobuf_lite_streams.cc",
    ]
    configs += [ ":libshill_cellular_config" ]
    deps += [ ":generate_cellular_proxies" ]
  }

  if (use.cellular || use.vpn) {
    sources += [
      "ppp_daemon.cc",
      "ppp_device.cc",
    ]
  }

  if (use.vpn) {
    sources += [
      "vpn/arc_vpn_driver.cc",
      "vpn/ikev2_driver.cc",
      "vpn/ipsec_connection.cc",
      "vpn/l2tp_connection.cc",
      "vpn/l2tp_ipsec_driver.cc",
      "vpn/new_l2tp_ipsec_driver.cc",
      "vpn/openvpn_driver.cc",
      "vpn/openvpn_management_server.cc",
      "vpn/third_party_vpn_driver.cc",
      "vpn/vpn_connection.cc",
      "vpn/vpn_util.cc",
      "vpn/wireguard_driver.cc",
    ]
  }

  if (use.wifi) {
    sources += [
      "wifi/passpoint_credentials.cc",
      "wifi/wake_on_wifi.cc",
      "wifi/wifi.cc",
      "wifi/wifi_cqm.cc",
      "wifi/wifi_endpoint.cc",
      "wifi/wifi_provider.cc",
      "wifi/wifi_service.cc",
    ]
  }

  if (use.wifi || use.wired_8021x) {
    sources += [
      "dbus/supplicant_bss_proxy.cc",
      "dbus/supplicant_interface_proxy.cc",
      "dbus/supplicant_network_proxy.cc",
      "dbus/supplicant_process_proxy.cc",
      "eap_credentials.cc",
      "supplicant/supplicant_eap_state_handler.cc",
      "supplicant/supplicant_manager.cc",
      "supplicant/wpa_supplicant.cc",
    ]
    deps += [ ":generate_supplicant_proxies" ]
  }

  if (use.wired_8021x) {
    sources += [
      "ethernet/eap_listener.cc",
      "ethernet/ethernet_eap_provider.cc",
      "ethernet/ethernet_eap_service.cc",
    ]
  }
}

pkg_config("shill_config") {
  pkg_deps = [ "libminijail" ]
}

executable("shill") {
  sources = [ "shill_main.cc" ]
  configs += [
    ":shill_config",
    ":target_defaults",
  ]
  deps = [ ":libshill" ]
}

pkg_config("openvpn-script_config") {
  pkg_deps = [ "libshill-client" ]
}

executable("openvpn-script") {
  sources = [
    "shims/environment.cc",
    "shims/openvpn_script.cc",
    "shims/task_proxy.cc",
  ]
  configs += [
    ":openvpn-script_config",
    ":target_defaults",
  ]
}

if (use.cellular) {
  pkg_config("set-apn-helper_config") {
    pkg_deps = [ "dbus-1" ]
  }

  executable("set-apn-helper") {
    sources = [ "shims/set_apn_helper.c" ]
    configs += [
      ":set-apn-helper_config",
      ":target_defaults",
    ]
  }
}

if (use.cellular) {
  executable("cellular_mobile_operator_info_tester") {
    sources = [ "cellular/cellular_mobile_operator_info_tester.cc" ]
    configs += [ ":target_defaults" ]
    deps = [ ":libshill" ]
  }
}

if (use.cellular || use.vpn) {
  shared_library("shill-pppd-plugin") {
    sources = [
      "shims/c_ppp.cc",
      "shims/environment.cc",
      "shims/ppp.cc",
      "shims/pppd_plugin.c",
      "shims/task_proxy.cc",
    ]
    configs += [
      ":openvpn-script_config",
      ":target_defaults",
    ]
  }
}

if (use.fuzzer) {
  executable("cellular_pco_fuzzer") {
    sources = [ "cellular/cellular_pco_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":fuzzed_data_config",
      ":target_defaults",
    ]
    deps = [ ":libshill" ]
  }
  executable("dhcpv4_static_routes_fuzzer") {
    sources = [ "network/dhcpv4_static_routes_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
      ":shill_config",
    ]
    deps = [ ":libshill" ]
  }
  executable("openvpn_management_server_fuzzer") {
    sources = [ "vpn/openvpn_management_server_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
      ":shill_config",
    ]
    deps = [ ":libshill" ]
  }
  executable("shill_http_url_fuzzer") {
    sources = [ "http_url_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":fuzzed_data_config",
      ":target_defaults",
    ]
    deps = [ ":libshill" ]
  }
  executable("shill_profile_fuzzer") {
    sources = [ "profile_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":fuzzed_data_config",
      ":target_defaults",
      ":shill_config",
    ]
    deps = [ ":libshill" ]
  }
  executable("shill_service_fuzzer") {
    sources = [
      "service_fuzzer.cc",
      "store/fake_store.cc",
    ]
    configs += [
      "//common-mk/common_fuzzer",
      ":fuzzed_data_config",
      ":target_defaults",
      ":shill_config",
    ]
    deps = [ ":libshill" ]
  }
  executable("shill_technology_fuzzer") {
    sources = [ "technology_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
      ":shill_config",
    ]
    deps = [ ":libshill" ]
  }
  executable("verizon_subscription_state_fuzzer") {
    sources = [ "cellular/verizon_subscription_state_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    deps = [ ":libshill" ]
  }
  executable("vpn_ipsec_connection_fuzzer") {
    sources = [ "vpn/ipsec_connection_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
      ":shill_config",
    ]
    deps = [ ":libshill" ]
  }
  executable("vpn_l2tp_ipsec_driver_fuzzer") {
    sources = [ "vpn/l2tp_ipsec_driver_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
      ":shill_config",
    ]
    deps = [ ":libshill" ]
  }
  executable("wifi_ies_fuzzer") {
    sources = [ "wifi/wifi_ies_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
      ":shill_config",
    ]
    deps = [ ":libshill" ]
  }
  executable("wifi_service_fuzzer") {
    sources = [
      "ethernet/mock_ethernet_provider.cc",
      "mock_adaptors.cc",
      "mock_control.cc",
      "mock_event_dispatcher.cc",
      "mock_manager.cc",
      "mock_metrics.cc",
      "supplicant/mock_supplicant_process_proxy.cc",
      "wifi/mock_wifi_provider.cc",
      "wifi/wifi_service_fuzzer.cc",
    ]
    configs += [
      "//common-mk/common_fuzzer",
      "//common-mk:test",
      ":shill_config",
      ":target_defaults",
    ]
    deps = [ ":libshill" ]
  }
  pkg_config("fuzzed_data_config") {
    pkg_deps = [ "libchrome-test" ]
  }
}

if (use.test) {
  pkg_config("shill_unittest_config") {
    pkg_deps = [
      "libchrome-test",
      "libminijail",
    ]
    if (use.cellular) {
      pkg_deps += [ "ModemManager" ]
    }
  }

  executable("shill_unittest") {
    sources = [
      "arp_client_test_helper.cc",
      "certificate_file_test.cc",
      "connection_diagnostics_test.cc",
      "connection_test.cc",
      "daemon_task_test.cc",
      "dbus/dbus_adaptor_test.cc",
      "dbus/manager_dbus_adaptor_test.cc",
      "default_profile_test.cc",
      "device_claimer_test.cc",
      "device_id_test.cc",
      "device_info_test.cc",
      "device_test.cc",
      "dns_client_test.cc",
      "dns_util_test.cc",
      "error_test.cc",
      "ethernet/ethernet_provider.cc",
      "ethernet/ethernet_provider_test.cc",
      "ethernet/ethernet_service_test.cc",
      "ethernet/ethernet_test.cc",
      "ethernet/mock_ethernet.cc",
      "ethernet/mock_ethernet_provider.cc",
      "ethernet/mock_ethernet_service.cc",
      "external_task_test.cc",
      "hook_table_test.cc",
      "http_request_test.cc",
      "http_url_test.cc",
      "icmp_session_test.cc",
      "icmp_test.cc",
      "ipconfig_test.cc",
      "mac_address_test.cc",
      "manager_test.cc",
      "metrics_test.cc",
      "mock_adaptors.cc",
      "mock_ares.cc",
      "mock_arp_client.cc",
      "mock_certificate_file.cc",
      "mock_connection.cc",
      "mock_control.cc",
      "mock_device.cc",
      "mock_device_info.cc",
      "mock_dns_client.cc",
      "mock_event_dispatcher.cc",
      "mock_external_task.cc",
      "mock_icmp.cc",
      "mock_icmp_session.cc",
      "mock_ipconfig.cc",
      "mock_log.cc",
      "mock_log_test.cc",
      "mock_manager.cc",
      "mock_metrics.cc",
      "mock_portal_detector.cc",
      "mock_power_manager.cc",
      "mock_power_manager_proxy.cc",
      "mock_process_manager.cc",
      "mock_profile.cc",
      "mock_resolver.cc",
      "mock_routing_table.cc",
      "mock_service.cc",
      "mock_throttler.cc",
      "mock_virtual_device.cc",
      "network/dhcp_controller_test.cc",
      "network/dhcp_provider_test.cc",
      "network/dhcpv4_config_test.cc",
      "network/mock_dhcp_controller.cc",
      "network/mock_dhcp_provider.cc",
      "network/mock_dhcp_proxy.cc",
      "portal_detector_test.cc",
      "power_manager_test.cc",
      "process_manager_test.cc",
      "profile_test.cc",
      "resolver_test.cc",
      "result_aggregator_test.cc",
      "routing_table_test.cc",
      "rpc_task_test.cc",
      "scope_logger_test.cc",
      "service_property_change_test.cc",
      "service_test.cc",
      "service_under_test.cc",
      "static_ip_parameters_test.cc",
      "store/crypto_test.cc",
      "store/fake_store.cc",
      "store/key_file_store_test.cc",
      "store/key_value_store_test.cc",
      "store/pkcs11_data_store_test.cc",
      "store/property_accessor_test.cc",
      "store/property_store_test.cc",
      "technology_test.cc",
      "testrunner.cc",
      "throttler_test.cc",
      "timeout_set_test.cc",
      "upstart/mock_upstart.cc",
      "upstart/mock_upstart_proxy.cc",
      "upstart/upstart_test.cc",
      "virtual_device_test.cc",
      "vpn/mock_vpn_provider.cc",
    ]
    configs += [
      "//common-mk:test",
      ":libshill_config",
      ":shill_unittest_config",
      ":target_defaults",
    ]
    deps = [ ":libshill" ]

    if (use.cellular) {
      sources += [
        "cellular/apn_list_test.cc",
        "cellular/cellular_bearer_test.cc",
        "cellular/cellular_capability_3gpp_test.cc",
        "cellular/cellular_capability_cdma_test.cc",
        "cellular/cellular_error_test.cc",
        "cellular/cellular_helpers_test.cc",
        "cellular/cellular_pco_test.cc",
        "cellular/cellular_service_provider_test.cc",
        "cellular/cellular_service_test.cc",
        "cellular/cellular_test.cc",
        "cellular/mobile_operator_info_test.cc",
        "cellular/mock_cellular.cc",
        "cellular/mock_cellular_service.cc",
        "cellular/mock_dbus_objectmanager_proxy.cc",
        "cellular/mock_mm1_modem_location_proxy.cc",
        "cellular/mock_mm1_modem_modem3gpp_profile_manager_proxy.cc",
        "cellular/mock_mm1_modem_modem3gpp_proxy.cc",
        "cellular/mock_mm1_modem_modemcdma_proxy.cc",
        "cellular/mock_mm1_modem_proxy.cc",
        "cellular/mock_mm1_modem_signal_proxy.cc",
        "cellular/mock_mm1_modem_simple_proxy.cc",
        "cellular/mock_mm1_sim_proxy.cc",
        "cellular/mock_mobile_operator_info.cc",
        "cellular/mock_modem_info.cc",
        "cellular/mock_pending_activation_store.cc",
        "cellular/modem_info_test.cc",
        "cellular/modem_test.cc",
        "cellular/pending_activation_store_test.cc",
        "cellular/verizon_subscription_state_test.cc",
        "dbus/dbus_properties_proxy_test.cc",
        "dbus/fake_properties_proxy.cc",
        "mobile_operator_db/service_providers_test.cc",
      ]
      deps += [
        ":mobile_operator_db-db",
        ":mobile_operator_db-test-db",
      ]
    }

    if (use.cellular || use.vpn) {
      sources += [
        "ppp_daemon_test.cc",
        "ppp_device_test.cc",
      ]
    }

    if (use.vpn) {
      sources += [
        "shims/environment.cc",
        "shims/environment_test.cc",
        "vpn/arc_vpn_driver_test.cc",
        "vpn/fake_vpn_util.cc",
        "vpn/ikev2_driver_test.cc",
        "vpn/ipsec_connection_test.cc",
        "vpn/l2tp_connection_test.cc",
        "vpn/l2tp_ipsec_driver_test.cc",
        "vpn/mock_openvpn_management_server.cc",
        "vpn/mock_vpn_driver.cc",
        "vpn/mock_vpn_service.cc",
        "vpn/new_l2tp_ipsec_driver_test.cc",
        "vpn/openvpn_driver_test.cc",
        "vpn/openvpn_management_server_test.cc",
        "vpn/third_party_vpn_driver_test.cc",
        "vpn/vpn_connection_test.cc",
        "vpn/vpn_connection_under_test.cc",
        "vpn/vpn_driver_test.cc",
        "vpn/vpn_provider_test.cc",
        "vpn/vpn_service_test.cc",
        "vpn/wireguard_driver_test.cc",
      ]
    }

    if (use.wifi) {
      sources += [
        "supplicant/mock_supplicant_bss_proxy.cc",
        "wifi/mock_wake_on_wifi.cc",
        "wifi/mock_wifi.cc",
        "wifi/mock_wifi_provider.cc",
        "wifi/mock_wifi_service.cc",
        "wifi/passpoint_credentials_test.cc",
        "wifi/wake_on_wifi_test.cc",
        "wifi/wifi_cqm_test.cc",
        "wifi/wifi_endpoint_test.cc",
        "wifi/wifi_provider_test.cc",
        "wifi/wifi_service_test.cc",
        "wifi/wifi_test.cc",
      ]
    }

    if (use.wifi || use.wired_8021x) {
      sources += [
        "eap_credentials_test.cc",
        "mock_eap_credentials.cc",
        "supplicant/mock_supplicant_eap_state_handler.cc",
        "supplicant/mock_supplicant_interface_proxy.cc",
        "supplicant/mock_supplicant_network_proxy.cc",
        "supplicant/mock_supplicant_process_proxy.cc",
        "supplicant/supplicant_eap_state_handler_test.cc",
        "supplicant/supplicant_manager_test.cc",
        "supplicant/wpa_supplicant_test.cc",
      ]
    }

    if (use.wired_8021x) {
      sources += [
        "ethernet/eap_listener_test.cc",
        "ethernet/ethernet_eap_provider_test.cc",
        "ethernet/ethernet_eap_service_test.cc",
        "ethernet/mock_eap_listener.cc",
        "ethernet/mock_ethernet_eap_provider.cc",
      ]
    }
  }
}
