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}
diff --git a/webrtc/modules/audio_device/BUILD.gn b/webrtc/modules/audio_device/BUILD.gn
index 2db993b..e50041f 100644
--- a/webrtc/modules/audio_device/BUILD.gn
+++ b/webrtc/modules/audio_device/BUILD.gn
@@ -45,7 +45,55 @@
}
}
-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 @@
"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 @@
}
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 @@
"../../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 @@
"../../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" ]
diff --git a/webrtc/modules/audio_device/DEPS b/webrtc/modules/audio_device/DEPS
index 3ae86e8..51e8957 100644
--- a/webrtc/modules/audio_device/DEPS
+++ b/webrtc/modules/audio_device/DEPS
@@ -7,6 +7,9 @@
"ensure_initialized\.cc": [
"+base/android",
],
+ "audio_device_ios\.h": [
+ "+webrtc/sdk/objc",
+ ],
"audio_device_ios\.mm": [
"+webrtc/sdk/objc",
],
diff --git a/webrtc/modules/audio_device/ios/audio_device_ios.h b/webrtc/modules/audio_device/ios/audio_device_ios.h
index 5c15c7f..2067d88 100644
--- a/webrtc/modules/audio_device/ios/audio_device_ios.h
+++ b/webrtc/modules/audio_device/ios/audio_device_ios.h
@@ -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"
diff --git a/webrtc/sdk/objc/Framework/Classes/Audio/RTCAudioSession+Private.h b/webrtc/sdk/objc/Framework/Classes/Audio/RTCAudioSession+Private.h
index cd95ba6..4c27270 100644
--- a/webrtc/sdk/objc/Framework/Classes/Audio/RTCAudioSession+Private.h
+++ b/webrtc/sdk/objc/Framework/Classes/Audio/RTCAudioSession+Private.h
@@ -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>
diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h
index f99c835..751734a 100644
--- a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h
+++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h
@@ -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