Index: build/config/ios/rules.gni |
diff --git a/build/config/ios/rules.gni b/build/config/ios/rules.gni |
index 7dad6aa04121c91a80bc8671771de5389cf82b89..8611e5a4cd6bcad98f38b2ad8e5c87a191824e41 100644 |
--- a/build/config/ios/rules.gni |
+++ b/build/config/ios/rules.gni |
@@ -997,15 +997,53 @@ template("ios_framework_bundle") { |
_has_public_headers = |
defined(invoker.public_headers) && invoker.public_headers != [] |
+ # Public configs are not propagated across toolchain (see crbug.com/675224) |
+ # so some configs have to be defined for both default_toolchain and all others |
+ # toolchains when performing a fat build. Use "get_label_info" to construct |
+ # the path since they need to be relative to the default_toolchain. |
+ |
+ _default_toolchain_root_out_dir = |
+ get_label_info("$_target_name($default_toolchain)", "root_out_dir") |
+ _default_toolchain_target_gen_dir = |
+ get_label_info("$_target_name($default_toolchain)", "target_gen_dir") |
+ |
if (_has_public_headers) { |
_framework_headers_target = _target_name + "_framework_headers" |
_framework_headers_config = _target_name + "_framework_headers_config" |
+ config(_framework_headers_config) { |
+ # The link settings are inherited from the framework_bundle config. |
+ cflags = [ |
+ "-F", |
+ rebase_path("$_default_toolchain_root_out_dir/.", root_build_dir), |
+ ] |
+ } |
+ |
_headers_map_config = _target_name + "_headers_map" |
+ _header_map_filename = |
+ "$_default_toolchain_target_gen_dir/$_output_name.headers.hmap" |
+ config(_headers_map_config) { |
+ visibility = [ ":$_target_name" ] |
+ include_dirs = [ _header_map_filename ] |
+ } |
} |
_arch_shared_library_source = _target_name + "_arch_shared_library_sources" |
_arch_shared_library_target = _target_name + "_arch_shared_library" |
_lipo_shared_library_target = _target_name + "_shared_library" |
+ _link_target_name = _target_name + "+link" |
+ |
+ _framework_public_config = _target_name + "_public_config" |
+ config(_framework_public_config) { |
+ # TODO(sdefresne): should we have a framework_dirs similar to lib_dirs |
+ # and include_dirs to avoid duplicate values on the command-line. |
+ visibility = [ ":$_target_name" ] |
+ ldflags = [ |
+ "-F", |
+ rebase_path("$_default_toolchain_root_out_dir/.", root_build_dir), |
+ ] |
+ lib_dirs = [ root_out_dir ] |
+ libs = [ "$_output_name.framework" ] |
+ } |
source_set(_arch_shared_library_source) { |
forward_variables_from(invoker, |
@@ -1025,8 +1063,8 @@ template("ios_framework_bundle") { |
if (_has_public_headers) { |
configs += [ |
- ":$_framework_headers_config($default_toolchain)", |
- ":$_headers_map_config($default_toolchain)", |
+ ":$_framework_headers_config", |
+ ":$_headers_map_config", |
] |
if (!defined(deps)) { |
@@ -1097,15 +1135,24 @@ template("ios_framework_bundle") { |
] |
} |
- group(_target_name + "+link") { |
+ group(_link_target_name) { |
forward_variables_from(invoker, |
[ |
+ "public_configs", |
"visibility", |
"testonly", |
]) |
public_deps = [ |
- ":$_target_name+link($default_toolchain)", |
+ ":$_link_target_name($default_toolchain)", |
] |
+ |
+ if (!defined(public_configs)) { |
+ public_configs = [] |
+ } |
+ public_configs += [ ":$_framework_public_config" ] |
+ if (_has_public_headers) { |
+ public_configs += [ ":$_framework_headers_config" ] |
+ } |
} |
if (defined(invoker.bundle_deps)) { |
@@ -1116,8 +1163,6 @@ template("ios_framework_bundle") { |
_public_headers = invoker.public_headers |
_framework_root = "$root_out_dir/$_output_name.framework" |
- _header_map_filename = "$target_gen_dir/$_output_name.headers.hmap" |
- |
_compile_headers_map_target = _target_name + "_compile_headers_map" |
action(_compile_headers_map_target) { |
visibility = [ ":$_framework_headers_target" ] |
@@ -1165,11 +1210,6 @@ template("ios_framework_bundle") { |
] |
} |
- config(_headers_map_config) { |
- visibility = [ ":$_target_name" ] |
- include_dirs = [ _header_map_filename ] |
- } |
- |
group(_framework_headers_target) { |
deps = [ |
":$_compile_headers_map_target", |
@@ -1177,14 +1217,6 @@ template("ios_framework_bundle") { |
":$_create_module_map_target", |
] |
} |
- |
- config(_framework_headers_config) { |
- # The link settings are inherited from the framework_bundle config. |
- cflags = [ |
- "-F", |
- rebase_path("$root_out_dir/.", root_build_dir), |
- ] |
- } |
} |
lipo_binary(_lipo_shared_library_target) { |
@@ -1200,19 +1232,6 @@ template("ios_framework_bundle") { |
arch_binary_output = _output_name |
} |
- _framework_public_config = _target_name + "_public_config" |
- config(_framework_public_config) { |
- # TODO(sdefresne): should we have a framework_dirs similar to lib_dirs |
- # and include_dirs to avoid duplicate values on the command-line. |
- visibility = [ ":$_target_name" ] |
- ldflags = [ |
- "-F", |
- rebase_path("$root_out_dir/.", root_build_dir), |
- ] |
- lib_dirs = [ root_out_dir ] |
- libs = [ "$_output_name.framework" ] |
- } |
- |
_info_plist_target = _target_name + "_info_plist" |
_info_plist_bundle = _target_name + "_info_plist_bundle" |
ios_info_plist(_info_plist_target) { |
@@ -1265,11 +1284,11 @@ template("ios_framework_bundle") { |
deps += [ ":$_info_plist_bundle" ] |
} |
- group(_target_name + "+link") { |
+ group(_link_target_name) { |
forward_variables_from(invoker, |
[ |
- "public_deps", |
"public_configs", |
+ "public_deps", |
"testonly", |
"visibility", |
]) |
@@ -1277,11 +1296,11 @@ template("ios_framework_bundle") { |
public_deps = [] |
} |
public_deps += [ ":$_target_name" ] |
+ |
if (!defined(public_configs)) { |
public_configs = [] |
} |
public_configs += [ ":$_framework_public_config" ] |
- |
if (_has_public_headers) { |
public_configs += [ ":$_framework_headers_config" ] |
} |