# 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("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/Headers/WebRTC/RTCAudioSession.h",
          "objc/Framework/Headers/WebRTC/RTCAudioSessionConfiguration.h",
        ]
        configs += [ "..:common_objc" ]

        public_configs = [ ":common_config_objc" ]

        deps = [
          ":common_objc",
          "../rtc_base:checks",
          "../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" ]
        }
      }
    }

    # Keep videotracksource related code in a separate target so that we can
    # build PeerConnectionFactory without audio/video support when that's called
    # for.
    rtc_static_library("videotracksource_objc") {
      sources = [
        "objc/Framework/Classes/Video/objcvideotracksource.h",
        "objc/Framework/Classes/Video/objcvideotracksource.mm",
      ]

      deps = [
        ":common_objc",
        ":videoframebuffer_objc",
        "../api:libjingle_peerconnection_api",
        "../api:video_frame_api",
        "../api:video_frame_api_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+Private.h",
        "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",
        "objc/Framework/Native/api/video_frame_buffer.h",
        "objc/Framework/Native/api/video_frame_buffer.mm",
        "objc/Framework/Native/src/objc_frame_buffer.h",
        "objc/Framework/Native/src/objc_frame_buffer.mm",
      ]
      deps = [
        ":common_objc",
        "//api:video_frame_api",
        "//api:video_frame_api_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",
        ":videotracksource_objc",
        "../api:libjingle_peerconnection_api",
        "../api:optional",
        "../api:video_frame_api",
        "../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 = [ "*" ]
      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 = [ "*" ]
        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/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",
          "../api:video_frame_api",
          "../rtc_base:checks",
          "../rtc_base:rtc_base_approved",
        ]
        configs += [ "..:common_objc" ]
        public_configs = [ ":common_config_objc" ]
      }
    }

    rtc_static_library("videocapture_objc") {
      visibility = [ "*" ]
      sources = [
        "objc/Framework/Classes/PeerConnection/RTCCameraVideoCapturer.m",
        "objc/Framework/Classes/PeerConnection/RTCVideoCapturer.m",
        "objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h",
        "objc/Framework/Headers/WebRTC/RTCVideoCapturer.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",
        ":videoframebuffer_objc",
      ]
    }

    rtc_static_library("videocodec_objc") {
      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 (!build_with_chromium && is_clang) {
        # Suppress warnings from the Chromium Clang plugin
        # (bugs.webrtc.org/163).
        suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
      }
      visibility = [ "*" ]
      public_configs = [ ":common_config_objc" ]
      deps = [
        ":common_objc",
        "../api/video_codecs:video_codecs_api",
        "../common_video",
        "../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",
      ]
      if (rtc_use_builtin_sw_codecs) {
        deps += [
          ":vp8",
          ":vp9",
        ]
      }
    }

    rtc_static_library("vp8") {
      visibility = [ "*" ]
      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 = [
        ":native_video",
        "../modules/video_coding:webrtc_vp8",
        "../system_wrappers:metrics_default",
      ]
    }

    rtc_static_library("vp9") {
      visibility = [ "*" ]
      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 = [
        ":native_video",
        "../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
    # target instead of rtc_sdk_objc.
    rtc_static_library("peerconnectionfactory_no_media_objc") {
      visibility = [ "*" ]
      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_static_library("peerconnectionfactory_base_objc") {
      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/RTCMediaSource+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCMediaSource.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/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/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/RTCVideoRendererAdapter+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter.h",
        "objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter.mm",
        "objc/Framework/Classes/PeerConnection/RTCVideoSource+Private.h",
        "objc/Framework/Classes/PeerConnection/RTCVideoSource.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/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/RTCSSLAdapter.h",
        "objc/Framework/Headers/WebRTC/RTCSessionDescription.h",
        "objc/Framework/Headers/WebRTC/RTCTracing.h",
        "objc/Framework/Headers/WebRTC/RTCVideoRenderer.h",
        "objc/Framework/Headers/WebRTC/RTCVideoSource.h",
        "objc/Framework/Headers/WebRTC/RTCVideoTrack.h",
      ]

      configs += [ "..:common_objc" ]
      visibility = [ "*" ]
      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",
        ":native_api",
        ":native_video",
        ":video_objc",
        ":videocodec_objc",
        ":videoframebuffer_objc",
        ":videotracksource_objc",
        "../api:libjingle_peerconnection_api",
        "../api:video_frame_api",
        "../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 (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/RTCCallbackLogger_xctest.m",
            "objc/Framework/UnitTests/RTCDoNotPutCPlusPlusInFrameworkHeaders_xctest.m",
            "objc/Framework/UnitTests/RTCFileVideoCapturer_xctest.mm",
          ]

          deps = [
            ":common_objc",
            ":framework_objc",
            ":videocapture_objc",
            ":videotoolbox_objc",
            ":videotracksource_objc",
            "../../system_wrappers:system_wrappers_default",
            "../media:rtc_media_base",
            "../modules:module_api",
            "../rtc_base:rtc_base",
            "../rtc_base:rtc_base_tests_utils",
          ]

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

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

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

        bundle_data("sdk_unittests_bundle_data") {
          # Sample video taken from https://media.xiph.org/video/derf/
          sources = [
            "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" ]
        }
      }

      # 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",
          ":videotoolbox_objc",
          ":videotracksource_objc",
          "../../system_wrappers:system_wrappers_default",
          "../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/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",
        ]
        if (rtc_use_builtin_sw_codecs) {
          common_objc_headers += [
            "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",
          ]
        }

        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) {
          common_objc_headers +=
              [ "objc/Framework/Headers/WebRTC/RTCMTLVideoView.h" ]
          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" ]
        }
      }
    }

    # The native API is currently experimental and may change without notice.
    rtc_static_library("native_api") {
      visibility = [ "*" ]
      sources = [
        "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",
      ]

      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",
        ":videocodec_objc",
        ":videoframebuffer_objc",
        "../api/video_codecs:video_codecs_api",
        "../common_video",
        "../rtc_base:rtc_base",
      ]
    }

    rtc_static_library("native_video") {
      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",
        "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",
      ]

      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",
        ":videoframebuffer_objc",
        ":videotracksource_objc",
        "../api:video_frame_api",
        "../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("rtc_sdk_objc") {
      complete_static_lib = true
      deps = [
        ":ui_objc",
        ":videocapture_objc",
        "../system_wrappers:field_trial_default",
        "../system_wrappers:metrics_default",
        "../system_wrappers:runtime_enabled_features_default",
      ]
    }

    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 = [ "*" ]
      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",
        ":videotracksource_objc",
        "../api:video_frame_api",
        "../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",
        "../system_wrappers",
        "//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" ]
      }
    }
  }
}
