From bcc2176e64d82b10d105b4d3da3851971a291814 Mon Sep 17 00:00:00 2001 From: mbonadei Date: Tue, 12 Sep 2017 04:45:24 -0700 Subject: [PATCH] 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} --- webrtc/modules/audio_device/BUILD.gn | 108 ++++++++++++------ webrtc/modules/audio_device/DEPS | 3 + .../audio_device/ios/audio_device_ios.h | 2 +- .../Classes/Audio/RTCAudioSession+Private.h | 2 +- .../Headers/WebRTC/RTCAudioSession.h | 2 +- 5 files changed, 82 insertions(+), 35 deletions(-) diff --git a/webrtc/modules/audio_device/BUILD.gn b/webrtc/modules/audio_device/BUILD.gn index 2db993b7b3..e50041fe15 100644 --- a/webrtc/modules/audio_device/BUILD.gn +++ b/webrtc/modules/audio_device/BUILD.gn @@ -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" ] diff --git a/webrtc/modules/audio_device/DEPS b/webrtc/modules/audio_device/DEPS index 3ae86e8841..51e8957e18 100644 --- a/webrtc/modules/audio_device/DEPS +++ b/webrtc/modules/audio_device/DEPS @@ -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", ], diff --git a/webrtc/modules/audio_device/ios/audio_device_ios.h b/webrtc/modules/audio_device/ios/audio_device_ios.h index 5c15c7f05d..2067d88740 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 -#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 cd95ba654d..4c2727001d 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 diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h index f99c835b51..751734a644 100644 --- a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h +++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h @@ -11,7 +11,7 @@ #import #import -#import "WebRTC/RTCMacros.h" +#import "webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMacros.h" NS_ASSUME_NONNULL_BEGIN