# 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("../build/webrtc.gni")

rtc_static_library("voice_engine") {
  sources = [
    "channel.cc",
    "channel.h",
    "channel_manager.cc",
    "channel_manager.h",
    "channel_proxy.cc",
    "channel_proxy.h",
    "include/voe_audio_processing.h",
    "include/voe_base.h",
    "include/voe_codec.h",
    "include/voe_errors.h",
    "include/voe_external_media.h",
    "include/voe_file.h",
    "include/voe_hardware.h",
    "include/voe_neteq_stats.h",
    "include/voe_network.h",
    "include/voe_rtp_rtcp.h",
    "include/voe_video_sync.h",
    "include/voe_volume_control.h",
    "monitor_module.cc",
    "monitor_module.h",
    "network_predictor.cc",
    "network_predictor.h",
    "output_mixer.cc",
    "output_mixer.h",
    "shared_data.cc",
    "shared_data.h",
    "statistics.cc",
    "statistics.h",
    "transmit_mixer.cc",
    "transmit_mixer.h",
    "utility.cc",
    "utility.h",
    "voe_audio_processing_impl.cc",
    "voe_audio_processing_impl.h",
    "voe_base_impl.cc",
    "voe_base_impl.h",
    "voe_codec_impl.cc",
    "voe_codec_impl.h",
    "voe_external_media_impl.cc",
    "voe_external_media_impl.h",
    "voe_file_impl.cc",
    "voe_file_impl.h",
    "voe_hardware_impl.cc",
    "voe_hardware_impl.h",
    "voe_neteq_stats_impl.cc",
    "voe_neteq_stats_impl.h",
    "voe_network_impl.cc",
    "voe_network_impl.h",
    "voe_rtp_rtcp_impl.cc",
    "voe_rtp_rtcp_impl.h",
    "voe_video_sync_impl.cc",
    "voe_video_sync_impl.h",
    "voe_volume_control_impl.cc",
    "voe_volume_control_impl.h",
    "voice_engine_defines.h",
    "voice_engine_impl.cc",
    "voice_engine_impl.h",
  ]

  if (is_win) {
    defines = [ "WEBRTC_DRIFT_COMPENSATION_SUPPORTED" ]

    cflags = [
      # TODO(kjellander): Bug 261: fix this warning.
      "/wd4373",  # Virtual function override.
    ]
  }

  if (is_clang) {
    # Suppress warnings from Chrome's Clang plugins.
    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }

  public_deps = [
    "../modules/audio_coding",
  ]
  deps = [
    ":level_indicator",
    "..:webrtc_common",
    "../api:call_api",
    "../base:rtc_base_approved",
    "../common_audio",
    "../logging:rtc_event_log_api",
    "../modules/audio_conference_mixer",
    "../modules/audio_device",
    "../modules/audio_processing",
    "../modules/bitrate_controller",
    "../modules/media_file",
    "../modules/pacing",
    "../modules/rtp_rtcp",
    "../modules/utility",
    "../system_wrappers",
  ]
}

rtc_static_library("level_indicator") {
  sources = [
    "level_indicator.cc",
    "level_indicator.h",
  ]

  deps = [
    "..:webrtc_common",
    "../base:rtc_base_approved",
    "../common_audio",
  ]
}

