| # Copyright 2019 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/ios/bundle_identifier_prefix.gni") |
| import("//build/config/ios/templates/ios_binary_bundle.gni") |
| |
| # Template to generate a framework bundle. |
| # |
| # All the other parameters are forwarded to a shared_library target that will |
| # generate the bundle binary. In general, you want to pass at least "sources" |
| # or "deps" to have some binary objects included in your shared library. |
| # |
| # Arguments |
| # |
| # - info_plist (optional) |
| # |
| # path to additional Info.plist to merge into the final bundle Info.plist |
| # |
| # - bundle_identifier_prefix (optional) |
| # |
| # prefix for the bundle identifier (the full identifier will be defined |
| # to $bundle_identifier_prefix.$output_name); if unset will defaults to |
| # default_bundle_identifier_prefix |
| # |
| # - output_name (optional) |
| # |
| # name of the bundle without the extension; defaults to $target_name |
| # |
| # - public_headers (optional) |
| # |
| # list of public headers files to copy into the framework bundle; this |
| # does not generate an umbrella header; an umbrella header named after |
| # the framework bundle will be created |
| # |
| template("ios_framework_bundle") { |
| _output_name = target_name |
| if (defined(invoker.output_name)) { |
| _output_name = invoker.output_name |
| } |
| |
| _dylib_target = target_name + "_dylib" |
| _dylib_bundle = target_name + "_dylib_bundle" |
| |
| _bundle_identifier_prefix = default_bundle_identifier_prefix |
| if (defined(invoker.bundle_identifier_prefix)) { |
| _bundle_identifier_prefix = invoker.bundle_identifier_prefix |
| } |
| |
| _product_type = "com.apple.product-type.framework" |
| _bundle_identifier = "$_bundle_identifier_prefix.$_output_name" |
| |
| shared_library(_dylib_target) { |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "bundle_extension", |
| "bundle_identifier_prefix", |
| "bundle_type", |
| "display_name", |
| "info_plist", |
| "output_name", |
| "public_headers", |
| ]) |
| |
| output_extension = "" |
| output_name = _output_name |
| output_prefix_override = true |
| output_dir = "$target_out_dir/$_dylib_target" |
| |
| if (!defined(ldflags)) { |
| ldflags = [] |
| } |
| ldflags += [ |
| "-Xlinker", |
| "-install_name", |
| "-Xlinker", |
| "@rpath/$_output_name.framework/$_output_name", |
| ] |
| } |
| |
| bundle_data(_dylib_bundle) { |
| product_type = _product_type |
| public_deps = [ ":$_dylib_target" ] |
| sources = [ "$target_out_dir/$_dylib_target/$_output_name" ] |
| outputs = [ "{{bundle_executable_dir}}/{{source_file_part}}" ] |
| } |
| |
| if (defined(invoker.public_headers)) { |
| _umbrella_target = target_name + "_umbrella" |
| _umbrella_output = "$target_out_dir/$_umbrella_target/$_output_name.h" |
| |
| action(_umbrella_target) { |
| script = "//build/config/ios/scripts/generate_umbrella_header.py" |
| sources = [] |
| outputs = [ _umbrella_output ] |
| args = [ "-o=" + rebase_path(_umbrella_output, root_build_dir) ] + |
| rebase_path(invoker.public_headers, root_build_dir) |
| } |
| |
| _headers_bundle = target_name + "_headers_bundle" |
| |
| bundle_data(_headers_bundle) { |
| product_type = _product_type |
| sources = invoker.public_headers + [ _umbrella_output ] |
| outputs = [ "{{bundle_resources_dir}}/Headers/{{source_file_part}}" ] |
| public_deps = [ ":$_umbrella_target" ] |
| } |
| } |
| |
| _config_name = target_name + "_config" |
| |
| config(_config_name) { |
| framework_dirs = [ root_out_dir ] |
| frameworks = [ "$_output_name.framework" ] |
| } |
| |
| ios_binary_bundle(target_name) { |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "bundle_extension", |
| "bundle_type", |
| "configs", |
| "deps", |
| "output_name", |
| "public_configs", |
| "public_deps", |
| "public_headers", |
| ]) |
| |
| output_name = _output_name |
| product_type = _product_type |
| transparent = true |
| |
| bundle_identifier = _bundle_identifier |
| bundle_extension = "framework" |
| bundle_type = "FMWK" |
| |
| public_deps = [ ":$_dylib_bundle" ] |
| |
| if (defined(invoker.public_headers)) { |
| public_deps += [ ":$_headers_bundle" ] |
| } |
| |
| public_configs = [ ":$_config_name" ] |
| } |
| |
| _target_name = target_name |
| |
| bundle_data("$target_name+bundle") { |
| public_deps = [ ":$_target_name" ] |
| sources = [ "$root_out_dir/$_output_name.framework" ] |
| outputs = [ "{{bundle_contents_dir}}/Frameworks/{{source_file_part}}" ] |
| } |
| } |