# 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",
    "../call:rtc_event_log",
    "../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_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/call: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/call: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" ]
      }
    }
  }
}
