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

if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
} else if (is_mac) {
  import("//build/config/mac/rules.gni")
} else if (is_ios) {
  import("//build/config/ios/rules.gni")
}

group("examples") {
  # This target shall build all targets in examples.
  testonly = true
  deps = []

  if (is_android) {
    deps += [
      ":AppRTCMobile",
      ":AppRTCMobileTest",
      ":AppRTCMobileTestStubbedVideoIO",
    ]
  }

  if (!build_with_chromium) {
    deps += [ ":stun_prober" ]
  }

  if (is_ios || (is_mac && target_cpu != "x86")) {
    deps += [ ":AppRTCMobile" ]
  }

  if (is_linux || is_win) {
    deps += [
      ":peerconnection_client",
      ":peerconnection_server",
      ":relayserver",
      ":stunserver",
      ":turnserver",
    ]
  }
}

if (is_android) {
  rtc_android_apk("AppRTCMobile") {
    testonly = true
    apk_name = "AppRTCMobile"
    android_manifest = "androidapp/AndroidManifest.xml"

    deps = [
      ":AppRTCMobile_javalib",
      ":AppRTCMobile_resources",
      "../rtc_base:base_java",
      "//base:base_java",
    ]

    shared_libraries = [ "../sdk/android:libjingle_peerconnection_so" ]
  }

  rtc_android_library("AppRTCMobile_javalib") {
    testonly = true
    android_manifest_for_lint = "androidapp/AndroidManifest.xml"

    java_files = [
      "androidapp/src/org/appspot/apprtc/AppRTCAudioManager.java",
      "androidapp/src/org/appspot/apprtc/AppRTCBluetoothManager.java",
      "androidapp/src/org/appspot/apprtc/AppRTCClient.java",
      "androidapp/src/org/appspot/apprtc/AppRTCProximitySensor.java",
      "androidapp/src/org/appspot/apprtc/CallActivity.java",
      "androidapp/src/org/appspot/apprtc/CallFragment.java",
      "androidapp/src/org/appspot/apprtc/CaptureQualityController.java",
      "androidapp/src/org/appspot/apprtc/ConnectActivity.java",
      "androidapp/src/org/appspot/apprtc/CpuMonitor.java",
      "androidapp/src/org/appspot/apprtc/DirectRTCClient.java",
      "androidapp/src/org/appspot/apprtc/HudFragment.java",
      "androidapp/src/org/appspot/apprtc/PeerConnectionClient.java",
      "androidapp/src/org/appspot/apprtc/RoomParametersFetcher.java",
      "androidapp/src/org/appspot/apprtc/RtcEventLog.java",
      "androidapp/src/org/appspot/apprtc/RecordedAudioToFileController.java",
      "androidapp/src/org/appspot/apprtc/SettingsActivity.java",
      "androidapp/src/org/appspot/apprtc/SettingsFragment.java",
      "androidapp/src/org/appspot/apprtc/TCPChannelClient.java",
      "androidapp/src/org/appspot/apprtc/UnhandledExceptionHandler.java",
      "androidapp/src/org/appspot/apprtc/WebSocketChannelClient.java",
      "androidapp/src/org/appspot/apprtc/WebSocketRTCClient.java",
      "androidapp/src/org/appspot/apprtc/util/AppRTCUtils.java",
      "androidapp/src/org/appspot/apprtc/util/AsyncHttpURLConnection.java",
    ]

    deps = [
      ":AppRTCMobile_resources",
      "../modules/audio_device:audio_device_java",
      "../rtc_base:base_java",
      "../sdk/android:libjingle_peerconnection_java",
      "../sdk/android:libjingle_peerconnection_metrics_default_java",
      "androidapp/third_party/autobanh:autobanh_java",
    ]
  }

  android_resources("AppRTCMobile_resources") {
    testonly = true
    resource_dirs = [ "androidapp/res" ]
    custom_package = "org.appspot.apprtc"
  }

  rtc_instrumentation_test_apk("AppRTCMobileTest") {
    apk_name = "AppRTCMobileTest"
    android_manifest = "androidtests/AndroidManifest.xml"

    java_files = [
      "androidtests/src/org/appspot/apprtc/test/PeerConnectionClientTest.java",
    ]

    apk_under_test = ":AppRTCMobile"

    deps = [
      ":AppRTCMobile_javalib",
      "../sdk/android:libjingle_peerconnection_java",
      "//third_party/android_support_test_runner:runner_java",
      "//third_party/junit",
    ]
  }

  rtc_instrumentation_test_apk("AppRTCMobileTestStubbedVideoIO") {
    apk_name = "AppRTCMobileTestStubbedVideoIO"
    android_manifest = "androidtests/AndroidManifest.xml"

    java_files = [ "androidtests/src/org/appspot/apprtc/test/CallActivityStubbedInputOutputTest.java" ]

    apk_under_test = ":AppRTCMobile"

    deps = [
      ":AppRTCMobile_javalib",
      "../sdk/android:libjingle_peerconnection_java",
      "//third_party/android_support_test_runner:rules_java",
      "//third_party/android_support_test_runner:runner_java",
      "//third_party/espresso:espresso_all_java",
      "//third_party/hamcrest:hamcrest_java",
      "//third_party/junit",
    ]

    data = [
      "../build/android/adb_reverse_forwarder.py",
      "../examples/androidtests/video_quality_loopback_test.py",
      "../resources/reference_video_640x360_30fps.y4m",
      "../rtc_tools/barcode_tools/barcode_decoder.py",
      "../rtc_tools/barcode_tools/helper_functions.py",
      "../rtc_tools/compare_videos.py",
      "../rtc_tools/testing/prebuilt_apprtc.zip",
      "../rtc_tools/testing/golang/linux/go.tar.gz",
      "../rtc_tools/testing/build_apprtc.py",
      "../rtc_tools/testing/utils.py",
      "../tools_webrtc/video_quality_toolchain/linux/ffmpeg",
      "../tools_webrtc/video_quality_toolchain/linux/frame_analyzer",
      "../tools_webrtc/video_quality_toolchain/linux/zxing",
    ]
  }
}

