From 26b23b8fccfedd23011a03d815badb2db2e6fcbe Mon Sep 17 00:00:00 2001 From: Byoungchan Lee Date: Fri, 8 Apr 2022 18:23:14 +0900 Subject: [PATCH] Merge GN templates for iOS and MacOS framework creation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The two GN templates are nearly identical, so merge them to reduce maintenance. Bug: webrtc:13949 Change-Id: I5f53ade5f9d09ce6f23a6cb29c9d39df4485a237 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/258380 Reviewed-by: Mirko Bonadei Reviewed-by: Kári Helgason Commit-Queue: Daniel.L (Byoungchan) Lee Cr-Commit-Position: refs/heads/main@{#36495} --- sdk/BUILD.gn | 6 +- webrtc.gni | 153 +++++++++++++++++++-------------------------------- 2 files changed, 60 insertions(+), 99 deletions(-) diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn index 763f3eeb30..0f23dd9ca7 100644 --- a/sdk/BUILD.gn +++ b/sdk/BUILD.gn @@ -1244,7 +1244,7 @@ if (is_ios || is_mac) { } if (is_ios) { - ios_framework_bundle_with_umbrella_header("framework_objc") { + apple_framework_bundle_with_umbrella_header("framework_objc") { info_plist = "objc/Info.plist" output_name = "WebRTC" @@ -1381,7 +1381,7 @@ if (is_ios || is_mac) { "CoreMedia.framework", ] - configs += [ + configs = [ "..:common_objc", ":used_from_extension", ] @@ -1397,7 +1397,7 @@ if (is_ios || is_mac) { } if (is_mac) { - mac_framework_bundle_with_umbrella_header("mac_framework_objc") { + apple_framework_bundle_with_umbrella_header("mac_framework_objc") { info_plist = "objc/Info.plist" output_name = "WebRTC" diff --git a/webrtc.gni b/webrtc.gni index 3a72106f6a..a5da76c6f9 100644 --- a/webrtc.gni +++ b/webrtc.gni @@ -960,14 +960,13 @@ template("rtc_shared_library") { } } -if (is_ios) { - # TODO: Generate module.modulemap file to enable use in Swift - # projects. See "mac_framework_bundle_with_umbrella_header". - template("ios_framework_bundle_with_umbrella_header") { +if (is_mac || is_ios) { + template("apple_framework_bundle_with_umbrella_header") { forward_variables_from(invoker, [ "output_name" ]) this_target_name = target_name umbrella_header_path = "$target_gen_dir/$output_name.framework/WebRTC/$output_name.h" + modulemap_path = "$target_gen_dir/Modules/module.modulemap" action_foreach("create_bracket_include_headers_$target_name") { script = "//tools_webrtc/apple/copy_framework_header.py" @@ -985,102 +984,63 @@ if (is_ios) { ] } - ios_framework_bundle(target_name) { - forward_variables_from(invoker, "*", [ "public_headers" ]) - public_headers = get_target_outputs( - ":create_bracket_include_headers_$this_target_name") - deps += [ - ":copy_umbrella_header_$target_name", - ":create_bracket_include_headers_$target_name", - ] + if (is_mac) { + mac_framework_bundle(target_name) { + forward_variables_from(invoker, "*", [ "configs" ]) + if (defined(invoker.configs)) { + configs += invoker.configs + } + + framework_version = "A" + framework_contents = [ + "Headers", + "Modules", + "Resources", + ] + + ldflags = [ + "-all_load", + "-install_name", + "@rpath/$output_name.framework/$output_name", + ] + + deps += [ + ":copy_framework_headers_$this_target_name", + ":copy_modulemap_$this_target_name", + ":copy_umbrella_header_$this_target_name", + ":create_bracket_include_headers_$this_target_name", + ":modulemap_$this_target_name", + ":umbrella_header_$this_target_name", + ] + } + } + if (is_ios) { + ios_framework_bundle(target_name) { + forward_variables_from(invoker, + "*", + [ + "configs", + "public_headers", + ]) + if (defined(invoker.configs)) { + configs += invoker.configs + } + public_headers = get_target_outputs( + ":create_bracket_include_headers_$this_target_name") + + deps += [ + ":copy_umbrella_header_$this_target_name", + ":create_bracket_include_headers_$this_target_name", + ] + } } - action("umbrella_header_$target_name") { - public_headers = get_target_outputs( - ":create_bracket_include_headers_$this_target_name") - - script = "//tools_webrtc/ios/generate_umbrella_header.py" - - outputs = [ umbrella_header_path ] - args = [ - "--out", - rebase_path(umbrella_header_path, root_build_dir), - "--sources", - ] + public_headers - deps = [ ":create_bracket_include_headers_$this_target_name" ] - } - - if (target_environment == "catalyst") { + if (is_mac || target_environment == "catalyst") { # Catalyst frameworks use the same layout as regular Mac frameworks. headers_dir = "Versions/A/Headers" } else { headers_dir = "Headers" } - copy("copy_umbrella_header_$target_name") { - sources = [ umbrella_header_path ] - outputs = - [ "$root_out_dir/$output_name.framework/$headers_dir/$output_name.h" ] - - deps = [ ":umbrella_header_$target_name" ] - } - } - - set_defaults("ios_framework_bundle_with_umbrella_header") { - configs = default_shared_library_configs - } -} - -if (is_mac) { - template("mac_framework_bundle_with_umbrella_header") { - forward_variables_from(invoker, [ "output_name" ]) - this_target_name = target_name - umbrella_header_path = "$target_gen_dir/umbrella_header/$output_name.h" - modulemap_path = "$target_gen_dir/Modules/module.modulemap" - - mac_framework_bundle(target_name) { - forward_variables_from(invoker, "*", [ "configs" ]) - if (defined(invoker.configs)) { - configs += invoker.configs - } - - framework_version = "A" - framework_contents = [ - "Headers", - "Modules", - "Resources", - ] - - ldflags = [ - "-all_load", - "-install_name", - "@rpath/$output_name.framework/$output_name", - ] - - deps += [ - ":copy_framework_headers_$this_target_name", - ":copy_modulemap_$this_target_name", - ":copy_umbrella_header_$this_target_name", - ":create_bracket_include_headers_$this_target_name", - ":modulemap_$this_target_name", - ":umbrella_header_$this_target_name", - ] - } - - action_foreach("create_bracket_include_headers_$this_target_name") { - script = "//tools_webrtc/apple/copy_framework_header.py" - sources = invoker.sources - output_name = invoker.output_name - outputs = [ - "$target_gen_dir/$output_name.framework/WebRTC/{{source_file_part}}", - ] - args = [ - "--input", - "{{source}}", - "--output", - rebase_path(target_gen_dir, root_build_dir) + - "/$output_name.framework/WebRTC/{{source_file_part}}", - ] - } bundle_data("copy_framework_headers_$this_target_name") { sources = get_target_outputs( @@ -1122,11 +1082,12 @@ if (is_mac) { deps = [ ":create_bracket_include_headers_$this_target_name" ] } - bundle_data("copy_umbrella_header_$this_target_name") { + copy("copy_umbrella_header_$target_name") { sources = [ umbrella_header_path ] - outputs = [ "{{bundle_contents_dir}}/Headers/$output_name.h" ] + outputs = + [ "$root_out_dir/$output_name.framework/$headers_dir/$output_name.h" ] - deps = [ ":umbrella_header_$this_target_name" ] + deps = [ ":umbrella_header_$target_name" ] } } }