The clang static analyzer seems unable to resolve cpp locks in ObjC code. As of current time, the clang analyzer has known limitations documented http://clang.llvm.org/docs/ThreadSafetyAnalysis.html#known-limitations. From the documentation: "The analysis currently does not do any checking inside constructors or destructors. In other words, every constructor and destructor is treated as if it was annotated with NO_THREAD_SAFETY_ANALYSIS." This is 'probably' why the analyzer is unable to resolve the lock when used in ObjC land (the cpp works fine). The lock can be removed by using atomic property instead. It's not on performance critical path and we expect updates on just one queue and reads from others. That's why the thread assurance atomic properties bring is enough. The CL removes rtc_sdk_peerconnection_objc_warnings_config as well as it's no longer needed. BUG=webrtc:6308 Review-Url: https://codereview.webrtc.org/2372513004 Cr-Commit-Position: refs/heads/master@{#14450}
337 lines
13 KiB
Plaintext
337 lines
13 KiB
Plaintext
# 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_static_library("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_static_library("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",
|
|
]
|
|
|
|
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/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",
|
|
]
|
|
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" ]
|
|
}
|
|
}
|
|
}
|
|
}
|