if (is_ios || (is_mac && target_cpu != "x86")) {
  config("apprtc_common_config") {
    include_dirs = [ "objc/AppRTCMobile/common" ]
  }

  rtc_static_library("apprtc_common") {
    testonly = true
    sources = [
      "objc/AppRTCMobile/common/ARDUtilities.h",
      "objc/AppRTCMobile/common/ARDUtilities.m",
    ]
    public_configs = [ ":apprtc_common_config" ]

    if (is_ios) {
      # iOS must use WebRTC.framework which is dynamically linked.
      # 'gn check' is disabled in order to avoid confusion and
      # errors caused by multiple implementations.
      check_includes = false
      deps = [
        "../sdk:framework_objc",
        "../system_wrappers:field_trial_default",
        "../system_wrappers:runtime_enabled_features_default",
      ]
    } else {
      deps = [
        "../sdk:common_objc",
        "../system_wrappers:field_trial_default",
        "../system_wrappers:metrics_default",
        "../system_wrappers:runtime_enabled_features_default",
      ]
    }
  }

  config("apprtc_signaling_config") {
    include_dirs = [ "objc/AppRTCMobile" ]

    # GN orders flags on a target before flags from configs. The default config
    # adds these flags so to cancel them out they need to come from a config and
    # cannot be on the target directly.
    cflags = [
      "-Wno-sign-compare",
      "-Wno-unused-variable",
    ]
  }

  rtc_static_library("apprtc_signaling") {
    testonly = true
    sources = [
      "objc/AppRTCMobile/ARDAppClient+Internal.h",
      "objc/AppRTCMobile/ARDAppClient.h",
      "objc/AppRTCMobile/ARDAppClient.m",
      "objc/AppRTCMobile/ARDAppEngineClient.h",
      "objc/AppRTCMobile/ARDAppEngineClient.m",
      "objc/AppRTCMobile/ARDBitrateTracker.h",
      "objc/AppRTCMobile/ARDBitrateTracker.m",
      "objc/AppRTCMobile/ARDCaptureController.h",
      "objc/AppRTCMobile/ARDCaptureController.m",
      "objc/AppRTCMobile/ARDJoinResponse+Internal.h",
      "objc/AppRTCMobile/ARDJoinResponse.h",
      "objc/AppRTCMobile/ARDJoinResponse.m",
      "objc/AppRTCMobile/ARDMessageResponse+Internal.h",
      "objc/AppRTCMobile/ARDMessageResponse.h",
      "objc/AppRTCMobile/ARDMessageResponse.m",
      "objc/AppRTCMobile/ARDRoomServerClient.h",
      "objc/AppRTCMobile/ARDSettingsModel+Private.h",
      "objc/AppRTCMobile/ARDSettingsModel.h",
      "objc/AppRTCMobile/ARDSettingsModel.m",
      "objc/AppRTCMobile/ARDSettingsStore.h",
      "objc/AppRTCMobile/ARDSettingsStore.m",
      "objc/AppRTCMobile/ARDSignalingChannel.h",
      "objc/AppRTCMobile/ARDSignalingMessage.h",
      "objc/AppRTCMobile/ARDSignalingMessage.m",
      "objc/AppRTCMobile/ARDStatsBuilder.h",
      "objc/AppRTCMobile/ARDStatsBuilder.m",
      "objc/AppRTCMobile/ARDTURNClient+Internal.h",
      "objc/AppRTCMobile/ARDTURNClient.h",
      "objc/AppRTCMobile/ARDTURNClient.m",
      "objc/AppRTCMobile/ARDWebSocketChannel.h",
      "objc/AppRTCMobile/ARDWebSocketChannel.m",
      "objc/AppRTCMobile/RTCIceCandidate+JSON.h",
      "objc/AppRTCMobile/RTCIceCandidate+JSON.m",
      "objc/AppRTCMobile/RTCIceServer+JSON.h",
      "objc/AppRTCMobile/RTCIceServer+JSON.m",
      "objc/AppRTCMobile/RTCMediaConstraints+JSON.h",
      "objc/AppRTCMobile/RTCMediaConstraints+JSON.m",
      "objc/AppRTCMobile/RTCSessionDescription+JSON.h",
      "objc/AppRTCMobile/RTCSessionDescription+JSON.m",
    ]
    public_configs = [ ":apprtc_signaling_config" ]
    deps = [
      ":apprtc_common",
      ":socketrocket",
    ]
    if (is_ios) {
      # iOS must use WebRTC.framework which is dynamically linked.
      # 'gn check' is disabled in order to avoid confusion and
      # errors caused by multiple implementations.
      check_includes = false
      deps += [
        ":AppRTCMobile_ios_frameworks",
        "../sdk:framework_objc",
      ]
    } else {
      deps += [
        "../sdk:common_objc",
        "../sdk:mediaconstraints_objc",
        "../sdk:peerconnectionfactory_base_objc",
        "../sdk:videocapture_objc",
        "../sdk:videocodec_objc",
      ]
    }
    libs = [ "QuartzCore.framework" ]
  }

  if (is_ios) {
    rtc_static_library("AppRTCMobile_lib") {
      # iOS must use WebRTC.framework which is dynamically linked.
      # 'gn check' is disabled in order to avoid confusion and
      # errors caused by multiple implementations.
      check_includes = false
      testonly = true
      sources = [
        "objc/AppRTCMobile/ios/ARDAppDelegate.h",
        "objc/AppRTCMobile/ios/ARDAppDelegate.m",
        "objc/AppRTCMobile/ios/ARDFileCaptureController.h",
        "objc/AppRTCMobile/ios/ARDFileCaptureController.m",
        "objc/AppRTCMobile/ios/ARDMainView.h",
        "objc/AppRTCMobile/ios/ARDMainView.m",
        "objc/AppRTCMobile/ios/ARDMainViewController.h",
        "objc/AppRTCMobile/ios/ARDMainViewController.m",
        "objc/AppRTCMobile/ios/ARDSettingsViewController.h",
        "objc/AppRTCMobile/ios/ARDSettingsViewController.m",
        "objc/AppRTCMobile/ios/ARDStatsView.h",
        "objc/AppRTCMobile/ios/ARDStatsView.m",
        "objc/AppRTCMobile/ios/ARDVideoCallView.h",
        "objc/AppRTCMobile/ios/ARDVideoCallView.m",
        "objc/AppRTCMobile/ios/ARDVideoCallViewController.h",
        "objc/AppRTCMobile/ios/ARDVideoCallViewController.m",
        "objc/AppRTCMobile/ios/RTCVideoCodecInfo+HumanReadable.h",
        "objc/AppRTCMobile/ios/RTCVideoCodecInfo+HumanReadable.m",
        "objc/AppRTCMobile/ios/UIImage+ARDUtilities.h",
        "objc/AppRTCMobile/ios/UIImage+ARDUtilities.m",
      ]

      deps = [
        ":AppRTCMobile_ios_frameworks",
        ":apprtc_common",
        ":apprtc_signaling",
        "../sdk:framework_objc",
      ]
    }

    ios_app_bundle("AppRTCMobile") {
      testonly = true
      sources = [
        "objc/AppRTCMobile/ios/main.m",
      ]

      info_plist = "objc/AppRTCMobile/ios/Info.plist"

      configs += [ "..:common_config" ]
      public_configs = [ "..:common_inherited_config" ]

      deps = [
        ":AppRTCMobile_ios_bundle_data",
        ":AppRTCMobile_ios_frameworks",
        ":AppRTCMobile_lib",
        "../sdk:framework_objc",
      ]

      if (target_cpu == "x86") {
        deps += [ "//testing/iossim:iossim" ]
      }
    }

    bundle_data("AppRTCMobile_ios_frameworks") {
      deps = [
        "../sdk:framework_objc+link",
      ]
      sources = [
        "$root_build_dir/WebRTC.framework",
      ]
      outputs = [
        "{{bundle_resources_dir}}/Frameworks/{{source_file_part}}",
      ]
    }

    bundle_data("AppRTCMobile_ios_bundle_data") {
      sources = [
        "objc/AppRTCMobile/ios/resources/Roboto-Regular.ttf",

        # Sample video taken from https://media.xiph.org/video/derf/
        "objc/AppRTCMobile/ios/resources/foreman.mp4",
        "objc/AppRTCMobile/ios/resources/iPhone5@2x.png",
        "objc/AppRTCMobile/ios/resources/iPhone6@2x.png",
        "objc/AppRTCMobile/ios/resources/iPhone6p@3x.png",
        "objc/AppRTCMobile/ios/resources/ic_call_end_black_24dp.png",
        "objc/AppRTCMobile/ios/resources/ic_call_end_black_24dp@2x.png",
        "objc/AppRTCMobile/ios/resources/ic_clear_black_24dp.png",
        "objc/AppRTCMobile/ios/resources/ic_clear_black_24dp@2x.png",
        "objc/AppRTCMobile/ios/resources/ic_settings_black_24dp.png",
        "objc/AppRTCMobile/ios/resources/ic_settings_black_24dp@2x.png",
        "objc/AppRTCMobile/ios/resources/ic_surround_sound_black_24dp.png",
        "objc/AppRTCMobile/ios/resources/ic_surround_sound_black_24dp@2x.png",
        "objc/AppRTCMobile/ios/resources/ic_switch_video_black_24dp.png",
        "objc/AppRTCMobile/ios/resources/ic_switch_video_black_24dp@2x.png",
        "objc/AppRTCMobile/ios/resources/mozart.mp3",
        "objc/Icon-120.png",
        "objc/Icon-180.png",
        "objc/Icon.png",
      ]
      outputs = [
        "{{bundle_resources_dir}}/{{source_file_part}}",
      ]
    }
  }

  if (is_mac) {
    rtc_static_library("AppRTCMobile_lib") {
      testonly = true
      sources = [
        "objc/AppRTCMobile/mac/APPRTCAppDelegate.h",
        "objc/AppRTCMobile/mac/APPRTCAppDelegate.m",
        "objc/AppRTCMobile/mac/APPRTCViewController.h",
        "objc/AppRTCMobile/mac/APPRTCViewController.m",
      ]
      configs += [ "..:common_objc" ]
      deps = [
        ":apprtc_common",
        ":apprtc_signaling",
        "../sdk:default_codec_factory_objc",
        "../sdk:metal_objc",
        "../sdk:peerconnectionfactory_base_objc",
        "../sdk:ui_objc",
        "../sdk:videocapture_objc",
        "../sdk:videocodec_objc",
        "../sdk:videocodec_objc",
        "../sdk:videotoolbox_objc",
      ]
    }

    mac_app_bundle("AppRTCMobile") {
      testonly = true
      output_name = "AppRTCMobile"

      sources = [
        "objc/AppRTCMobile/mac/main.m",
      ]

      public_configs = [ "..:common_inherited_config" ]

      info_plist = "objc/AppRTCMobile/mac/Info.plist"

      libs = [ "AppKit.framework" ]

      deps = [
        ":AppRTCMobile_lib",
      ]
    }
  }

  config("socketrocket_include_config") {
    include_dirs = [ "objc/AppRTCMobile/third_party/SocketRocket" ]
  }

  config("socketrocket_warning_config") {
    # GN orders flags on a target before flags from configs. The default config
    # adds these flags so to cancel them out they need to come from a config and
    # cannot be on the target directly.
    cflags = [
      "-Wno-deprecated-declarations",
      "-Wno-nonnull",
      "-Wno-semicolon-before-method-body",
      "-Wno-unused-variable",
    ]

    cflags_objc = [
      # Enabled for cflags_objc in build/config/compiler/BUILD.gn.
      "-Wno-objc-missing-property-synthesis",
    ]
  }

  rtc_static_library("socketrocket") {
    testonly = true
    sources = [
      "objc/AppRTCMobile/third_party/SocketRocket/SRWebSocket.h",
      "objc/AppRTCMobile/third_party/SocketRocket/SRWebSocket.m",
    ]
    configs += [ ":socketrocket_warning_config" ]
    public_configs = [ ":socketrocket_include_config" ]

    libs = [
      "CFNetwork.framework",
      "icucore",
    ]
  }

  if (rtc_include_tests) {
    # TODO(kthelgason): compile xctests on mac when chromium supports it.
    if (is_ios) {
      rtc_source_set("apprtcmobile_test_sources") {
        # iOS must use WebRTC.framework which is dynamically linked.
        # 'gn check' is disabled in order to avoid confusion and
        # errors caused by multiple implementations.
        check_includes = false
        testonly = true
        include_dirs = [
          "objc/AppRTCMobile",
          "objc/AppRTCMobile/ios",
        ]
        testonly = true
        sources = [
          "objc/AppRTCMobile/tests/ARDAppClient_xctest.mm",
          "objc/AppRTCMobile/tests/ARDFileCaptureController_xctest.mm",
          "objc/AppRTCMobile/tests/ARDSettingsModel_xctest.mm",
        ]
        deps = [
          ":AppRTCMobile_ios_frameworks",
          ":AppRTCMobile_lib",
          ":apprtc_signaling",
          "../rtc_base:rtc_base",
          "../sdk:framework_objc",
          "//build/config/ios:xctest",
          "//third_party/ocmock",
        ]
      }

      rtc_ios_xctest_test("apprtcmobile_tests") {
        info_plist = "objc/AppRTCMobile/ios/Info.plist"
        sources = [
          "objc/AppRTCMobile/ios/main.m",
        ]
        deps = [
          ":AppRTCMobile_lib",
          ":apprtcmobile_test_sources",
          "../sdk:framework_objc",
        ]
        ldflags = [ "-all_load" ]
      }
    }
  }
}

