# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("//third_party/google_benchmark/buildconfig.gni")
import("../webrtc.gni")

if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

if (!rtc_build_ssl) {
  config("external_ssl_library") {
    assert(rtc_ssl_root != "",
           "You must specify rtc_ssl_root when rtc_build_ssl==0.")
    include_dirs = [ rtc_ssl_root ]
  }
}

rtc_source_set("protobuf_utils") {
  sources = [ "protobuf_utils.h" ]
  if (rtc_enable_protobuf) {
    public_configs = [ "//third_party/protobuf:protobuf_config" ]
    deps = [ "//third_party/protobuf:protobuf_lite" ]
  }
}

rtc_source_set("bitstream_reader") {
  sources = [
    "bitstream_reader.cc",
    "bitstream_reader.h",
  ]
  deps = [
    ":checks",
    ":safe_conversions",
    "../api:array_view",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/numeric:bits",
    "//third_party/abseil-cpp/absl/strings",
  ]
}

rtc_source_set("compile_assert_c") {
  sources = [ "compile_assert_c.h" ]
}

rtc_source_set("ignore_wundef") {
  sources = [ "ignore_wundef.h" ]
}

rtc_source_set("untyped_function") {
  sources = [ "untyped_function.h" ]
  deps = [ "system:assume" ]
}

rtc_source_set("callback_list") {
  sources = [
    "callback_list.cc",
    "callback_list.h",
  ]
  deps = [
    ":checks",
    ":untyped_function",
    "../api:function_view",
    "system:assume",
    "system:inline",
    "system:rtc_export",
  ]
}

