Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(100)

Unified Diff: build/config/ios/rules.gni

Issue 2135323002: Add support for fat build to "ios_framework_bundle" target. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fat-build-enable
Patch Set: multi_arch_toolchains -> additional_toolchains & mac build fix. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | build/config/mac/base_rules.gni » ('j') | build/config/mac/base_rules.gni » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/config/ios/rules.gni
diff --git a/build/config/ios/rules.gni b/build/config/ios/rules.gni
index aec0de5b8fa322d77b856fa4906ba88939bc995c..584a06d44294ff2aca035e0859ddfc1098ec55b4 100644
--- a/build/config/ios/rules.gni
+++ b/build/config/ios/rules.gni
@@ -633,91 +633,115 @@ template("ios_framework_bundle") {
}
_framework_target = _target_name
- if (defined(invoker.public_headers) && invoker.public_headers != []) {
- _public_headers = invoker.public_headers
- _framework_name = _output_name + ".framework"
- _framework_root = "$root_out_dir/$_framework_name"
- _framework_target = target_name + "_internal"
+ _has_public_headers =
+ defined(invoker.public_headers) && invoker.public_headers != []
+
+ _is_fat_build = additional_toolchains != []
+ if (_is_fat_build) {
+ _is_fat_build_main_target = current_toolchain == default_toolchain
+ }
+
+ # This template has a different expansion depending on whether public headers
+ # are defined or not. If no public headers are speficied, then is forwards to
+ # the generic "framework_bundle" target, otherwise if expands to targets that
+ # create header map mapping and corresponding config and configure them as
+ # dependencies of the generic "framework_bundle" target.
+ #
+ # The expansion is a bit different for multi-architecture builds (aka fat
+ # binary builds). Then the targets build for the non-default toolchain uses
+ # the same header map (if available) as the one used by the default toolchain.
+
+ _toolchain_suffix = ""
+ if (_is_fat_build && !_is_fat_build_main_target) {
+ _toolchain_suffix = "($default_toolchain)"
+ }
- _header_map_filename = "$target_gen_dir/$_output_name.headers.hmap"
+ if (_has_public_headers) {
_framework_headers_target = _target_name + "_framework_headers"
+ _framework_public_config = _target_name + "_ios_public_config"
+ _framework_target = target_name + "_internal"
+ _headers_map_config = _target_name + "_headers_map"
- _compile_headers_map_target = _target_name + "_compile_headers_map"
- action(_compile_headers_map_target) {
- visibility = [ ":$_framework_headers_target" ]
- script = "//build/config/ios/write_framework_hmap.py"
- outputs = [
- _header_map_filename,
- ]
+ if (!_is_fat_build || _is_fat_build_main_target) {
+ _public_headers = invoker.public_headers
+ _framework_name = _output_name + ".framework"
+ _framework_root = "$root_out_dir/$_framework_name"
- # The header map generation only wants the list of headers, not all of
- # sources, so filter any non-header source files from "sources". It is
- # less error prone that having the developer duplicate the list of all
- # headers in addition to "sources".
- set_sources_assignment_filter([
- "*.c",
- "*.cc",
- "*.cpp",
- "*.m",
- "*.mm",
- ])
- sources = invoker.sources
- set_sources_assignment_filter([])
-
- args = [
- rebase_path(_header_map_filename),
- rebase_path(_framework_root, root_build_dir),
- ] + rebase_path(sources, root_build_dir)
- }
+ _header_map_filename = "$target_gen_dir/$_output_name.headers.hmap"
- _create_module_map_target = _target_name + "_module_map"
- action(_create_module_map_target) {
- visibility = [ ":$_framework_headers_target" ]
- script = "//build/config/ios/write_framework_modulemap.py"
- outputs = [
- "$_framework_root/Modules/module.modulemap",
- ]
- args = [ rebase_path("$_framework_root", root_build_dir) ]
- }
+ _compile_headers_map_target = _target_name + "_compile_headers_map"
+ action(_compile_headers_map_target) {
+ visibility = [ ":$_framework_headers_target" ]
+ script = "//build/config/ios/write_framework_hmap.py"
+ outputs = [
+ _header_map_filename,
+ ]
- _copy_public_headers_target = _target_name + "_copy_public_headers"
- copy(_copy_public_headers_target) {
- visibility = [ ":$_framework_headers_target" ]
- sources = _public_headers
- outputs = [
- "$_framework_root/Headers/{{source_file_part}}",
- ]
- }
+ # The header map generation only wants the list of headers, not all of
+ # sources, so filter any non-header source files from "sources". It is
+ # less error prone that having the developer duplicate the list of all
+ # headers in addition to "sources".
+ set_sources_assignment_filter([
+ "*.c",
+ "*.cc",
+ "*.cpp",
+ "*.m",
+ "*.mm",
+ ])
+ sources = invoker.sources
+ set_sources_assignment_filter([])
- _headers_map_config = _target_name + "_headers_map"
- config(_headers_map_config) {
- visibility = [ ":$_target_name" ]
- include_dirs = [ _header_map_filename ]
- ldflags = [
- "-install_name",
- "@rpath/$_framework_name/$_output_name",
- ]
- }
+ args = [
+ rebase_path(_header_map_filename),
+ rebase_path(_framework_root, root_build_dir),
+ ] + rebase_path(sources, root_build_dir)
+ }
- group(_framework_headers_target) {
- deps = [
- ":$_compile_headers_map_target",
- ":$_copy_public_headers_target",
- ":$_create_module_map_target",
- ]
- }
- }
+ _create_module_map_target = _target_name + "_module_map"
+ action(_create_module_map_target) {
+ visibility = [ ":$_framework_headers_target" ]
+ script = "//build/config/ios/write_framework_modulemap.py"
+ outputs = [
+ "$_framework_root/Modules/module.modulemap",
+ ]
+ args = [ rebase_path("$_framework_root", root_build_dir) ]
+ }
- _framework_public_config = _target_name + "_ios_public_config"
- config(_framework_public_config) {
- visibility = [ ":$_framework_public_config" ]
- if (defined(_public_headers)) {
- common_flags = [ "-F" + rebase_path("$root_out_dir/.", root_build_dir) ]
- cflags_objc = common_flags
- cflags_objcc = common_flags
- }
+ _copy_public_headers_target = _target_name + "_copy_public_headers"
+ copy(_copy_public_headers_target) {
+ visibility = [ ":$_framework_headers_target" ]
+ sources = _public_headers
+ outputs = [
+ "$_framework_root/Headers/{{source_file_part}}",
+ ]
+ }
- # The link settings are inherited from the framework_bundle config.
+ config(_headers_map_config) {
+ visibility = [ ":$_target_name" ]
+ include_dirs = [ _header_map_filename ]
+ ldflags = [
+ "-install_name",
+ "@rpath/$_framework_name/$_output_name",
+ ]
+ }
+
+ group(_framework_headers_target) {
+ deps = [
+ ":$_compile_headers_map_target",
+ ":$_copy_public_headers_target",
+ ":$_create_module_map_target",
+ ]
+ }
+
+ config(_framework_public_config) {
+ visibility = [ ":$_framework_public_config" ]
+ common_flags = [ "-F" + rebase_path("$root_out_dir/.", root_build_dir) ]
+ cflags_objc = common_flags
+ cflags_objcc = common_flags
+
+ # The link settings are inherited from the framework_bundle config.
+ }
+ }
}
framework_bundle(_framework_target) {
@@ -730,31 +754,33 @@ template("ios_framework_bundle") {
])
output_name = _output_name
- if (!defined(public_configs)) {
- public_configs = []
+ if (_has_public_headers) {
+ if (!defined(public_configs)) {
+ public_configs = []
+ }
+ public_configs += [ ":$_framework_public_config$_toolchain_suffix" ]
}
- public_configs += [ ":$_framework_public_config" ]
- if (defined(_public_headers)) {
+ if (_has_public_headers) {
visibility = [
- ":$_target_name",
- ":$_target_name+link",
+ ":$_target_name$_toolchain_suffix",
+ ":$_target_name+link$_toolchain_suffix",
]
- configs += [ ":$_headers_map_config" ]
+ configs += [ ":$_headers_map_config$_toolchain_suffix" ]
if (!defined(deps)) {
deps = []
}
- deps += [ ":$_framework_headers_target" ]
+ deps += [ ":$_framework_headers_target$_toolchain_suffix" ]
} else {
if (defined(invoker.visibility)) {
visibility = invoker.visibility
- visibility += [ ":$_target_name+link" ]
+ visibility += [ ":$_target_name+link$_toolchain_suffix" ]
}
}
}
- if (defined(_public_headers)) {
+ if (_has_public_headers) {
group(_target_name) {
forward_variables_from(invoker,
[
@@ -768,7 +794,7 @@ template("ios_framework_bundle") {
}
public_deps = [
- ":$_framework_target",
+ ":$_framework_target$_toolchain_suffix",
]
}
@@ -779,7 +805,7 @@ template("ios_framework_bundle") {
"visibility",
])
public_deps = [
- ":$_framework_target+link",
+ ":$_framework_target+link$_toolchain_suffix",
]
}
}
« no previous file with comments | « no previous file | build/config/mac/base_rules.gni » ('j') | build/config/mac/base_rules.gni » ('J')

Powered by Google App Engine
This is Rietveld 408576698