if (is_linux || is_win) {
  config("peerconnection_client_warnings_config") {
    cflags = []
    if (is_win && is_clang) {
      cflags += [
        # Disable warnings failing when compiling with Clang on Windows.
        # https://bugs.chromium.org/p/webrtc/issues/detail?id=5366
        "-Wno-format",

        # See https://bugs.chromium.org/p/webrtc/issues/detail?id=6271
        # for -Wno-reorder and -Wno-sign-compare
        "-Wno-reorder",
        "-Wno-sign-compare",
      ]
    }
    if (is_linux && target_cpu == "x86") {
      cflags += [
        # Needed to compile on Linux 32-bit.
        "-Wno-sentinel",
      ]
    }
  }

  rtc_executable("peerconnection_client") {
    testonly = true
    sources = [
      "peerconnection/client/conductor.cc",
      "peerconnection/client/conductor.h",
      "peerconnection/client/defaults.cc",
      "peerconnection/client/defaults.h",
      "peerconnection/client/peer_connection_client.cc",
      "peerconnection/client/peer_connection_client.h",
    ]

    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
    deps = [
      "../api:libjingle_peerconnection_api",
      "../api:video_frame_api_i420",
      "../rtc_base:checks",
      "../rtc_base:stringutils",
    ]
    if (is_win) {
      sources += [
        "peerconnection/client/flagdefs.h",
        "peerconnection/client/main.cc",
        "peerconnection/client/main_wnd.cc",
        "peerconnection/client/main_wnd.h",
      ]
      cflags = [ "/wd4245" ]
      configs += [ "//build/config/win:windowed" ]
      deps += [ "../media:rtc_media_base" ]
    }
    if (is_linux) {
      sources += [
        "peerconnection/client/linux/main.cc",
        "peerconnection/client/linux/main_wnd.cc",
        "peerconnection/client/linux/main_wnd.h",
      ]
      cflags = [ "-Wno-deprecated-declarations" ]
      libs = [
        "X11",
        "Xcomposite",
        "Xext",
        "Xrender",
      ]
      deps += [ "//build/config/linux/gtk" ]
    }
    configs += [ ":peerconnection_client_warnings_config" ]

    deps += [
      "../api:libjingle_peerconnection_api",
      "../api:libjingle_peerconnection_test_api",
      "../api:video_frame_api",
      "../api/audio_codecs:builtin_audio_decoder_factory",
      "../api/audio_codecs:builtin_audio_encoder_factory",
      "../media:rtc_audio_video",
      "../modules/video_capture:video_capture_module",
      "../pc:libjingle_peerconnection",
      "../rtc_base:rtc_base",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_json",
      "../system_wrappers:field_trial_default",
      "../system_wrappers:metrics_default",
      "../system_wrappers:runtime_enabled_features_default",
      "//third_party/libyuv",
    ]
  }

  rtc_executable("peerconnection_server") {
    testonly = true
    sources = [
      "peerconnection/server/data_socket.cc",
      "peerconnection/server/data_socket.h",
      "peerconnection/server/main.cc",
      "peerconnection/server/peer_channel.cc",
      "peerconnection/server/peer_channel.h",
      "peerconnection/server/utils.cc",
      "peerconnection/server/utils.h",
    ]
    deps = [
      "..:webrtc_common",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:stringutils",
      "../rtc_tools:command_line_parser",
    ]
    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }
  rtc_executable("relayserver") {
    testonly = true
    sources = [
      "relayserver/relayserver_main.cc",
    ]
    deps = [
      "../p2p:rtc_p2p",
      "../pc:rtc_pc",
      "../rtc_base:rtc_base",
      "../rtc_base:rtc_base_approved",
      "../system_wrappers:field_trial_default",
      "../system_wrappers:metrics_default",
      "../system_wrappers:runtime_enabled_features_default",
    ]
    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }
  rtc_executable("turnserver") {
    testonly = true
    sources = [
      "turnserver/turnserver_main.cc",
    ]
    deps = [
      "../p2p:rtc_p2p",
      "../pc:rtc_pc",
      "../rtc_base:rtc_base",
      "../rtc_base:rtc_base_approved",
      "../system_wrappers:field_trial_default",
      "../system_wrappers:metrics_default",
      "../system_wrappers:runtime_enabled_features_default",
    ]
    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }
  rtc_executable("stunserver") {
    testonly = true
    sources = [
      "stunserver/stunserver_main.cc",
    ]
    deps = [
      "../p2p:rtc_p2p",
      "../pc:rtc_pc",
      "../rtc_base:rtc_base",
      "../rtc_base:rtc_base_approved",
      "../system_wrappers:field_trial_default",
      "../system_wrappers:metrics_default",
      "../system_wrappers:runtime_enabled_features_default",
    ]
    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }
}

