| OLD | NEW |
| 1 # Copyright 2015 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. |
| 6 |
| 5 import("//build/toolchain/toolchain.gni") | 7 import("//build/toolchain/toolchain.gni") |
| 6 import("//build/config/mac/mac_sdk.gni") | 8 |
| 9 if (is_mac) { |
| 10 import("//build/config/mac/mac_sdk.gni") |
| 11 } else if (is_ios) { |
| 12 import("//build/config/ios/ios_sdk.gni") |
| 13 } |
| 7 | 14 |
| 8 # The base template used to generate Info.plist files for iOS and Mac apps and | 15 # The base template used to generate Info.plist files for iOS and Mac apps and |
| 9 # frameworks. | 16 # frameworks. |
| 10 # | 17 # |
| 11 # Arguments | 18 # Arguments |
| 12 # | 19 # |
| 13 # plist_templates: | 20 # plist_templates: |
| 14 # string array, paths to plist files which will be used for the bundle. | 21 # string array, paths to plist files which will be used for the bundle. |
| 15 # | 22 # |
| 16 # executable_name: | 23 # executable_name: |
| (...skipping 29 matching lines...) Expand all Loading... |
| 46 "-s=GCC_VERSION=com.apple.compilers.llvm.clang.1_0", | 53 "-s=GCC_VERSION=com.apple.compilers.llvm.clang.1_0", |
| 47 "-s=PRODUCT_NAME=$executable_name", | 54 "-s=PRODUCT_NAME=$executable_name", |
| 48 "-s=XCODE_BUILD=$xcode_build", | 55 "-s=XCODE_BUILD=$xcode_build", |
| 49 "-s=XCODE_VERSION=$xcode_version", | 56 "-s=XCODE_VERSION=$xcode_version", |
| 50 "-o=" + rebase_path(outputs[0], root_build_dir), | 57 "-o=" + rebase_path(outputs[0], root_build_dir), |
| 51 ] + rebase_path(sources, root_build_dir) | 58 ] + rebase_path(sources, root_build_dir) |
| 52 args = [ "@{{response_file_name}}" ] | 59 args = [ "@{{response_file_name}}" ] |
| 53 } | 60 } |
| 54 } | 61 } |
| 55 | 62 |
| 56 # Generates Info.plist files for Mac apps and frameworks. | |
| 57 # | |
| 58 # Arguments | |
| 59 # | |
| 60 # info_plist: | |
| 61 # string, the path to an plist file that will be included in the final | |
| 62 # Info.plist generated. | |
| 63 # | |
| 64 # executable_name: | |
| 65 # string, name of the generated target used for the product | |
| 66 # and executable name as specified in the output Info.plist. | |
| 67 # | |
| 68 # extra_substitutions: | |
| 69 # (optional) string array, 'key=value' pairs for extra fields which are | |
| 70 # specified in a source Info.plist template. | |
| 71 template("mac_info_plist") { | |
| 72 info_plist(target_name) { | |
| 73 extra_substitutions = [] | |
| 74 if (defined(invoker.extra_substitutions)) { | |
| 75 extra_substitutions = invoker.extra_substitutions | |
| 76 } | |
| 77 extra_substitutions += [ | |
| 78 "MAC_SDK_BUILD=$mac_sdk_build", | |
| 79 "MAC_SDK_NAME=$mac_sdk_name$mac_sdk_version", | |
| 80 ] | |
| 81 plist_templates = [ | |
| 82 "//build/config/mac/BuildInfo.plist", | |
| 83 invoker.info_plist, | |
| 84 ] | |
| 85 forward_variables_from(invoker, [ "executable_name" ]) | |
| 86 } | |
| 87 } | |
| 88 | |
| 89 # This is used as the base template for both iOS and Mac frameworks. | 63 # This is used as the base template for both iOS and Mac frameworks. |
| 90 # | 64 # |
| 91 # By default, the bundle target this template generates does not link the | 65 # By default, the bundle target this template generates does not link the |
| 92 # resulting framework into anything that depends on it. If a dependency wants | 66 # resulting framework into anything that depends on it. If a dependency wants |
| 93 # a link-time (as well as build-time) dependency on the framework bundle, | 67 # a link-time (as well as build-time) dependency on the framework bundle, |
| 94 # depend against "$target_name+link". If only the build-time dependency is | 68 # depend against "$target_name+link". If only the build-time dependency is |
| 95 # required (e.g., for copying into another bundle), then use "$target_name". | 69 # required (e.g., for copying into another bundle), then use "$target_name". |
| 96 # | 70 # |
| 97 # Arguments | 71 # Arguments |
| 98 # | 72 # |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 ]) | 270 ]) |
| 297 public_deps = [ | 271 public_deps = [ |
| 298 ":$_target_name", | 272 ":$_target_name", |
| 299 ] | 273 ] |
| 300 public_configs = [ ":$_framework_public_config" ] | 274 public_configs = [ ":$_framework_public_config" ] |
| 301 } | 275 } |
| 302 } | 276 } |
| 303 | 277 |
| 304 # Template to combile .xib or .storyboard files. | 278 # Template to combile .xib or .storyboard files. |
| 305 # | 279 # |
| 306 # | |
| 307 # Arguments | 280 # Arguments |
| 308 # | 281 # |
| 309 # sources: | 282 # sources: |
| 310 # list of string, sources to compile | 283 # list of string, sources to compile |
| 311 # | 284 # |
| 312 # ibtool_flags: | 285 # ibtool_flags: |
| 313 # (optional) list of string, additional flags to pass to the ibtool | 286 # (optional) list of string, additional flags to pass to the ibtool |
| 314 template("compile_xibs") { | 287 template("compile_xibs") { |
| 315 action_foreach(target_name) { | 288 action_foreach(target_name) { |
| 316 forward_variables_from(invoker, | 289 forward_variables_from(invoker, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 332 "$target_gen_dir/{{source_name_part}}.nib", | 305 "$target_gen_dir/{{source_name_part}}.nib", |
| 333 ] | 306 ] |
| 334 args = [ | 307 args = [ |
| 335 "--input", | 308 "--input", |
| 336 "{{source}}", | 309 "{{source}}", |
| 337 "--output", | 310 "--output", |
| 338 rebase_path("$target_gen_dir/{{source_name_part}}.nib"), | 311 rebase_path("$target_gen_dir/{{source_name_part}}.nib"), |
| 339 ] + ibtool_flags | 312 ] + ibtool_flags |
| 340 } | 313 } |
| 341 } | 314 } |
| 342 | |
| 343 # Template to compile and package Mac XIB files as bundle data. | |
| 344 # | |
| 345 # Arguments | |
| 346 # | |
| 347 # sources: | |
| 348 # list of string, sources to comiple | |
| 349 # | |
| 350 # output_path: | |
| 351 # (optional) string, the path to use for the outputs list in the | |
| 352 # bundle_data step. If unspecified, defaults to bundle_resources_dir. | |
| 353 template("mac_xib_bundle_data") { | |
| 354 _target_name = target_name | |
| 355 _compile_target_name = _target_name + "_compile_ibtool" | |
| 356 | |
| 357 compile_xibs(_compile_target_name) { | |
| 358 forward_variables_from(invoker, [ "testonly" ]) | |
| 359 visibility = [ ":$_target_name" ] | |
| 360 sources = invoker.sources | |
| 361 ibtool_flags = [ | |
| 362 "--minimum-deployment-target", | |
| 363 mac_deployment_target, | |
| 364 "--target-device", | |
| 365 "mac", | |
| 366 ] | |
| 367 } | |
| 368 | |
| 369 bundle_data(_target_name) { | |
| 370 forward_variables_from(invoker, | |
| 371 [ | |
| 372 "testonly", | |
| 373 "visibility", | |
| 374 ]) | |
| 375 | |
| 376 public_deps = [ | |
| 377 ":$_compile_target_name", | |
| 378 ] | |
| 379 sources = get_target_outputs(":$_compile_target_name") | |
| 380 | |
| 381 _output_path = "{{bundle_resources_dir}}" | |
| 382 if (defined(invoker.output_path)) { | |
| 383 _output_path = invoker.output_path | |
| 384 } | |
| 385 | |
| 386 outputs = [ | |
| 387 "$_output_path/{{source_file_part}}", | |
| 388 ] | |
| 389 } | |
| 390 } | |
| 391 | |
| 392 # Template to package a shared library into a Mac framework bundle. | |
| 393 # | |
| 394 # This template provides two targets to control whether the framework is | |
| 395 # merely built when targets depend on it, or whether it is linked as well: | |
| 396 # "$target_name" and "$target_name+link". | |
| 397 # | |
| 398 # See the //build/config/mac/rules.gni:framework_bundle for a discussion | |
| 399 # and examples. | |
| 400 # | |
| 401 # Arguments | |
| 402 # | |
| 403 # info_plist: | |
| 404 # string, path to the Info.plist file that will be used for the bundle. | |
| 405 # | |
| 406 # output_name: | |
| 407 # (optional) string, name of the generated framework without the | |
| 408 # .framework suffix. If omitted, defaults to target_name. | |
| 409 # | |
| 410 # framework_version: | |
| 411 # (optional) string, version of the framework. Typically this is a | |
| 412 # single letter, like "A". If omitted, the Versions/ subdirectory | |
| 413 # structure will not be created, and build output will go directly | |
| 414 # into the framework subdirectory. | |
| 415 # | |
| 416 # See "gn help shared_library" for more information on arguments supported | |
| 417 # by shared library target. | |
| 418 template("mac_framework_bundle") { | |
| 419 assert(defined(invoker.deps), | |
| 420 "Dependencies must be specified for $target_name") | |
| 421 assert(defined(invoker.info_plist), | |
| 422 "The Info.plist file must be specified for $target_name") | |
| 423 | |
| 424 _info_plist_target = target_name + "_info_plist" | |
| 425 | |
| 426 mac_info_plist(_info_plist_target) { | |
| 427 executable_name = target_name | |
| 428 if (defined(invoker.output_name)) { | |
| 429 executable_name = invoker.output_name | |
| 430 } | |
| 431 forward_variables_from(invoker, [ "info_plist" ]) | |
| 432 } | |
| 433 | |
| 434 _info_plist_bundle_data = _info_plist_target + "_bundle_data" | |
| 435 | |
| 436 bundle_data(_info_plist_bundle_data) { | |
| 437 forward_variables_from(invoker, [ "testonly" ]) | |
| 438 sources = get_target_outputs(":$_info_plist_target") | |
| 439 outputs = [ | |
| 440 "{{bundle_root_dir}}/Info.plist", | |
| 441 ] | |
| 442 public_deps = [ | |
| 443 ":$_info_plist_target", | |
| 444 ] | |
| 445 } | |
| 446 | |
| 447 framework_bundle(target_name) { | |
| 448 forward_variables_from(invoker, "*", [ "info_plist" ]) | |
| 449 | |
| 450 if (!defined(deps)) { | |
| 451 deps = [] | |
| 452 } | |
| 453 deps += [ ":$_info_plist_bundle_data" ] | |
| 454 } | |
| 455 } | |
| 456 | |
| 457 # Template to create a Mac executable application bundle. | |
| 458 # | |
| 459 # Arguments | |
| 460 # | |
| 461 # info_plist: | |
| 462 # string, path to the Info.plist file that will be used for the bundle. | |
| 463 # | |
| 464 # output_name: | |
| 465 # (optional) string, name of the generated app without the | |
| 466 # .app suffix. If omitted, defaults to target_name. | |
| 467 template("mac_app_bundle") { | |
| 468 assert(defined(invoker.info_plist), | |
| 469 "The Info.plist file must be specified for $target_name") | |
| 470 | |
| 471 _target_name = target_name | |
| 472 _output_name = target_name | |
| 473 if (defined(invoker.output_name)) { | |
| 474 _output_name = invoker.output_name | |
| 475 } | |
| 476 | |
| 477 _executable_target = target_name + "_executable" | |
| 478 _executable_bundle_data = _executable_target + "_bundle_data" | |
| 479 | |
| 480 executable(_executable_target) { | |
| 481 visibility = [ ":$_executable_bundle_data" ] | |
| 482 forward_variables_from(invoker, | |
| 483 "*", | |
| 484 [ | |
| 485 "assert_no_deps", | |
| 486 "data_deps", | |
| 487 "info_plist", | |
| 488 "output_name", | |
| 489 "visibility", | |
| 490 ]) | |
| 491 output_name = _output_name | |
| 492 output_dir = "$target_out_dir/$_executable_target" | |
| 493 } | |
| 494 | |
| 495 bundle_data(_executable_bundle_data) { | |
| 496 visibility = [ ":$_target_name" ] | |
| 497 forward_variables_from(invoker, [ "testonly" ]) | |
| 498 sources = [ | |
| 499 "$target_out_dir/$_executable_target/$_output_name", | |
| 500 ] | |
| 501 outputs = [ | |
| 502 "{{bundle_executable_dir}}/$_output_name", | |
| 503 ] | |
| 504 public_deps = [ | |
| 505 ":$_executable_target", | |
| 506 ] | |
| 507 } | |
| 508 | |
| 509 _info_plist_target = target_name + "_info_plist" | |
| 510 | |
| 511 mac_info_plist(_info_plist_target) { | |
| 512 executable_name = _output_name | |
| 513 forward_variables_from(invoker, [ "info_plist" ]) | |
| 514 } | |
| 515 | |
| 516 _info_plist_bundle_data = _info_plist_target + "_bundle_data" | |
| 517 | |
| 518 bundle_data(_info_plist_bundle_data) { | |
| 519 forward_variables_from(invoker, [ "testonly" ]) | |
| 520 visibility = [ ":$_target_name" ] | |
| 521 sources = get_target_outputs(":$_info_plist_target") | |
| 522 outputs = [ | |
| 523 "{{bundle_root_dir}}/Info.plist", | |
| 524 ] | |
| 525 public_deps = [ | |
| 526 ":$_info_plist_target", | |
| 527 ] | |
| 528 } | |
| 529 | |
| 530 create_bundle(_target_name) { | |
| 531 forward_variables_from(invoker, | |
| 532 [ | |
| 533 "data_deps", | |
| 534 "deps", | |
| 535 "public_deps", | |
| 536 "testonly", | |
| 537 ]) | |
| 538 if (!defined(deps)) { | |
| 539 deps = [] | |
| 540 } | |
| 541 deps += [ | |
| 542 ":$_executable_bundle_data", | |
| 543 ":$_info_plist_bundle_data", | |
| 544 ] | |
| 545 | |
| 546 bundle_root_dir = "$root_out_dir/${_output_name}.app/Contents" | |
| 547 bundle_resources_dir = "$bundle_root_dir/Resources" | |
| 548 bundle_executable_dir = "$bundle_root_dir/MacOS" | |
| 549 } | |
| 550 } | |
| 551 | |
| 552 # Template to package a loadable_module into a .plugin bundle. | |
| 553 # | |
| 554 # This takes no extra arguments that differ from a loadable_module. | |
| 555 template("mac_plugin_bundle") { | |
| 556 assert(defined(invoker.deps), | |
| 557 "Dependencies must be specified for $target_name") | |
| 558 | |
| 559 _target_name = target_name | |
| 560 _loadable_module_target = _target_name + "_loadable_module" | |
| 561 _loadable_module_bundle_data = _loadable_module_target + "_bundle_data" | |
| 562 | |
| 563 _output_name = _target_name | |
| 564 if (defined(invoker.output_name)) { | |
| 565 _output_name = invoker.output_name | |
| 566 } | |
| 567 | |
| 568 loadable_module(_loadable_module_target) { | |
| 569 visibility = [ ":$_loadable_module_bundle_data" ] | |
| 570 forward_variables_from(invoker, | |
| 571 "*", | |
| 572 [ | |
| 573 "assert_no_deps", | |
| 574 "data_deps", | |
| 575 "output_name", | |
| 576 "visibility", | |
| 577 ]) | |
| 578 output_dir = "$target_out_dir" | |
| 579 output_name = _output_name | |
| 580 } | |
| 581 | |
| 582 bundle_data(_loadable_module_bundle_data) { | |
| 583 forward_variables_from(invoker, [ "testonly" ]) | |
| 584 visibility = [ ":$_target_name" ] | |
| 585 sources = [ | |
| 586 "$target_out_dir/${_output_name}.so", | |
| 587 ] | |
| 588 outputs = [ | |
| 589 "{{bundle_executable_dir}}/$_output_name", | |
| 590 ] | |
| 591 public_deps = [ | |
| 592 ":$_loadable_module_target", | |
| 593 ] | |
| 594 } | |
| 595 | |
| 596 create_bundle(_target_name) { | |
| 597 forward_variables_from(invoker, | |
| 598 [ | |
| 599 "data_deps", | |
| 600 "deps", | |
| 601 "public_deps", | |
| 602 "testonly", | |
| 603 "visibility", | |
| 604 ]) | |
| 605 if (!defined(deps)) { | |
| 606 deps = [] | |
| 607 } | |
| 608 deps += [ ":$_loadable_module_bundle_data" ] | |
| 609 | |
| 610 bundle_root_dir = "$root_out_dir/$_output_name.plugin/Contents" | |
| 611 bundle_executable_dir = "$bundle_root_dir/MacOS" | |
| 612 } | |
| 613 } | |
| OLD | NEW |