Index: build/config/ios/rules.gni |
diff --git a/build/config/ios/rules.gni b/build/config/ios/rules.gni |
index 5a9b20999961ed7d292bef6c81c09b03b28348cb..e21779fd43e9392e175a1324de811be6fb956d34 100644 |
--- a/build/config/ios/rules.gni |
+++ b/build/config/ios/rules.gni |
@@ -6,11 +6,253 @@ import("//build/config/ios/ios_sdk.gni") |
import("//build/config/mac/base_rules.gni") |
import("//build/config/mac/symbols.gni") |
-_is_secondary_build = |
- additional_toolchains != [] && current_toolchain != default_toolchain |
+# Control whether an intermediate source_set is used when building executables |
+# and shared_libraries for ios_app_bundle and ios_framework_bundle. This is a |
+# temporary flag that will be removed once scoped_nsobject_unittest{_arc}.mm |
+# tests are passing with this flag set to true (see crbug.com/637065) |
+_use_intermediate_source_set = false |
-_code_signing_script_path = "//build/config/ios/codesign.py" |
-_default_entitlements_path = "//build/config/ios/entitlements.plist" |
+# Invokes lipo on multiple arch-specific binaries to create a fat binary. |
+# |
+# Arguments |
+# |
+# arch_binary_target |
+# name of the target generating the arch-specific binaries, they must |
+# be named $target_out_dir/$toolchain_cpu/$arch_binary_output. |
+# |
+# arch_binary_output |
+# (optional, defaults to the name of $arch_binary_target) base name of |
+# the arch-specific binary generated by arch_binary_target. |
+# |
+# output_name |
+# (optional, defaults to $target_name) base name of the target output, |
+# the full path will be $target_out_dir/$output_name. |
+# |
+# configs |
+# (optional) a list of configurations, this is used to check whether |
+# the binary should be stripped, when "enable_stripping" is true. |
+# |
+template("lipo_binary") { |
+ assert(defined(invoker.arch_binary_target), |
+ "arch_binary_target must be defined for $target_name") |
+ |
+ _target_name = target_name |
+ _output_name = target_name |
+ if (defined(invoker.output_name)) { |
+ _output_name = invoker.output_name |
+ } |
+ |
+ _all_target_cpu = [ current_cpu ] + additional_target_cpus |
+ _all_toolchains = [ current_toolchain ] + additional_toolchains |
+ |
+ _arch_binary_target = invoker.arch_binary_target |
+ _arch_binary_output = get_label_info(_arch_binary_target, "name") |
+ if (defined(invoker.arch_binary_output)) { |
+ _arch_binary_output = invoker.arch_binary_output |
+ } |
+ |
+ action(_target_name) { |
+ forward_variables_from(invoker, |
+ "*", |
+ [ |
+ "arch_binary_output", |
+ "arch_binary_target", |
+ "configs", |
+ "output_name", |
+ ]) |
+ |
+ script = "//build/toolchain/mac/linker_driver.py" |
+ |
+ outputs = [ |
+ "$target_out_dir/$_output_name", |
+ ] |
+ |
+ deps = [] |
+ _index = 0 |
+ inputs = [] |
+ foreach(_cpu, _all_target_cpu) { |
+ _toolchain = _all_toolchains[_index] |
+ _index = _index + 1 |
+ |
+ inputs += |
+ [ get_label_info("$_arch_binary_target($_toolchain)", |
+ "target_out_dir") + "/$_cpu/$_arch_binary_output" ] |
+ |
+ deps += [ "$_arch_binary_target($_toolchain)" ] |
+ } |
+ |
+ args = [ |
+ "xcrun", |
+ "lipo", |
+ "-create", |
+ "-output", |
+ rebase_path("$target_out_dir/$_output_name", root_build_dir), |
+ ] + rebase_path(inputs, root_build_dir) |
+ |
+ if (enable_dsyms) { |
+ _dsyms_output_dir = "$root_out_dir/$_output_name.dSYM" |
+ outputs += [ |
+ "$_dsyms_output_dir/", |
+ "$_dsyms_output_dir/Contents/Info.plist", |
+ "$_dsyms_output_dir/Contents/Resources/DWARF/$_output_name", |
+ ] |
+ args += [ "-Wcrl,dsym," + rebase_path("$root_out_dir/.", root_build_dir) ] |
+ } |
+ |
+ if (enable_stripping) { |
+ # Check whether //build/config/mac:strip_all has been removed from the |
+ # configs variables (as this is how stripping is disabled for a single |
+ # target). |
+ _strip_all_in_config = false |
+ if (defined(invoker.configs)) { |
+ foreach(_config, invoker.configs) { |
+ if (_config == "//build/config/mac:strip_all") { |
+ _strip_all_in_config = true |
+ } |
+ } |
+ } |
+ |
+ if (_strip_all_in_config) { |
+ args += [ "-Wcrl,strip,-x,-S" ] |
+ if (save_unstripped_output) { |
+ outputs += [ "$root_out_dir/$_output_name.unstripped" ] |
+ args += [ "-Wcrl,unstripped," + |
+ rebase_path("$root_out_dir/.", root_build_dir) ] |
+ } |
+ } |
+ } |
+ } |
+} |
+ |
+# Wrapper around create_bundle taking care of code signature settings. |
+# |
+# Arguments |
+# |
+# product_type |
+# string, product type for the generated Xcode project. |
+# |
+# bundle_extension |
+# string, extension of the bundle, used to generate bundle name. |
+# |
+# bundle_binary_target |
+# string, label of the target generating the bundle main binary. |
+# |
+# bundle_binary_output |
+# (optional) string, base name of the binary generated by the |
+# bundle_binary_target target, defaults to the target name. |
+# |
+# extra_system_frameworks |
+# (optional) list of system framework to copy to the bundle. |
+# |
+# enable_code_signing |
+# (optional) boolean, control whether code signing is enabled or not, |
+# default to ios_enable_code_signing if not defined. |
+# |
+template("create_signed_bundle") { |
+ assert(defined(invoker.product_type), |
+ "product_type must be defined for $target_name") |
+ assert(defined(invoker.bundle_extension), |
+ "bundle_extension must be defined for $target_name") |
+ assert(defined(invoker.bundle_binary_target), |
+ "bundle_binary_target must be defined for $target_name") |
+ |
+ _target_name = target_name |
+ _output_name = target_name |
+ if (defined(invoker.output_name)) { |
+ _output_name = invoker.output_name |
+ } |
+ |
+ _bundle_binary_target = invoker.bundle_binary_target |
+ _bundle_binary_output = get_label_info(_bundle_binary_target, "name") |
+ if (defined(invoker.bundle_binary_output)) { |
+ _bundle_binary_output = invoker.bundle_binary_output |
+ } |
+ |
+ _bundle_extension = invoker.bundle_extension |
+ _bundle_root_dir = "$root_out_dir/$_output_name$_bundle_extension" |
+ |
+ _entitlements_path = "//build/config/ios/entitlements.plist" |
+ if (defined(invoker.entitlements_path)) { |
+ _entitlements_path = invoker.entitlements_path |
+ } |
+ |
+ _enable_code_signing = ios_enable_code_signing |
+ if (defined(invoker.enable_code_signing)) { |
+ _enable_code_signing = invoker.enable_code_signing |
+ } |
+ |
+ create_bundle(_target_name) { |
+ forward_variables_from(invoker, |
+ [ |
+ "data_deps", |
+ "deps", |
+ "product_type", |
+ "public_configs", |
+ "public_deps", |
+ "testonly", |
+ "visibility", |
+ ]) |
+ |
+ bundle_root_dir = _bundle_root_dir |
+ bundle_resources_dir = _bundle_root_dir |
+ bundle_executable_dir = _bundle_root_dir |
+ bundle_plugins_dir = "$_bundle_root_dir/PlugIns" |
+ |
+ if (!defined(public_deps)) { |
+ public_deps = [] |
+ } |
+ public_deps += [ _bundle_binary_target ] |
+ |
+ if (defined(invoker.bundle_deps)) { |
+ if (!defined(deps)) { |
+ deps = [] |
+ } |
+ deps += invoker.bundle_deps |
+ } |
+ |
+ code_signing_script = "//build/config/ios/codesign.py" |
+ code_signing_sources = [ |
+ _entitlements_path, |
+ get_label_info(_bundle_binary_target, "target_out_dir") + |
+ "/$_bundle_binary_output", |
+ ] |
+ code_signing_outputs = [ "$_bundle_root_dir/$_output_name" ] |
+ if (_enable_code_signing) { |
+ code_signing_outputs += |
+ [ "$_bundle_root_dir/_CodeSignature/CodeResources" ] |
+ } |
+ if (ios_code_signing_identity != "" && ios_sdk_name != "iphonesimulator") { |
+ code_signing_outputs += [ "$_bundle_root_dir/embedded.mobileprovision" ] |
+ } |
+ |
+ if (defined(invoker.extra_system_frameworks)) { |
+ foreach(_framework, invoker.extra_system_frameworks) { |
+ code_signing_outputs += [ "$bundle_root_dir/Frameworks/" + |
+ get_path_info(_framework, "file") ] |
+ } |
+ } |
+ |
+ code_signing_args = [ |
+ "code-sign-bundle", |
+ "-t=" + ios_sdk_name, |
+ "-i=" + ios_code_signing_identity, |
+ "-e=" + rebase_path(_entitlements_path, root_build_dir), |
+ "-b=" + rebase_path("$target_out_dir/$_output_name", root_build_dir), |
+ rebase_path(bundle_root_dir, root_build_dir), |
+ ] |
+ if (!_enable_code_signing) { |
+ code_signing_args += [ "--disable-code-signature" ] |
+ } |
+ if (defined(invoker.extra_system_frameworks)) { |
+ # All framework in extra_system_frameworks are expected to be |
+ # system framework and the path to be already system absolute |
+ # so do not use rebase_path here. |
+ foreach(_framework, invoker.extra_system_frameworks) { |
+ code_signing_args += [ "-F=" + _framework ] |
+ } |
+ } |
+ } |
+} |
# Generates Info.plist files for Mac apps and frameworks. |
# |
@@ -117,6 +359,10 @@ template("ios_info_plist") { |
# default to "com.apple.product-type.application". Should generally |
# not be overridden. |
# |
+# enable_code_signing |
+# (optional) boolean, control whether code signing is enabled or not, |
+# default to ios_enable_code_signing if not defined. |
+# |
# For more information, see "gn help executable". |
template("ios_app_bundle") { |
_output_name = target_name |
@@ -125,74 +371,19 @@ template("ios_app_bundle") { |
_output_name = invoker.output_name |
} |
- # This template expands to multiple targets with some differences between |
- # the the different build configuration. |
- # |
- # For a thin build (i.e. when additional_target_cpus is an empty list), |
- # it compiles the final application binary with an "executable" target, |
- # performs variable expansions on the Info.plist, defines some "bundle_data" |
- # target to pack Info.plist and the executable into the .app bundle, and |
- # finally a "create_bundle" target that packs everything the bundle. If the |
- # bundle needs to be signed, then the binary is copied into the bundle by |
- # the "create_bundle" target and the intermediate "bundle_data" target is |
- # not generated. |
- # |
- # For a multi-architecture build (aka fat-build), the template expands to |
- # a simple "executable" target for non-default toolchain. This is because |
- # the real application bundle will contains a single binary that supports |
- # all the architectures and creating a separate .app bundle for every |
- # architecture would be a waste of time. |
- # |
- # The target for the default toolchain of a multi-architecture build will |
- # build the executable for current_cpu in a temporary location. The real |
- # fat binary will be created by "lipo" command from all those "executable" |
- # target (including those of the non-default toolchains). This additional |
- # target has the same role as the "executable" target of a thin build. |
- # |
- # The rest of the build, including the codesigning step, are the same for |
- # thin and fat builds. |
- |
- _executable_extra_deps = [] |
- _executable_extra_inputs = [] |
- _executable_extra_ldflags = [] |
- |
- # Embeds the entitlements file if building for simulator. This is optional |
- # with Xcode 7 or older but required with Xcode 8. This is not necessary for |
- # device build as the entitlement is embedded via the codesigning step. |
- if (use_ios_simulator) { |
- _generate_entitlements_target = _target_name + "_gen_entitlements" |
- _generate_entitlements_target_with_toolchain_suffix = |
- "$_generate_entitlements_target($default_toolchain)" |
- |
- _generate_entitlements_output = |
- get_label_info(_generate_entitlements_target_with_toolchain_suffix, |
- "target_gen_dir") + "/$_output_name.xcent" |
- |
- _executable_extra_inputs += [ _generate_entitlements_output ] |
- _executable_extra_deps += |
- [ ":$_generate_entitlements_target_with_toolchain_suffix" ] |
- _executable_extra_ldflags += [ |
- "-Xlinker", |
- "-sectcreate", |
- "-Xlinker", |
- "__TEXT", |
- "-Xlinker", |
- "__entitlements", |
- "-Xlinker", |
- rebase_path(_generate_entitlements_output, root_build_dir), |
- ] |
- } |
+ _arch_executable_source = _target_name + "_arch_executable_sources" |
+ _arch_executable_target = _target_name + "_arch_executable" |
+ _lipo_executable_target = _target_name + "_executable" |
- if (_is_secondary_build) { |
- # For the non-default toolchain of a fat-build, the template expands to a |
- # single "executable" target that creates "$root_out_dir/$_output_name". |
- executable(_target_name) { |
+ if (_use_intermediate_source_set) { |
+ source_set(_arch_executable_source) { |
forward_variables_from(invoker, |
"*", |
[ |
"bundle_deps", |
"bundle_deps_filter", |
"bundle_extension", |
+ "enable_code_signing", |
"entitlements_path", |
"extra_substitutions", |
"extra_system_frameworks", |
@@ -200,80 +391,144 @@ template("ios_app_bundle") { |
"info_plist_target", |
"output_name", |
"product_type", |
+ "visibility", |
]) |
- if (defined(visibility)) { |
- visibility += [ ":*($default_toolchain)" ] |
- } |
+ visibility = [ ":$_arch_executable_target" ] |
+ } |
+ } else { |
+ assert(_arch_executable_source != "", |
+ "mark _arch_executable_source as used") |
+ } |
- if (!defined(deps)) { |
- deps = [] |
- } |
- deps += _executable_extra_deps |
+ if (use_ios_simulator) { |
+ _generate_entitlements_target = _target_name + "_gen_entitlements" |
+ _generate_entitlements_output = |
+ get_label_info(":$_generate_entitlements_target($default_toolchain)", |
+ "target_out_dir") + "/$_output_name.xcent" |
+ } |
- if (!defined(ldflags)) { |
- ldflags = [] |
- } |
- ldflags += _executable_extra_ldflags |
+ executable(_arch_executable_target) { |
+ forward_variables_from(invoker, |
+ "*", |
+ [ |
+ "bundle_deps", |
+ "bundle_deps_filter", |
+ "bundle_extension", |
+ "enable_code_signing", |
+ "entitlements_path", |
+ "extra_substitutions", |
+ "extra_system_frameworks", |
+ "info_plist", |
+ "info_plist_target", |
+ "output_name", |
+ "product_type", |
+ "sources", |
+ "visibility", |
+ ]) |
+ if (!_use_intermediate_source_set) { |
+ forward_variables_from(invoker, [ "sources" ]) |
+ } |
+ |
+ visibility = [ ":$_lipo_executable_target($default_toolchain)" ] |
+ if (current_toolchain != default_toolchain) { |
+ visibility += [ ":$_target_name" ] |
+ } |
+ |
+ if (!defined(deps)) { |
+ deps = [] |
+ } |
+ if (_use_intermediate_source_set) { |
+ deps += [ ":$_arch_executable_source" ] |
+ } |
+ |
+ if (!defined(libs)) { |
+ libs = [] |
+ } |
+ libs += [ "UIKit.framework" ] |
+ |
+ if (use_ios_simulator) { |
+ deps += [ ":$_generate_entitlements_target($default_toolchain)" ] |
if (!defined(inputs)) { |
inputs = [] |
} |
- inputs += _executable_extra_inputs |
+ inputs += [ _generate_entitlements_output ] |
- output_name = _output_name |
- if (!defined(libs)) { |
- libs = [] |
+ if (!defined(ldflags)) { |
+ ldflags = [] |
} |
- libs += [ "UIKit.framework" ] |
+ ldflags += [ |
+ "-Xlinker", |
+ "-sectcreate", |
+ "-Xlinker", |
+ "__TEXT", |
+ "-Xlinker", |
+ "__entitlements", |
+ "-Xlinker", |
+ rebase_path(_generate_entitlements_output, root_build_dir), |
+ ] |
+ } |
+ |
+ output_name = _output_name |
+ output_prefix_override = true |
+ output_dir = "$target_out_dir/$current_cpu" |
+ } |
+ |
+ if (current_toolchain != default_toolchain) { |
+ # For fat builds, only the default toolchain will generate an application |
+ # bundle. For the other toolchains, the template is only used for building |
+ # the arch-specific binary, thus the default target is just a group(). |
+ |
+ group(_target_name) { |
+ forward_variables_from(invoker, |
+ [ |
+ "visibility", |
+ "testonly", |
+ ]) |
+ public_deps = [ |
+ ":$_arch_executable_target", |
+ ] |
} |
} else { |
- # This is either a thin build or the default toolchain of a fat-build. |
- # The template will expand in many different target ($target_name is the |
- # create_bundle target) used as input to the create_bundle target. |
- _generate_info_plist = target_name + "_generate_info_plist" |
- _bundle_data_info_plist = target_name + "_bundle_data_info_plist" |
+ lipo_binary(_lipo_executable_target) { |
+ forward_variables_from(invoker, |
+ [ |
+ "configs", |
+ "testonly", |
+ ]) |
- _entitlements_path = _default_entitlements_path |
- if (defined(invoker.entitlements_path)) { |
- _entitlements_path = invoker.entitlements_path |
+ visibility = [ ":$_target_name" ] |
+ output_name = _output_name |
+ arch_binary_target = ":$_arch_executable_target" |
+ arch_binary_output = _output_name |
} |
+ _generate_info_plist = target_name + "_generate_info_plist" |
ios_info_plist(_generate_info_plist) { |
- visibility = [ ":$_bundle_data_info_plist" ] |
- if (use_ios_simulator) { |
- visibility += [ ":$_generate_entitlements_target" ] |
- } |
- executable_name = _output_name |
forward_variables_from(invoker, |
[ |
"extra_substitutions", |
"info_plist", |
"info_plist_target", |
]) |
- } |
- bundle_data(_bundle_data_info_plist) { |
- visibility = [ ":$_target_name" ] |
- forward_variables_from(invoker, [ "testonly" ]) |
- sources = get_target_outputs(":$_generate_info_plist") |
- outputs = [ |
- "{{bundle_root_dir}}/Info.plist", |
- ] |
- public_deps = [ |
- ":$_generate_info_plist", |
- ] |
+ executable_name = _output_name |
} |
if (use_ios_simulator) { |
+ _entitlements_path = "//build/config/ios/entitlements.plist" |
+ if (defined(invoker.entitlements_path)) { |
+ _entitlements_path = invoker.entitlements_path |
+ } |
+ |
action(_generate_entitlements_target) { |
- _gen_info_plist_target = ":$_generate_info_plist" |
- _gen_info_plist_outputs = get_target_outputs(_gen_info_plist_target) |
+ _gen_info_plist_outputs = get_target_outputs(":$_generate_info_plist") |
_info_plist_path = _gen_info_plist_outputs[0] |
- script = _code_signing_script_path |
+ script = "//build/config/ios/codesign.py" |
deps = [ |
- _gen_info_plist_target, |
+ ":$_generate_info_plist", |
] |
sources = [ |
_entitlements_path, |
@@ -290,150 +545,44 @@ template("ios_app_bundle") { |
} |
} |
- _link_executable = _target_name + "_arch_executable" |
- _lipo_executable = _target_name + "_executable" |
- |
- _link_executable_visibility = [ ":$_lipo_executable" ] |
- _lipo_executable_visibility = [ ":$_target_name" ] |
- |
- executable(_link_executable) { |
- forward_variables_from(invoker, |
- "*", |
- [ |
- "bundle_deps", |
- "bundle_deps_filter", |
- "bundle_extension", |
- "data_deps", |
- "entitlements_path", |
- "extra_substitutions", |
- "extra_system_frameworks", |
- "info_plist", |
- "info_plist_target", |
- "output_name", |
- "product_type", |
- "visibility", |
- ]) |
- |
- visibility = _link_executable_visibility |
- |
- output_name = _output_name |
- output_prefix_override = true |
- output_dir = "$target_out_dir/$current_cpu" |
- |
- if (!defined(deps)) { |
- deps = [] |
- } |
- deps += _executable_extra_deps |
- |
- if (!defined(ldflags)) { |
- ldflags = [] |
- } |
- ldflags += _executable_extra_ldflags |
- |
- if (!defined(inputs)) { |
- inputs = [] |
- } |
- inputs += _executable_extra_inputs |
- |
- if (!defined(libs)) { |
- libs = [] |
- } |
- libs += [ "UIKit.framework" ] |
- } |
- |
- # Create the multi-architecture binary from all the single architecture |
- # binaries using "lipo". This target exists for the default toolchain |
- # of a fat-build only and depends on the expansion of "ios_app_bundle" |
- # for the other toolchains (i.e. a single "executable" target). |
- # |
- # This action only happens once per "ios_app_bundle" template (for the |
- # main toolchain). |
- action(_lipo_executable) { |
+ _bundle_data_info_plist = target_name + "_bundle_data_info_plist" |
+ bundle_data(_bundle_data_info_plist) { |
forward_variables_from(invoker, [ "testonly" ]) |
- visibility = _lipo_executable_visibility |
- script = "//build/toolchain/mac/linker_driver.py" |
+ |
+ sources = get_target_outputs(":$_generate_info_plist") |
outputs = [ |
- "$target_out_dir/$_output_name", |
- ] |
- inputs = [ |
- "$target_out_dir/$current_cpu/$_output_name", |
+ "{{bundle_root_dir}}/Info.plist", |
] |
- deps = [ |
- ":$_link_executable", |
+ public_deps = [ |
+ ":$_generate_info_plist", |
] |
- foreach(_additional_toolchain, additional_toolchains) { |
- _additional_toolchain_target = "$_target_name($_additional_toolchain)" |
- deps += [ ":$_additional_toolchain_target" ] |
- inputs += [ get_label_info(_additional_toolchain_target, |
- "root_out_dir") + "/$_output_name" ] |
- } |
- args = [ |
- "xcrun", |
- "lipo", |
- "-create", |
- "-output", |
- rebase_path(outputs[0], root_build_dir), |
- ] + rebase_path(inputs, root_build_dir) |
- |
- if (enable_dsyms) { |
- _dsyms_dir = "$root_out_dir/$_output_name.dSYM/" |
- outputs += [ |
- "$_dsyms_dir/", |
- "$_dsyms_dir/Contents/Info.plist", |
- "$_dsyms_dir/Contents/Resources/DWARF/$_output_name", |
- ] |
- args += |
- [ "-Wcrl,dsym," + rebase_path("$root_out_dir/.", root_build_dir) ] |
- } |
- |
- if (enable_stripping) { |
- # Check whether //build/config/mac:strip_all has been removed from |
- # the configs variable (as this is how stripping is disabled for a |
- # single target). |
- _strip_all_in_config = false |
- if (defined(invoker.configs)) { |
- foreach(_config, invoker.configs) { |
- if (_config == "//build/config/mac:strip_all") { |
- _strip_all_in_config = true |
- } |
- } |
- } |
- |
- if (_strip_all_in_config) { |
- args += [ "-Wcrl,strip,-x,-S" ] |
- |
- if (save_unstripped_output) { |
- outputs += [ outputs[0] + ".unstripped" ] |
- args += [ "-Wcrl,unstripped," + |
- rebase_path(get_path_info(outputs[0], "dir"), |
- root_build_dir) ] |
- } |
- } |
- } |
} |
- create_bundle(target_name) { |
+ create_signed_bundle(_target_name) { |
forward_variables_from(invoker, |
[ |
- "bundle_deps_filter", |
+ "bundle_deps", |
+ "bundle_extension", |
"data_deps", |
"deps", |
+ "enable_code_signing", |
+ "entitlements_path", |
+ "extra_system_frameworks", |
+ "product_type", |
+ "public_configs", |
"public_deps", |
"testonly", |
"visibility", |
]) |
- if (!defined(deps)) { |
- deps = [] |
- } |
- deps += [ ":$_bundle_data_info_plist" ] |
- if (!defined(public_deps)) { |
- public_deps = [] |
- } |
- public_deps += [ ":$_lipo_executable" ] |
- if (defined(invoker.bundle_deps)) { |
- deps += invoker.bundle_deps |
+ output_name = _output_name |
+ bundle_binary_target = ":$_lipo_executable_target" |
+ bundle_binary_output = _output_name |
+ |
+ if (!defined(bundle_deps)) { |
+ bundle_deps = [] |
} |
+ bundle_deps += [ ":$_bundle_data_info_plist" ] |
if (use_ios_simulator) { |
if (!defined(data_deps)) { |
@@ -442,102 +591,15 @@ template("ios_app_bundle") { |
data_deps += [ "//testing/iossim" ] |
} |
- if (defined(invoker.product_type)) { |
- product_type = invoker.product_type |
- } else { |
+ if (!defined(product_type)) { |
product_type = "com.apple.product-type.application" |
} |
- if (defined(invoker.bundle_extension)) { |
- _bundle_extension = invoker.bundle_extension |
- } else { |
- _bundle_extension = ".app" |
- } |
- |
- bundle_root_dir = "$root_out_dir/$_output_name$_bundle_extension" |
- bundle_resources_dir = bundle_root_dir |
- bundle_executable_dir = bundle_root_dir |
- bundle_plugins_dir = "$bundle_root_dir/PlugIns" |
- |
- code_signing_script = _code_signing_script_path |
- code_signing_sources = [ |
- _entitlements_path, |
- "$target_out_dir/$_output_name", |
- ] |
- code_signing_outputs = [ "$bundle_root_dir/$_output_name" ] |
- if (ios_enable_code_signing) { |
- code_signing_outputs += |
- [ "$bundle_root_dir/_CodeSignature/CodeResources" ] |
- } |
- if (ios_code_signing_identity != "") { |
- code_signing_outputs += [ "$bundle_root_dir/embedded.mobileprovision" ] |
- } |
- if (defined(invoker.extra_system_frameworks)) { |
- foreach(_framework, invoker.extra_system_frameworks) { |
- code_signing_outputs += [ "$bundle_root_dir/Frameworks/" + |
- get_path_info(_framework, "file") ] |
- } |
- } |
- code_signing_args = [ |
- "code-sign-bundle", |
- "-t=" + ios_sdk_name, |
- "-i=" + ios_code_signing_identity, |
- "-e=" + rebase_path(_entitlements_path, root_build_dir), |
- "-b=" + rebase_path("$target_out_dir/$_output_name", root_build_dir), |
- rebase_path(bundle_root_dir, root_build_dir), |
- ] |
- if (defined(invoker.extra_system_frameworks)) { |
- # All framework in extra_system_frameworks are expected to be |
- # system framework and the path to be already system absolute |
- # so do not use rebase_path here. |
- foreach(_framework, invoker.extra_system_frameworks) { |
- code_signing_args += [ "-F=" + _framework ] |
- } |
- } |
- if (!ios_enable_code_signing) { |
- code_signing_args += [ "--disable-code-signature" ] |
+ if (!defined(bundle_extension)) { |
+ bundle_extension = ".app" |
} |
} |
} |
- |
- # TODO(crbug.com/395883): ensure those variables are marked as used to |
- # avoid errors while running "gn gen". |
- if (defined(invoker.entitlements_path)) { |
- assert(invoker.entitlements_path != "", |
- "mark invoker.entitlements_path as used") |
- } |
- if (defined(invoker.bundle_extension)) { |
- assert(invoker.bundle_extension != "", |
- "mark invoker.bundle_extension as used") |
- } |
- if (defined(invoker.bundle_extension)) { |
- assert(invoker.bundle_extension != "", |
- "mark invoker.bundle_extension as used") |
- } |
- if (defined(invoker.entitlements_path)) { |
- assert(invoker.entitlements_path != "", |
- "mark invoker.entitlements_path as used") |
- } |
- if (defined(invoker.extra_substitutions)) { |
- assert(invoker.extra_substitutions != [], |
- "mark invoker.extra_substitutions as used") |
- } |
- if (defined(invoker.info_plist)) { |
- assert(invoker.info_plist != "", "mark invoker.info_plist as used") |
- } |
- if (defined(invoker.info_plist_target)) { |
- assert(invoker.info_plist_target != "", |
- "mark invoker.info_plist_target as used") |
- } |
- if (defined(invoker.product_type)) { |
- assert(invoker.product_type != "", "mark product_type as used") |
- } |
- if (defined(invoker.bundle_deps)) { |
- assert(invoker.bundle_deps != [], "mark bundle_deps as used") |
- } |
- if (defined(invoker.bundle_deps_filter)) { |
- assert(invoker.bundle_deps_filter != [], "mark bundle_deps_filter as used") |
- } |
} |
set_defaults("ios_app_bundle") { |
@@ -717,12 +779,6 @@ template("bundle_data_strings") { |
# (optional) string, name of the generated framework without the |
# .framework suffix. If omitted, defaults to target_name. |
# |
-# framework_version: |
-# (optional) string, version of the framework. Typically this is a |
-# single letter, like "A". If omitted, the Versions/ subdirectory |
-# structure will not be created, and build output will go directly |
-# into the framework subdirectory. |
-# |
# public_headers: |
# (optional) list of paths to header file that needs to be copied |
# into the framework bundle Headers subdirectory. If omitted or |
@@ -732,6 +788,10 @@ template("bundle_data_strings") { |
# (optional) list of files. Needs to be defined and non-empty if |
# public_headers is defined and non-empty. |
# |
+# enable_code_signing |
+# (optional) boolean, control whether code signing is enabled or not, |
+# default to ios_enable_code_signing if not defined. |
+# |
# This template provides two targets for the resulting framework bundle. The |
# link-time behavior varies depending on which of the two targets below is |
# added as a dependency: |
@@ -814,41 +874,73 @@ template("ios_framework_bundle") { |
_headers_map_config = _target_name + "_headers_map" |
} |
- # The expansion of the template is different for fat and thin builds. For |
- # thin build (and default toolchain of a fat build), the template expands |
- # to a "shared_library" target to create the bundle shared library and a |
- # "create_bundle" target (the main target) to create the bundle structure. |
- # |
- # For a fat build, the template just expands to the "shared_library" target |
- # for the non-default toolchain, while the final library is created using |
- # "lipo" in the expansion of the template for the default toolchain. |
- # |
- # The "$target_name+link" group for the non-default toolchain depends on the |
- # target of the same name from the default toolchain as this is the target |
- # that defines the real framework bundle (it will support the current cpu |
- # as it is a fat framework). |
- |
- if (_is_secondary_build) { |
- shared_library(_target_name) { |
+ _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" |
+ |
+ if (_use_intermediate_source_set) { |
+ source_set(_arch_shared_library_source) { |
forward_variables_from(invoker, |
"*", |
[ |
- "assert_no_deps", |
"bundle_deps", |
+ "bundle_deps_filter", |
"data_deps", |
"enable_code_signing", |
"info_plist", |
"info_plist_target", |
"output_name", |
+ "visibility", |
]) |
- if (defined(visibility)) { |
- visibility += [ ":${_target_name}_shared_library($default_toolchain)" ] |
+ |
+ visibility = [ ":$_arch_shared_library_target" ] |
+ |
+ if (_has_public_headers) { |
+ configs += [ |
+ ":$_framework_headers_config($default_toolchain)", |
+ ":$_headers_map_config($default_toolchain)", |
+ ] |
+ |
+ if (!defined(deps)) { |
+ deps = [] |
+ } |
+ deps += [ ":$_framework_headers_target($default_toolchain)" ] |
} |
- output_name = _output_name |
- output_prefix_override = true |
- output_extension = "" |
- output_dir = "$target_out_dir/$_target_name" |
+ } |
+ } else { |
+ assert(_arch_shared_library_source != "", |
+ "mark _arch_shared_library_source as used") |
+ } |
+ |
+ shared_library(_arch_shared_library_target) { |
+ forward_variables_from(invoker, |
+ "*", |
+ [ |
+ "bundle_deps", |
+ "bundle_deps_filter", |
+ "data_deps", |
+ "enable_code_signing", |
+ "info_plist", |
+ "info_plist_target", |
+ "output_name", |
+ "sources", |
+ "visibility", |
+ ]) |
+ if (!_use_intermediate_source_set) { |
+ forward_variables_from(invoker, [ "sources" ]) |
+ } |
+ visibility = [ ":$_lipo_shared_library_target($default_toolchain)" ] |
+ if (current_toolchain != default_toolchain) { |
+ visibility += [ ":$_target_name" ] |
+ } |
+ |
+ if (!defined(deps)) { |
+ deps = [] |
+ } |
+ if (_use_intermediate_source_set) { |
+ deps += [ ":$_arch_shared_library_source" ] |
+ } else { |
if (_has_public_headers) { |
configs += [ |
":$_framework_headers_config($default_toolchain)", |
@@ -862,6 +954,28 @@ template("ios_framework_bundle") { |
} |
} |
+ output_extension = "" |
+ output_name = _output_name |
+ output_prefix_override = true |
+ output_dir = "$target_out_dir/$current_cpu" |
+ } |
+ |
+ if (current_toolchain != default_toolchain) { |
+ # For fat builds, only the default toolchain will generate a framework |
+ # bundle. For the other toolchains, the template is only used for building |
+ # the arch-specific binary, thus the default target is just a group(). |
+ |
+ group(_target_name) { |
+ forward_variables_from(invoker, |
+ [ |
+ "visibility", |
+ "testonly", |
+ ]) |
+ public_deps = [ |
+ ":$_arch_shared_library_target", |
+ ] |
+ } |
+ |
group(_target_name + "+link") { |
forward_variables_from(invoker, |
[ |
@@ -879,8 +993,7 @@ template("ios_framework_bundle") { |
} else { |
if (_has_public_headers) { |
_public_headers = invoker.public_headers |
- _framework_name = _output_name + ".framework" |
- _framework_root = "$root_out_dir/$_framework_name" |
+ _framework_root = "$root_out_dir/$_output_name.framework" |
_header_map_filename = "$target_gen_dir/$_output_name.headers.hmap" |
@@ -936,7 +1049,7 @@ template("ios_framework_bundle") { |
include_dirs = [ _header_map_filename ] |
ldflags = [ |
"-install_name", |
- "@rpath/$_framework_name/$_output_name", |
+ "@rpath/$_output_name.framework/$_output_name", |
] |
} |
@@ -957,132 +1070,30 @@ template("ios_framework_bundle") { |
} |
} |
- # If the framework is unversioned, the final _target_name will be the |
- # create_bundle(_framework_target), otherwise an action with the name |
- # _target_name will depends on the the create_bundle() in order to prepare |
- # the versioned directory structure. |
- _framework_target = _target_name |
- _framework_name = _output_name + ".framework" |
- _framework_root_dir = "$root_out_dir/$_framework_name" |
- if (defined(invoker.framework_version) && invoker.framework_version != "") { |
- _framework_version = invoker.framework_version |
- _framework_root_dir += "/Versions/$_framework_version" |
- _framework_target = _target_name + "_create_bundle" |
- } |
- |
- _link_shared_library_target = target_name + "_arch_shared_library" |
- _lipo_shared_library_target = target_name + "_shared_library" |
- |
- _lipo_shared_library_visibility = [ ":$_framework_target" ] |
- _link_shared_library_visibility = [ ":$_lipo_shared_library_target" ] |
- |
- _arch_shared_library_dir = "$target_out_dir/$_link_shared_library_target" |
- _shared_library_dir = "$target_out_dir/$_lipo_shared_library_target" |
- |
- shared_library(_link_shared_library_target) { |
+ lipo_binary(_lipo_shared_library_target) { |
forward_variables_from(invoker, |
- "*", |
[ |
- "assert_no_deps", |
- "bundle_deps", |
- "data_deps", |
- "enable_code_signing", |
- "info_plist", |
- "info_plist_target", |
- "output_name", |
- "visibility", |
+ "configs", |
+ "testonly", |
]) |
- visibility = _link_shared_library_visibility |
- output_name = _output_name |
- output_prefix_override = true |
- output_extension = "" |
- output_dir = _arch_shared_library_dir |
- if (_has_public_headers) { |
- configs += [ ":$_headers_map_config($default_toolchain)" ] |
- |
- if (!defined(deps)) { |
- deps = [] |
- } |
- deps += [ ":$_framework_headers_target($default_toolchain)" ] |
- } |
- } |
- |
- action(_lipo_shared_library_target) { |
- forward_variables_from(invoker, [ "testonly" ]) |
- visibility = _lipo_shared_library_visibility |
- script = "//build/toolchain/mac/linker_driver.py" |
- outputs = [ |
- "$_shared_library_dir/$_output_name", |
- ] |
- inputs = [ |
- "$_arch_shared_library_dir/$_output_name", |
- ] |
- deps = [ |
- ":$_link_shared_library_target", |
- ] |
- foreach(_additional_toolchain, additional_toolchains) { |
- _additional_toolchain_target = "$_target_name($_additional_toolchain)" |
- deps += [ ":$_additional_toolchain_target" ] |
- inputs += [ get_label_info(_additional_toolchain_target, |
- "target_out_dir") + "/$_output_name" ] |
- } |
- args = [ |
- "xcrun", |
- "lipo", |
- "-create", |
- "-output", |
- rebase_path(outputs[0], root_build_dir), |
- ] + rebase_path(inputs, root_build_dir) |
- |
- if (enable_dsyms) { |
- _dsyms_dir = "$root_out_dir/$_output_name.dSYM/" |
- outputs += [ |
- "$_dsyms_dir/", |
- "$_dsyms_dir/Contents/Info.plist", |
- "$_dsyms_dir/Contents/Resources/DWARF/$_output_name", |
- ] |
- args += |
- [ "-Wcrl,dsym," + rebase_path("$root_out_dir/.", root_build_dir) ] |
- } |
- |
- if (enable_stripping) { |
- # Check whether //build/config/mac:strip_all has been removed from |
- # the configs variable (as this is how stripping is disabled for a |
- # single target). |
- _strip_all_in_config = false |
- if (defined(invoker.configs)) { |
- foreach(_config, invoker.configs) { |
- if (_config == "//build/config/mac:strip_all") { |
- _strip_all_in_config = true |
- } |
- } |
- } |
- |
- if (_strip_all_in_config) { |
- args += [ "-Wcrl,strip,-x,-S" ] |
- |
- if (save_unstripped_output) { |
- outputs += [ outputs[0] + ".unstripped" ] |
- args += [ "-Wcrl,unstripped," + |
- rebase_path(get_path_info(outputs[0], "dir"), |
- root_build_dir) ] |
- } |
- } |
- } |
+ visibility = [ ":$_target_name" ] |
+ output_name = _output_name |
+ arch_binary_target = ":$_arch_shared_library_target" |
+ 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 = [ ":$_framework_target" ] |
+ visibility = [ ":$_target_name" ] |
ldflags = [ |
"-F", |
rebase_path("$root_out_dir/.", root_build_dir), |
] |
lib_dirs = [ root_out_dir ] |
- libs = [ _framework_name ] |
+ libs = [ "$_output_name.framework" ] |
} |
_info_plist_target = _target_name + "_info_plist" |
@@ -1110,104 +1121,30 @@ template("ios_framework_bundle") { |
] |
} |
- create_bundle(_framework_target) { |
+ create_signed_bundle(_target_name) { |
forward_variables_from(invoker, |
[ |
+ "bundle_deps", |
"data_deps", |
"deps", |
+ "enable_code_signing", |
"public_configs", |
"public_deps", |
"testonly", |
+ "visibility", |
]) |
- if (defined(_framework_version)) { |
- visibility = [ ":$_target_name" ] |
- } else { |
- if (defined(invoker.visibility)) { |
- visibility = invoker.visibility |
- visibility += [ ":$_target_name+link" ] |
- } |
- } |
- |
- if (!defined(deps)) { |
- deps = [] |
- } |
- deps += [ ":$_info_plist_bundle" ] |
- |
- if (defined(invoker.bundle_deps)) { |
- if (!defined(deps)) { |
- deps = [] |
- } |
- deps += invoker.bundle_deps |
- } |
+ product_type = "com.apple.product-type.framework" |
+ bundle_extension = ".framework" |
- bundle_root_dir = _framework_root_dir |
- bundle_resources_dir = _framework_root_dir |
- bundle_executable_dir = _framework_root_dir |
+ output_name = _output_name |
+ bundle_binary_target = ":$_lipo_shared_library_target" |
+ bundle_binary_output = _output_name |
if (!defined(deps)) { |
deps = [] |
} |
- deps += [ ":$_lipo_shared_library_target" ] |
- |
- _entitlements_path = _default_entitlements_path |
- if (defined(invoker.entitlements_path)) { |
- _entitlements_path = invoker.entitlements_path |
- } |
- |
- _ios_enable_code_signing = ios_enable_code_signing |
- if (defined(invoker.enable_code_signing)) { |
- _ios_enable_code_signing = invoker.enable_code_signing |
- } |
- |
- code_signing_script = _code_signing_script_path |
- code_signing_sources = [ |
- _entitlements_path, |
- "$_shared_library_dir/$_output_name", |
- ] |
- code_signing_outputs = [ "$bundle_root_dir/$_output_name" ] |
- if (_ios_enable_code_signing) { |
- code_signing_outputs += |
- [ "$bundle_root_dir/_CodeSignature/CodeResources" ] |
- } |
- if (ios_code_signing_identity != "") { |
- code_signing_outputs += [ "$bundle_root_dir/embedded.mobileprovision" ] |
- } |
- code_signing_args = [ |
- "code-sign-bundle", |
- "-t=" + ios_sdk_name, |
- "-i=" + ios_code_signing_identity, |
- "-e=" + rebase_path(_entitlements_path, root_build_dir), |
- "-b=" + |
- rebase_path("$_shared_library_dir/$_output_name", root_build_dir), |
- rebase_path(bundle_root_dir, root_build_dir), |
- ] |
- if (!_ios_enable_code_signing) { |
- code_signing_args += [ "--disable-code-signature" ] |
- } |
- } |
- |
- if (defined(_framework_version)) { |
- action(_target_name) { |
- forward_variables_from(invoker, [ "testonly" ]) |
- |
- if (defined(invoker.visibility)) { |
- visibility = invoker.visibility |
- visibility += [ ":$_target_name+link" ] |
- } |
- |
- script = "//build/config/mac/package_framework.py" |
- outputs = [ |
- "$root_out_dir/$_framework_name/Versions/Current", |
- ] |
- args = [ |
- "$_framework_name", |
- "$_framework_version", |
- ] |
- public_deps = [ |
- ":$_framework_target", |
- ] |
- } |
+ deps += [ ":$_info_plist_bundle" ] |
} |
group(_target_name + "+link") { |
@@ -1272,16 +1209,39 @@ template("ios_xctest_test") { |
_host_target = _target_name + "_host" |
_host_output = _output_name + "_host" |
- if (_is_secondary_build) { |
- loadable_module(_xctest_target) { |
- visibility = [ ":${_xctest_target}_loadable_module($default_toolchain)" ] |
- sources = [ |
- "//build/config/ios/xctest_shell.mm", |
- ] |
- configs += [ "//build/config/ios:xctest_config" ] |
+ _xctest_arch_loadable_module_target = _xctest_target + "_arch_loadable_module" |
+ _xctest_lipo_loadable_module_target = _xctest_target + "_loadable_module" |
- output_name = _xctest_output |
- output_extension = "" |
+ loadable_module(_xctest_arch_loadable_module_target) { |
+ visibility = [ ":$_xctest_lipo_loadable_module_target($default_toolchain)" ] |
+ if (current_toolchain != default_toolchain) { |
+ visibility += [ ":$_target_name" ] |
+ } |
+ |
+ sources = [ |
+ "//build/config/ios/xctest_shell.mm", |
+ ] |
+ configs += [ "//build/config/ios:xctest_config" ] |
+ |
+ output_dir = "$target_out_dir/$current_cpu" |
+ output_name = _xctest_output |
+ output_prefix_override = true |
+ output_extension = "" |
+ } |
+ |
+ if (current_toolchain != default_toolchain) { |
+ # For fat builds, only the default toolchain will generate a test bundle. |
+ # For the other toolchains, the template is only used for building the |
+ # arch-specific binary, thus the default target is just a group(). |
+ group(_target_name) { |
+ forward_variables_from(invoker, |
+ [ |
+ "visibility", |
+ "testonly", |
+ ]) |
+ public_deps = [ |
+ ":$_xctest_arch_loadable_module_target", |
+ ] |
} |
} else { |
_xctest_info_plist_target = _xctest_target + "_info_plist" |
@@ -1303,129 +1263,34 @@ template("ios_xctest_test") { |
] |
} |
- _xctest_loadable_module_target = _xctest_target + "_arch_loadable_module" |
- _xctest_lipo_loadable_module_target = _xctest_target + "_loadable_module" |
- |
- _xctest_loadable_module_visibility = |
- [ ":$_xctest_lipo_loadable_module_target" ] |
- _xctest_lipo_loadable_module_visibility = [ ":$_xctest_target" ] |
- |
- loadable_module(_xctest_loadable_module_target) { |
- visibility = _xctest_loadable_module_visibility |
- sources = [ |
- "//build/config/ios/xctest_shell.mm", |
- ] |
- configs += [ "//build/config/ios:xctest_config" ] |
+ lipo_binary(_xctest_lipo_loadable_module_target) { |
+ forward_variables_from(invoker, |
+ [ |
+ "configs", |
+ "testonly", |
+ ]) |
- output_dir = "$target_out_dir/$current_cpu" |
+ visibility = [ ":$_xctest_target" ] |
output_name = _xctest_output |
- output_prefix_override = true |
- output_extension = "" |
- } |
- |
- action(_xctest_lipo_loadable_module_target) { |
- visibility = _xctest_lipo_loadable_module_visibility |
- script = "//build/toolchain/mac/linker_driver.py" |
- outputs = [ |
- "$target_out_dir/$_xctest_output", |
- ] |
- inputs = [ |
- "$target_out_dir/$current_cpu/$_xctest_output", |
- ] |
- deps = [ |
- ":$_xctest_loadable_module_target", |
- ] |
- foreach(_additional_toolchain, additional_toolchains) { |
- _additional_toolchain_target = "$_target_name($_additional_toolchain)" |
- deps += [ ":$_additional_toolchain_target" ] |
- inputs += [ get_label_info(_additional_toolchain_target, |
- "root_out_dir") + "/$_xctest_output" ] |
- } |
- args = [ |
- "xcrun", |
- "lipo", |
- "-create", |
- "-output", |
- rebase_path(outputs[0], root_build_dir), |
- ] + rebase_path(inputs, root_build_dir) |
- |
- if (enable_dsyms) { |
- _dsyms_dir = "$root_out_dir/$_output_name.dSYM/" |
- outputs += [ |
- "$_dsyms_dir/", |
- "$_dsyms_dir/Contents/Info.plist", |
- "$_dsyms_dir/Contents/Resources/DWARF/$_output_name", |
- ] |
- args += |
- [ "-Wcrl,dsym," + rebase_path("$root_out_dir/.", root_build_dir) ] |
- } |
- |
- if (enable_stripping) { |
- # Check whether //build/config/mac:strip_all has been removed from |
- # the configs variable (as this is how stripping is disabled for a |
- # single target). |
- _strip_all_in_config = false |
- if (defined(invoker.configs)) { |
- foreach(_config, invoker.configs) { |
- if (_config == "//build/config/mac:strip_all") { |
- _strip_all_in_config = true |
- } |
- } |
- } |
- |
- if (_strip_all_in_config) { |
- args += [ "-Wcrl,strip,-x,-S" ] |
- |
- if (save_unstripped_output) { |
- outputs += [ outputs[0] + ".unstripped" ] |
- args += [ "-Wcrl,unstripped," + |
- rebase_path(get_path_info(outputs[0], "dir"), |
- root_build_dir) ] |
- } |
- } |
- } |
+ arch_binary_target = ":$_xctest_arch_loadable_module_target" |
+ arch_binary_output = _xctest_output |
} |
_xctest_bundle = _xctest_target + "_bundle" |
- |
- create_bundle(_xctest_target) { |
+ create_signed_bundle(_xctest_target) { |
+ forward_variables_from(invoker, [ "enable_code_signing" ]) |
visibility = [ ":$_xctest_bundle" ] |
+ |
product_type = "com.apple.product-type.bundle.unit-test" |
- deps = [ |
- ":$_xctest_info_plist_bundle", |
- ":$_xctest_lipo_loadable_module_target", |
- ] |
- bundle_root_dir = "$root_out_dir/$_xctest_output.xctest" |
+ bundle_extension = ".xctest" |
- _entitlements_path = _default_entitlements_path |
- if (defined(invoker.entitlements_path)) { |
- _entitlements_path = invoker.entitlements_path |
- } |
+ output_name = _xctest_output |
+ bundle_binary_target = ":$_xctest_lipo_loadable_module_target" |
+ bundle_binary_output = _xctest_output |
- code_signing_script = _code_signing_script_path |
- code_signing_sources = [ |
- _entitlements_path, |
- "$target_out_dir/$_xctest_output", |
- ] |
- code_signing_outputs = [ "$bundle_root_dir/$_xctest_output" ] |
- if (ios_enable_code_signing) { |
- code_signing_outputs += |
- [ "$bundle_root_dir/_CodeSignature/CodeResources" ] |
- } |
- if (ios_code_signing_identity != "") { |
- code_signing_outputs += [ "$bundle_root_dir/embedded.mobileprovision" ] |
- } |
- code_signing_args = [ |
- "code-sign-bundle", |
- "-t=" + ios_sdk_name, |
- "-i=" + ios_code_signing_identity, |
- "-e=" + rebase_path(_entitlements_path, root_build_dir), |
- "-b=" + rebase_path("$target_out_dir/$_xctest_output", root_build_dir), |
- rebase_path(bundle_root_dir, root_build_dir), |
+ deps = [ |
+ ":$_xctest_info_plist_bundle", |
] |
- if (!ios_enable_code_signing) { |
- code_signing_args += [ "--disable-code-signature" ] |
- } |
} |
bundle_data(_xctest_bundle) { |
@@ -1461,7 +1326,7 @@ template("ios_xctest_test") { |
"$_ios_platform_library/PrivateFrameworks/IDEBundleInjection.framework", |
] |
- if (!_is_secondary_build) { |
+ if (current_toolchain == default_toolchain) { |
if (!defined(bundle_deps)) { |
bundle_deps = [] |
} |