if (is_win || is_android) {
  rtc_shared_library("webrtc_unity_plugin") {
    testonly = true
    sources = [
      "unityplugin/simple_peer_connection.cc",
      "unityplugin/simple_peer_connection.h",
      "unityplugin/unity_plugin_apis.cc",
      "unityplugin/unity_plugin_apis.h",
      "unityplugin/video_observer.cc",
      "unityplugin/video_observer.h",
    ]

    if (is_android) {
      sources += [
        "unityplugin/classreferenceholder.cc",
        "unityplugin/classreferenceholder.h",
        "unityplugin/jni_onload.cc",
      ]
      suppressed_configs += [ "//build/config/android:hide_all_but_jni_onload" ]
    }

    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
    if (is_win) {
      cflags = [ "/wd4245" ]
      configs += [
        "//build/config/win:windowed",
        ":peerconnection_client_warnings_config",
      ]
    }
    deps = [
      "../api:libjingle_peerconnection_api",
      "../api:libjingle_peerconnection_test_api",
      "../api:video_frame_api",
      "../api/audio_codecs:builtin_audio_decoder_factory",
      "../api/audio_codecs:builtin_audio_encoder_factory",
      "../media:rtc_audio_video",
      "../media:rtc_internal_video_codecs",
      "../media:rtc_media",
      "../media:rtc_media_base",
      "../modules/audio_device:audio_device",
      "../modules/audio_processing:audio_processing",
      "../modules/video_capture:video_capture_module",
      "../pc:libjingle_peerconnection",
      "../rtc_base:rtc_base",
      "../system_wrappers:field_trial_default",
      "../system_wrappers:metrics_default",
      "../system_wrappers:runtime_enabled_features_default",
    ]
    if (is_android) {
      deps += [ "../sdk/android:libjingle_peerconnection_jni" ]
    }
  }
}

