# 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",
      ":AppRTCMobile_test_apk",
      ":libwebrtc_unity",
      "androidvoip",
    ]

    # TODO(sakal): We include some code from the tests. Remove this dependency
    # and remove this if-clause.
    if (rtc_include_tests) {
      deps += [ "androidnativeapi" ]
    }
  }

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

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

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

  if (is_android || is_win) {
    deps += [ ":webrtc_unity_plugin" ]
  }
}

rtc_library("read_auth_file") {
  testonly = true
  sources = [
    "turnserver/read_auth_file.cc",
    "turnserver/read_auth_file.h",
  ]
  deps = [ "../rtc_base" ]
}

if (rtc_include_tests) {
  rtc_test("examples_unittests") {
    testonly = true
    sources = [ "turnserver/read_auth_file_unittest.cc" ]
    deps = [
      ":read_auth_file",
      "../test:test_main",
      "//test:test_support",
      "//testing/gtest",
    ]
  }
}

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

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

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

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

    sources = [
      "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/RecordedAudioToFileController.java",
      "androidapp/src/org/appspot/apprtc/RoomParametersFetcher.java",
      "androidapp/src/org/appspot/apprtc/RtcEventLog.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",
    ]

    resources_package = "org.appspot.apprtc"
    deps = [
      ":AppRTCMobile_resources",
      "../rtc_base:base_java",
      "../sdk/android:audio_api_java",
      "../sdk/android:base_java",
      "../sdk/android:camera_java",
      "../sdk/android:default_video_codec_factory_java",
      "../sdk/android:filevideo_java",
      "../sdk/android:hwcodecs_java",
      "../sdk/android:java_audio_device_module_java",
      "../sdk/android:libjingle_peerconnection_java",
      "../sdk/android:libjingle_peerconnection_metrics_default_java",
      "../sdk/android:peerconnection_java",
      "../sdk/android:screencapturer_java",
      "../sdk/android:surfaceviewrenderer_java",
      "../sdk/android:swcodecs_java",
      "../sdk/android:video_api_java",
      "../sdk/android:video_java",
      "androidapp/third_party/autobanh:autobanh_java",
      "//third_party/android_deps:com_android_support_support_annotations_java",
    ]
  }

  android_resources("AppRTCMobile_resources") {
    testonly = true
    sources = [
      "androidapp/res/drawable-hdpi/disconnect.png",
      "androidapp/res/drawable-hdpi/ic_action_full_screen.png",
      "androidapp/res/drawable-hdpi/ic_action_return_from_full_screen.png",
      "androidapp/res/drawable-hdpi/ic_launcher.png",
      "androidapp/res/drawable-hdpi/ic_loopback_call.png",
      "androidapp/res/drawable-ldpi/disconnect.png",
      "androidapp/res/drawable-ldpi/ic_action_full_screen.png",
      "androidapp/res/drawable-ldpi/ic_action_return_from_full_screen.png",
      "androidapp/res/drawable-ldpi/ic_launcher.png",
      "androidapp/res/drawable-ldpi/ic_loopback_call.png",
      "androidapp/res/drawable-mdpi/disconnect.png",
      "androidapp/res/drawable-mdpi/ic_action_full_screen.png",
      "androidapp/res/drawable-mdpi/ic_action_return_from_full_screen.png",
      "androidapp/res/drawable-mdpi/ic_launcher.png",
      "androidapp/res/drawable-mdpi/ic_loopback_call.png",
      "androidapp/res/drawable-xhdpi/disconnect.png",
      "androidapp/res/drawable-xhdpi/ic_action_full_screen.png",
      "androidapp/res/drawable-xhdpi/ic_action_return_from_full_screen.png",
      "androidapp/res/drawable-xhdpi/ic_launcher.png",
      "androidapp/res/drawable-xhdpi/ic_loopback_call.png",
      "androidapp/res/layout/activity_call.xml",
      "androidapp/res/layout/activity_connect.xml",
      "androidapp/res/layout/fragment_call.xml",
      "androidapp/res/layout/fragment_hud.xml",
      "androidapp/res/menu/connect_menu.xml",
      "androidapp/res/values-v17/styles.xml",
      "androidapp/res/values-v21/styles.xml",
      "androidapp/res/values/arrays.xml",
      "androidapp/res/values/strings.xml",
      "androidapp/res/xml/preferences.xml",
    ]

    # Needed for Bazel converter.
    custom_package = "org.appspot.apprtc"
    resource_dirs = [ "androidapp/res" ]
    assert(resource_dirs != [])  # Mark as used.
  }

  rtc_instrumentation_test_apk("AppRTCMobile_test_apk") {
    apk_name = "AppRTCMobileTest"
    android_manifest = "androidtests/AndroidManifest.xml"
    min_sdk_version = 21
    target_sdk_version = 21

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

    apk_under_test = ":AppRTCMobile"

    deps = [
      ":AppRTCMobile_javalib",
      "../sdk/android:base_java",
      "../sdk/android:camera_java",
      "../sdk/android:libjingle_peerconnection_java",
      "../sdk/android:peerconnection_java",
      "../sdk/android:video_api_java",
      "../sdk/android:video_java",
      "//third_party/android_support_test_runner:runner_java",
      "//third_party/junit",
    ]
  }
}

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

  rtc_library("apprtc_common") {
    testonly = true
    sources = [
      "objc/AppRTCMobile/common/ARDUtilities.h",
      "objc/AppRTCMobile/common/ARDUtilities.m",
    ]
    public_configs = [ ":apprtc_common_config" ]
    deps = [ "../sdk:base_objc" ]
  }

  config("apprtc_signaling_config") {
    include_dirs = [ "objc/AppRTCMobile" ]
    cflags_objc = [
      # TODO(bugs.webrtc.org/10837): Remove this when usage of
      # archivedDataWithRootObject will be removed.
      "-Wno-unguarded-availability",
    ]
  }

  rtc_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/ARDExternalSampleCapturer.h",
      "objc/AppRTCMobile/ARDExternalSampleCapturer.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/RTCSessionDescription+JSON.h",
      "objc/AppRTCMobile/RTCSessionDescription+JSON.m",
    ]
    public_configs = [ ":apprtc_signaling_config" ]
    deps = [
      ":apprtc_common",
      ":socketrocket",
      "../sdk:base_objc",
      "../sdk:default_codec_factory_objc",
      "../sdk:file_logger_objc",
      "../sdk:helpers_objc",
      "../sdk:mediaconstraints_objc",
      "../sdk:peerconnectionfactory_base_objc",
      "../sdk:videocapture_objc",
      "../sdk:videoframebuffer_objc",
      "../sdk:videosource_objc",
    ]
    frameworks = [
      "CoreMedia.framework",
      "QuartzCore.framework",
    ]
  }

  if (is_ios) {
    rtc_library("AppRTCMobile_lib") {
      # iOS must use WebRTC.framework which is dynamically linked.
      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",
      ]

      configs += [ "..:common_objc" ]

      deps = [
        ":apprtc_common",
        ":apprtc_signaling",
        "../sdk:audio_session_objc",
        "../sdk:base_objc",
        "../sdk:helpers_objc",
        "../sdk:mediaconstraints_objc",
        "../sdk:peerconnectionfactory_base_objc",
        "../sdk:peerconnectionfactory_base_objc",
        "../sdk:ui_objc",
        "../sdk:videocapture_objc",
        "../sdk:videocodec_objc",
      ]
      if (rtc_use_metal_rendering) {
        deps += [ "../sdk:metal_objc" ]
      }

      frameworks = [ "AVFoundation.framework" ]
    }

    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_lib",
        "../sdk:framework_objc",
        "../sdk:ios_framework_bundle",
      ]

      if (rtc_apprtcmobile_broadcast_extension) {
        deps += [
          ":AppRTCMobileBroadcastSetupUI_extension_bundle",
          ":AppRTCMobileBroadcastUpload_extension_bundle",
        ]
      }

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

    if (rtc_apprtcmobile_broadcast_extension) {
      bundle_data("AppRTCMobileBroadcastUpload_extension_bundle") {
        testonly = true
        public_deps = [  # no-presubmit-check TODO(webrtc:8603)
          ":AppRTCMobileBroadcastUpload",  # prevent code format
        ]
        sources = [ "$root_out_dir/AppRTCMobileBroadcastUpload.appex" ]
        outputs = [ "{{bundle_contents_dir}}/Plugins/{{source_file_part}}" ]
      }

      bundle_data("AppRTCMobileBroadcastSetupUI_extension_bundle") {
        testonly = true
        public_deps = [  # no-presubmit-check TODO(webrtc:8603)
          ":AppRTCMobileBroadcastSetupUI",  # prevent code format
        ]
        sources = [ "$root_out_dir/AppRTCMobileBroadcastSetupUI.appex" ]
        outputs = [ "{{bundle_contents_dir}}/Plugins/{{source_file_part}}" ]
      }

      rtc_library("AppRTCMobileBroadcastUpload_lib") {
        testonly = true
        sources = [
          "objc/AppRTCMobile/ios/broadcast_extension/ARDBroadcastSampleHandler.h",
          "objc/AppRTCMobile/ios/broadcast_extension/ARDBroadcastSampleHandler.m",
        ]

        deps = [
          ":apprtc_signaling",
          "../sdk:framework_objc+link",
          "../sdk:ios_framework_bundle",
        ]

        frameworks = [ "ReplayKit.framework" ]
      }

      ios_appex_bundle("AppRTCMobileBroadcastUpload") {
        testonly = true
        configs += [ "..:common_config" ]
        public_configs = [ "..:common_inherited_config" ]

        info_plist = "objc/AppRTCMobile/ios/broadcast_extension/BroadcastUploadInfo.plist"

        deps = [
          ":AppRTCMobileBroadcastUpload_lib",
          "../sdk:framework_objc",
        ]
      }

      ios_appex_bundle("AppRTCMobileBroadcastSetupUI") {
        sources = [
          "objc/AppRTCMobile/ios/broadcast_extension/ARDBroadcastSetupViewController.h",
          "objc/AppRTCMobile/ios/broadcast_extension/ARDBroadcastSetupViewController.m",
        ]

        info_plist = "objc/AppRTCMobile/ios/broadcast_extension/BroadcastSetupUIInfo.plist"

        frameworks = [ "ReplayKit.framework" ]

        deps = [ ":AppRTCMobile_ios_bundle_data" ]
      }
    }

    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}}" ]
    }

    rtc_library("ObjCNativeAPIDemo_lib") {
      testonly = true
      sources = [
        "objcnativeapi/objc/NADAppDelegate.h",
        "objcnativeapi/objc/NADAppDelegate.m",
        "objcnativeapi/objc/NADViewController.h",
        "objcnativeapi/objc/NADViewController.mm",
        "objcnativeapi/objc/objc_call_client.h",
        "objcnativeapi/objc/objc_call_client.mm",
      ]

      deps = [
        "../api:libjingle_peerconnection_api",
        "../api:scoped_refptr",
        "../api/audio_codecs:builtin_audio_decoder_factory",
        "../api/audio_codecs:builtin_audio_encoder_factory",
        "../api/rtc_event_log:rtc_event_log_factory",
        "../api/task_queue:default_task_queue_factory",
        "../media:rtc_audio_video",
        "../modules/audio_processing",
        "../modules/audio_processing:api",
        "../pc:libjingle_peerconnection",
        "../rtc_base",
        "../rtc_base/synchronization:mutex",
        "../sdk:base_objc",
        "../sdk:default_codec_factory_objc",
        "../sdk:helpers_objc",
        "../sdk:native_api",
        "../sdk:ui_objc",
        "../sdk:videocapture_objc",
        "../sdk:videotoolbox_objc",
      ]

      if (current_cpu == "arm64") {
        deps += [ "../sdk:metal_objc" ]
      }
    }

    ios_app_bundle("ObjCNativeAPIDemo") {
      testonly = true
      sources = [ "objcnativeapi/objc/main.m" ]

      info_plist = "objcnativeapi/Info.plist"

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

      deps = [ ":ObjCNativeAPIDemo_lib" ]

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

  if (is_mac) {
    rtc_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:base_objc",
        "../sdk:helpers_objc",
        "../sdk:mediaconstraints_objc",
        "../sdk:metal_objc",
        "../sdk:peerconnectionfactory_base_objc",
        "../sdk:peerconnectionfactory_base_objc",
        "../sdk:ui_objc",
        "../sdk:videocapture_objc",
        "../sdk:videocodec_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"

      frameworks = [ "AppKit.framework" ]

      ldflags = [
        "-rpath",
        "@executable_path/../Frameworks",
      ]

      deps = [
        ":AppRTCMobile_lib",
        "../sdk:mac_framework_bundle",
        "../sdk:mac_framework_objc+link",
      ]
    }
  }

  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_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 = [ "icucore" ]
    frameworks = [
      "CFNetwork.framework",
      "Security.framework",
    ]
  }

  if (rtc_include_tests) {
    # TODO(kthelgason): compile xctests on mac when chromium supports it.
    if (is_ios) {
      rtc_library("apprtcmobile_test_sources") {
        # iOS must use WebRTC.framework which is dynamically linked.
        testonly = true
        include_dirs = [
          "objc/AppRTCMobile",
          "objc/AppRTCMobile/ios",
        ]
        sources = [
          "objc/AppRTCMobile/tests/ARDAppClient_xctest.mm",
          "objc/AppRTCMobile/tests/ARDFileCaptureController_xctest.mm",
          "objc/AppRTCMobile/tests/ARDSettingsModel_xctest.mm",
        ]
        deps = [
          ":AppRTCMobile_lib",
          ":apprtc_signaling",
          "../rtc_base",
          "../sdk:mediaconstraints_objc",
          "../sdk:peerconnectionfactory_base_objc",
          "../sdk:videocapture_objc",
          "//build/config/ios:xctest",
          "//third_party/ocmock",
        ]
      }

      rtc_test("apprtcmobile_tests") {
        is_xctest = true
        info_plist = "objc/AppRTCMobile/ios/Info.plist"
        sources = [ "objc/AppRTCMobile/tests/main.mm" ]
        deps = [
          ":AppRTCMobile_lib",
          ":apprtcmobile_test_sources",
          "../sdk:framework_objc",
          "//test:test_support",
        ]
        ldflags = [ "-all_load" ]
      }
    }
  }
}

