Generate umbrella header for macOS framework.

Similarly to how it is done for iOS.

Bug: webrtc:9627
Change-Id: I7e4e3495d28a0a098531250bfdcf93d272e27b9d
Reviewed-on: https://webrtc-review.googlesource.com/98162
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24594}
diff --git a/webrtc.gni b/webrtc.gni
index 67f2b5d..58631dd 100644
--- a/webrtc.gni
+++ b/webrtc.gni
@@ -30,6 +30,10 @@
   import("//build/config/ios/rules.gni")
 }
 
+if (is_mac) {
+  import("//build/config/mac/rules.gni")
+}
+
 declare_args() {
   # WARNING: This argument doesn't have any effect on the WebRTC build until
   # https://webrtc-review.googlesource.com/c/src/+/94766 will land.
@@ -682,6 +686,68 @@
   }
 }
 
+if (is_mac) {
+  template("mac_framework_bundle_with_umbrella_header") {
+    forward_variables_from(invoker, [ "output_name" ])
+    umbrella_header_path =
+        "$target_gen_dir/$output_name.framework/Headers/$output_name.h"
+
+    mac_framework_bundle(target_name) {
+      forward_variables_from(invoker, "*", [])
+
+      framework_version = "A"
+      framework_contents = [ "Headers" ]
+
+      ldflags = [
+        "-all_load",
+        "-install_name",
+        "@rpath/$output_name.framework/$output_name",
+      ]
+
+      deps += [
+        ":copy_framework_headers_$target_name",
+        ":copy_umbrella_header_$target_name",
+      ]
+    }
+
+    copy("copy_framework_headers_$target_name") {
+      forward_variables_from(invoker, [ "sources" ])
+
+      outputs = [
+        "$root_out_dir/$output_name.framework/Headers/{{source_file_part}}",
+      ]
+    }
+
+    action("umbrella_header_$target_name") {
+      forward_variables_from(invoker, [ "sources" ])
+
+      script = "//tools_webrtc/ios/generate_umbrella_header.py"
+
+      outputs = [
+        umbrella_header_path,
+      ]
+      args = [
+               "--out",
+               rebase_path(umbrella_header_path, root_build_dir),
+               "--sources",
+             ] + sources
+    }
+
+    copy("copy_umbrella_header_$target_name") {
+      sources = [
+        umbrella_header_path,
+      ]
+      outputs = [
+        "$root_out_dir/$output_name.framework/Headers/$output_name.h",
+      ]
+
+      deps = [
+        ":umbrella_header_$target_name",
+      ]
+    }
+  }
+}
+
 if (is_android) {
   template("rtc_android_library") {
     android_library(target_name) {