Decoupling audio_device from Obj-C code

The goal of this CL is to separate Obj-C/Obj-C++ code from targets which have
also C++ code (see https://bugs.chromium.org/p/webrtc/issues/detail?id=7743
for more information).

To achieve this we have created 2 targets (audio_device_ios_objc and
audio_device_generic) and audio_device will act as a proxy between these targets
(this way we can avoid a circular dependency between audio_device_generic and
audio_device_ios_objc).

BUG=webrtc:7743

Review-Url: https://codereview.webrtc.org/2991343002
Cr-Commit-Position: refs/heads/master@{#19795}
This commit is contained in:
mbonadei 2017-09-12 04:45:24 -07:00 committed by Commit Bot
parent 2475ae2e4c
commit bcc2176e64
5 changed files with 82 additions and 35 deletions

View File

@ -45,7 +45,55 @@ config("audio_device_warnings_config") {
}
}
rtc_static_library("audio_device") {
rtc_source_set("audio_device") {
public_deps = [
":audio_device_generic",
]
if (rtc_include_internal_audio_device && is_ios) {
public_deps += [ ":audio_device_ios_objc" ]
}
}
if (rtc_include_internal_audio_device && is_ios) {
rtc_source_set("audio_device_ios_objc") {
visibility = [ ":audio_device" ]
sources = [
"ios/audio_device_ios.h",
"ios/audio_device_ios.mm",
"ios/audio_device_not_implemented_ios.mm",
"ios/audio_session_observer.h",
"ios/objc/RTCAudioSessionDelegateAdapter.h",
"ios/objc/RTCAudioSessionDelegateAdapter.mm",
"ios/voice_processing_audio_unit.h",
"ios/voice_processing_audio_unit.mm",
]
libs = [
"AudioToolbox.framework",
"AVFoundation.framework",
"Foundation.framework",
"UIKit.framework",
]
deps = [
":audio_device_generic",
"../../api:array_view",
"../../rtc_base:gtest_prod",
"../../rtc_base:rtc_base",
"../../sdk:audio_objc",
"../../sdk:common_objc",
"../../system_wrappers:metrics_api",
]
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_source_set("audio_device_generic") {
visibility = [
":audio_device",
":audio_device_ios_objc",
]
public_configs = [ ":audio_device_config" ]
deps = [
@ -176,30 +224,6 @@ rtc_static_library("audio_device") {
"CoreGraphics.framework",
]
}
if (is_ios) {
public_deps = [
"../../rtc_base:gtest_prod",
"../../rtc_base:rtc_base",
"../../sdk:audio_objc",
"../../sdk:common_objc",
]
sources += [
"ios/audio_device_ios.h",
"ios/audio_device_ios.mm",
"ios/audio_device_not_implemented_ios.mm",
"ios/audio_session_observer.h",
"ios/objc/RTCAudioSessionDelegateAdapter.h",
"ios/objc/RTCAudioSessionDelegateAdapter.mm",
"ios/voice_processing_audio_unit.h",
"ios/voice_processing_audio_unit.mm",
]
libs = [
"AudioToolbox.framework",
"AVFoundation.framework",
"Foundation.framework",
"UIKit.framework",
]
}
if (is_win) {
sources += [
"win/audio_device_core_win.cc",
@ -267,6 +291,32 @@ rtc_source_set("mock_audio_device") {
}
if (rtc_include_tests) {
# TODO(kthelgason): Reenable these tests on simulator.
# See bugs.webrtc.org/7812
if (is_ios && !use_ios_simulator) {
rtc_source_set("audio_device_ios_objc_unittests") {
testonly = true
visibility = [ ":*" ]
sources = [
"ios/audio_device_unittest_ios.mm",
]
deps = [
":audio_device",
":mock_audio_device",
"../../rtc_base:rtc_base_approved",
"../../sdk:audio_objc",
"../../system_wrappers",
"../../test:test_support",
"//testing/gmock",
"//third_party/ocmock",
]
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_source_set("audio_device_unittests") {
testonly = true
@ -285,7 +335,7 @@ if (rtc_include_tests) {
"../../api:array_view",
"../../api:optional",
"../../rtc_base:rtc_base_approved",
"../../system_wrappers:system_wrappers",
"../../system_wrappers",
"../../test:test_support",
"../utility:utility",
"//testing/gmock",
@ -310,12 +360,6 @@ if (rtc_include_tests) {
"../../sdk/android:libjingle_peerconnection_java",
]
}
if (is_ios && !use_ios_simulator) {
# TODO(kthelgason): Reenable these tests on simulator.
# See bugs.webrtc.org/7812
sources += [ "ios/audio_device_unittest_ios.mm" ]
deps += [ "//third_party/ocmock" ]
}
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" ]

View File

@ -7,6 +7,9 @@ specific_include_rules = {
"ensure_initialized\.cc": [
"+base/android",
],
"audio_device_ios\.h": [
"+webrtc/sdk/objc",
],
"audio_device_ios\.mm": [
"+webrtc/sdk/objc",
],

View File

@ -13,7 +13,7 @@
#include <memory>
#include "WebRTC/RTCMacros.h"
#include "webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMacros.h"
#include "webrtc/modules/audio_device/audio_device_generic.h"
#include "webrtc/modules/audio_device/ios/audio_session_observer.h"
#include "webrtc/modules/audio_device/ios/voice_processing_audio_unit.h"

View File

@ -8,7 +8,7 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#import "WebRTC/RTCAudioSession.h"
#import "webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h"
#include <vector>

View File

@ -11,7 +11,7 @@
#import <AVFoundation/AVFoundation.h>
#import <Foundation/Foundation.h>
#import "WebRTC/RTCMacros.h"
#import "webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMacros.h"
NS_ASSUME_NONNULL_BEGIN