Decoupling rtc_base_approved 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 (rtc_base_approved_objc and
rtc_base_approved_generic) and rtc_base_approved will act as a proxy between
these targets (this way we can avoid a circular dependency between
rtc_base_approved_generic and rtc_base_approved_objc).

BUG=webrtc:7743
NOTRY=True

Review-Url: https://codereview.webrtc.org/2988433002
Cr-Original-Commit-Position: refs/heads/master@{#19767}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: bc378479787930b511b151b278318516492bc9fc
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index 902024f..9120292 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -31,12 +31,6 @@
   }
 }
 
-config("rtc_base_approved_all_dependent_config") {
-  if (is_mac && !build_with_chromium) {
-    libs = [ "Foundation.framework" ]  # needed for logging_mac.mm
-  }
-}
-
 config("rtc_base_chromium_config") {
   defines = [ "NO_MAIN_THREAD_WRAPPING" ]
 }
@@ -86,8 +80,22 @@
   ]
 }
 
+rtc_source_set("rtc_base_approved") {
+  public_deps = [
+    ":rtc_base_approved_generic",
+  ]
+  if (is_mac && !build_with_chromium) {
+    public_deps += [ ":rtc_base_approved_objc" ]
+  }
+}
+
 # The subset of rtc_base approved for use outside of libjingle.
-rtc_static_library("rtc_base_approved") {
+rtc_source_set("rtc_base_approved_generic") {
+  visibility = [
+    ":rtc_base_approved",
+    ":rtc_base_approved_objc",
+  ]
+
   # TODO(kjellander): Remove (bugs.webrtc.org/7480)
   # Enabling GN check triggers a cyclic dependency caused by rate_limiter.cc:
   #   :rtc_base_approved -> ../system_wrappers -> :rtc_base_approved
@@ -95,7 +103,6 @@
   defines = []
   libs = []
   deps = []
-  all_dependent_configs = [ ":rtc_base_approved_all_dependent_config" ]
 
   sources = [
     "array_view.h",
@@ -209,7 +216,6 @@
     sources += [
       "logging.cc",
       "logging.h",
-      "logging_mac.mm",
     ]
   }
   if (is_component_build && is_win) {
@@ -289,6 +295,24 @@
   }
 }
 
+if (is_mac && !build_with_chromium) {
+  config("rtc_base_approved_objc_all_dependent_config") {
+    visibility = [ ":rtc_base_approved_objc" ]
+    libs = [ "Foundation.framework" ]  # needed for logging_mac.mm
+  }
+
+  rtc_source_set("rtc_base_approved_objc") {
+    visibility = [ ":rtc_base_approved" ]
+    all_dependent_configs = [ ":rtc_base_approved_objc_all_dependent_config" ]
+    sources = [
+      "logging_mac.mm",
+    ]
+    deps = [
+      ":rtc_base_approved_generic",
+    ]
+  }
+}
+
 rtc_source_set("rtc_task_queue") {
   deps = [
     ":rtc_base_approved",