# 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("../build/webrtc.gni")
if (is_mac) {
  import("//build/config/mac/mac_sdk.gni")
  import("//build/config/mac/rules.gni")
}
if (is_ios) {
  import("//build/config/ios/rules.gni")
}

if (is_ios || (is_mac && mac_deployment_target == "10.7")) {
  config("rtc_sdk_common_objc_config") {
    include_dirs = [
      "objc/Framework/Classes",
      "objc/Framework/Headers",
    ]
  }

  rtc_source_set("rtc_sdk_common_objc") {
    deps = [
      "../base:rtc_base",
    ]
    configs += [ "//build/config/compiler:enable_arc" ]
    public_configs = [ ":rtc_sdk_common_objc_config" ]
    sources = [
      "objc/Framework/Classes/NSString+StdString.h",
      "objc/Framework/Classes/NSString+StdString.mm",
      "objc/Framework/Classes/RTCDispatcher.m",
      "objc/Framework/Classes/RTCFieldTrials.mm",
      "objc/Framework/Classes/RTCLogging.mm",
      "objc/Framework/Classes/RTCMetrics.mm",
      "objc/Framework/Classes/RTCMetricsSampleInfo+Private.h",
      "objc/Framework/Classes/RTCMetricsSampleInfo.mm",
      "objc/Framework/Classes/RTCSSLAdapter.mm",
      "objc/Framework/Classes/RTCTracing.mm",
      "objc/Framework/Headers/WebRTC/RTCDispatcher.h",
      "objc/Framework/Headers/WebRTC/RTCFieldTrials.h",
      "objc/Framework/Headers/WebRTC/RTCLogging.h",
      "objc/Framework/Headers/WebRTC/RTCMacros.h",
      "objc/Framework/Headers/WebRTC/RTCMetrics.h",
      "objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h",
      "objc/Framework/Headers/WebRTC/RTCSSLAdapter.h",
      "objc/Framework/Headers/WebRTC/RTCTracing.h",
    ]
    if (is_ios) {
      sources += [
        "objc/Framework/Classes/RTCCameraPreviewView.m",
        "objc/Framework/Classes/RTCUIApplication.h",
        "objc/Framework/Classes/RTCUIApplication.mm",
        "objc/Framework/Classes/UIDevice+RTCDevice.mm",
        "objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h",
        "objc/Framework/Headers/WebRTC/UIDevice+RTCDevice.h",
      ]
      libs = [ "AVFoundation.framework" ]
    }
    if (!build_with_chromium) {
      sources += [
        "objc/Framework/Classes/RTCFileLogger.mm",
        "objc/Framework/Headers/WebRTC/RTCFileLogger.h",
      ]
    }
  }

  rtc_source_set("rtc_sdk_peerconnection_objc") {
    sources = [
      "objc/Framework/Classes/RTCAVFoundationVideoSource+Private.h",
      "objc/Framework/Classes/RTCAVFoundationVideoSource.mm",
      "objc/Framework/Classes/RTCAudioSource+Private.h",
      "objc/Framework/Classes/RTCAudioSource.mm",
      "objc/Framework/Classes/RTCAudioTrack+Private.h",
      "objc/Framework/Classes/RTCAudioTrack.mm",
      "objc/Framework/Classes/RTCConfiguration+Private.h",
      "objc/Framework/Classes/RTCConfiguration.mm",
      "objc/Framework/Classes/RTCDataChannel+Private.h",
      "objc/Framework/Classes/RTCDataChannel.mm",
      "objc/Framework/Classes/RTCDataChannelConfiguration+Private.h",
      "objc/Framework/Classes/RTCDataChannelConfiguration.mm",
      "objc/Framework/Classes/RTCI420Shader.mm",
      "objc/Framework/Classes/RTCIceCandidate+Private.h",
      "objc/Framework/Classes/RTCIceCandidate.mm",
      "objc/Framework/Classes/RTCIceServer+Private.h",
      "objc/Framework/Classes/RTCIceServer.mm",
      "objc/Framework/Classes/RTCLegacyStatsReport+Private.h",
      "objc/Framework/Classes/RTCLegacyStatsReport.mm",
      "objc/Framework/Classes/RTCMediaConstraints+Private.h",
      "objc/Framework/Classes/RTCMediaConstraints.mm",
      "objc/Framework/Classes/RTCMediaSource+Private.h",
      "objc/Framework/Classes/RTCMediaSource.mm",
      "objc/Framework/Classes/RTCMediaStream+Private.h",
      "objc/Framework/Classes/RTCMediaStream.mm",
      "objc/Framework/Classes/RTCMediaStreamTrack+Private.h",
      "objc/Framework/Classes/RTCMediaStreamTrack.mm",
      "objc/Framework/Classes/RTCOpenGLDefines.h",
      "objc/Framework/Classes/RTCOpenGLVideoRenderer.h",
      "objc/Framework/Classes/RTCOpenGLVideoRenderer.mm",
      "objc/Framework/Classes/RTCPeerConnection+DataChannel.mm",
      "objc/Framework/Classes/RTCPeerConnection+Private.h",
      "objc/Framework/Classes/RTCPeerConnection+Stats.mm",
      "objc/Framework/Classes/RTCPeerConnection.mm",
      "objc/Framework/Classes/RTCPeerConnectionFactory+Private.h",
      "objc/Framework/Classes/RTCPeerConnectionFactory.mm",
      "objc/Framework/Classes/RTCRtpCodecParameters+Private.h",
      "objc/Framework/Classes/RTCRtpCodecParameters.mm",
      "objc/Framework/Classes/RTCRtpEncodingParameters+Private.h",
      "objc/Framework/Classes/RTCRtpEncodingParameters.mm",
      "objc/Framework/Classes/RTCRtpParameters+Private.h",
      "objc/Framework/Classes/RTCRtpParameters.mm",
      "objc/Framework/Classes/RTCRtpReceiver+Private.h",
      "objc/Framework/Classes/RTCRtpReceiver.mm",
      "objc/Framework/Classes/RTCRtpSender+Private.h",
      "objc/Framework/Classes/RTCRtpSender.mm",
      "objc/Framework/Classes/RTCSessionDescription+Private.h",
      "objc/Framework/Classes/RTCSessionDescription.mm",
      "objc/Framework/Classes/RTCShader+Private.h",
      "objc/Framework/Classes/RTCShader.h",
      "objc/Framework/Classes/RTCShader.mm",
      "objc/Framework/Classes/RTCVideoFrame+Private.h",
      "objc/Framework/Classes/RTCVideoFrame.mm",
      "objc/Framework/Classes/RTCVideoRendererAdapter+Private.h",
      "objc/Framework/Classes/RTCVideoRendererAdapter.h",
      "objc/Framework/Classes/RTCVideoRendererAdapter.mm",
      "objc/Framework/Classes/RTCVideoSource+Private.h",
      "objc/Framework/Classes/RTCVideoSource.mm",
      "objc/Framework/Classes/RTCVideoTrack+Private.h",
      "objc/Framework/Classes/RTCVideoTrack.mm",
      "objc/Framework/Classes/avfoundationvideocapturer.h",
      "objc/Framework/Classes/avfoundationvideocapturer.mm",
      "objc/Framework/Headers/WebRTC/RTCAVFoundationVideoSource.h",
      "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/RTCIceCandidate.h",
      "objc/Framework/Headers/WebRTC/RTCIceServer.h",
      "objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.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/RTCPeerConnection.h",
      "objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.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/RTCSessionDescription.h",
      "objc/Framework/Headers/WebRTC/RTCVideoFrame.h",
      "objc/Framework/Headers/WebRTC/RTCVideoRenderer.h",
      "objc/Framework/Headers/WebRTC/RTCVideoSource.h",
      "objc/Framework/Headers/WebRTC/RTCVideoTrack.h",
    ]

    if (is_ios) {
      sources += [
        "objc/Framework/Classes/RTCEAGLVideoView.m",
        "objc/Framework/Classes/RTCNativeNV12Shader.mm",
        "objc/Framework/Headers/WebRTC/RTCEAGLVideoView.h",
      ]
      libs = [
        "CoreGraphics.framework",
        "GLKit.framework",
        "OpenGLES.framework",
        "QuartzCore.framework",
      ]
    }

    if (is_mac) {
      sources += [
        "objc/Framework/Classes/RTCNSGLVideoView.m",
        "objc/Framework/Headers/WebRTC/RTCNSGLVideoView.h",
      ]
      libs = [
        "CoreMedia.framework",
        "OpenGL.framework",
      ]
    }

    configs += [
      "..:common_objc",
      "//build/config/compiler:enable_arc",
    ]

    # TODO(tkchin): Make rtc_sdk_peerconnection_objc compile with the standard
    # set of warnings.
    # See https://bugs.chromium.org/p/webrtc/issues/detail?id=6308
    suppressed_configs += [ rtc_common_config ]

    public_configs = [ ":rtc_sdk_common_objc_config" ]

    if (is_clang) {
      # Suppress warnings from the Chromium Clang plugins.
      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    libs += [ "AVFoundation.framework" ]

    deps = [
      ":rtc_sdk_common_objc",
      "../api:libjingle_peerconnection",
    ]

    if (rtc_build_libyuv) {
      deps += [ "$rtc_libyuv_dir" ]
      public_deps = [
        "$rtc_libyuv_dir",
      ]
    }
  }
  common_objc_headers = [
    "objc/Framework/Headers/WebRTC/RTCAVFoundationVideoSource.h",
    "objc/Framework/Headers/WebRTC/RTCAudioSource.h",
    "objc/Framework/Headers/WebRTC/RTCAudioTrack.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/RTCIceCandidate.h",
    "objc/Framework/Headers/WebRTC/RTCIceServer.h",
    "objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.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/RTCMetricsSampleInfo.h",
    "objc/Framework/Headers/WebRTC/RTCPeerConnection.h",
    "objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.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/RTCSessionDescription.h",
    "objc/Framework/Headers/WebRTC/RTCVideoFrame.h",
    "objc/Framework/Headers/WebRTC/RTCVideoRenderer.h",
    "objc/Framework/Headers/WebRTC/RTCVideoSource.h",
    "objc/Framework/Headers/WebRTC/RTCVideoTrack.h",
    "objc/Framework/Headers/WebRTC/UIDevice+RTCDevice.h",
    "objc/Framework/Headers/WebRTC/WebRTC.h",
  ]
  if (is_mac) {
    mac_framework_bundle("rtc_sdk_framework_objc") {
      info_plist = "objc/Framework/Info.plist"
      output_name = "WebRTC"

      sources = common_objc_headers +
                [ "objc/Framework/Headers/WebRTC/RTCNSGLVideoView.h" ]

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

      deps = [
        ":rtc_sdk_peerconnection_objc",
        "//webrtc/system_wrappers:field_trial_default",
        "//webrtc/system_wrappers:metrics_default",
      ]

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

      configs += [
        "..:common_objc",
        "//build/config/compiler:enable_arc",
      ]

      public_configs = [ ":rtc_sdk_common_objc_config" ]

      if (is_clang) {
        # Suppress warnings from the Chromium Clang plugins.
        # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
        configs -= [ "//build/config/clang:find_bad_constructs" ]
      }
    }
  }
  if (is_ios) {
    ios_framework_bundle("rtc_sdk_framework_objc") {
      info_plist = "objc/Framework/Info.plist"
      output_name = "WebRTC"

      sources = common_objc_headers
      public_headers = common_objc_headers

      if (!build_with_chromium) {
        sources += [ "objc/Framework/Headers/WebRTC/RTCFileLogger.h" ]
        public_headers += [ "objc/Framework/Headers/WebRTC/RTCFileLogger.h" ]
      }

      deps = [
        ":rtc_sdk_peerconnection_objc",
        "//webrtc/system_wrappers:field_trial_default",
        "//webrtc/system_wrappers:metrics_default",
      ]

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

      configs += [
        "..:common_objc",
        "//build/config/compiler:enable_arc",
      ]

      public_configs = [ ":rtc_sdk_common_objc_config" ]

      if (is_clang) {
        # Suppress warnings from the Chromium Clang plugins.
        # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
        configs -= [ "//build/config/clang:find_bad_constructs" ]
      }
    }
  }
}
