# 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_source_set("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",
    "..:rtc_event_log",
    "..:webrtc_common",
    "../api:call_api",
    "../base:rtc_base_approved",
    "../common_audio",
    "../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_source_set("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_source_set("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:rtc_event_log",
      "//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/:rtc_event_log",
        "//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" ]
      }
    }
  }
}