if (is_linux || is_chromeos || is_win) {
  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",
    ]

    deps = [
      "../api:audio_options_api",
      "../api:create_peerconnection_factory",
      "../api:libjingle_peerconnection_api",
      "../api:media_stream_interface",
      "../api:scoped_refptr",
      "../api/audio:audio_mixer_api",
      "../api/audio_codecs:audio_codecs_api",
      "../api/video:video_frame",
      "../api/video:video_rtp_headers",
      "../api/video_codecs:video_codecs_api",
      "../media:rtc_media_base",
      "../p2p:rtc_p2p",
      "../pc:video_track_source",
      "../rtc_base:checks",
      "../rtc_base:net_helpers",
      "../rtc_base:threading",
      "../rtc_base/third_party/sigslot",
      "../system_wrappers:field_trial",
      "../test:field_trial",
      "../test:platform_video_capturer",
      "../test:rtp_test_utils",
      "//third_party/abseil-cpp/absl/memory",
      "//third_party/abseil-cpp/absl/types:optional",
    ]
    if (is_win) {
      sources += [
        "peerconnection/client/flag_defs.h",
        "peerconnection/client/main.cc",
        "peerconnection/client/main_wnd.cc",
        "peerconnection/client/main_wnd.h",
      ]
      configs += [ "//build/config/win:windowed" ]
      deps += [
        "../media:rtc_media_base",
        "../rtc_base:win32",
      ]
    }
    if (is_linux || is_chromeos) {
      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" ]
    }

    deps += [
      "../api:libjingle_peerconnection_api",
      "../api/audio_codecs:builtin_audio_decoder_factory",
      "../api/audio_codecs:builtin_audio_encoder_factory",
      "../api/video:video_frame",
      "../api/video:video_rtp_headers",
      "../api/video_codecs:builtin_video_decoder_factory",
      "../api/video_codecs:builtin_video_encoder_factory",
      "../media:rtc_audio_video",
      "../modules/audio_device",
      "../modules/audio_processing",
      "../modules/audio_processing:api",
      "../modules/video_capture:video_capture_module",
      "../pc:libjingle_peerconnection",
      "../pc:peerconnection",
      "../rtc_base",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_json",
      "../test:video_test_common",
      "//third_party/abseil-cpp/absl/flags:flag",
      "//third_party/abseil-cpp/absl/flags:parse",
      "//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 = [
      "../rtc_base:rtc_base_approved",
      "../system_wrappers:field_trial",
      "../test:field_trial",
      "//third_party/abseil-cpp/absl/flags:flag",
      "//third_party/abseil-cpp/absl/flags:parse",
      "//third_party/abseil-cpp/absl/flags:usage",
    ]
  }
  rtc_executable("turnserver") {
    testonly = true
    sources = [ "turnserver/turnserver_main.cc" ]
    deps = [
      ":read_auth_file",
      "../p2p:p2p_server_utils",
      "../p2p:rtc_p2p",
      "../pc:rtc_pc",
      "../rtc_base",
      "../rtc_base:ip_address",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:socket_address",
      "../rtc_base:socket_server",
      "../rtc_base:threading",
    ]
  }
  rtc_executable("stunserver") {
    testonly = true
    sources = [ "stunserver/stunserver_main.cc" ]
    deps = [
      "../p2p:p2p_server_utils",
      "../p2p:rtc_p2p",
      "../pc:rtc_pc",
      "../rtc_base",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:socket_address",
      "../rtc_base:socket_server",
      "../rtc_base:threading",
    ]
  }
}

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/class_reference_holder.cc",
        "unityplugin/class_reference_holder.h",
        "unityplugin/jni_onload.cc",
      ]
      suppressed_configs += [ "//build/config/android:hide_all_but_jni_onload" ]
    }

    if (is_win) {
      configs += [ "//build/config/win:windowed" ]
    }
    deps = [
      "../api:create_peerconnection_factory",
      "../api:libjingle_peerconnection_api",
      "../api:media_stream_interface",
      "../api/audio_codecs:builtin_audio_decoder_factory",
      "../api/audio_codecs:builtin_audio_encoder_factory",
      "../api/video:video_frame",
      "../api/video:video_rtp_headers",
      "../media:rtc_audio_video",
      "../media:rtc_internal_video_codecs",
      "../media:rtc_media",
      "../media:rtc_media_base",
      "../modules/audio_device",
      "../modules/audio_processing",
      "../modules/audio_processing:api",
      "../modules/video_capture:video_capture_module",
      "../pc:libjingle_peerconnection",
      "../pc:peerconnection",
      "../pc:video_track_source",
      "../rtc_base",
      "../test:platform_video_capturer",
      "../test:video_test_common",
      "//third_party/abseil-cpp/absl/memory",
    ]
    if (is_android) {
      deps += [
        "../modules/utility",
        "../sdk/android:libjingle_peerconnection_jni",
      ]
    }
  }
}

