# Copyright 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_ios) {
  import("//build/config/ios/rules.gni")
  import("//build/config/ios/ios_sdk.gni")
}

declare_args() {
  # Determine whether or not to include metal rendering
  rtc_use_metal_rendering = is_mac || (is_ios && current_cpu == "arm64")
}

group("sdk") {
  public_deps = []
  if (!build_with_chromium) {
    if (is_android) {
      public_deps += [ "android" ]
    }
    if (is_ios) {
      public_deps += [ ":framework_objc" ]
    }
  }
}

if (is_ios || is_mac) {
  config("common_config_objc") {
    include_dirs = [
      "objc/Framework/Classes",
      "objc/Framework/Classes/Audio",
      "objc/Framework/Classes/Common",
      "objc/Framework/Classes/Metal",
      "objc/Framework/Classes/PeerConnection",
      "objc/Framework/Classes/UI",
      "objc/Framework/Classes/Video",
      "objc/Framework/Classes/VideoToolbox",
      "objc/Framework/Headers",
    ]
    cflags = [
      "-Wstrict-overflow",
      "-Wmissing-field-initializers",
    ]
  }

  rtc_static_library("common_objc") {
    sources = [
      "objc/Framework/Classes/Common/NSString+StdString.h",
      "objc/Framework/Classes/Common/NSString+StdString.mm",
      "objc/Framework/Classes/Common/RTCDispatcher+Private.h",
      "objc/Framework/Classes/Common/RTCDispatcher.m",
      "objc/Framework/Classes/Common/RTCFieldTrials.mm",
      "objc/Framework/Classes/Common/RTCLogging.mm",
      "objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.h",
      "objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m",
      "objc/Framework/Classes/Common/helpers.h",
      "objc/Framework/Classes/Common/helpers.mm",
      "objc/Framework/Classes/Common/scoped_cftyperef.h",
      "objc/Framework/Headers/WebRTC/RTCDispatcher.h",
      "objc/Framework/Headers/WebRTC/RTCFieldTrials.h",
      "objc/Framework/Headers/WebRTC/RTCLogging.h",
      "objc/Framework/Headers/WebRTC/RTCMacros.h",
    ]

    deps = [
      "../rtc_base:checks",
      "../rtc_base:rtc_base",
    ]
    configs += [ "..:common_objc" ]

    public_configs = [ ":common_config_objc" ]

    if (is_ios) {
      sources += [
        "objc/Framework/Classes/Common/UIDevice+RTCDevice.mm",
        "objc/Framework/Headers/WebRTC/UIDevice+RTCDevice.h",
      ]
    }

    if (!build_with_chromium) {
      sources += [
        "objc/Framework/Classes/Common/RTCCallbackLogger.mm",
        "objc/Framework/Classes/Common/RTCFileLogger.mm",
        "objc/Framework/Headers/WebRTC/RTCCallbackLogger.h",
        "objc/Framework/Headers/WebRTC/RTCFileLogger.h",
      ]
    }
  }

  if (!build_with_chromium) {
    if (is_ios) {
      rtc_static_library("native_api_audio_device_module") {
        visibility = [ "*" ]

        sources = [
          "objc/Framework/Native/api/audio_device_module.h",
          "objc/Framework/Native/api/audio_device_module.mm",
        ]

        deps = [
          ":audio_device",
          "../modules/audio_device:audio_device_api",
          "../modules/audio_device:audio_device_generic",
          "../rtc_base:checks",
          "../rtc_base:rtc_base_approved",
          "../system_wrappers",
          "../system_wrappers:metrics_api",
        ]

        if (is_clang) {
          # Suppress warnings from the Chromium Clang plugin
          # (bugs.webrtc.org/163).
          suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
        }
      }

      rtc_source_set("audio_session_observer") {
        visibility = [ ":*" ]

        sources = [
          "objc/Framework/Native/src/audio/audio_session_observer.h",
        ]

        deps = [
          "../rtc_base:rtc_base",
        ]
      }

      rtc_static_library("audio_device") {
        visibility = [ "*" ]

        sources = [
          "objc/Framework/Native/src/audio/audio_device_ios.h",
          "objc/Framework/Native/src/audio/audio_device_ios.mm",
          "objc/Framework/Native/src/audio/audio_device_module_ios.h",
          "objc/Framework/Native/src/audio/audio_device_module_ios.mm",
          "objc/Framework/Native/src/audio/voice_processing_audio_unit.h",
          "objc/Framework/Native/src/audio/voice_processing_audio_unit.mm",
        ]

        deps = [
          ":audio_objc",
          ":audio_session_observer",
          ":common_objc",
          "../api:array_view",
          "../modules/audio_device:audio_device_api",
          "../modules/audio_device:audio_device_buffer",
          "../modules/audio_device:audio_device_generic",
          "../rtc_base:checks",
          "../rtc_base:rtc_base",
          "../rtc_base/system:fallthrough",
          "../sdk:common_objc",
          "../system_wrappers:metrics_api",
        ]

        if (is_clang) {
          # Suppress warnings from the Chromium Clang plugin
          # (bugs.webrtc.org/163).
          suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
        }
      }

      rtc_static_library("audio_objc") {
        sources = [
          "objc/Framework/Classes/Audio/RTCAudioSession+Configuration.mm",
          "objc/Framework/Classes/Audio/RTCAudioSession+Private.h",
          "objc/Framework/Classes/Audio/RTCAudioSession.mm",
          "objc/Framework/Classes/Audio/RTCAudioSessionConfiguration.m",
          "objc/Framework/Classes/Audio/RTCNativeAudioSessionDelegateAdapter.h",
          "objc/Framework/Classes/Audio/RTCNativeAudioSessionDelegateAdapter.mm",
          "objc/Framework/Headers/WebRTC/RTCAudioSession.h",
          "objc/Framework/Headers/WebRTC/RTCAudioSessionConfiguration.h",
        ]
        configs += [ "..:common_objc" ]

        public_configs = [ ":common_config_objc" ]

        deps = [
          ":audio_session_observer",
          ":common_objc",
          "../rtc_base:checks",
          "../rtc_base:rtc_base",
          "../rtc_base:rtc_base_approved",
        ]

        if (is_clang) {
          # Suppress warnings from the Chromium Clang plugin
          # (bugs.webrtc.org/163).
          suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
        }
      }
    }

    rtc_static_library("videosource_objc") {
      sources = [
        "objc/Framework/Classes/PeerConnection/RTCVideoSource+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCVideoSource.mm",
        "objc/Framework/Headers/WebRTC/RTCVideoSource.h",
      ]

      deps = [
        ":common_objc",
        ":mediasource_objc",
        ":native_video",
        ":videoframebuffer_objc",
        "../api:libjingle_peerconnection_api",
        "../api/video:video_frame",
        "../api/video:video_frame_i420",
        "../common_video",
        "../media:rtc_media_base",
        "../rtc_base:checks",
        "../rtc_base:rtc_base",
        "//third_party/libyuv",
      ]

      configs += [ "..:common_objc" ]
      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_static_library("videoframebuffer_objc") {
      sources = [
        "objc/Framework/Classes/PeerConnection/RTCVideoFrame.mm",
        "objc/Framework/Classes/Video/RTCCVPixelBuffer.mm",
        "objc/Framework/Classes/Video/RTCI420Buffer+Private.h",
        "objc/Framework/Classes/Video/RTCI420Buffer.mm",
        "objc/Framework/Headers/WebRTC/RTCVideoFrame.h",
        "objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h",
      ]
      deps = [
        ":common_objc",
        "//api/video:video_frame",
        "//api/video:video_frame_i420",
        "//common_video",
        "//rtc_base:checks",
        "//rtc_base:rtc_base_approved",
        "//third_party/libyuv",
      ]
      configs += [ "..:common_objc" ]
    }

    rtc_static_library("video_objc") {
      sources = [
        "objc/Framework/Classes/Video/AVCaptureSession+DevicePosition.h",
        "objc/Framework/Classes/Video/AVCaptureSession+DevicePosition.mm",
        "objc/Framework/Classes/Video/RTCDefaultShader.h",
        "objc/Framework/Classes/Video/RTCDefaultShader.mm",
        "objc/Framework/Classes/Video/RTCI420TextureCache.h",
        "objc/Framework/Classes/Video/RTCI420TextureCache.mm",
        "objc/Framework/Classes/Video/RTCOpenGLDefines.h",
        "objc/Framework/Classes/Video/RTCShader.h",
        "objc/Framework/Classes/Video/RTCShader.mm",
        "objc/Framework/Headers/WebRTC/RTCVideoViewShading.h",
      ]
      libs = []
      if (is_ios) {
        sources += [
          "objc/Framework/Classes/Video/RTCNV12TextureCache.h",
          "objc/Framework/Classes/Video/RTCNV12TextureCache.m",
        ]
        libs += [
          "GLKit.framework",
          "OpenGLES.framework",
          "QuartzCore.framework",
        ]
      } else if (is_mac) {
        libs += [
          "CoreMedia.framework",
          "CoreVideo.framework",
          "OpenGL.framework",
        ]
      }

      deps = [
        ":common_objc",
        ":mediaconstraints_objc",
        ":native_video",
        ":videoframebuffer_objc",
        ":videosource_objc",
        "../api:libjingle_peerconnection_api",
        "../api:optional",
        "../api/video:video_frame",
        "../common_video",
        "../media:rtc_media_base",
        "../rtc_base:checks",
        "../rtc_base:rtc_base",
      ]

      configs += [ "..:common_objc" ]
      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_static_library("ui_objc") {
      visibility = [ "*" ]
      allow_poison = [
        "audio_codecs",  # TODO(bugs.webrtc.org/8396): Remove.
        "software_video_codecs",  # TODO(bugs.webrtc.org/7925): Remove.
      ]
      if (is_ios) {
        sources = [
          "objc/Framework/Classes/UI/RTCCameraPreviewView.m",
          "objc/Framework/Classes/UI/RTCEAGLVideoView.m",
          "objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h",
          "objc/Framework/Headers/WebRTC/RTCEAGLVideoView.h",
        ]
      }
      if (is_mac) {
        sources = [
          "objc/Framework/Classes/UI/RTCNSGLVideoView.m",
          "objc/Framework/Headers/WebRTC/RTCNSGLVideoView.h",
        ]
      }
      configs += [ "..:common_objc" ]
      deps = [
        ":common_objc",
        ":video_objc",
        ":videocapture_objc",
        ":videoframebuffer_objc",
      ]
    }

    if (rtc_use_metal_rendering) {
      rtc_static_library("metal_objc") {
        visibility = [ "*" ]
        allow_poison = [
          "audio_codecs",  # TODO(bugs.webrtc.org/8396): Remove.
          "software_video_codecs",  # TODO(bugs.webrtc.org/7925): Remove.
        ]
        sources = [
          "objc/Framework/Classes/Metal/RTCMTLI420Renderer.h",
          "objc/Framework/Classes/Metal/RTCMTLI420Renderer.mm",
          "objc/Framework/Classes/Metal/RTCMTLRenderer+Private.h",
          "objc/Framework/Classes/Metal/RTCMTLRenderer.h",
          "objc/Framework/Classes/Metal/RTCMTLRenderer.mm",
        ]
        if (is_ios) {
          sources += [
            "objc/Framework/Classes/Metal/RTCMTLNV12Renderer.h",
            "objc/Framework/Classes/Metal/RTCMTLNV12Renderer.mm",
            "objc/Framework/Classes/Metal/RTCMTLRGBRenderer.h",
            "objc/Framework/Classes/Metal/RTCMTLRGBRenderer.mm",
            "objc/Framework/Classes/Metal/RTCMTLVideoView.m",
            "objc/Framework/Headers/WebRTC/RTCMTLVideoView.h",
          ]
        }
        if (is_mac) {
          sources += [
            "objc/Framework/Classes/Metal/RTCMTLNSVideoView.m",
            "objc/Framework/Headers/WebRTC/RTCMTLNSVideoView.h",
          ]
        }
        libs = [
          "CoreVideo.framework",
          "Metal.framework",
          "MetalKit.framework",
        ]
        deps = [
          ":common_objc",
          ":peerconnectionfactory_base_objc",
          ":video_objc",
          ":videoframebuffer_objc",
          ":videorenderer_objc",
          "../api/video:video_frame",
          "../rtc_base:checks",
          "../rtc_base:rtc_base_approved",
        ]
        configs += [ "..:common_objc" ]
        public_configs = [ ":common_config_objc" ]
      }
    }

    rtc_static_library("videocapturebase_objc") {
      visibility = [ "*" ]
      sources = [
        "objc/Framework/Classes/PeerConnection/RTCVideoCapturer.m",
        "objc/Framework/Headers/WebRTC/RTCVideoCapturer.h",
      ]
      libs = [ "AVFoundation.framework" ]

      configs += [ "..:common_objc" ]

      public_configs = [ ":common_config_objc" ]

      deps = [
        ":common_objc",
        ":videoframebuffer_objc",
      ]
    }

    rtc_static_library("videocapture_objc") {
      visibility = [ "*" ]
      allow_poison = [
        "audio_codecs",  # TODO(bugs.webrtc.org/8396): Remove.
        "software_video_codecs",  # TODO(bugs.webrtc.org/7925): Remove.
      ]
      sources = [
        "objc/Framework/Classes/PeerConnection/RTCCameraVideoCapturer.m",
        "objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h",
      ]
      if (is_ios) {
        sources += [
          "objc/Framework/Classes/PeerConnection/RTCFileVideoCapturer.m",
          "objc/Framework/Headers/WebRTC/RTCFileVideoCapturer.h",
        ]
      }
      libs = [ "AVFoundation.framework" ]

      configs += [ "..:common_objc" ]

      public_configs = [ ":common_config_objc" ]

      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 = [
        ":common_objc",
        ":video_objc",
        ":videocapturebase_objc",
        ":videoframebuffer_objc",
      ]
    }

    rtc_static_library("videocodec_objc") {
      visibility = [ "*" ]
      sources = [
        "objc/Framework/Classes/PeerConnection/RTCEncodedImage.mm",
        "objc/Framework/Classes/PeerConnection/RTCRtpFragmentationHeader.mm",
        "objc/Framework/Classes/PeerConnection/RTCVideoCodec+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCVideoCodec.mm",
        "objc/Framework/Classes/PeerConnection/RTCVideoCodecH264.mm",
        "objc/Framework/Classes/PeerConnection/RTCVideoEncoderSettings.mm",
        "objc/Framework/Headers/WebRTC/RTCVideoCodec.h",
        "objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h",
        "objc/Framework/Headers/WebRTC/RTCVideoCodecH264.h",
      ]
      if (is_ios) {
        sources += [
          "objc/Framework/Classes/Video/UIDevice+H264Profile.h",
          "objc/Framework/Classes/Video/UIDevice+H264Profile.mm",
        ]
      }
      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" ]
      }
      public_configs = [ ":common_config_objc" ]
      deps = [
        ":common_objc",
        "../api/video_codecs:video_codecs_api",
        "../common_video",
        "../media:rtc_h264_profile_id",
        "../media:rtc_media_base",
        "../modules:module_api",
        "../modules/video_coding:video_codec_interface",
        "../rtc_base:rtc_base_approved",
        "../system_wrappers:field_trial_api",
      ]
    }

    rtc_static_library("default_codec_factory_objc") {
      sources = [
        "objc/Framework/Classes/PeerConnection/RTCDefaultVideoDecoderFactory.m",
        "objc/Framework/Classes/PeerConnection/RTCDefaultVideoEncoderFactory.m",
      ]

      deps = [
        ":common_objc",
        ":native_video",
        ":videocodec_objc",
        ":vp8",
        ":vp9",
      ]
    }

    rtc_static_library("vp8") {
      visibility = [ "*" ]
      allow_poison = [ "software_video_codecs" ]
      sources = [
        "objc/Framework/Classes/PeerConnection/RTCVideoCodecVP8.mm",
        "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h",
        "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.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 = [
        ":wrapped_native_codec_objc",
        "../modules/video_coding:webrtc_vp8",
        "../system_wrappers:metrics_default",
      ]
    }

    rtc_static_library("vp9") {
      visibility = [ "*" ]
      allow_poison = [ "software_video_codecs" ]
      sources = [
        "objc/Framework/Classes/PeerConnection/RTCVideoCodecVP9.mm",
        "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h",
        "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.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 = [
        ":wrapped_native_codec_objc",
        "../modules/video_coding:webrtc_vp9",
        "../system_wrappers:metrics_default",
      ]
    }

    # Build the PeerConnectionFactory without audio/video support.
    # This target depends on the objc_peeerconnectionfactory_base which still
    # includes some audio/video related objects such as RTCAudioSource because
    # these objects are just thin wrappers of native C++ interfaces required
    # when implementing webrtc::PeerConnectionFactoryInterface and
    # webrtc::PeerConnectionInterface.
    # The applications which only use WebRTC DataChannel can depend on this.
    rtc_static_library("peerconnectionfactory_no_media_objc") {
      visibility = [ "*" ]
      allow_poison = [
        "audio_codecs",  # TODO(bugs.webrtc.org/8396): Remove.
        "software_video_codecs",  # TODO(bugs.webrtc.org/7925): Remove.
      ]
      defines = [ "HAVE_NO_MEDIA" ]

      sources = [
        "objc/Framework/Classes/Common/noop.mm",
      ]

      public_configs = [ ":common_config_objc" ]

      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 = [
        ":native_api",
        ":native_video",
        ":peerconnectionfactory_base_objc",
        "../api:libjingle_peerconnection_api",
        "../rtc_base:rtc_base",
      ]
    }

    rtc_static_library("mediaconstraints_objc") {
      sources = [
        "objc/Framework/Classes/PeerConnection/RTCMediaConstraints+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCMediaConstraints.mm",
        "objc/Framework/Headers/WebRTC/RTCMediaConstraints.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" ]
      }

      public_configs = [ ":common_config_objc" ]
      deps = [
        ":common_objc",
        "../api:libjingle_peerconnection_api",
      ]
    }

    rtc_source_set("videorenderer_objc") {
      sources = [
        "objc/Framework/Headers/WebRTC/RTCVideoRenderer.h",
      ]

      configs += [ "..:common_objc" ]
      visibility = [ "*" ]
      public_configs = [ ":common_config_objc" ]
    }

    rtc_static_library("videorendereradapter_objc") {
      visibility = [ "*" ]
      allow_poison = [
        "audio_codecs",  # TODO(bugs.webrtc.org/8396): Remove.
        "software_video_codecs",  # TODO(bugs.webrtc.org/7925): Remove.
      ]
      sources = [
        "objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter.h",
        "objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter.mm",
      ]

      configs += [ "..:common_objc" ]
      public_configs = [ ":common_config_objc" ]

      deps = [
        ":common_objc",
        ":native_api",
        ":videoframebuffer_objc",
        ":videorenderer_objc",
        "../api:libjingle_peerconnection_api",
      ]
    }

    rtc_static_library("mediasource_objc") {
      sources = [
        "objc/Framework/Classes/PeerConnection/RTCMediaSource+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCMediaSource.mm",
        "objc/Framework/Headers/WebRTC/RTCMediaSource.h",
      ]

      configs += [ "..:common_objc" ]
      public_configs = [ ":common_config_objc" ]

      deps = [
        ":common_objc",
        "../api:libjingle_peerconnection_api",
        "../rtc_base:checks",
      ]
    }

    rtc_static_library("peerconnectionfactory_base_objc") {
      visibility = [ "*" ]
      allow_poison = [
        "audio_codecs",  # TODO(bugs.webrtc.org/8396): Remove.
        "software_video_codecs",  # TODO(bugs.webrtc.org/7925): Remove.
      ]
      sources = [
        "objc/Framework/Classes/PeerConnection/RTCAudioSource+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCAudioSource.mm",
        "objc/Framework/Classes/PeerConnection/RTCAudioTrack+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCAudioTrack.mm",
        "objc/Framework/Classes/PeerConnection/RTCConfiguration+Native.h",
        "objc/Framework/Classes/PeerConnection/RTCConfiguration+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCConfiguration.mm",
        "objc/Framework/Classes/PeerConnection/RTCDataChannel+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCDataChannel.mm",
        "objc/Framework/Classes/PeerConnection/RTCDataChannelConfiguration+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCDataChannelConfiguration.mm",
        "objc/Framework/Classes/PeerConnection/RTCDtmfSender+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCDtmfSender.mm",
        "objc/Framework/Classes/PeerConnection/RTCIceCandidate+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCIceCandidate.mm",
        "objc/Framework/Classes/PeerConnection/RTCIceServer+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCIceServer.mm",
        "objc/Framework/Classes/PeerConnection/RTCIntervalRange+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCIntervalRange.mm",
        "objc/Framework/Classes/PeerConnection/RTCLegacyStatsReport+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCLegacyStatsReport.mm",
        "objc/Framework/Classes/PeerConnection/RTCMediaStream+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCMediaStream.mm",
        "objc/Framework/Classes/PeerConnection/RTCMediaStreamTrack+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCMediaStreamTrack.mm",
        "objc/Framework/Classes/PeerConnection/RTCMetrics.mm",
        "objc/Framework/Classes/PeerConnection/RTCMetricsSampleInfo+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCMetricsSampleInfo.mm",
        "objc/Framework/Classes/PeerConnection/RTCPeerConnection+DataChannel.mm",
        "objc/Framework/Classes/PeerConnection/RTCPeerConnection+Native.h",
        "objc/Framework/Classes/PeerConnection/RTCPeerConnection+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCPeerConnection+Stats.mm",
        "objc/Framework/Classes/PeerConnection/RTCPeerConnection.mm",
        "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Native.h",
        "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactory.mm",
        "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactoryOptions+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCPeerConnectionFactoryOptions.mm",
        "objc/Framework/Classes/PeerConnection/RTCRtcpParameters+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCRtcpParameters.mm",
        "objc/Framework/Classes/PeerConnection/RTCRtpCodecParameters+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCRtpCodecParameters.mm",
        "objc/Framework/Classes/PeerConnection/RTCRtpEncodingParameters+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCRtpEncodingParameters.mm",
        "objc/Framework/Classes/PeerConnection/RTCRtpParameters+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCRtpParameters.mm",
        "objc/Framework/Classes/PeerConnection/RTCRtpReceiver+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCRtpReceiver.mm",
        "objc/Framework/Classes/PeerConnection/RTCRtpSender+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCRtpSender.mm",
        "objc/Framework/Classes/PeerConnection/RTCRtpTransceiver+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCRtpTransceiver.mm",
        "objc/Framework/Classes/PeerConnection/RTCSSLAdapter.mm",
        "objc/Framework/Classes/PeerConnection/RTCSessionDescription+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCSessionDescription.mm",
        "objc/Framework/Classes/PeerConnection/RTCTracing.mm",
        "objc/Framework/Classes/PeerConnection/RTCVideoTrack+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCVideoTrack.mm",
        "objc/Framework/Headers/WebRTC/RTCAudioSource.h",
        "objc/Framework/Headers/WebRTC/RTCAudioTrack.h",
        "objc/Framework/Headers/WebRTC/RTCConfiguration.h",
        "objc/Framework/Headers/WebRTC/RTCDataChannel.h",
        "objc/Framework/Headers/WebRTC/RTCDataChannelConfiguration.h",
        "objc/Framework/Headers/WebRTC/RTCDtmfSender.h",
        "objc/Framework/Headers/WebRTC/RTCIceCandidate.h",
        "objc/Framework/Headers/WebRTC/RTCIceServer.h",
        "objc/Framework/Headers/WebRTC/RTCIntervalRange.h",
        "objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.h",
        "objc/Framework/Headers/WebRTC/RTCMediaStream.h",
        "objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h",
        "objc/Framework/Headers/WebRTC/RTCMetrics.h",
        "objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h",
        "objc/Framework/Headers/WebRTC/RTCPeerConnection.h",
        "objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h",
        "objc/Framework/Headers/WebRTC/RTCPeerConnectionFactoryOptions.h",
        "objc/Framework/Headers/WebRTC/RTCRtcpParameters.h",
        "objc/Framework/Headers/WebRTC/RTCRtpCodecParameters.h",
        "objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h",
        "objc/Framework/Headers/WebRTC/RTCRtpParameters.h",
        "objc/Framework/Headers/WebRTC/RTCRtpReceiver.h",
        "objc/Framework/Headers/WebRTC/RTCRtpSender.h",
        "objc/Framework/Headers/WebRTC/RTCRtpTransceiver.h",
        "objc/Framework/Headers/WebRTC/RTCSSLAdapter.h",
        "objc/Framework/Headers/WebRTC/RTCSessionDescription.h",
        "objc/Framework/Headers/WebRTC/RTCTracing.h",
        "objc/Framework/Headers/WebRTC/RTCVideoTrack.h",
      ]

      configs += [ "..:common_objc" ]
      public_configs = [ ":common_config_objc" ]

      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 = [
        ":common_objc",
        ":mediaconstraints_objc",
        ":mediasource_objc",
        ":native_api",
        ":native_video",
        ":video_objc",
        ":videocodec_objc",
        ":videoframebuffer_objc",
        ":videorenderer_objc",
        ":videorendereradapter_objc",
        ":videosource_objc",
        "../api:libjingle_peerconnection_api",
        "../api/audio_codecs:builtin_audio_decoder_factory",
        "../api/video:video_frame",
        "../api/video_codecs:video_codecs_api",
        "../common_video",
        "../media:rtc_media_base",
        "../modules:module_api",
        "../modules/video_coding:video_codec_interface",
        "../pc:create_pc_factory",
        "../pc:peerconnection",
        "../rtc_base:checks",
        "../rtc_base:rtc_base",
      ]

      if (is_ios) {
        deps += [ ":native_api_audio_device_module" ]
      }
    }

    if (rtc_include_tests) {
      if (is_ios) {
        rtc_source_set("sdk_unittests_sources") {
          testonly = true
          include_dirs = [
            "objc/Framework/Headers",
            "objc/Framework/Classes",
          ]

          sources = [
            "objc/Framework/UnitTests/ObjCVideoTrackSource_xctest.mm",
            "objc/Framework/UnitTests/RTCCVPixelBuffer_xctest.mm",
            "objc/Framework/UnitTests/RTCCallbackLogger_xctest.m",
            "objc/Framework/UnitTests/RTCDoNotPutCPlusPlusInFrameworkHeaders_xctest.m",
            "objc/Framework/UnitTests/RTCFileVideoCapturer_xctest.mm",
            "objc/Framework/UnitTests/frame_buffer_helpers.h",
            "objc/Framework/UnitTests/frame_buffer_helpers.mm",
          ]

          # TODO(peterhanspers): Reenable these tests on simulator.
          # See bugs.webrtc.org/7812
          if (!use_ios_simulator) {
            sources += [
              "objc/Framework/UnitTests/RTCAudioDeviceModule_xctest.mm",
              "objc/Framework/UnitTests/RTCAudioDevice_xctest.mm",
            ]
          }

          deps = [
            ":audio_device",
            ":audio_objc",
            ":common_objc",
            ":framework_objc",
            ":native_api",
            ":native_api_audio_device_module",
            ":native_video",
            ":videocapture_objc",
            ":videoframebuffer_objc",
            ":videosource_objc",
            ":videotoolbox_objc",
            "../../system_wrappers:system_wrappers",
            "../../system_wrappers:system_wrappers_default",
            "../api/video:video_frame_i420",
            "../common_video:common_video",
            "../media:rtc_media_base",
            "../media:rtc_media_tests_utils",
            "../modules:module_api",
            "../rtc_base:rtc_base",
            "../rtc_base:rtc_base_tests_utils",
            "//third_party/libyuv",
          ]

          if (rtc_use_metal_rendering) {
            sources += [ "objc/Framework/UnitTests/RTCMTLVideoView_xctest.m" ]
            deps += [ ":metal_objc" ]
          }

          public_deps = [
            "//build/config/ios:xctest",
            "//third_party/ocmock",
          ]

          include_dirs += [ "$root_out_dir/WebRTC.framework/Headers/" ]

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

        bundle_data("sdk_unittests_bundle_data") {
          sources = [
            "objc/Framework/UnitTests/audio_short16.pcm",
            "objc/Framework/UnitTests/audio_short44.pcm",
            "objc/Framework/UnitTests/audio_short48.pcm",

            # Sample video taken from https://media.xiph.org/video/derf/
            "objc/Framework/UnitTests/foreman.mp4",
          ]
          outputs = [
            "{{bundle_resources_dir}}/{{source_file_part}}",
          ]
        }

        rtc_ios_xctest_test("sdk_unittests") {
          info_plist = "//test/ios/Info.plist"
          sources = [
            "objc/Framework/UnitTests/main.m",
          ]

          _bundle_id_suffix = ios_generic_test_bundle_id_suffix
          extra_substitutions = [ "GTEST_BUNDLE_ID_SUFFIX=$_bundle_id_suffix" ]
          deps = [
            ":sdk_unittests_bundle_data",
            ":sdk_unittests_sources",
          ]
          ldflags = [ "-all_load" ]

          if (is_clang) {
            # Suppress warnings from the Chromium Clang plugin
            # (bugs.webrtc.org/163).
            suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
          }
        }
      }

      # TODO(denicija): once all tests are migrated to xctest remove this source set.
      rtc_source_set("sdk_unittests_objc") {
        testonly = true

        sources = [
          "objc/Framework/UnitTests/RTCConfigurationTest.mm",
          "objc/Framework/UnitTests/RTCDataChannelConfigurationTest.mm",
          "objc/Framework/UnitTests/RTCIceCandidateTest.mm",
          "objc/Framework/UnitTests/RTCIceServerTest.mm",
          "objc/Framework/UnitTests/RTCIntervalRangeTests.mm",
          "objc/Framework/UnitTests/RTCMediaConstraintsTest.mm",
          "objc/Framework/UnitTests/RTCPeerConnectionTest.mm",
          "objc/Framework/UnitTests/RTCSessionDescriptionTest.mm",
          "objc/Framework/UnitTests/RTCTracingTest.mm",
          "objc/Framework/UnitTests/objc_video_decoder_factory_tests.mm",
          "objc/Framework/UnitTests/objc_video_encoder_factory_tests.mm",
          "objc/Framework/UnitTests/scoped_cftyperef_tests.mm",
        ]
        if (is_ios) {
          sources +=
              [ "objc/Framework/UnitTests/RTCCameraVideoCapturerTests.mm" ]
        }

        # |-ObjC| flag needed to make sure category method implementations
        # are included:
        # https://developer.apple.com/library/mac/qa/qa1490/_index.html
        ldflags = [ "-ObjC" ]

        defines = [ "GTEST_RELATIVE_PATH" ]
        deps = [
          ":common_objc",
          ":mediaconstraints_objc",
          ":native_api",
          ":native_video",
          ":peerconnectionfactory_base_objc",
          ":video_objc",
          ":videocapture_objc",
          ":videocodec_objc",
          ":videoframebuffer_objc",
          ":videosource_objc",
          ":videotoolbox_objc",
          "../../system_wrappers:system_wrappers_default",
          "../api/video_codecs:video_codecs_api",
          "../media:rtc_media_base",
          "../modules:module_api",
          "../modules/video_coding:video_codec_interface",
          "../rtc_base:rtc_base_tests_utils",
          "//test:test_support",
          "//third_party/ocmock",
        ]

        if (is_ios) {
          sources += [ "objc/Framework/UnitTests/RTCAudioSessionTest.mm" ]
          deps += [ ":audio_objc" ]
        }

        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_ios) {
      ios_framework_bundle_with_umbrella_header("framework_objc") {
        info_plist = "objc/Framework/Info.plist"
        output_name = "WebRTC"

        common_objc_headers = [
          "objc/Framework/Headers/WebRTC/RTCAudioSession.h",
          "objc/Framework/Headers/WebRTC/RTCVideoCodec.h",
          "objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h",
          "objc/Framework/Headers/WebRTC/RTCAudioSessionConfiguration.h",
          "objc/Framework/Headers/WebRTC/RTCAudioSource.h",
          "objc/Framework/Headers/WebRTC/RTCAudioTrack.h",
          "objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h",
          "objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h",
          "objc/Framework/Headers/WebRTC/RTCConfiguration.h",
          "objc/Framework/Headers/WebRTC/RTCDataChannel.h",
          "objc/Framework/Headers/WebRTC/RTCDataChannelConfiguration.h",
          "objc/Framework/Headers/WebRTC/RTCDispatcher.h",
          "objc/Framework/Headers/WebRTC/RTCEAGLVideoView.h",
          "objc/Framework/Headers/WebRTC/RTCFieldTrials.h",
          "objc/Framework/Headers/WebRTC/RTCFileVideoCapturer.h",
          "objc/Framework/Headers/WebRTC/RTCIceCandidate.h",
          "objc/Framework/Headers/WebRTC/RTCIceServer.h",
          "objc/Framework/Headers/WebRTC/RTCIntervalRange.h",
          "objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.h",
          "objc/Framework/Headers/WebRTC/RTCLogging.h",
          "objc/Framework/Headers/WebRTC/RTCMacros.h",
          "objc/Framework/Headers/WebRTC/RTCMediaConstraints.h",
          "objc/Framework/Headers/WebRTC/RTCMediaSource.h",
          "objc/Framework/Headers/WebRTC/RTCMediaStream.h",
          "objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h",
          "objc/Framework/Headers/WebRTC/RTCMetrics.h",
          "objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h",
          "objc/Framework/Headers/WebRTC/RTCPeerConnection.h",
          "objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h",
          "objc/Framework/Headers/WebRTC/RTCPeerConnectionFactoryOptions.h",
          "objc/Framework/Headers/WebRTC/RTCRtpCodecParameters.h",
          "objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h",
          "objc/Framework/Headers/WebRTC/RTCRtpParameters.h",
          "objc/Framework/Headers/WebRTC/RTCRtpReceiver.h",
          "objc/Framework/Headers/WebRTC/RTCRtpSender.h",
          "objc/Framework/Headers/WebRTC/RTCRtpTransceiver.h",
          "objc/Framework/Headers/WebRTC/RTCDtmfSender.h",
          "objc/Framework/Headers/WebRTC/RTCSSLAdapter.h",
          "objc/Framework/Headers/WebRTC/RTCSessionDescription.h",
          "objc/Framework/Headers/WebRTC/RTCTracing.h",
          "objc/Framework/Headers/WebRTC/RTCVideoCapturer.h",
          "objc/Framework/Headers/WebRTC/RTCVideoCodecH264.h",
          "objc/Framework/Headers/WebRTC/RTCVideoFrame.h",
          "objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h",
          "objc/Framework/Headers/WebRTC/RTCVideoRenderer.h",
          "objc/Framework/Headers/WebRTC/RTCVideoSource.h",
          "objc/Framework/Headers/WebRTC/RTCVideoTrack.h",
          "objc/Framework/Headers/WebRTC/RTCVideoViewShading.h",
          "objc/Framework/Headers/WebRTC/UIDevice+RTCDevice.h",
          "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h",
          "objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h",
          "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h",
          "objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h",
        ]

        if (!build_with_chromium) {
          common_objc_headers += [
            "objc/Framework/Headers/WebRTC/RTCCallbackLogger.h",
            "objc/Framework/Headers/WebRTC/RTCFileLogger.h",
          ]
        }
        if (rtc_use_metal_rendering) {
          common_objc_headers +=
              [ "objc/Framework/Headers/WebRTC/RTCMTLVideoView.h" ]
        }

        sources = common_objc_headers
        public_headers = common_objc_headers

        ldflags = [
          "-all_load",
          "-install_name",
          "@rpath/$output_name.framework/$output_name",
        ]

        deps = [
          ":audio_objc",
          ":common_objc",
          ":default_codec_factory_objc",
          ":native_api",
          ":native_video",
          ":peerconnectionfactory_base_objc",
          ":ui_objc",
          ":videocapture_objc",
          ":videocodec_objc",
          ":videotoolbox_objc",
          "../rtc_base:rtc_base_approved",
          "../system_wrappers:field_trial_default",
          "../system_wrappers:metrics_default",
          "../system_wrappers:runtime_enabled_features_default",
        ]
        if (rtc_use_metal_rendering) {
          deps += [ ":metal_objc" ]
        }

        libs = [
          "AVFoundation.framework",
          "CoreGraphics.framework",
          "CoreMedia.framework",
          "GLKit.framework",
        ]

        configs += [ "..:common_objc" ]

        public_configs = [ ":common_config_objc" ]

        if (!build_with_chromium && is_clang) {
          # Suppress warnings from the Chromium Clang plugin
          # (bugs.webrtc.org/163).
          configs -= [ "//build/config/clang:find_bad_constructs" ]
        }
      }
    }

    rtc_static_library("wrapped_native_codec_objc") {
      sources = [
        "objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoDecoder.h",
        "objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoDecoder.mm",
        "objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoEncoder.h",
        "objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoEncoder.mm",
      ]

      configs += [ "..:common_objc" ]
      public_configs = [ ":common_config_objc" ]

      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 = [
        ":common_objc",
        ":videocodec_objc",
        "../api/video_codecs:video_codecs_api",
        "../media:rtc_media_base",
      ]
    }

    # The native API is currently experimental and may change without notice.
    rtc_static_library("native_api") {
      visibility = [ "*" ]
      allow_poison = [
        "audio_codecs",  # TODO(bugs.webrtc.org/8396): Remove.
        "software_video_codecs",  # TODO(bugs.webrtc.org/7925): Remove.
      ]
      sources = [
        "objc/Framework/Native/api/video_capturer.h",
        "objc/Framework/Native/api/video_capturer.mm",
        "objc/Framework/Native/api/video_decoder_factory.h",
        "objc/Framework/Native/api/video_decoder_factory.mm",
        "objc/Framework/Native/api/video_encoder_factory.h",
        "objc/Framework/Native/api/video_encoder_factory.mm",
        "objc/Framework/Native/api/video_frame.h",
        "objc/Framework/Native/api/video_frame.mm",
        "objc/Framework/Native/api/video_frame_buffer.h",
        "objc/Framework/Native/api/video_frame_buffer.mm",
        "objc/Framework/Native/api/video_renderer.h",
        "objc/Framework/Native/api/video_renderer.mm",
      ]

      configs += [ "..:common_objc" ]

      public_configs = [ ":common_config_objc" ]

      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 = [
        ":native_video",
        ":videocapturebase_objc",
        ":videocodec_objc",
        ":videoframebuffer_objc",
        ":videorenderer_objc",
        "../api:libjingle_peerconnection_api",
        "../api/video:video_frame",
        "../api/video_codecs:video_codecs_api",
        "../common_video",
        "../rtc_base:rtc_base",
      ]
    }

    rtc_static_library("native_video") {
      sources = [
        "objc/Framework/Native/src/objc_frame_buffer.h",
        "objc/Framework/Native/src/objc_frame_buffer.mm",
        "objc/Framework/Native/src/objc_video_decoder_factory.h",
        "objc/Framework/Native/src/objc_video_decoder_factory.mm",
        "objc/Framework/Native/src/objc_video_encoder_factory.h",
        "objc/Framework/Native/src/objc_video_encoder_factory.mm",
        "objc/Framework/Native/src/objc_video_frame.h",
        "objc/Framework/Native/src/objc_video_frame.mm",
        "objc/Framework/Native/src/objc_video_renderer.h",
        "objc/Framework/Native/src/objc_video_renderer.mm",
        "objc/Framework/Native/src/objc_video_track_source.h",
        "objc/Framework/Native/src/objc_video_track_source.mm",
      ]

      configs += [ "..:common_objc" ]

      public_configs = [ ":common_config_objc" ]

      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 = [
        ":common_objc",
        ":videocapturebase_objc",
        ":videocodec_objc",
        ":videoframebuffer_objc",
        ":videorenderer_objc",
        ":wrapped_native_codec_objc",
        "../api/video:video_frame",
        "../api/video:video_frame_i420",
        "../api/video_codecs:video_codecs_api",
        "../common_video",
        "../media:rtc_audio_video",
        "../media:rtc_media_base",
        "../modules:module_api",
        "../modules/video_coding:video_codec_interface",
        "../rtc_base:checks",
        "../rtc_base:rtc_base",
      ]
    }

    rtc_static_library("video_toolbox_cc") {
      visibility = [ ":videotoolbox_objc" ]
      sources = [
        "objc/Framework/Classes/VideoToolbox/helpers.cc",
        "objc/Framework/Classes/VideoToolbox/helpers.h",
        "objc/Framework/Classes/VideoToolbox/nalu_rewriter.cc",
        "objc/Framework/Classes/VideoToolbox/nalu_rewriter.h",
      ]
      deps = [
        "../common_video",
        "../modules:module_api",
        "../modules/video_coding:webrtc_h264",
        "../rtc_base:checks",
        "../rtc_base:rtc_base_approved",
      ]
      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_static_library("videotoolbox_objc") {
      visibility = [ "*" ]
      allow_poison = [
        "audio_codecs",  # TODO(bugs.webrtc.org/8396): Remove.
        "software_video_codecs",  # TODO(bugs.webrtc.org/7925): Remove.
      ]
      sources = [
        "objc/Framework/Classes/VideoToolbox/RTCVideoDecoderH264.mm",
        "objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm",
      ]

      configs += [ "..:common_objc" ]

      deps = [
        ":common_objc",
        ":native_api",
        ":video_objc",
        ":video_toolbox_cc",
        ":videocodec_objc",
        ":videoframebuffer_objc",
        ":videosource_objc",
        "../api/video:video_frame",
        "../api/video_codecs:video_codecs_api",
        "../common_video",
        "../media:rtc_audio_video",
        "../media:rtc_media",
        "../media:rtc_media_base",
        "../modules:module_api",
        "../modules/video_coding:video_codec_interface",
        "../modules/video_coding:video_coding_utility",
        "../rtc_base:checks",
        "../rtc_base:rtc_base_approved",
        "//third_party/libyuv",
      ]

      libs = [
        "CoreFoundation.framework",
        "CoreMedia.framework",
        "CoreVideo.framework",
        "VideoToolbox.framework",
      ]

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