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 |