| Index: build/config/ios/rules.gni
|
| diff --git a/build/config/ios/rules.gni b/build/config/ios/rules.gni
|
| index 604e7abec65b1ea63c80a47a95a254ea4864789b..7ab676e7f8c5fd6ba99c6696c3aeb302e5141361 100644
|
| --- a/build/config/ios/rules.gni
|
| +++ b/build/config/ios/rules.gni
|
| @@ -76,8 +76,8 @@ template("ios_app_bundle") {
|
| "-s=PRODUCT_NAME=$_output_name",
|
| "-s=XCODE_BUILD=$xcode_build",
|
| "-s=XCODE_VERSION=$xcode_version",
|
| - "-o=" + rebase_path(outputs[0], root_build_dir),
|
| - ] + rebase_path(sources, root_build_dir)
|
| + "-o=" + rebase_path(outputs[0], root_out_dir),
|
| + ] + rebase_path(sources, root_out_dir)
|
| args = [ "@{{response_file_name}}" ]
|
| }
|
|
|
| @@ -110,7 +110,7 @@ template("ios_app_bundle") {
|
| "visibility",
|
| ])
|
|
|
| - output_name = rebase_path("$target_gen_dir/$_output_name", root_build_dir)
|
| + output_name = rebase_path("$target_gen_dir/$_output_name", root_out_dir)
|
| if (!defined(libs)) {
|
| libs = []
|
| }
|
| @@ -210,7 +210,7 @@ template("bundle_data_xib") {
|
| "--output",
|
| rebase_path("$target_gen_dir/$_nib_filename"),
|
| "--input",
|
| - rebase_path(invoker.source, root_build_dir),
|
| + rebase_path(invoker.source, root_out_dir),
|
| ]
|
| }
|
|
|
| @@ -246,10 +246,110 @@ template("bundle_data_xib") {
|
| # 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") {
|
| + if (defined(invoker.public_headers) && invoker.public_headers != []) {
|
| + assert(defined(invoker.sources) && invoker.sources != [],
|
| + "sources must be set for $target_name when public_headers is set")
|
| +
|
| + _target_name = target_name
|
| + _output_name = target_name
|
| + if (defined(invoker.output_name)) {
|
| + _output_name = invoker.output_name
|
| + }
|
| +
|
| + _public_headers = invoker.public_headers
|
| + _framework_name = _output_name + ".framework"
|
| + _framework_root = "$root_out_dir/$_framework_name"
|
| +
|
| + _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 ]
|
| + }
|
| +
|
| + group(_framework_headers_target) {
|
| + deps = [
|
| + ":$_compile_headers_map_target",
|
| + ":$_copy_public_headers_target",
|
| + ":$_create_module_map_target",
|
| + ]
|
| + }
|
| + }
|
| +
|
| framework_bundle(target_name) {
|
| - forward_variables_from(invoker, "*")
|
| + forward_variables_from(invoker, "*", [ "public_headers" ])
|
| +
|
| + if (defined(_public_headers)) {
|
| + configs += [ ":$_headers_map_config" ]
|
| + if (!defined(deps)) {
|
| + deps = []
|
| + }
|
| + deps += [ ":$_framework_headers_target" ]
|
| + }
|
| }
|
| }
|
|
|