rtc_source_set("buffer") {
  visibility = [ "*" ]
  sources = [ "buffer.h" ]
  deps = [
    ":checks",
    ":type_traits",
    ":zero_memory",
    "../api:array_view",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_source_set("byte_order") {
  visibility = [ "*" ]
  sources = [ "byte_order.h" ]
  deps = [ "system:arch" ]
}

rtc_source_set("mod_ops") {
  visibility = [ "*" ]
  sources = [ "numerics/mod_ops.h" ]
  deps = [ ":checks" ]
}

rtc_source_set("moving_max_counter") {
  visibility = [ "*" ]
  sources = [ "numerics/moving_max_counter.h" ]
  deps = [ ":checks" ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_source_set("one_time_event") {
  visibility = [ "*" ]
  sources = [ "one_time_event.h" ]
  deps = [ "synchronization:mutex" ]
}

rtc_source_set("strong_alias") {
  visibility = [ "*" ]
  sources = [ "strong_alias.h" ]
}

rtc_source_set("swap_queue") {
  visibility = [ "*" ]
  sources = [ "swap_queue.h" ]
  deps = [ ":checks" ]
  absl_deps = [ "//third_party/abseil-cpp/absl/base:core_headers" ]
}

rtc_source_set("macromagic") {
  sources = [
    "arraysize.h",
    "thread_annotations.h",
  ]
  deps = [ "system:arch" ]
}

rtc_library("bit_buffer") {
  visibility = [ "*" ]
  sources = [
    "bit_buffer.cc",
    "bit_buffer.h",
  ]
  deps = [ ":checks" ]
  absl_deps = [ "//third_party/abseil-cpp/absl/numeric:bits" ]
}

rtc_library("byte_buffer") {
  visibility = [ "*" ]
  sources = [
    "byte_buffer.cc",
    "byte_buffer.h",
  ]
  deps = [
    ":buffer",
    ":byte_order",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_library("buffer_queue") {
  visibility = [ "*" ]
  sources = [
    "buffer_queue.cc",
    "buffer_queue.h",
  ]
  deps = [
    ":buffer",
    ":macromagic",
    "../api:sequence_checker",
    "system:no_unique_address",
  ]
}

rtc_library("copy_on_write_buffer") {
  visibility = [ "*" ]
  sources = [
    "copy_on_write_buffer.cc",
    "copy_on_write_buffer.h",
  ]
  deps = [
    ":buffer",
    ":checks",
    ":refcount",
    ":type_traits",
    "../api:scoped_refptr",
    "system:rtc_export",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_library("event_tracer") {
  visibility = [ "*" ]
  sources = [
    "event_tracer.cc",
    "event_tracer.h",
    "trace_event.h",
  ]
  deps = [
    ":checks",
    ":logging",
    ":macromagic",
    ":platform_thread",
    ":platform_thread_types",
    ":rtc_event",
    ":timeutils",
    "../api:sequence_checker",
    "synchronization:mutex",
    "system:rtc_export",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_library("histogram_percentile_counter") {
  visibility = [ "*" ]
  sources = [
    "numerics/histogram_percentile_counter.cc",
    "numerics/histogram_percentile_counter.h",
  ]
  deps = [ ":checks" ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("race_checker") {
  visibility = [ "*" ]
  sources = [
    "race_checker.cc",
    "race_checker.h",
  ]
  deps = [
    ":checks",
    ":macromagic",
    ":platform_thread_types",
  ]
}

rtc_library("random") {
  visibility = [ "*" ]
  sources = [
    "random.cc",
    "random.h",
  ]
  deps = [
    ":checks",
    ":safe_conversions",
  ]
}

rtc_library("rate_statistics") {
  visibility = [ "*" ]
  sources = [
    "rate_statistics.cc",
    "rate_statistics.h",
  ]
  deps = [
    ":checks",
    ":logging",
    ":safe_conversions",
    "system:rtc_export",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("rate_tracker") {
  visibility = [ "*" ]
  sources = [
    "rate_tracker.cc",
    "rate_tracker.h",
  ]
  deps = [
    ":checks",
    ":timeutils",
  ]
}

rtc_library("sample_counter") {
  visibility = [ "*" ]
  sources = [
    "numerics/sample_counter.cc",
    "numerics/sample_counter.h",
  ]
  deps = [
    ":checks",
    ":safe_conversions",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("timestamp_aligner") {
  visibility = [ "*" ]
  sources = [
    "timestamp_aligner.cc",
    "timestamp_aligner.h",
  ]
  deps = [
    ":checks",
    ":logging",
    ":timeutils",
    "system:rtc_export",
  ]
}

rtc_library("zero_memory") {
  visibility = [ "*" ]
  sources = [
    "zero_memory.cc",
    "zero_memory.h",
  ]
  deps = [
    ":checks",
    "../api:array_view",
  ]
}

rtc_library("platform_thread_types") {
  sources = [
    "platform_thread_types.cc",
    "platform_thread_types.h",
  ]
  deps = [
    ":checks",
    ":macromagic",
  ]
}

rtc_source_set("refcount") {
  visibility = [ "*" ]
  sources = [
    "ref_count.h",
    "ref_counted_object.h",
    "ref_counter.h",
  ]
  deps = [
    ":macromagic",
    "../api:scoped_refptr",
  ]
}

rtc_library("criticalsection") {
  sources = [
    "deprecated/recursive_critical_section.cc",
    "deprecated/recursive_critical_section.h",
  ]
  deps = [
    ":checks",
    ":macromagic",
    ":platform_thread_types",
    "synchronization:yield",
    "system:unused",
  ]
}

rtc_library("platform_thread") {
  sources = [
    "platform_thread.cc",
    "platform_thread.h",
  ]
  deps = [
    ":checks",
    ":macromagic",
    ":platform_thread_types",
    ":rtc_event",
    ":timeutils",
    "../api:sequence_checker",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("rtc_event") {
  if (build_with_chromium) {
    sources = [
      "../../webrtc_overrides/rtc_base/event.cc",
      "../../webrtc_overrides/rtc_base/event.h",
    ]
    deps = [
      ":checks",
      "../api/units:time_delta",
      "system:rtc_export",  # Only Chromium's rtc::Event use RTC_EXPORT.
      "//base",  # Dependency on chromium's waitable_event.
    ]
  } else {
    sources = [
      "event.cc",
      "event.h",
    ]
    deps = [
      ":checks",
      ":timeutils",
      "../api/units:time_delta",
      "synchronization:yield_policy",
      "system:warn_current_thread_is_deadlocked",
    ]
    absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
  }
}

config("chromium_logging_config") {
  defines = [ "LOGGING_INSIDE_WEBRTC" ]
}

rtc_library("logging") {
  visibility = [ "*" ]
  libs = []
  deps = [
    ":checks",
    ":macromagic",
    ":platform_thread_types",
    ":stringutils",
    ":timeutils",
    "../api/units:timestamp",
    "synchronization:mutex",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]

  if (build_with_chromium) {
    # Dependency on chromium's logging (in //base).
    deps += [ "//base" ]
    sources = [
      "../../webrtc_overrides/rtc_base/logging.cc",
      "../../webrtc_overrides/rtc_base/logging.h",
    ]

    # This macro needs to be both present in all WebRTC targets (see its
    # definition in //BUILD.gn but also propagated to all the targets
    # depending on the Chromium component defined in
    # //third_party/webrtc_overrides:webrtc_component. This public_config
    # allows GN to propagate the macro accordingly.
    public_configs = [ ":chromium_logging_config" ]
  } else {
    sources = [
      "logging.cc",
      "logging.h",
    ]
    deps += [ "system:inline" ]

    if (is_mac) {
      frameworks = [ "Foundation.framework" ]
    }

    if (is_android) {
      libs += [ "log" ]
    }
  }
}

rtc_library("checks") {
  # TODO(bugs.webrtc.org/9607): This should not be public.
  visibility = [ "*" ]
  libs = []
  sources = [
    "checks.cc",
    "checks.h",
  ]
  deps = [
    ":safe_compare",
    "../api:scoped_refptr",
    "system:inline",
    "system:rtc_export",
  ]
  if (build_with_chromium) {
    sources += [ "../../webrtc_overrides/rtc_base/checks_overrides.cc" ]
    deps += [ "//base" ]
  }
  absl_deps = [
    "//third_party/abseil-cpp/absl/meta:type_traits",
    "//third_party/abseil-cpp/absl/strings",
  ]
  if (is_android) {
    libs += [ "log" ]
  }
}

rtc_library("rate_limiter") {
  sources = [
    "rate_limiter.cc",
    "rate_limiter.h",
  ]
  deps = [
    ":macromagic",
    ":rate_statistics",
    "../system_wrappers",
    "synchronization:mutex",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_source_set("sanitizer") {
  sources = [ "sanitizer.h" ]
  absl_deps = [ "//third_party/abseil-cpp/absl/meta:type_traits" ]
}

rtc_source_set("bounded_inline_vector") {
  public = [ "bounded_inline_vector.h" ]
  sources = [ "bounded_inline_vector_impl.h" ]
  deps = [ ":checks" ]
}

rtc_source_set("divide_round") {
  sources = [ "numerics/divide_round.h" ]
  deps = [
    ":checks",
    ":safe_compare",
  ]
}

rtc_source_set("safe_compare") {
  sources = [ "numerics/safe_compare.h" ]
  deps = [ ":type_traits" ]
}

rtc_source_set("safe_minmax") {
  sources = [ "numerics/safe_minmax.h" ]
  deps = [
    ":checks",
    ":safe_compare",
    ":type_traits",
  ]
}

rtc_source_set("safe_conversions") {
  sources = [
    "numerics/safe_conversions.h",
    "numerics/safe_conversions_impl.h",
  ]
  deps = [ ":checks" ]
}

rtc_library("timeutils") {
  visibility = [ "*" ]
  sources = [
    "system_time.cc",
    "system_time.h",
    "time_utils.cc",
    "time_utils.h",
  ]
  deps = [
    ":checks",
    ":safe_conversions",
    ":stringutils",
    "system:rtc_export",
  ]
  if (rtc_exclude_system_time) {
    defines = [ "WEBRTC_EXCLUDE_SYSTEM_TIME" ]
  }

  libs = []
  if (is_win) {
    libs += [ "winmm.lib" ]
  }
}

rtc_library("stringutils") {
  sources = [
    "string_encode.cc",
    "string_encode.h",
    "string_to_number.cc",
    "string_to_number.h",
    "string_utils.cc",
    "string_utils.h",
    "strings/string_builder.cc",
    "strings/string_builder.h",
    "strings/string_format.cc",
    "strings/string_format.h",
  ]
  deps = [
    ":checks",
    ":macromagic",
    ":safe_minmax",
    "../api:array_view",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("audio_format_to_string") {
  sources = [
    "strings/audio_format_to_string.cc",
    "strings/audio_format_to_string.h",
  ]
  deps = [
    ":stringutils",
    "../api/audio_codecs:audio_codecs_api",
  ]
}

rtc_source_set("type_traits") {
  sources = [ "type_traits.h" ]
}

rtc_library("rtc_task_queue") {
  visibility = [ "*" ]
  sources = [
    "task_queue.cc",
    "task_queue.h",
  ]
  deps = [
    ":macromagic",
    "../api/task_queue",
    "system:rtc_export",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/functional:any_invocable",
    "//third_party/abseil-cpp/absl/memory",
  ]
}

rtc_source_set("rtc_operations_chain") {
  visibility = [ "*" ]
  sources = [
    "operations_chain.cc",
    "operations_chain.h",
  ]
  deps = [
    ":checks",
    ":macromagic",
    ":refcount",
    "../api:make_ref_counted",
    "../api:refcountedbase",
    "../api:scoped_refptr",
    "../api:sequence_checker",
    "system:no_unique_address",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

if (rtc_enable_libevent) {
  rtc_library("rtc_task_queue_libevent") {
    visibility = [ "../api/task_queue:default_task_queue_factory" ]
    sources = [
      "task_queue_libevent.cc",
      "task_queue_libevent.h",
    ]
    deps = [
      ":checks",
      ":logging",
      ":macromagic",
      ":platform_thread",
      ":platform_thread_types",
      ":safe_conversions",
      ":timeutils",
      "../api/task_queue",
      "../api/units:time_delta",
      "synchronization:mutex",
    ]
    absl_deps = [
      "//third_party/abseil-cpp/absl/container:inlined_vector",
      "//third_party/abseil-cpp/absl/functional:any_invocable",
      "//third_party/abseil-cpp/absl/strings",
    ]
    if (rtc_build_libevent) {
      deps += [ "//third_party/libevent" ]
    }
  }
}

if (is_mac || is_ios) {
  rtc_library("rtc_task_queue_gcd") {
    visibility = [ "../api/task_queue:default_task_queue_factory" ]
    sources = [
      "task_queue_gcd.cc",
      "task_queue_gcd.h",
    ]
    deps = [
      ":checks",
      ":logging",
      "../api:location",
      "../api/task_queue",
      "../api/units:time_delta",
      "synchronization:mutex",
      "system:gcd_helpers",
    ]
    absl_deps = [
      "//third_party/abseil-cpp/absl/functional:any_invocable",
      "//third_party/abseil-cpp/absl/strings",
    ]
  }
}

if (is_win) {
  rtc_library("rtc_task_queue_win") {
    visibility = [ "../api/task_queue:default_task_queue_factory" ]
    sources = [
      "task_queue_win.cc",
      "task_queue_win.h",
    ]
    deps = [
      ":checks",
      ":logging",
      ":macromagic",
      ":platform_thread",
      ":rtc_event",
      ":safe_conversions",
      ":timeutils",
      "../api/task_queue",
      "../api/units:time_delta",
      "../api/units:timestamp",
      "synchronization:mutex",
    ]
    absl_deps = [
      "//third_party/abseil-cpp/absl/functional:any_invocable",
      "//third_party/abseil-cpp/absl/strings",
      "//third_party/abseil-cpp/absl/types:optional",
    ]
  }
}

rtc_library("rtc_task_queue_stdlib") {
  sources = [
    "task_queue_stdlib.cc",
    "task_queue_stdlib.h",
  ]
  deps = [
    ":checks",
    ":divide_round",
    ":logging",
    ":macromagic",
    ":platform_thread",
    ":rtc_event",
    ":safe_conversions",
    ":timeutils",
    "../api/task_queue",
    "../api/units:time_delta",
    "synchronization:mutex",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/functional:any_invocable",
    "//third_party/abseil-cpp/absl/strings",
  ]
}

if (rtc_include_tests) {
  rtc_library("task_queue_stdlib_unittest") {
    testonly = true

    sources = [ "task_queue_stdlib_unittest.cc" ]
    deps = [
      ":gunit_helpers",
      ":rtc_task_queue_stdlib",
      "../api/task_queue:task_queue_test",
      "../test:test_main",
      "../test:test_support",
    ]
  }
}

rtc_library("weak_ptr") {
  sources = [
    "weak_ptr.cc",
    "weak_ptr.h",
  ]
  deps = [
    ":refcount",
    "../api:scoped_refptr",
    "../api:sequence_checker",
    "system:no_unique_address",
  ]
}

rtc_library("rtc_numerics") {
  sources = [
    "numerics/event_based_exponential_moving_average.cc",
    "numerics/event_based_exponential_moving_average.h",
    "numerics/exp_filter.cc",
    "numerics/exp_filter.h",
    "numerics/math_utils.h",
    "numerics/moving_average.cc",
    "numerics/moving_average.h",
    "numerics/moving_percentile_filter.h",
    "numerics/percentile_filter.h",
    "numerics/running_statistics.h",
    "numerics/sequence_number_unwrapper.h",
    "numerics/sequence_number_util.h",
  ]
  deps = [
    ":checks",
    ":mod_ops",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("rtc_stats_counters") {
  sources = [
    "numerics/event_rate_counter.cc",
    "numerics/event_rate_counter.h",
    "numerics/sample_stats.cc",
    "numerics/sample_stats.h",
  ]
  deps = [
    "../api/numerics",
    "../api/units:data_rate",
    "../api/units:time_delta",
    "../api/units:timestamp",
  ]
  absl_deps = []
}

config("rtc_json_suppressions") {
  if (!is_win || is_clang) {
    cflags_cc = [
      # TODO(bugs.webrtc.org/10814): Remove -Wno-undef as soon as it get
      # removed upstream.
      "-Wno-undef",
    ]
  }
}

rtc_library("rtc_json") {
  public_configs = [ ":rtc_json_suppressions" ]
  poisonous = [ "rtc_json" ]
  defines = []
  sources = [
    "strings/json.cc",
    "strings/json.h",
  ]
  deps = [ ":stringutils" ]
  all_dependent_configs = [ "//third_party/jsoncpp:jsoncpp_config" ]
  if (rtc_build_json) {
    deps += [ "//third_party/jsoncpp" ]
  } else {
    include_dirs = [ "$rtc_jsoncpp_root" ]

    # When defined changes the include path for json.h to where it is
    # expected to be when building json outside of the standalone build.
    defines += [ "WEBRTC_EXTERNAL_JSON" ]
  }
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_library("net_helpers") {
  visibility = [ "*" ]
  sources = [
    "net_helpers.cc",
    "net_helpers.h",
  ]
  deps = [ "system:rtc_export" ]
  if (is_android) {
    deps += [ ":ifaddrs_android" ]
  }
  if (is_win) {
    deps += [
      ":win32",
      "win:windows_version",
    ]
  }
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_library("async_resolver_interface") {
  visibility = [ "*" ]
  sources = [
    "async_resolver_interface.cc",
    "async_resolver_interface.h",
  ]
  deps = [
    ":checks",
    ":socket_address",
    "system:rtc_export",
    "third_party/sigslot",
  ]
}

rtc_library("ip_address") {
  visibility = [ "*" ]
  sources = [
    "ip_address.cc",
    "ip_address.h",
  ]
  deps = [
    ":byte_order",
    ":net_helpers",
    ":stringutils",
    "system:rtc_export",
  ]
  if (is_win) {
    deps += [ ":win32" ]
  }
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_library("socket_address") {
  visibility = [ "*" ]
  sources = [
    "socket_address.cc",
    "socket_address.h",
  ]
  deps = [
    ":byte_order",
    ":checks",
    ":ip_address",
    ":logging",
    ":net_helpers",
    ":safe_conversions",
    ":stringutils",
    "system:rtc_export",
  ]
  if (is_win) {
    deps += [ ":win32" ]
  }
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_library("null_socket_server") {
  sources = [
    "null_socket_server.cc",
    "null_socket_server.h",
  ]
  deps = [
    ":checks",
    ":rtc_event",
    ":socket",
    ":socket_server",
    "../api/units:time_delta",
    "system:rtc_export",
  ]
}

rtc_source_set("socket_server") {
  visibility = [ "*" ]
  sources = [ "socket_server.h" ]
  deps = [
    ":rtc_event",
    ":socket_factory",
    "../api/units:time_delta",
  ]
}

rtc_library("threading") {
  visibility = [ "*" ]

  sources = [
    "async_resolver.cc",
    "async_resolver.h",
    "internal/default_socket_server.cc",
    "internal/default_socket_server.h",
    "network_monitor.cc",
    "network_monitor.h",
    "network_monitor_factory.cc",
    "network_monitor_factory.h",
    "physical_socket_server.cc",
    "physical_socket_server.h",
    "thread.cc",
    "thread.h",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/cleanup",
    "//third_party/abseil-cpp/absl/functional:any_invocable",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings",
  ]
  deps = [
    ":async_resolver_interface",
    ":byte_order",
    ":checks",
    ":criticalsection",
    ":event_tracer",
    ":ip_address",
    ":logging",
    ":macromagic",
    ":network_constants",
    ":null_socket_server",
    ":platform_thread",
    ":platform_thread_types",
    ":refcount",
    ":rtc_event",
    ":rtc_task_queue",
    ":socket_address",
    ":socket_server",
    ":timeutils",
    "../api:function_view",
    "../api:location",
    "../api:refcountedbase",
    "../api:scoped_refptr",
    "../api:sequence_checker",
    "../api/task_queue",
    "../api/task_queue:pending_task_safety_flag",
    "../api/units:time_delta",
    "../system_wrappers:field_trial",
    "synchronization:mutex",
    "system:no_unique_address",
    "system:rtc_export",
    "third_party/sigslot",
  ]
  if (is_android) {
    deps += [ ":ifaddrs_android" ]
  }
  if (is_win) {
    deps += [ ":win32" ]
  }
  if (is_mac || is_ios) {
    deps += [ "system:cocoa_threading" ]
  }
}

rtc_source_set("socket_factory") {
  sources = [ "socket_factory.h" ]
  deps = [ ":socket" ]
}

rtc_library("async_socket") {
  sources = [
    "async_socket.cc",
    "async_socket.h",
  ]
  deps = [
    ":checks",
    ":socket",
    ":socket_address",
    "third_party/sigslot",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
}

rtc_library("socket") {
  sources = [
    "socket.cc",
    "socket.h",
  ]
  deps = [
    ":macromagic",
    ":socket_address",
    "third_party/sigslot",
  ]
  if (is_win) {
    deps += [ ":win32" ]
  }
}

rtc_source_set("network_constants") {
  visibility = [ "*" ]
  sources = [
    "network_constants.cc",
    "network_constants.h",
  ]
  deps = [ ":checks" ]
}

if (is_android) {
  rtc_library("ifaddrs_android") {
    sources = [
      "ifaddrs_android.cc",
      "ifaddrs_android.h",
    ]
    libs = [
      "log",
      "GLESv2",
    ]
    absl_deps = [ "//third_party/abseil-cpp/absl/cleanup" ]
  }
}

if (is_win) {
  rtc_library("win32") {
    sources = [
      "win32.cc",
      "win32.h",
      "win32_window.cc",
      "win32_window.h",
    ]

    deps = [
      ":byte_order",
      ":checks",
      ":logging",
      ":macromagic",
      ":stringutils",
    ]

    libs = [
      "crypt32.lib",
      "iphlpapi.lib",
      "secur32.lib",
    ]

    defines = [ "_CRT_NONSTDC_NO_DEPRECATE" ]
  }
}

rtc_library("ifaddrs_converter") {
  sources = []
  deps = [
    ":checks",
    ":ip_address",
    ":logging",
  ]

  if (is_android) {
    deps += [ ":ifaddrs_android" ]
  }

  if (is_ios || is_mac) {
    sources += [ "mac_ifaddrs_converter.cc" ]
  }

  if (is_posix || is_fuchsia) {
    sources += [
      "ifaddrs_converter.cc",
      "ifaddrs_converter.h",
    ]
  }
}

rtc_library("rolling_accumulator") {
  sources = [ "rolling_accumulator.h" ]
  deps = [
    ":checks",
    ":rtc_numerics",
  ]
}

if (is_win) {
  rtc_library("win32_socket_init") {
    sources = [ "win32_socket_init.h" ]
    deps = [ ":win32" ]
  }
}

if (!build_with_chromium) {
  rtc_library("log_sinks") {
    visibility = [ "*" ]
    sources = [
      "log_sinks.cc",
      "log_sinks.h",
    ]
    deps = [
      ":checks",
      ":file_rotating_stream",
      ":logging",
    ]
    absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
  }
}

rtc_library("network") {
  visibility = [ "*" ]
  sources = [
    "network.cc",
    "network.h",
  ]
  deps = [
    ":checks",
    ":ifaddrs_converter",
    ":ip_address",
    ":logging",
    ":macromagic",
    ":mdns_responder_interface",
    ":socket",
    ":socket_factory",
    ":stringutils",
    ":threading",
    "../api:array_view",
    "../api:field_trials_view",
    "../api:sequence_checker",
    "../api/task_queue:pending_task_safety_flag",
    "../api/transport:field_trial_based_config",
    "../api/units:time_delta",
    "experiments:field_trial_parser",
    "memory:always_valid_pointer",
    "system:rtc_export",
    "third_party/sigslot",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings",
  ]

  if (is_win) {
    deps += [ ":win32" ]
  }
}

rtc_library("socket_address_pair") {
  sources = [
    "socket_address_pair.cc",
    "socket_address_pair.h",
  ]
  deps = [ ":socket_address" ]
}

rtc_library("net_helper") {
  visibility = [ "*" ]
  sources = [
    "net_helper.cc",
    "net_helper.h",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
  deps = [ "system:rtc_export" ]
}

rtc_library("socket_adapters") {
  visibility = [ "*" ]
  sources = [
    "socket_adapters.cc",
    "socket_adapters.h",
  ]
  deps = [
    ":async_socket",
    ":buffer",
    ":byte_buffer",
    ":checks",
    ":crypt_string",
    ":http_common",
    ":logging",
    ":stringutils",
    ":zero_memory",
    "../api:array_view",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_library("network_route") {
  sources = [
    "network_route.cc",
    "network_route.h",
  ]
  deps = [
    ":network_constants",
    ":stringutils",
    "system:inline",
  ]
}

rtc_library("async_tcp_socket") {
  sources = [
    "async_tcp_socket.cc",
    "async_tcp_socket.h",
  ]
  deps = [
    ":async_packet_socket",
    ":buffer",
    ":byte_order",
    ":checks",
    ":logging",
    ":socket",
    ":socket_address",
    ":timeutils",
    "../api:array_view",
    "network:sent_packet",
    "third_party/sigslot",
  ]
}

rtc_library("async_udp_socket") {
  visibility = [ "*" ]
  sources = [
    "async_udp_socket.cc",
    "async_udp_socket.h",
  ]
  deps = [
    ":async_packet_socket",
    ":checks",
    ":logging",
    ":macromagic",
    ":socket",
    ":socket_address",
    ":socket_factory",
    ":timeutils",
    "../api:sequence_checker",
    "../system_wrappers:field_trial",
    "network:sent_packet",
    "third_party/sigslot",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
}

rtc_library("async_packet_socket") {
  visibility = [ "*" ]
  sources = [
    "async_packet_socket.cc",
    "async_packet_socket.h",
  ]
  deps = [
    ":callback_list",
    ":dscp",
    ":socket",
    ":timeutils",
    "../api:sequence_checker",
    "network:sent_packet",
    "system:no_unique_address",
    "system:rtc_export",
    "third_party/sigslot",
  ]
}

rtc_library("mdns_responder_interface") {
  sources = [ "mdns_responder_interface.h" ]
  deps = [ ":ip_address" ]
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_library("dscp") {
  sources = [ "dscp.h" ]
}

rtc_library("proxy_info") {
  visibility = [ "*" ]
  sources = [
    "proxy_info.cc",
    "proxy_info.h",
  ]
  deps = [
    ":crypt_string",
    ":socket_address",
  ]
}

rtc_library("file_rotating_stream") {
  sources = [
    "file_rotating_stream.cc",
    "file_rotating_stream.h",
  ]
  deps = [
    ":checks",
    ":logging",
    ":stringutils",
    "system:file_wrapper",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("data_rate_limiter") {
  sources = [
    "data_rate_limiter.cc",
    "data_rate_limiter.h",
  ]
  deps = [ "system:rtc_export" ]
}

rtc_library("unique_id_generator") {
  sources = [
    "unique_id_generator.cc",
    "unique_id_generator.h",
  ]
  deps = [
    ":ssl",
    ":stringutils",
    "../api:array_view",
    "../api:sequence_checker",
    "synchronization:mutex",
    "system:no_unique_address",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_library("crc32") {
  sources = [
    "crc32.cc",
    "crc32.h",
  ]
  deps = [ ":macromagic" ]
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_library("stream") {
  visibility = [ "*" ]
  sources = [
    "stream.cc",
    "stream.h",
  ]
  deps = [
    ":buffer",
    ":checks",
    ":threading",
    "../api:array_view",
    "system:rtc_export",
    "third_party/sigslot",
  ]
}

rtc_library("rtc_certificate_generator") {
  visibility = [ "*" ]
  sources = [
    "rtc_certificate_generator.cc",
    "rtc_certificate_generator.h",
  ]
  deps = [
    ":checks",
    ":ssl",
    ":threading",
    "../api:scoped_refptr",
    "system:rtc_export",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/functional:any_invocable",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_library("ssl") {
  visibility = [ "*" ]
  sources = [
    "helpers.cc",
    "helpers.h",
    "message_digest.cc",
    "message_digest.h",
    "openssl.h",
    "openssl_adapter.cc",
    "openssl_adapter.h",
    "openssl_digest.cc",
    "openssl_digest.h",
    "openssl_key_pair.cc",
    "openssl_key_pair.h",
    "openssl_session_cache.cc",
    "openssl_session_cache.h",
    "openssl_stream_adapter.cc",
    "openssl_stream_adapter.h",
    "openssl_utility.cc",
    "openssl_utility.h",
    "rtc_certificate.cc",
    "rtc_certificate.h",
    "ssl_adapter.cc",
    "ssl_adapter.h",
    "ssl_certificate.cc",
    "ssl_certificate.h",
    "ssl_fingerprint.cc",
    "ssl_fingerprint.h",
    "ssl_identity.cc",
    "ssl_identity.h",
    "ssl_stream_adapter.cc",
    "ssl_stream_adapter.h",
  ]

  deps = [
    ":async_socket",
    ":buffer",
    ":checks",
    ":copy_on_write_buffer",
    ":logging",
    ":macromagic",
    ":safe_conversions",
    ":socket",
    ":socket_address",
    ":stream",
    ":stringutils",
    ":threading",
    ":timeutils",
    "../api:array_view",
    "../api:refcountedbase",
    "../api:scoped_refptr",
    "../api/task_queue:pending_task_safety_flag",
    "../api/units:time_delta",
    "../system_wrappers:field_trial",
    "system:rtc_export",
    "task_utils:repeating_task",
    "third_party/base64",
    "third_party/sigslot",
  ]

  absl_deps = [
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/base:core_headers",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]

  # If we are building the SSL library ourselves, we know it's BoringSSL.
  if (rtc_build_ssl) {
    sources += [
      "boringssl_certificate.cc",
      "boringssl_certificate.h",
      "boringssl_identity.cc",
      "boringssl_identity.h",
    ]

    deps += [ "//third_party/boringssl" ]
  } else {
    sources += [
      "openssl_certificate.cc",
      "openssl_certificate.h",
      "openssl_identity.cc",
      "openssl_identity.h",
    ]

    configs += [ ":external_ssl_library" ]
  }

  if (build_with_chromium) {
    include_dirs = [ "../../boringssl/src/include" ]
  } else {
    sources += [ "ssl_roots.h" ]
  }

  if (is_win) {
    deps += [ ":win32" ]
  }
}

rtc_library("crypt_string") {
  sources = [
    "crypt_string.cc",
    "crypt_string.h",
  ]
}

rtc_library("http_common") {
  sources = [
    "http_common.cc",
    "http_common.h",
  ]
  deps = [
    ":crypt_string",
    ":logging",
    ":socket_address",
    ":ssl",
    ":stringutils",
    ":zero_memory",
    "third_party/base64",
  ]

  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_source_set("gtest_prod") {
  sources = [ "gtest_prod_util.h" ]
}

rtc_library("gunit_helpers") {
  testonly = true
  sources = [
    "gunit.cc",
    "gunit.h",
  ]
  deps = [
    ":logging",
    ":rtc_base_tests_utils",
    ":stringutils",
    ":threading",
    "../test:test_support",
  ]
  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}

rtc_library("testclient") {
  testonly = true
  sources = [
    "test_client.cc",
    "test_client.h",
  ]
  deps = [
    ":async_udp_socket",
    ":gunit_helpers",
    ":rtc_base_tests_utils",
    ":threading",
    ":timeutils",
    "synchronization:mutex",
  ]
}

rtc_library("callback_list_unittests") {
  testonly = true

  sources = [ "callback_list_unittest.cc" ]
  deps = [
    ":callback_list",
    ":gunit_helpers",
    "../api:function_view",
    "../test:test_support",
  ]
}

rtc_library("rtc_base_tests_utils") {
  testonly = true
  sources = [
    "cpu_time.cc",
    "cpu_time.h",
    "fake_clock.cc",
    "fake_clock.h",
    "fake_mdns_responder.h",
    "fake_network.h",
    "fake_ssl_identity.cc",
    "fake_ssl_identity.h",
    "firewall_socket_server.cc",
    "firewall_socket_server.h",
    "memory_stream.cc",
    "memory_stream.h",
    "memory_usage.cc",
    "memory_usage.h",
    "nat_server.cc",
    "nat_server.h",
    "nat_socket_factory.cc",
    "nat_socket_factory.h",
    "nat_types.cc",
    "nat_types.h",
    "proxy_server.cc",
    "proxy_server.h",
    "server_socket_adapters.cc",
    "server_socket_adapters.h",
    "sigslot_tester.h",
    "socket_stream.cc",
    "socket_stream.h",
    "test_base64.h",
    "test_certificate_verifier.h",
    "test_echo_server.cc",
    "test_echo_server.h",
    "test_utils.cc",
    "test_utils.h",
    "virtual_socket_server.cc",
    "virtual_socket_server.h",
  ]
  deps = [
    ":async_packet_socket",
    ":async_socket",
    ":async_tcp_socket",
    ":async_udp_socket",
    ":byte_buffer",
    ":checks",
    ":ip_address",
    ":logging",
    ":macromagic",
    ":mdns_responder_interface",
    ":network",
    ":rtc_event",
    ":socket",
    ":socket_adapters",
    ":socket_address",
    ":socket_address_pair",
    ":socket_factory",
    ":socket_server",
    ":ssl",
    ":stream",
    ":stringutils",
    ":threading",
    ":timeutils",
    "../api:make_ref_counted",
    "../api:refcountedbase",
    "../api:scoped_refptr",
    "../api/task_queue",
    "../api/units:time_delta",
    "../api/units:timestamp",
    "../test:scoped_key_value_config",
    "memory:always_valid_pointer",
    "memory:fifo_buffer",
    "synchronization:mutex",
    "third_party/sigslot",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/algorithm:container",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/strings",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
  if (is_fuchsia) {
    deps += [ "//third_party/fuchsia-sdk/sdk/pkg/zx" ]
  }
}

rtc_library("task_queue_for_test") {
  testonly = true

  sources = [
    "task_queue_for_test.cc",
    "task_queue_for_test.h",
  ]
  deps = [
    ":checks",
    ":macromagic",
    ":rtc_event",
    ":rtc_task_queue",
    "../api:function_view",
    "../api/task_queue",
    "../api/task_queue:default_task_queue_factory",
  ]
  absl_deps = [
    "//third_party/abseil-cpp/absl/cleanup",
    "//third_party/abseil-cpp/absl/strings",
  ]
}

if (rtc_include_tests) {
  rtc_library("sigslot_unittest") {
    testonly = true
    sources = [ "sigslot_unittest.cc" ]
    deps = [
      ":gunit_helpers",
      ":rtc_base_tests_utils",
      "../test:test_support",
      "synchronization:mutex",
      "third_party/sigslot",
    ]
  }

  rtc_library("untyped_function_unittest") {
    testonly = true
    sources = [ "untyped_function_unittest.cc" ]
    deps = [
      ":untyped_function",
      "../test:test_support",
    ]
  }

  rtc_library("rtc_operations_chain_unittests") {
    testonly = true

    sources = [ "operations_chain_unittest.cc" ]
    deps = [
      ":gunit_helpers",
      ":rtc_event",
      ":rtc_operations_chain",
      ":threading",
      "../test:test_support",
    ]
  }

  if (!build_with_chromium) {
    rtc_library("rtc_base_nonparallel_tests") {
      testonly = true

      sources = [
        "cpu_time_unittest.cc",
        "file_rotating_stream_unittest.cc",
        "null_socket_server_unittest.cc",
        "physical_socket_server_unittest.cc",
        "socket_address_unittest.cc",
        "socket_unittest.cc",
        "socket_unittest.h",
      ]
      deps = [
        ":async_packet_socket",
        ":async_udp_socket",
        ":buffer",
        ":checks",
        ":file_rotating_stream",
        ":gunit_helpers",
        ":ip_address",
        ":logging",
        ":macromagic",
        ":net_helpers",
        ":null_socket_server",
        ":platform_thread",
        ":rtc_base_tests_utils",
        ":socket",
        ":socket_address",
        ":socket_server",
        ":testclient",
        ":threading",
        ":timeutils",
        "../api/units:time_delta",
        "../system_wrappers",
        "../test:field_trial",
        "../test:fileutils",
        "../test:test_main",
        "../test:test_support",
        "third_party/sigslot",
        "//testing/gtest",
      ]
      absl_deps = [
        "//third_party/abseil-cpp/absl/memory",
        "//third_party/abseil-cpp/absl/strings",
      ]
    }

    rtc_library("rtc_base_approved_unittests") {
      testonly = true
      sources = [
        "base64_unittest.cc",
        "bit_buffer_unittest.cc",
        "bitstream_reader_unittest.cc",
        "bounded_inline_vector_unittest.cc",
        "buffer_queue_unittest.cc",
        "buffer_unittest.cc",
        "byte_buffer_unittest.cc",
        "byte_order_unittest.cc",
        "checks_unittest.cc",
        "copy_on_write_buffer_unittest.cc",
        "deprecated/recursive_critical_section_unittest.cc",
        "event_tracer_unittest.cc",
        "event_unittest.cc",
        "logging_unittest.cc",
        "numerics/divide_round_unittest.cc",
        "numerics/histogram_percentile_counter_unittest.cc",
        "numerics/mod_ops_unittest.cc",
        "numerics/moving_max_counter_unittest.cc",
        "numerics/safe_compare_unittest.cc",
        "numerics/safe_minmax_unittest.cc",
        "numerics/sample_counter_unittest.cc",
        "one_time_event_unittest.cc",
        "platform_thread_unittest.cc",
        "random_unittest.cc",
        "rate_limiter_unittest.cc",
        "rate_statistics_unittest.cc",
        "rate_tracker_unittest.cc",
        "ref_counted_object_unittest.cc",
        "sanitizer_unittest.cc",
        "string_encode_unittest.cc",
        "string_to_number_unittest.cc",
        "string_utils_unittest.cc",
        "strings/string_builder_unittest.cc",
        "strings/string_format_unittest.cc",
        "strong_alias_unittest.cc",
        "swap_queue_unittest.cc",
        "thread_annotations_unittest.cc",
        "time_utils_unittest.cc",
        "timestamp_aligner_unittest.cc",
        "virtual_socket_unittest.cc",
        "zero_memory_unittest.cc",
      ]
      deps = [
        ":async_packet_socket",
        ":async_udp_socket",
        ":bit_buffer",
        ":bitstream_reader",
        ":bounded_inline_vector",
        ":buffer",
        ":buffer_queue",
        ":byte_buffer",
        ":byte_order",
        ":checks",
        ":copy_on_write_buffer",
        ":criticalsection",
        ":divide_round",
        ":event_tracer",
        ":gunit_helpers",
        ":histogram_percentile_counter",
        ":ip_address",
        ":logging",
        ":macromagic",
        ":mod_ops",
        ":moving_max_counter",
        ":null_socket_server",
        ":one_time_event",
        ":platform_thread",
        ":random",
        ":rate_limiter",
        ":rate_statistics",
        ":rate_tracker",
        ":refcount",
        ":rtc_base_tests_utils",
        ":rtc_event",
        ":rtc_numerics",
        ":rtc_task_queue",
        ":safe_compare",
        ":safe_minmax",
        ":sample_counter",
        ":sanitizer",
        ":socket",
        ":socket_address",
        ":socket_server",
        ":ssl",
        ":stringutils",
        ":strong_alias",
        ":swap_queue",
        ":testclient",
        ":threading",
        ":timestamp_aligner",
        ":timeutils",
        ":zero_memory",
        "../api:array_view",
        "../api:make_ref_counted",
        "../api:scoped_refptr",
        "../api/numerics",
        "../api/units:time_delta",
        "../system_wrappers",
        "../test:fileutils",
        "../test:test_main",
        "../test:test_support",
        "containers:flat_map",
        "containers:unittests",
        "memory:unittests",
        "synchronization:mutex",
        "task_utils:repeating_task",
        "third_party/base64",
        "third_party/sigslot",
      ]
      absl_deps = [
        "//third_party/abseil-cpp/absl/base:core_headers",
        "//third_party/abseil-cpp/absl/memory",
        "//third_party/abseil-cpp/absl/numeric:bits",
        "//third_party/abseil-cpp/absl/strings",
        "//third_party/abseil-cpp/absl/types:optional",
      ]

      if (is_win) {
        deps += [ "win:windows_version_unittest" ]
      }
    }

    rtc_library("rtc_task_queue_unittests") {
      testonly = true

      sources = [ "task_queue_unittest.cc" ]
      deps = [
        ":gunit_helpers",
        ":rtc_base_tests_utils",
        ":rtc_event",
        ":rtc_task_queue",
        ":task_queue_for_test",
        ":timeutils",
        "../api/units:time_delta",
        "../test:test_main",
        "../test:test_support",
      ]
      absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
    }

    rtc_library("weak_ptr_unittests") {
      testonly = true

      sources = [ "weak_ptr_unittest.cc" ]
      deps = [
        ":gunit_helpers",
        ":rtc_base_tests_utils",
        ":rtc_event",
        ":task_queue_for_test",
        ":weak_ptr",
        "../test:test_main",
        "../test:test_support",
      ]
    }

    rtc_library("rtc_numerics_unittests") {
      testonly = true

      sources = [
        "numerics/event_based_exponential_moving_average_unittest.cc",
        "numerics/exp_filter_unittest.cc",
        "numerics/moving_average_unittest.cc",
        "numerics/moving_percentile_filter_unittest.cc",
        "numerics/percentile_filter_unittest.cc",
        "numerics/running_statistics_unittest.cc",
        "numerics/sequence_number_unwrapper_unittest.cc",
        "numerics/sequence_number_util_unittest.cc",
      ]
      deps = [
        ":rtc_numerics",
        ":timeutils",
        "../test:test_main",
        "../test:test_support",
      ]
      absl_deps = [ "//third_party/abseil-cpp/absl/algorithm:container" ]
    }

    rtc_library("rtc_json_unittests") {
      testonly = true

      sources = [ "strings/json_unittest.cc" ]
      deps = [
        ":gunit_helpers",
        ":rtc_base_tests_utils",
        ":rtc_json",
        "../test:test_main",
        "../test:test_support",
      ]
    }

    rtc_library("rtc_base_unittests") {
      testonly = true
      defines = []

      sources = [
        "crc32_unittest.cc",
        "data_rate_limiter_unittest.cc",
        "fake_clock_unittest.cc",
        "helpers_unittest.cc",
        "ip_address_unittest.cc",
        "memory_usage_unittest.cc",
        "message_digest_unittest.cc",
        "nat_unittest.cc",
        "network_route_unittest.cc",
        "network_unittest.cc",
        "proxy_unittest.cc",
        "rolling_accumulator_unittest.cc",
        "rtc_certificate_generator_unittest.cc",
        "rtc_certificate_unittest.cc",
        "sigslot_tester_unittest.cc",
        "test_client_unittest.cc",
        "thread_unittest.cc",
        "unique_id_generator_unittest.cc",
      ]
      deps = [
        ":async_packet_socket",
        ":async_tcp_socket",
        ":async_udp_socket",
        ":buffer",
        ":buffer_queue",
        ":checks",
        ":crc32",
        ":data_rate_limiter",
        ":gunit_helpers",
        ":ifaddrs_converter",
        ":ip_address",
        ":logging",
        ":macromagic",
        ":net_helpers",
        ":network",
        ":network_route",
        ":null_socket_server",
        ":refcount",
        ":rolling_accumulator",
        ":rtc_base_tests_utils",
        ":rtc_certificate_generator",
        ":rtc_event",
        ":safe_conversions",
        ":socket",
        ":socket_adapters",
        ":socket_address",
        ":socket_factory",
        ":socket_server",
        ":ssl",
        ":stream",
        ":stringutils",
        ":testclient",
        ":threading",
        ":timeutils",
        ":unique_id_generator",
        "../api:array_view",
        "../api:field_trials_view",
        "../api:make_ref_counted",
        "../api/task_queue",
        "../api/task_queue:pending_task_safety_flag",
        "../api/task_queue:task_queue_test",
        "../api/units:time_delta",
        "../test:field_trial",
        "../test:fileutils",
        "../test:rtc_expect_death",
        "../test:scoped_key_value_config",
        "../test:test_main",
        "../test:test_support",
        "memory:fifo_buffer",
        "synchronization:mutex",
        "third_party/sigslot",
      ]
      if (enable_google_benchmarks) {
        deps += [ "synchronization:synchronization_unittests" ]
      }
      if (is_win) {
        sources += [
          "win32_unittest.cc",
          "win32_window_unittest.cc",
        ]
        deps += [ ":win32" ]
      }
      if (is_posix || is_fuchsia) {
        sources += [
          "openssl_adapter_unittest.cc",
          "openssl_session_cache_unittest.cc",
          "openssl_utility_unittest.cc",
          "ssl_adapter_unittest.cc",
          "ssl_identity_unittest.cc",
          "ssl_stream_adapter_unittest.cc",
        ]
      }
      absl_deps = [
        "//third_party/abseil-cpp/absl/algorithm:container",
        "//third_party/abseil-cpp/absl/functional:any_invocable",
        "//third_party/abseil-cpp/absl/memory",
        "//third_party/abseil-cpp/absl/strings",
        "//third_party/abseil-cpp/absl/types:optional",
      ]

      if (build_with_chromium) {
        include_dirs = [ "../../boringssl/src/include" ]
      }
      if (rtc_build_ssl) {
        deps += [ "//third_party/boringssl" ]
      } else {
        configs += [ ":external_ssl_library" ]
      }
    }
  }
}

if (is_android) {
  rtc_android_library("base_java") {
    visibility = [ "*" ]
    sources = [
      "java/src/org/webrtc/ContextUtils.java",
      "java/src/org/webrtc/Loggable.java",
      "java/src/org/webrtc/Logging.java",
      "java/src/org/webrtc/Size.java",
      "java/src/org/webrtc/ThreadUtils.java",
    ]
    deps = [ "//third_party/androidx:androidx_annotation_annotation_java" ]
  }
  java_cpp_enum("network_monitor_enums") {
    sources = [ "network_monitor.h" ]
    visibility = [ "*" ]
  }
}