if (is_android) {
  rtc_android_library("webrtc_unity_java") {
    sources = [ "unityplugin/java/src/org/webrtc/UnityUtility.java" ]
    deps = [
      "../rtc_base:base_java",
      "../sdk/android:camera_java",
      "../sdk/android:libjingle_peerconnection_java",
      "../sdk/android:peerconnection_java",
      "../sdk/android:video_api_java",
      "../sdk/android:video_java",
      "//third_party/android_deps:com_android_support_support_annotations_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 = false
    use_interface_jars = false
    use_unprocessed_jars = false
    requires_android = true
    deps = [
      ":webrtc_unity_java",
      "../rtc_base:base_java",
      "../sdk/android:libjingle_peerconnection_java",
      "../sdk/android:libjingle_peerconnection_metrics_default_java",
      "//third_party/android_deps:com_android_support_support_annotations_java",
    ]
  }

  junit_binary("android_examples_junit_tests") {
    sources = [
      "androidjunit/src/org/appspot/apprtc/BluetoothManagerTest.java",
      "androidjunit/src/org/appspot/apprtc/DirectRTCClientTest.java",
      "androidjunit/src/org/appspot/apprtc/TCPChannelClientTest.java",
    ]

    deps = [
      ":AppRTCMobile_javalib",
      "../sdk/android:peerconnection_java",
      "//base:base_java_test_support",
      "//third_party/androidx:androidx_test_core_java",
      "//third_party/google-truth:google_truth_java",
    ]

    additional_jar_files = [ [
          "../sdk/android/tests/resources/robolectric.properties",
          "robolectric.properties",
        ] ]
  }
}

if (!build_with_chromium) {
  # Doesn't build within Chrome on Win.
  rtc_executable("stun_prober") {
    testonly = true
    sources = [ "stunprober/main.cc" ]
    deps = [
      "../p2p:libstunprober",
      "../p2p:rtc_p2p",
      "../rtc_base",
      "../rtc_base:checks",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:socket_address",
      "../rtc_base:threading",
      "//third_party/abseil-cpp/absl/flags:flag",
      "//third_party/abseil-cpp/absl/flags:parse",
    ]
  }
}
