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