| OLD | NEW |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 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 # This file contains rules that are shared between Mac and iOS. | 5 # This file contains rules that are shared between Mac and iOS. |
| 6 | 6 |
| 7 import("//build/toolchain/toolchain.gni") | 7 import("//build/toolchain/toolchain.gni") |
| 8 | 8 |
| 9 if (is_mac) { | 9 if (is_mac) { |
| 10 import("//build/config/mac/mac_sdk.gni") | 10 import("//build/config/mac/mac_sdk.gni") |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 # | 211 # |
| 212 # See "gn help shared_library" for more information on arguments supported | 212 # See "gn help shared_library" for more information on arguments supported |
| 213 # by shared library target. | 213 # by shared library target. |
| 214 template("framework_bundle") { | 214 template("framework_bundle") { |
| 215 _target_name = target_name | 215 _target_name = target_name |
| 216 _output_name = target_name | 216 _output_name = target_name |
| 217 if (defined(invoker.output_name)) { | 217 if (defined(invoker.output_name)) { |
| 218 _output_name = invoker.output_name | 218 _output_name = invoker.output_name |
| 219 } | 219 } |
| 220 | 220 |
| 221 # If the framework is unversioned, the final _target_name will be the | 221 _is_fat_build = is_ios && additional_toolchains != [] |
| 222 # create_bundle(_framework_target), otherwise an action with the name | 222 if (_is_fat_build) { |
| 223 # _target_name will depends on the the create_bundle() in order to prepare | 223 _is_fat_build_main_target = current_toolchain == default_toolchain |
| 224 # the versioned directory structure. | |
| 225 _framework_target = _target_name | |
| 226 _framework_name = _output_name + ".framework" | |
| 227 _framework_root_dir = "$root_out_dir/$_framework_name" | |
| 228 if (defined(invoker.framework_version) && invoker.framework_version != "") { | |
| 229 _framework_version = invoker.framework_version | |
| 230 _framework_root_dir += "/Versions/$_framework_version" | |
| 231 _framework_target = _target_name + "_create_bundle" | |
| 232 } | 224 } |
| 233 | 225 |
| 234 _shared_library_target = target_name + "_shared_library" | 226 # The expansion of the template is different for fat and thin builds. For |
| 235 _shared_library_bundle_data = _shared_library_target + "_bundle_data" | 227 # thin build (and default toolchain of a fat build), the template expands |
| 236 | 228 # to a "shared_library" target to create the bundle shared library and a |
| 237 shared_library(_shared_library_target) { | 229 # "create_bundle" target (the main target) to create the bundle structure. |
| 238 visibility = [ ":$_shared_library_bundle_data" ] | 230 # |
| 239 forward_variables_from(invoker, | 231 # For a fat build, the template just expands to the "shared_library" target |
| 240 "*", | 232 # for the non-default toolchain, while the final library is created using |
| 241 [ | 233 # "lipo" in the expansion of the template for the default toolchain. |
| 242 "assert_no_deps", | 234 # |
| 243 "data_deps", | 235 # The "$target_name+link" group for the non-default toolchain depends on the |
| 244 "info_plist", | 236 # target of the same name from the default toolchain as this is the target |
| 245 "output_name", | 237 # that defines the real framework bundle (it will support the current cpu |
| 246 "visibility", | 238 # as it is a fat framework). |
| 247 ]) | 239 |
| 248 output_name = _output_name | 240 if (_is_fat_build && !_is_fat_build_main_target) { |
| 249 output_prefix_override = true | 241 shared_library(_target_name) { |
| 250 output_extension = "" | 242 forward_variables_from(invoker, |
| 251 output_dir = "$target_out_dir/$_shared_library_target" | 243 "*", |
| 252 } | 244 [ |
| 253 | 245 "assert_no_deps", |
| 254 bundle_data(_shared_library_bundle_data) { | 246 "data_deps", |
| 255 visibility = [ ":$_framework_target" ] | 247 "info_plist", |
| 256 forward_variables_from(invoker, [ "testonly" ]) | 248 "output_name", |
| 257 sources = [ | 249 ]) |
| 258 "$target_out_dir/$_shared_library_target/$_output_name", | 250 if (defined(visibility)) { |
| 259 ] | 251 visibility += [ ":${_target_name}_shared_library($default_toolchain)" ] |
| 260 outputs = [ | 252 } |
| 261 "{{bundle_executable_dir}}/$_output_name", | 253 output_name = _output_name |
| 262 ] | 254 output_prefix_override = true |
| 263 public_deps = [ | 255 output_extension = "" |
| 264 ":$_shared_library_target", | 256 output_dir = "$target_out_dir/$_target_name" |
| 265 ] | 257 } |
| 266 } | 258 |
| 267 | 259 group(_target_name + "+link") { |
| 268 _framework_public_config = _target_name + "_public_config" | 260 forward_variables_from(invoker, |
| 269 config(_framework_public_config) { | 261 [ |
| 270 # TODO(sdefresne): should we have a framework_dirs similar to lib_dirs | 262 "visibility", |
| 271 # and include_dirs to avoid duplicate values on the command-line. | 263 "testonly", |
| 272 visibility = [ ":$_framework_target" ] | 264 ]) |
| 273 ldflags = [ "-F" + rebase_path("$root_out_dir/.", root_build_dir) ] | 265 public_deps = [ |
| 274 lib_dirs = [ root_out_dir ] | 266 ":$_target_name($default_toolchain)", |
| 275 libs = [ _framework_name ] | 267 ] |
| 276 } | 268 } |
| 277 | 269 } else { |
| 278 create_bundle(_framework_target) { | 270 # If the framework is unversioned, the final _target_name will be the |
| 279 forward_variables_from(invoker, | 271 # create_bundle(_framework_target), otherwise an action with the name |
| 280 [ | 272 # _target_name will depends on the the create_bundle() in order to prepare |
| 281 "data_deps", | 273 # the versioned directory structure. |
| 282 "deps", | 274 _framework_target = _target_name |
| 283 "public_deps", | 275 _framework_name = _output_name + ".framework" |
| 284 "testonly", | 276 _framework_root_dir = "$root_out_dir/$_framework_name" |
| 285 ]) | 277 if (defined(invoker.framework_version) && invoker.framework_version != "") { |
| 278 _framework_version = invoker.framework_version |
| 279 _framework_root_dir += "/Versions/$_framework_version" |
| 280 _framework_target = _target_name + "_create_bundle" |
| 281 } |
| 282 |
| 283 _link_shared_library_target = target_name + "_shared_library" |
| 284 _shared_library_bundle_data = target_name + "_shared_library_bundle_data" |
| 285 _link_shared_library_visibility = [ ":$_shared_library_bundle_data" ] |
| 286 |
| 287 if (_is_fat_build) { |
| 288 _lipo_shared_library_target = _link_shared_library_target |
| 289 _lipo_shared_library_visibility = _link_shared_library_visibility |
| 290 |
| 291 _link_shared_library_visibility = [] |
| 292 _link_shared_library_visibility = [ ":$_lipo_shared_library_target" ] |
| 293 _link_shared_library_target = target_name + "_arch_shared_library" |
| 294 } |
| 295 |
| 296 shared_library(_link_shared_library_target) { |
| 297 forward_variables_from(invoker, |
| 298 "*", |
| 299 [ |
| 300 "assert_no_deps", |
| 301 "data_deps", |
| 302 "info_plist", |
| 303 "output_name", |
| 304 "visibility", |
| 305 ]) |
| 306 visibility = _link_shared_library_visibility |
| 307 output_name = _output_name |
| 308 output_prefix_override = true |
| 309 output_extension = "" |
| 310 output_dir = "$target_out_dir/$_link_shared_library_target" |
| 311 } |
| 312 |
| 313 if (_is_fat_build) { |
| 314 action(_lipo_shared_library_target) { |
| 315 forward_variables_from(invoker, [ "testonly" ]) |
| 316 visibility = _lipo_shared_library_visibility |
| 317 script = "//build/config/mac/xcrun.py" |
| 318 outputs = [ |
| 319 "$target_out_dir/$_lipo_shared_library_target/$_output_name", |
| 320 ] |
| 321 inputs = [ |
| 322 "$target_out_dir/$_link_shared_library_target/$_output_name", |
| 323 ] |
| 324 deps = [ |
| 325 ":$_link_shared_library_target", |
| 326 ] |
| 327 foreach(_additional_toolchain, additional_toolchains) { |
| 328 _additional_toolchain_target = "$_target_name($_additional_toolchain)" |
| 329 deps += [ ":$_additional_toolchain_target" ] |
| 330 inputs += [ get_label_info(_additional_toolchain_target, |
| 331 "target_out_dir") + "/$_output_name" ] |
| 332 } |
| 333 args = [ |
| 334 "lipo", |
| 335 "-create", |
| 336 "-output", |
| 337 rebase_path(outputs[0], root_build_dir), |
| 338 ] + rebase_path(inputs, root_build_dir) |
| 339 } |
| 340 } |
| 341 |
| 342 bundle_data(_shared_library_bundle_data) { |
| 343 visibility = [ ":$_framework_target" ] |
| 344 forward_variables_from(invoker, [ "testonly" ]) |
| 345 outputs = [ |
| 346 "{{bundle_executable_dir}}/$_output_name", |
| 347 ] |
| 348 if (_is_fat_build) { |
| 349 sources = [ |
| 350 "$target_out_dir/$_lipo_shared_library_target/$_output_name", |
| 351 ] |
| 352 public_deps = [ |
| 353 ":$_lipo_shared_library_target", |
| 354 ] |
| 355 } else { |
| 356 sources = [ |
| 357 "$target_out_dir/$_link_shared_library_target/$_output_name", |
| 358 ] |
| 359 public_deps = [ |
| 360 ":$_link_shared_library_target", |
| 361 ] |
| 362 } |
| 363 } |
| 364 |
| 365 _framework_public_config = _target_name + "_public_config" |
| 366 config(_framework_public_config) { |
| 367 # TODO(sdefresne): should we have a framework_dirs similar to lib_dirs |
| 368 # and include_dirs to avoid duplicate values on the command-line. |
| 369 visibility = [ ":$_framework_target" ] |
| 370 ldflags = [ "-F" + rebase_path("$root_out_dir/.", root_build_dir) ] |
| 371 lib_dirs = [ root_out_dir ] |
| 372 libs = [ _framework_name ] |
| 373 } |
| 374 |
| 375 create_bundle(_framework_target) { |
| 376 forward_variables_from(invoker, |
| 377 [ |
| 378 "data_deps", |
| 379 "deps", |
| 380 "public_deps", |
| 381 "testonly", |
| 382 ]) |
| 383 |
| 384 if (defined(_framework_version)) { |
| 385 visibility = [ ":$_target_name" ] |
| 386 } else { |
| 387 if (defined(invoker.visibility)) { |
| 388 visibility = invoker.visibility |
| 389 visibility += [ ":$_target_name+link" ] |
| 390 } |
| 391 } |
| 392 |
| 393 if (!defined(public_deps)) { |
| 394 public_deps = [] |
| 395 } |
| 396 public_deps += [ ":$_shared_library_bundle_data" ] |
| 397 |
| 398 bundle_root_dir = _framework_root_dir |
| 399 bundle_resources_dir = "$bundle_root_dir/Resources" |
| 400 bundle_executable_dir = "$bundle_root_dir" |
| 401 } |
| 286 | 402 |
| 287 if (defined(_framework_version)) { | 403 if (defined(_framework_version)) { |
| 288 visibility = [ ":$_target_name" ] | 404 action(_target_name) { |
| 289 } else { | 405 forward_variables_from(invoker, [ "testonly" ]) |
| 290 if (defined(invoker.visibility)) { | 406 |
| 291 visibility = invoker.visibility | 407 if (defined(invoker.visibility)) { |
| 292 visibility += [ ":$_target_name+link" ] | 408 visibility = invoker.visibility |
| 293 } | 409 visibility += [ ":$_target_name+link" ] |
| 294 } | 410 } |
| 295 | 411 |
| 296 if (!defined(public_deps)) { | 412 script = "//build/config/mac/package_framework.py" |
| 297 public_deps = [] | 413 outputs = [ |
| 298 } | 414 "$root_out_dir/$_framework_name/Versions/Current", |
| 299 public_deps += [ ":$_shared_library_bundle_data" ] | 415 ] |
| 300 | 416 args = [ |
| 301 bundle_root_dir = _framework_root_dir | 417 "$_framework_name", |
| 302 bundle_resources_dir = "$bundle_root_dir/Resources" | 418 "$_framework_version", |
| 303 bundle_executable_dir = "$bundle_root_dir" | 419 ] |
| 304 } | 420 public_deps = [ |
| 305 | 421 ":$_framework_target", |
| 306 if (defined(_framework_version)) { | 422 ] |
| 307 action(_target_name) { | 423 } |
| 308 forward_variables_from(invoker, [ "testonly" ]) | 424 } |
| 309 | 425 |
| 310 if (defined(invoker.visibility)) { | 426 group(_target_name + "+link") { |
| 311 visibility = invoker.visibility | 427 forward_variables_from(invoker, |
| 312 visibility += [ ":$_target_name+link" ] | 428 [ |
| 313 } | 429 "visibility", |
| 314 | 430 "testonly", |
| 315 script = "//build/config/mac/package_framework.py" | 431 ]) |
| 316 outputs = [ | 432 public_deps = [ |
| 317 "$root_out_dir/$_framework_name/Versions/Current", | 433 ":$_target_name", |
| 318 ] | 434 ] |
| 319 args = [ | 435 public_configs = [ ":$_framework_public_config" ] |
| 320 "$_framework_name", | 436 } |
| 321 "$_framework_version", | |
| 322 ] | |
| 323 public_deps = [ | |
| 324 ":$_framework_target", | |
| 325 ] | |
| 326 } | |
| 327 } | |
| 328 | |
| 329 group(_target_name + "+link") { | |
| 330 forward_variables_from(invoker, | |
| 331 [ | |
| 332 "visibility", | |
| 333 "testonly", | |
| 334 ]) | |
| 335 public_deps = [ | |
| 336 ":$_target_name", | |
| 337 ] | |
| 338 public_configs = [ ":$_framework_public_config" ] | |
| 339 } | 437 } |
| 340 } | 438 } |
| 341 | 439 |
| 342 # Template to combile .xib or .storyboard files. | 440 # Template to combile .xib or .storyboard files. |
| 343 # | 441 # |
| 344 # Arguments | 442 # Arguments |
| 345 # | 443 # |
| 346 # sources: | 444 # sources: |
| 347 # list of string, sources to compile | 445 # list of string, sources to compile |
| 348 # | 446 # |
| (...skipping 21 matching lines...) Expand all Loading... |
| 370 ] | 468 ] |
| 371 args = | 469 args = |
| 372 [ | 470 [ |
| 373 "--input", | 471 "--input", |
| 374 "{{source}}", | 472 "{{source}}", |
| 375 "--output", | 473 "--output", |
| 376 rebase_path("$target_gen_dir/$target_name/{{source_name_part}}.nib"), | 474 rebase_path("$target_gen_dir/$target_name/{{source_name_part}}.nib"), |
| 377 ] + ibtool_flags | 475 ] + ibtool_flags |
| 378 } | 476 } |
| 379 } | 477 } |
| OLD | NEW |