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-Original-Commit-Position: refs/heads/master@{#19795}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: bcc2176e64d82b10d105b4d3da3851971a291814
diff --git a/modules/audio_device/BUILD.gn b/modules/audio_device/BUILD.gn
index 2db993b..e50041f 100644
--- a/modules/audio_device/BUILD.gn
+++ b/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/modules/audio_device/DEPS b/modules/audio_device/DEPS
index 3ae86e8..51e8957 100644
--- a/modules/audio_device/DEPS
+++ b/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/modules/audio_device/ios/audio_device_ios.h b/modules/audio_device/ios/audio_device_ios.h
index 5c15c7f..2067d88 100644
--- a/modules/audio_device/ios/audio_device_ios.h
+++ b/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/sdk/objc/Framework/Classes/Audio/RTCAudioSession+Private.h b/sdk/objc/Framework/Classes/Audio/RTCAudioSession+Private.h
index cd95ba6..4c27270 100644
--- a/sdk/objc/Framework/Classes/Audio/RTCAudioSession+Private.h
+++ b/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/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h b/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h
index f99c835..751734a 100644
--- a/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h
+++ b/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