# 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")
}

group("sdk") {
  if (is_ios) {
    public_deps = [
      ":rtc_sdk_framework_objc",
    ]
  }
}

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

  rtc_static_library("rtc_sdk_common_objc") {
    deps = [
      "../base:rtc_base",
    ]
    configs += [
      "..:common_objc",
      "//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/Classes/helpers.h",
      "objc/Framework/Classes/helpers.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_static_library("rtc_sdk_peerconnection_objc") {
    sources = [
      "objc/Framework/Classes/RTCAVFoundationVideoCapturerInternal.h",
      "objc/Framework/Classes/RTCAVFoundationVideoCapturerInternal.mm",
      "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/avfoundationformatmapper.h",
      "objc/Framework/Classes/avfoundationformatmapper.mm",
      "objc/Framework/Classes/avfoundationvideocapturer.h",
      "objc/Framework/Classes/avfoundationvideocapturer.mm",
      "objc/Framework/Classes/videotoolboxvideocodecfactory.cc",
      "objc/Framework/Classes/videotoolboxvideocodecfactory.h",
      "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",
    ]

    deps = [
      ":webrtc_h264_video_toolbox",
    ]

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

    public_configs = [ ":rtc_sdk_common_objc_config" ]

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

    libs += [ "AVFoundation.framework" ]

    deps += [
      ":rtc_sdk_common_objc",
      "../pc:libjingle_peerconnection",
    ]

    if (rtc_build_libyuv) {
      deps += [ "$rtc_libyuv_dir" ]
      public_deps = [
        "$rtc_libyuv_dir",
      ]
    }
  }

  if (rtc_include_tests) {
    rtc_source_set("rtc_sdk_peerconnection_objc_unittests") {
      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/RTCMediaConstraintsTest.mm",
        "objc/Framework/UnitTests/RTCSessionDescriptionTest.mm",
        "objc/Framework/UnitTests/avformatmappertests.mm",
      ]
      deps = [
        ":rtc_sdk_peerconnection_objc",
        "//third_party/ocmock",
        "//webrtc/system_wrappers:system_wrappers_default",
      ]

      # TODO(tkchin): Cleanup this warning.
      cflags = [ "-Wno-objc-property-no-attribute" ]

      # |-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" ]
      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("rtc_sdk_framework_objc") {
      info_plist = "objc/Framework/Info.plist"
      output_name = "WebRTC"

      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/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/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/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",
      ]

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

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

      deps = [
        ":rtc_sdk_peerconnection_objc",
        "../system_wrappers:field_trial_default",
        "../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 (!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("rtc_sdk_objc") {
    complete_static_lib = true
    deps = [
      ":rtc_sdk_peerconnection_objc",
      "//webrtc/system_wrappers:field_trial_default",
      "//webrtc/system_wrappers:metrics_default",
    ]
  }

  rtc_static_library("webrtc_h264_video_toolbox") {
    sources = [
      "objc/Framework/Classes/h264_video_toolbox_decoder.cc",
      "objc/Framework/Classes/h264_video_toolbox_decoder.h",
      "objc/Framework/Classes/h264_video_toolbox_encoder.h",
      "objc/Framework/Classes/h264_video_toolbox_encoder.mm",
      "objc/Framework/Classes/h264_video_toolbox_nalu.cc",
      "objc/Framework/Classes/h264_video_toolbox_nalu.h",
    ]

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

    deps = [
      ":rtc_sdk_common_objc",
    ]

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

    if (rtc_build_libyuv) {
      deps += [ "$rtc_libyuv_dir" ]
      public_deps = [
        "$rtc_libyuv_dir",
      ]
    } else {
      # Need to add a directory normally exported by libyuv.
      include_dirs = [ "$rtc_libyuv_dir/include" ]
    }
  }
}
