Revert "Revert "Upgrade to 5.0.71.48"" DO NOT MERGE
This reverts commit f2e3994fa5148cc3d9946666f0b0596290192b0e,
and updates the x64 makefile properly so it doesn't break that
build.
FPIIM-449
Change-Id: Ib83e35bfbae6af627451c926a9650ec57c045605
(cherry picked from commit 109988c7ccb6f3fd1a58574fa3dfb88beaef6632)
diff --git a/build/config/ios/rules.gni b/build/config/ios/rules.gni
new file mode 100644
index 0000000..b628d26
--- /dev/null
+++ b/build/config/ios/rules.gni
@@ -0,0 +1,436 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/mac/base_rules.gni")
+
+# Generates Info.plist files for Mac apps and frameworks.
+#
+# Arguments
+#
+# info_plist:
+# string, the path to an plist file that will be included in the final
+# Info.plist generated.
+#
+# executable_name:
+# string, name of the generated target used for the product
+# and executable name as specified in the output Info.plist.
+#
+# extra_substitutions:
+# (optional) string array, 'key=value' pairs for extra fields which are
+# specified in a source Info.plist template.
+template("ios_info_plist") {
+ info_plist(target_name) {
+ format = "binary1"
+ extra_substitutions = []
+ if (defined(invoker.extra_substitutions)) {
+ extra_substitutions = invoker.extra_substitutions
+ }
+ extra_substitutions += [
+ "IOS_DEPLOYMENT_TARGET=$ios_deployment_target",
+ "IOS_PLATFORM_BUILD=$ios_platform_build",
+ "IOS_PLATFORM_NAME=$ios_sdk_name",
+ "IOS_PLATFORM_VERSION=$ios_sdk_version",
+ "IOS_SDK_BUILD=$ios_sdk_build",
+ "IOS_SDK_NAME=$ios_sdk_name$ios_sdk_version",
+ "IOS_SUPPORTED_PLATFORM=$ios_sdk_platform",
+ ]
+ plist_templates = [
+ "//build/config/ios/BuildInfo.plist",
+ invoker.info_plist,
+ ]
+ forward_variables_from(invoker,
+ [
+ "executable_name",
+ "visibility",
+ ])
+ }
+}
+
+# TODO(crbug.com/297668): refactor this template to extract common behaviour
+# between OS X and iOS bundle generation, then create a generic "app" template
+# that forward to "executable" on all platform except iOS/OS X.
+
+# Template to build an application bundle for iOS.
+#
+# This should be used instead of "executable" built-in target type on iOS.
+# As the template forward the generation of the application executable to
+# an "executable" target, all arguments supported by "executable" targets
+# are also supported by this template.
+#
+# Arguments
+#
+# output_name:
+# (optional) string, name of the generated application, if omitted,
+# defaults to the target_name.
+#
+# extra_substitutions:
+# (optional) list of string in "key=value" format, each value will
+# be used as an additional variable substitution rule when generating
+# the application Info.plist
+#
+# info_plist:
+# path to the template to use to generate the application Info.plist
+# by performing variable substitutions.
+#
+# For more information, see "gn help executable".
+template("ios_app_bundle") {
+ assert(defined(invoker.info_plist),
+ "info_plist must be specified for target $target_name")
+
+ _output_name = target_name
+ _target_name = target_name
+ if (defined(invoker.output_name)) {
+ _output_name = invoker.output_name
+ }
+
+ _generate_info_plist = target_name + "_generate_info_plist"
+ _bundle_data_info_plist = target_name + "_bundle_data_info_plist"
+
+ ios_info_plist(_generate_info_plist) {
+ executable_name = _output_name
+ forward_variables_from(invoker,
+ [
+ "extra_substitutions",
+ "info_plist",
+ ])
+ }
+
+ bundle_data(_bundle_data_info_plist) {
+ forward_variables_from(invoker, [ "testonly" ])
+ visibility = [ ":$_target_name" ]
+ sources = get_target_outputs(":$_generate_info_plist")
+ outputs = [
+ "{{bundle_root_dir}}/Info.plist",
+ ]
+ public_deps = [
+ ":$_generate_info_plist",
+ ]
+ }
+
+ _generate_executable = target_name + "_generate_executable"
+ _bundle_data_executable = target_name + "_bundle_data_executable"
+
+ executable(_generate_executable) {
+ visibility = [ ":$_bundle_data_executable" ]
+ forward_variables_from(invoker,
+ "*",
+ [
+ "assert_no_deps",
+ "code_signing_identity",
+ "data_deps",
+ "entitlements_path",
+ "info_plist",
+ "output_name",
+ "visibility",
+ ])
+
+ output_name = rebase_path("$target_gen_dir/$_output_name", root_out_dir)
+ if (!defined(libs)) {
+ libs = []
+ }
+ libs += [ "UIKit.framework" ]
+ }
+
+ bundle_data(_bundle_data_executable) {
+ forward_variables_from(invoker, [ "testonly" ])
+ visibility = [ ":$_target_name" ]
+ sources = [
+ "$target_gen_dir/$_output_name",
+ ]
+ outputs = [
+ "{{bundle_executable_dir}}/$_output_name",
+ ]
+ public_deps = [
+ ":$_generate_executable",
+ ]
+ }
+
+ create_bundle(target_name) {
+ forward_variables_from(invoker,
+ [
+ "data_deps",
+ "deps",
+ "public_deps",
+ "testonly",
+ "visibility",
+ ])
+
+ if (!defined(deps)) {
+ deps = []
+ }
+ deps += [
+ ":$_bundle_data_executable",
+ ":$_bundle_data_info_plist",
+ ]
+
+ if (use_ios_simulator) {
+ if (!defined(data_deps)) {
+ data_deps = []
+ }
+ data_deps += [ "//testing/iossim" ]
+ }
+
+ product_type = "com.apple.product-type.application"
+ bundle_root_dir = "$root_out_dir/$_output_name.app"
+ bundle_resources_dir = bundle_root_dir
+ bundle_executable_dir = bundle_root_dir
+ bundle_plugins_dir = "$bundle_root_dir/Plugins"
+ assert(
+ product_type != "",
+ "workaround to allow generation with version of gn that don't support product_type property for create_bundle target => remove once gn has rolled this change")
+ }
+
+ # TODO(crbug.com/297668):
+ # - add support for codesigning,
+ # - find a way to make "ninja -C out/Default base_unittests.app" work as
+ # an alias to "ninja -C out/Default base_unittests" (for convenience
+ # and compatibility with gyp),
+}
+
+# Compile a xib or storyboard file and add it to a bundle_data so that it is
+# available at runtime in the bundle.
+#
+# Arguments
+#
+# source:
+# string, path of the xib or storyboard to compile.
+#
+# Forwards all variables to the bundle_data target.
+template("bundle_data_xib") {
+ assert(defined(invoker.source), "source needs to be defined for $target_name")
+
+ _source_extension = get_path_info(invoker.source, "extension")
+ assert(_source_extension == "xib" || _source_extension == "storyboard",
+ "source must be a .xib or .storyboard for $target_name")
+
+ _target_name = target_name
+ _compile_xib = target_name + "_compile_xib"
+
+ compile_xibs(_compile_xib) {
+ sources = [
+ invoker.source,
+ ]
+ visibility = [ ":$_target_name" ]
+ ibtool_flags = [
+ "--minimum-deployment-target",
+ ios_deployment_target,
+ "--auto-activate-custom-fonts",
+ "--target-device",
+ "iphone",
+ "--target-device",
+ "ipad",
+ ]
+ }
+
+ bundle_data(_target_name) {
+ forward_variables_from(invoker, "*", [ "source" ])
+
+ if (!defined(public_deps)) {
+ public_deps = []
+ }
+ public_deps += [ ":$_compile_xib" ]
+
+ sources = get_target_outputs(":$_compile_xib")
+
+ outputs = [
+ "{{bundle_resources_dir}}/{{source_file_part}}",
+ ]
+ }
+}
+
+# Template to package a shared library into an iOS framework bundle.
+#
+# This template provides two targets to control whether the framework is
+# merely built when targets depend on it, or whether it is linked as well:
+# "$target_name" and "$target_name+link".
+#
+# See the //build/config/mac/base_rules.gni:framework_bundle for a discussion
+# and examples.
+#
+# Arguments
+#
+# output_name:
+# (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
+# empty then the Headers subdirectory is not created.
+#
+# sources
+# (optional) list of files. Needs to be defined and non-empty if
+# public_headers is defined and non-empty.
+#
+# See "gn help shared_library" for more information on arguments supported
+# by shared library target.
+template("ios_framework_bundle") {
+ _target_name = target_name
+ _output_name = target_name
+ if (defined(invoker.output_name)) {
+ _output_name = invoker.output_name
+ }
+ _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"
+
+ _header_map_filename = "$target_gen_dir/$_output_name.headers.hmap"
+ _framework_headers_target = _target_name + "_framework_headers"
+
+ _compile_headers_map_target = _target_name + "_compile_headers_map"
+ action(_compile_headers_map_target) {
+ visibility = [ ":$_framework_headers_target" ]
+ script = "$root_out_dir/gyp-mac-tool"
+ outputs = [
+ _header_map_filename,
+ ]
+
+ # 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 = [
+ "compile-ios-framework-header-map",
+ rebase_path(_header_map_filename),
+ rebase_path(_framework_root, root_out_dir),
+ ] + rebase_path(sources, root_out_dir)
+ }
+
+ _create_module_map_target = _target_name + "_module_map"
+ action(_create_module_map_target) {
+ visibility = [ ":$_framework_headers_target" ]
+ script = "$root_out_dir/gyp-mac-tool"
+ outputs = [
+ "$_framework_root/Modules/module.modulemap",
+ ]
+ args = [
+ "package-ios-framework",
+ rebase_path("$_framework_root", root_out_dir),
+ ]
+ }
+
+ _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}}",
+ ]
+ }
+
+ _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",
+ ]
+ }
+
+ group(_framework_headers_target) {
+ deps = [
+ ":$_compile_headers_map_target",
+ ":$_copy_public_headers_target",
+ ":$_create_module_map_target",
+ ]
+ }
+ }
+
+ _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_out_dir) ]
+ cflags_objc = common_flags
+ cflags_objcc = common_flags
+ }
+
+ # The link settings are inherited from the framework_bundle config.
+ }
+
+ framework_bundle(_framework_target) {
+ forward_variables_from(invoker,
+ "*",
+ [
+ "output_name",
+ "public_headers",
+ "visibility",
+ ])
+ output_name = _output_name
+
+ if (!defined(public_configs)) {
+ public_configs = []
+ }
+ public_configs += [ ":$_framework_public_config" ]
+
+ if (defined(_public_headers)) {
+ visibility = [
+ ":$_target_name",
+ ":$_target_name+link",
+ ]
+ configs += [ ":$_headers_map_config" ]
+
+ if (!defined(deps)) {
+ deps = []
+ }
+ deps += [ ":$_framework_headers_target" ]
+ } else {
+ if (defined(invoker.visibility)) {
+ visibility = invoker.visibility
+ visibility += [ ":$_target_name+link" ]
+ }
+ }
+ }
+
+ if (defined(_public_headers)) {
+ group(_target_name) {
+ forward_variables_from(invoker,
+ [
+ "testonly",
+ "public_configs",
+ ])
+
+ if (defined(invoker.visibility)) {
+ visibility = invoker.visibility
+ visibility += [ ":$_target_name+link" ]
+ }
+
+ public_deps = [
+ ":$_framework_target",
+ ]
+ }
+
+ group(_target_name + "+link") {
+ forward_variables_from(invoker,
+ [
+ "testonly",
+ "visibility",
+ ])
+ public_deps = [
+ ":$_framework_target+link",
+ ]
+ }
+ }
+}