if (is_android) {
  rtc_android_library("webrtc_unity_java") {
    java_files = [ "unityplugin/java/src/org/webrtc/UnityUtility.java" ]
    deps = [
      "../rtc_base:base_java",
      "../sdk/android:libjingle_peerconnection_java",
    ]
  }

  dist_jar("libwebrtc_unity") {
    _target_dir_name = get_label_info(":$target_name", "dir")
    output = "${root_out_dir}/lib.java${_target_dir_name}/${target_name}.jar"
    direct_deps_only = true
    use_interface_jars = false
    use_unprocessed_jars = true
    requires_android = true
    deps = [
      ":webrtc_unity_java",
      "../modules/audio_device:audio_device_java",
      "../rtc_base:base_java",
      "../sdk/android:libjingle_peerconnection_java",
      "../sdk/android:libjingle_peerconnection_metrics_default_java",
    ]
  }
}

if (!build_with_chromium) {
  # Doesn't build within Chrome on Win.
  rtc_executable("stun_prober") {
    testonly = true
    sources = [
      "stunprober/main.cc",
    ]

    if (!build_with_chromium && 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" ]
    }

    deps = [
      "../p2p:libstunprober",
      "../p2p:rtc_p2p",
      "../rtc_base:checks",
      "../rtc_base:rtc_base",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:stringutils",
      "../system_wrappers:field_trial_default",
    ]
  }
}