if (rtc_include_tests) {
  config("channel_transport_warnings_config") {
    if (is_win) {
      cflags = [ "/wd4302" ]  # cast truncation

      if (is_clang) {
        # GN orders flags on a target before flags from configs. The default
        # config adds -Wall, and this flag have to be after -Wall -- so they need
        # to come from a config and cannot be on the target directly.
        cflags += [
          "-Wno-parentheses-equality",
          "-Wno-reorder",
          "-Wno-tautological-constant-out-of-range-compare",

          # See https://bugs.chromium.org/p/webrtc/issues/detail?id=6268
          # for -Wno-thread-safety-analysis
          "-Wno-thread-safety-analysis",
          "-Wno-unused-private-field",
        ]
      }
    }
  }

  rtc_static_library("channel_transport") {
    testonly = true
    sources = [
      "test/channel_transport/channel_transport.cc",
      "test/channel_transport/channel_transport.h",
      "test/channel_transport/traffic_control_win.cc",
      "test/channel_transport/traffic_control_win.h",
      "test/channel_transport/udp_socket2_manager_win.cc",
      "test/channel_transport/udp_socket2_manager_win.h",
      "test/channel_transport/udp_socket2_win.cc",
      "test/channel_transport/udp_socket2_win.h",
      "test/channel_transport/udp_socket_manager_posix.cc",
      "test/channel_transport/udp_socket_manager_posix.h",
      "test/channel_transport/udp_socket_manager_wrapper.cc",
      "test/channel_transport/udp_socket_manager_wrapper.h",
      "test/channel_transport/udp_socket_posix.cc",
      "test/channel_transport/udp_socket_posix.h",
      "test/channel_transport/udp_socket_wrapper.cc",
      "test/channel_transport/udp_socket_wrapper.h",
      "test/channel_transport/udp_transport.h",
      "test/channel_transport/udp_transport_impl.cc",
      "test/channel_transport/udp_transport_impl.h",
    ]

    configs += [ ":channel_transport_warnings_config" ]

    if (is_clang && !is_nacl) {
      # Suppress warnings from the Chromium Clang plugin.
      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      "..:webrtc_common",
      "../system_wrappers",
      "//testing/gtest",
    ]
  }

  rtc_test("voice_engine_unittests") {
    deps = [
      ":channel_transport",
      ":voice_engine",
      "//testing/gmock",
      "//testing/gtest",
      "//webrtc/common_audio",
      "//webrtc/modules/audio_coding",
      "//webrtc/modules/audio_conference_mixer",
      "//webrtc/modules/audio_device",
      "//webrtc/modules/audio_processing",
      "//webrtc/modules/media_file",
      "//webrtc/modules/rtp_rtcp",
      "//webrtc/modules/utility",
      "//webrtc/system_wrappers",
      "//webrtc/test:test_support_main",
    ]

    if (is_android) {
      deps += [ "//testing/android/native_test:native_test_native_code" ]
      shard_timeout = 900
    }

    sources = [
      "channel_unittest.cc",
      "network_predictor_unittest.cc",
      "test/channel_transport/udp_socket_manager_unittest.cc",
      "test/channel_transport/udp_socket_wrapper_unittest.cc",
      "test/channel_transport/udp_transport_unittest.cc",
      "transmit_mixer_unittest.cc",
      "utility_unittest.cc",
      "voe_audio_processing_unittest.cc",
      "voe_base_unittest.cc",
      "voe_codec_unittest.cc",
      "voe_network_unittest.cc",
      "voice_engine_fixture.cc",
      "voice_engine_fixture.h",
    ]

    if (is_win) {
      defines = [ "WEBRTC_DRIFT_COMPENSATION_SUPPORTED" ]

      cflags = [
        # TODO(kjellander): Bug 261: fix this warning.
        "/wd4373",  # Virtual function override.
      ]
    }

    if (is_clang) {
      # Suppress warnings from Chrome's Clang plugins.
      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }

  rtc_executable("voe_cmd_test") {
    testonly = true

    deps = [
      ":channel_transport",
      ":voice_engine",
      "//testing/gtest",
      "//third_party/gflags",
      "//webrtc/logging:rtc_event_log_api",
      "//webrtc/system_wrappers",
      "//webrtc/system_wrappers:system_wrappers_default",
      "//webrtc/test:test_support",
    ]

    sources = [
      "test/cmd_test/voe_cmd_test.cc",
    ]

    if (is_clang) {
      # Suppress warnings from Chrome's Clang plugins.
      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }

  if (!is_ios) {
    rtc_executable("voe_auto_test") {
      testonly = true

      deps = [
        ":channel_transport",
        ":voice_engine",
        "//testing/gmock",
        "//testing/gtest",
        "//third_party/gflags",
        "//webrtc/logging:rtc_event_log_api",
        "//webrtc/modules/video_capture",
        "//webrtc/system_wrappers",
        "//webrtc/system_wrappers/:system_wrappers_default",
        "//webrtc/test/:test_common",
        "//webrtc/test/:test_support",
      ]

      sources = [
        "test/auto_test/automated_mode.cc",
        "test/auto_test/extended/agc_config_test.cc",
        "test/auto_test/extended/ec_metrics_test.cc",
        "test/auto_test/fakes/conference_transport.cc",
        "test/auto_test/fakes/conference_transport.h",
        "test/auto_test/fakes/loudest_filter.cc",
        "test/auto_test/fakes/loudest_filter.h",
        "test/auto_test/fixtures/after_initialization_fixture.cc",
        "test/auto_test/fixtures/after_initialization_fixture.h",
        "test/auto_test/fixtures/after_streaming_fixture.cc",
        "test/auto_test/fixtures/after_streaming_fixture.h",
        "test/auto_test/fixtures/before_initialization_fixture.cc",
        "test/auto_test/fixtures/before_initialization_fixture.h",
        "test/auto_test/fixtures/before_streaming_fixture.cc",
        "test/auto_test/fixtures/before_streaming_fixture.h",
        "test/auto_test/resource_manager.cc",
        "test/auto_test/standard/audio_processing_test.cc",
        "test/auto_test/standard/codec_before_streaming_test.cc",
        "test/auto_test/standard/codec_test.cc",
        "test/auto_test/standard/dtmf_test.cc",
        "test/auto_test/standard/external_media_test.cc",
        "test/auto_test/standard/file_before_streaming_test.cc",
        "test/auto_test/standard/file_test.cc",
        "test/auto_test/standard/hardware_before_initializing_test.cc",
        "test/auto_test/standard/hardware_test.cc",
        "test/auto_test/standard/mixing_test.cc",
        "test/auto_test/standard/neteq_stats_test.cc",
        "test/auto_test/standard/rtp_rtcp_before_streaming_test.cc",
        "test/auto_test/standard/rtp_rtcp_extensions.cc",
        "test/auto_test/standard/rtp_rtcp_test.cc",
        "test/auto_test/standard/video_sync_test.cc",
        "test/auto_test/standard/voe_base_misc_test.cc",
        "test/auto_test/standard/volume_test.cc",
        "test/auto_test/voe_conference_test.cc",
        "test/auto_test/voe_cpu_test.cc",
        "test/auto_test/voe_cpu_test.h",
        "test/auto_test/voe_output_test.cc",
        "test/auto_test/voe_standard_test.cc",
        "test/auto_test/voe_standard_test.h",
        "test/auto_test/voe_stress_test.cc",
        "test/auto_test/voe_stress_test.h",
        "test/auto_test/voe_test_defines.h",
        "test/auto_test/voe_test_interface.h",
      ]

      if (!is_android) {
        # Some tests are not supported on android yet, exclude these tests.
        sources +=
            [ "test/auto_test/standard/hardware_before_streaming_test.cc" ]
      }

      defines = []

      if (rtc_enable_protobuf) {
        defines = [ "ENABLE_RTC_EVENT_LOG" ]
      }

      if (is_win) {
        defines += [ "WEBRTC_DRIFT_COMPENSATION_SUPPORTED" ]

        cflags = [
          "/wd4267",  # size_t to int truncation.
          "/wd4373",  # Virtual function override.
                      # TODO(kjellander): Bug 261: fix this warning.
        ]
      }

      if (is_clang) {
        # Suppress warnings from Chrome's Clang plugins.
        # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
        suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
      }
    }
  }
}
