| OLD | NEW |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import("//build/toolchain/toolchain.gni") | 5 import("//build/toolchain/toolchain.gni") |
| 6 import("//build/config/mac/mac_sdk.gni") | 6 import("//build/config/mac/mac_sdk.gni") |
| 7 | 7 |
| 8 # This is used as the base template for both iOS and Mac frameworks.. | 8 # This is used as the base template for both iOS and Mac frameworks.. |
| 9 # | 9 # |
| 10 # By default, the bundle target this template generates does not link the |
| 11 # resulting framework into anything that depends on it. If a dependency wants |
| 12 # a link-time (as well as build-time) dependency on the framework bundle, |
| 13 # depend against "$target_name+link". If only the build-time dependency is |
| 14 # required (e.g., for copying into another bundle), then use "$target_name". |
| 15 # |
| 10 # Arguments | 16 # Arguments |
| 11 # | 17 # |
| 12 # output_name: | 18 # output_name: |
| 13 # (optional) string, name of the generated framework without the | 19 # (optional) string, name of the generated framework without the |
| 14 # .framework suffix. If omitted, defaults to target_name. | 20 # .framework suffix. If omitted, defaults to target_name. |
| 15 # | 21 # |
| 16 # framework_version: | 22 # framework_version: |
| 17 # (optional) string, version of the framework. Typically this is a | 23 # (optional) string, version of the framework. Typically this is a |
| 18 # single letter, like "A". If omitted, the Versions/ subdirectory | 24 # single letter, like "A". If omitted, the Versions/ subdirectory |
| 19 # structure will not be created, and build output will go directly | 25 # structure will not be created, and build output will go directly |
| 20 # into the framework subdirectory. | 26 # into the framework subdirectory. |
| 21 # | 27 # |
| 28 # This template provides two targets for the resulting framework bundle. The |
| 29 # link-time behavior varies depending on which of the two targets below is |
| 30 # added as a dependency: |
| 31 # - $target_name only adds a build-time dependency. Targets that depend on |
| 32 # it will not link against the framework. |
| 33 # - $target_name+link adds a build-time and link-time dependency. Targets |
| 34 # that depend on it will link against the framework. |
| 35 # |
| 36 # The build-time-only dependency is used for when a target needs to use the |
| 37 # framework either only for resources, or because the target loads it at run- |
| 38 # time, via dlopen() or NSBundle. The link-time dependency will cause the |
| 39 # dependee to have the framework loaded by dyld at launch. |
| 40 # |
| 41 # Example of build-time only dependency: |
| 42 # |
| 43 # framework_bundle("CoreTeleportation") { |
| 44 # sources = [ ... ] |
| 45 # } |
| 46 # |
| 47 # bundle_data("core_teleportation_bundle_data") { |
| 48 # deps = [ ":CoreTeleportation" ] |
| 49 # sources = [ "$root_out_dir/CoreTeleportation.framework" ] |
| 50 # outputs = [ "{{bundle_root_dir}}/Frameworks/{{source_file_part}}" ] |
| 51 # } |
| 52 # |
| 53 # app_bundle("GoatTeleporter") { |
| 54 # sources = [ ... ] |
| 55 # deps = [ |
| 56 # ":core_teleportation_bundle_data", |
| 57 # ] |
| 58 # } |
| 59 # |
| 60 # The GoatTeleporter.app will not directly link against |
| 61 # CoreTeleportation.framework, but it will be included in the bundle's |
| 62 # Frameworks directory. |
| 63 # |
| 64 # Example of link-time dependency: |
| 65 # |
| 66 # framework_bundle("CoreTeleportation") { |
| 67 # sources = [ ... ] |
| 68 # ldflags = [ |
| 69 # "-install_name", |
| 70 # "@executable_path/../Frameworks/$target_name.framework" |
| 71 # ] |
| 72 # } |
| 73 # |
| 74 # bundle_data("core_teleportation_bundle_data") { |
| 75 # deps = [ ":CoreTeleportation+link" ] |
| 76 # sources = [ "$root_out_dir/CoreTeleportation.framework" ] |
| 77 # outputs = [ "{{bundle_root_dir}}/Frameworks/{{source_file_part}}" ] |
| 78 # } |
| 79 # |
| 80 # app_bundle("GoatTeleporter") { |
| 81 # sources = [ ... ] |
| 82 # deps = [ |
| 83 # ":core_teleportation_bundle_data", |
| 84 # ] |
| 85 # } |
| 86 # |
| 87 # Note that the framework is still copied to the app's bundle, but dyld will |
| 88 # load this library when the app is launched because it uses the "+link" |
| 89 # target as a dependency. This also requires that the framework set its |
| 90 # install_name so that dyld can locate it. |
| 91 # |
| 22 # See "gn help shared_library" for more information on arguments supported | 92 # See "gn help shared_library" for more information on arguments supported |
| 23 # by shared library target. | 93 # by shared library target. |
| 24 template("framework_bundle") { | 94 template("framework_bundle") { |
| 25 _target_name = target_name | 95 _target_name = target_name |
| 26 _output_name = target_name | 96 _output_name = target_name |
| 27 if (defined(invoker.output_name)) { | 97 if (defined(invoker.output_name)) { |
| 28 _output_name = invoker.output_name | 98 _output_name = invoker.output_name |
| 29 } | 99 } |
| 30 | 100 |
| 31 # If the framework is unversionned, the final _target_name will be the | 101 # If the framework is unversionned, the final _target_name will be the |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 public_deps = [ | 143 public_deps = [ |
| 74 ":$_shared_library_target", | 144 ":$_shared_library_target", |
| 75 ] | 145 ] |
| 76 } | 146 } |
| 77 | 147 |
| 78 _framework_public_config = _target_name + "_public_config" | 148 _framework_public_config = _target_name + "_public_config" |
| 79 config(_framework_public_config) { | 149 config(_framework_public_config) { |
| 80 # TODO(sdefresne): should we have a framework_dirs similar to lib_dirs | 150 # TODO(sdefresne): should we have a framework_dirs similar to lib_dirs |
| 81 # and include_dirs to avoid duplicate values on the command-line. | 151 # and include_dirs to avoid duplicate values on the command-line. |
| 82 visibility = [ ":$_framework_target" ] | 152 visibility = [ ":$_framework_target" ] |
| 83 common_flags = [ "-F" + rebase_path("$root_out_dir/.", root_out_dir) ] | 153 ldflags = [ "-F" + rebase_path("$root_out_dir/.", root_out_dir) ] |
| 84 cflags_objc = common_flags | |
| 85 cflags_objcc = common_flags | |
| 86 ldflags = common_flags | |
| 87 lib_dirs = [ root_out_dir ] | 154 lib_dirs = [ root_out_dir ] |
| 88 libs = [ _framework_name ] | 155 libs = [ _framework_name ] |
| 89 } | 156 } |
| 90 | 157 |
| 91 create_bundle(_framework_target) { | 158 create_bundle(_framework_target) { |
| 92 forward_variables_from(invoker, | 159 forward_variables_from(invoker, |
| 93 [ | 160 [ |
| 94 "data_deps", | 161 "data_deps", |
| 95 "deps", | 162 "deps", |
| 96 "public_deps", | 163 "public_deps", |
| 97 "testonly", | 164 "testonly", |
| 98 ]) | 165 ]) |
| 99 | 166 |
| 100 if (defined(_framework_version)) { | 167 if (defined(_framework_version)) { |
| 101 visibility = [ ":$_target_name" ] | 168 visibility = [ ":$_target_name" ] |
| 102 } else { | 169 } else { |
| 103 forward_variables_from(invoker, [ "visibility" ]) | 170 if (defined(invoker.visibility)) { |
| 171 visibility = invoker.visibility |
| 172 visibility += [ ":$_target_name+link" ] |
| 173 } |
| 104 } | 174 } |
| 105 | 175 |
| 106 if (!defined(public_deps)) { | 176 if (!defined(public_deps)) { |
| 107 public_deps = [] | 177 public_deps = [] |
| 108 } | 178 } |
| 109 public_deps += [ ":$_shared_library_bundle_data" ] | 179 public_deps += [ ":$_shared_library_bundle_data" ] |
| 110 | 180 |
| 111 public_configs = [ ":$_framework_public_config" ] | |
| 112 | |
| 113 bundle_root_dir = _framework_root_dir | 181 bundle_root_dir = _framework_root_dir |
| 114 bundle_resources_dir = "$bundle_root_dir/Resources" | 182 bundle_resources_dir = "$bundle_root_dir/Resources" |
| 115 bundle_executable_dir = "$bundle_root_dir" | 183 bundle_executable_dir = "$bundle_root_dir" |
| 116 } | 184 } |
| 117 | 185 |
| 118 if (defined(_framework_version)) { | 186 if (defined(_framework_version)) { |
| 119 action(_target_name) { | 187 action(_target_name) { |
| 120 forward_variables_from(invoker, | 188 forward_variables_from(invoker, [ "testonly" ]) |
| 121 [ | 189 |
| 122 "visibility", | 190 if (defined(invoker.visibility)) { |
| 123 "testonly", | 191 visibility = invoker.visibility |
| 124 ]) | 192 visibility += [ ":$_target_name+link" ] |
| 193 } |
| 194 |
| 125 script = "$root_out_dir/gyp-mac-tool" | 195 script = "$root_out_dir/gyp-mac-tool" |
| 126 outputs = [ | 196 outputs = [ |
| 127 "$root_out_dir/$_framework_name/Versions/Current", | 197 "$root_out_dir/$_framework_name/Versions/Current", |
| 128 ] | 198 ] |
| 129 args = [ | 199 args = [ |
| 130 "package-framework", | 200 "package-framework", |
| 131 "$_framework_name", | 201 "$_framework_name", |
| 132 "$_framework_version", | 202 "$_framework_version", |
| 133 ] | 203 ] |
| 134 public_deps = [ | 204 public_deps = [ |
| 135 ":$_framework_target", | 205 ":$_framework_target", |
| 136 ] | 206 ] |
| 137 } | 207 } |
| 138 } | 208 } |
| 209 |
| 210 group(_target_name + "+link") { |
| 211 forward_variables_from(invoker, |
| 212 [ |
| 213 "visibility", |
| 214 "testonly", |
| 215 ]) |
| 216 public_deps = [ |
| 217 ":$_target_name", |
| 218 ] |
| 219 public_configs = [ ":$_framework_public_config" ] |
| 220 } |
| 139 } | 221 } |
| 140 | 222 |
| 141 # Template to combile .xib or .storyboard files. | 223 # Template to combile .xib or .storyboard files. |
| 142 # | 224 # |
| 143 # | 225 # |
| 144 # Arguments | 226 # Arguments |
| 145 # | 227 # |
| 146 # sources: | 228 # sources: |
| 147 # list of string, sources to compile | 229 # list of string, sources to compile |
| 148 # | 230 # |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 } | 303 } |
| 222 | 304 |
| 223 outputs = [ | 305 outputs = [ |
| 224 "$_output_path/{{source_file_part}}", | 306 "$_output_path/{{source_file_part}}", |
| 225 ] | 307 ] |
| 226 } | 308 } |
| 227 } | 309 } |
| 228 | 310 |
| 229 # Template to package a shared library into a Mac framework bundle. | 311 # Template to package a shared library into a Mac framework bundle. |
| 230 # | 312 # |
| 313 # This template provides two targets to control whether the framework is |
| 314 # merely built when targets depend on it, or whether it is linked as well: |
| 315 # "$target_name" and "$target_name+link". |
| 316 # |
| 317 # See the //build/config/mac/rules.gni:framework_bundle for a discussion |
| 318 # and examples. |
| 319 # |
| 231 # Arguments | 320 # Arguments |
| 232 # | 321 # |
| 233 # info_plist: | 322 # info_plist: |
| 234 # string, path to the Info.plist file that will be used for the bundle. | 323 # string, path to the Info.plist file that will be used for the bundle. |
| 235 # | 324 # |
| 236 # output_name: | 325 # output_name: |
| 237 # (optional) string, name of the generated framework without the | 326 # (optional) string, name of the generated framework without the |
| 238 # .framework suffix. If omitted, defaults to target_name. | 327 # .framework suffix. If omitted, defaults to target_name. |
| 239 # | 328 # |
| 240 # framework_version: | 329 # framework_version: |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 ]) | 512 ]) |
| 424 if (!defined(deps)) { | 513 if (!defined(deps)) { |
| 425 deps = [] | 514 deps = [] |
| 426 } | 515 } |
| 427 deps += [ ":$_loadable_module_bundle_data" ] | 516 deps += [ ":$_loadable_module_bundle_data" ] |
| 428 | 517 |
| 429 bundle_root_dir = "$root_out_dir/$_output_name.plugin/Contents" | 518 bundle_root_dir = "$root_out_dir/$_output_name.plugin/Contents" |
| 430 bundle_executable_dir = "$bundle_root_dir/MacOS" | 519 bundle_executable_dir = "$bundle_root_dir/MacOS" |
| 431 } | 520 } |
| 432 } | 521 } |
| OLD | NEW |