Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(430)

Side by Side Diff: build/config/android/rules.gni

Issue 1180693002: Update from https://crrev.com/333737 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: rebased Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « build/config/android/internal_rules.gni ('k') | build/config/arm.gni » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 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("//base/android/linker/config.gni") 5 import("//base/android/linker/config.gni")
6 import("//build/config/android/config.gni") 6 import("//build/config/android/config.gni")
7 import("//build/config/android/internal_rules.gni") 7 import("//build/config/android/internal_rules.gni")
8 import("//third_party/android_platform/config.gni")
8 import("//tools/grit/grit_rule.gni") 9 import("//tools/grit/grit_rule.gni")
9 import("//tools/relocation_packer/config.gni")
10 10
11 assert(is_android) 11 assert(is_android)
12 12
13 # Declare a jni target 13 # Declare a jni target
14 # 14 #
15 # This target generates the native jni bindings for a set of .java files. 15 # This target generates the native jni bindings for a set of .java files.
16 # 16 #
17 # See base/android/jni_generator/jni_generator.py for more info about the 17 # See base/android/jni_generator/jni_generator.py for more info about the
18 # format of generating JNI bindings. 18 # format of generating JNI bindings.
19 # 19 #
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 246
247 assert(defined(invoker.sources)) 247 assert(defined(invoker.sources))
248 package_name = invoker.package_name + "" 248 package_name = invoker.package_name + ""
249 249
250 if (defined(invoker.include_path)) { 250 if (defined(invoker.include_path)) {
251 include_path = invoker.include_path + "" 251 include_path = invoker.include_path + ""
252 } else { 252 } else {
253 include_path = "//" 253 include_path = "//"
254 } 254 }
255 255
256 action_foreach("${target_name}__apply_gcc") { 256 apply_gcc_target_name = "${target_name}__apply_gcc"
257 zip_srcjar_target_name = "${target_name}__zip_srcjar"
258 final_target_name = target_name
259
260 action_foreach(apply_gcc_target_name) {
261 visibility = [ ":$zip_srcjar_target_name" ]
257 script = "//build/android/gyp/gcc_preprocess.py" 262 script = "//build/android/gyp/gcc_preprocess.py"
258 if (defined(invoker.inputs)) { 263 if (defined(invoker.inputs)) {
259 inputs = invoker.inputs + [] 264 inputs = invoker.inputs + []
260 } 265 }
261 depfile = "${target_gen_dir}/${target_name}_{{source_name_part}}.d" 266 depfile = "${target_gen_dir}/${target_name}_{{source_name_part}}.d"
262 267
263 sources = invoker.sources 268 sources = invoker.sources
264 269
270 if (defined(invoker.deps)) {
271 deps = invoker.deps
272 }
273 if (defined(invoker.public_deps)) {
274 public_deps = invoker.public_deps
275 }
276 if (defined(invoker.data_deps)) {
277 data_deps = invoker.data_deps
278 }
279
265 gen_dir = 280 gen_dir =
266 "${target_gen_dir}/${target_name}/java_cpp_template/${package_name}" 281 "${target_gen_dir}/${target_name}/java_cpp_template/${package_name}"
267 gcc_template_output_pattern = "${gen_dir}/{{source_name_part}}.java" 282 gcc_template_output_pattern = "${gen_dir}/{{source_name_part}}.java"
268 283
269 outputs = [ 284 outputs = [
270 depfile, 285 depfile,
271 gcc_template_output_pattern, 286 gcc_template_output_pattern,
272 ] 287 ]
273 288
274 args = [ 289 args = [
275 "--depfile", 290 "--depfile",
276 rebase_path(depfile, root_build_dir), 291 rebase_path(depfile, root_build_dir),
277 "--include-path", 292 "--include-path",
278 rebase_path(include_path, root_build_dir), 293 rebase_path(include_path, root_build_dir),
279 "--output", 294 "--output",
280 rebase_path(gen_dir, root_build_dir) + "/{{source_name_part}}.java", 295 rebase_path(gen_dir, root_build_dir) + "/{{source_name_part}}.java",
281 "--template={{source}}", 296 "--template={{source}}",
282 ] 297 ]
283 298
284 if (defined(invoker.defines)) { 299 if (defined(invoker.defines)) {
285 foreach(def, invoker.defines) { 300 foreach(def, invoker.defines) {
286 args += [ 301 args += [
287 "--defines", 302 "--defines",
288 def, 303 def,
289 ] 304 ]
290 } 305 }
291 } 306 }
292 } 307 }
293 308
294 apply_gcc_outputs = get_target_outputs(":${target_name}__apply_gcc") 309 apply_gcc_outputs = get_target_outputs(":$apply_gcc_target_name")
295 base_gen_dir = get_label_info(":${target_name}__apply_gcc", "target_gen_dir") 310 base_gen_dir = get_label_info(":$apply_gcc_target_name", "target_gen_dir")
296 311
297 srcjar_path = "${target_gen_dir}/${target_name}.srcjar" 312 srcjar_path = "${target_gen_dir}/${target_name}.srcjar"
298 zip("${target_name}__zip_srcjar") { 313 zip(zip_srcjar_target_name) {
314 visibility = [ ":$final_target_name" ]
299 inputs = apply_gcc_outputs 315 inputs = apply_gcc_outputs
300 output = srcjar_path 316 output = srcjar_path
301 base_dir = base_gen_dir 317 base_dir = base_gen_dir
318 deps = [
319 ":$apply_gcc_target_name",
320 ]
302 } 321 }
303 322
304 group(target_name) { 323 group(final_target_name) {
324 if (defined(invoker.visibility)) {
325 visibility = invoker.visibility
326 }
305 deps = [ 327 deps = [
306 ":${target_name}__zip_srcjar", 328 ":$zip_srcjar_target_name",
307 ] 329 ]
308 } 330 }
309 } 331 }
310 332
311 # Declare a target for generating Java classes from C++ enums. 333 # Declare a target for generating Java classes from C++ enums.
312 # 334 #
313 # This target generates Java files from C++ enums using a script. 335 # This target generates Java files from C++ enums using a script.
314 # 336 #
315 # This target will create a single .srcjar. Adding this target to an 337 # This target will create a single .srcjar. Adding this target to an
316 # android_library target's srcjar_deps will make the generated java files be 338 # android_library target's srcjar_deps will make the generated java files be
(...skipping 20 matching lines...) Expand all
337 # } 359 # }
338 template("java_cpp_enum") { 360 template("java_cpp_enum") {
339 set_sources_assignment_filter([]) 361 set_sources_assignment_filter([])
340 if (defined(invoker.testonly)) { 362 if (defined(invoker.testonly)) {
341 testonly = invoker.testonly 363 testonly = invoker.testonly
342 } 364 }
343 365
344 assert(defined(invoker.sources)) 366 assert(defined(invoker.sources))
345 assert(defined(invoker.outputs)) 367 assert(defined(invoker.outputs))
346 368
347 action("${target_name}__generate_enum") { 369 generate_enum_target_name = "${target_name}__generate_enum"
370 zip_srcjar_target_name = "${target_name}__zip_srcjar"
371 final_target_name = target_name
372
373 action(generate_enum_target_name) {
374 visibility = [ ":$zip_srcjar_target_name" ]
375
348 # The sources aren't compiled so don't check their dependencies. 376 # The sources aren't compiled so don't check their dependencies.
349 check_includes = false 377 check_includes = false
350 378
351 sources = invoker.sources 379 sources = invoker.sources
352 script = "//build/android/gyp/java_cpp_enum.py" 380 script = "//build/android/gyp/java_cpp_enum.py"
353 gen_dir = "${target_gen_dir}/${target_name}/enums" 381 gen_dir = "${target_gen_dir}/${target_name}/enums"
354 outputs = 382 outputs =
355 get_path_info(rebase_path(invoker.outputs, ".", gen_dir), "abspath") 383 get_path_info(rebase_path(invoker.outputs, ".", gen_dir), "abspath")
356 384
357 args = [] 385 args = []
358 foreach(output, rebase_path(outputs, root_build_dir)) { 386 foreach(output, rebase_path(outputs, root_build_dir)) {
359 args += [ 387 args += [
360 "--assert_file", 388 "--assert_file",
361 output, 389 output,
362 ] 390 ]
363 } 391 }
364 args += [ rebase_path(gen_dir, root_build_dir) ] 392 args += [ rebase_path(gen_dir, root_build_dir) ]
365 args += rebase_path(invoker.sources, root_build_dir) 393 args += rebase_path(invoker.sources, root_build_dir)
366 } 394 }
367 395
368 generate_enum_outputs = get_target_outputs(":${target_name}__generate_enum") 396 generate_enum_outputs = get_target_outputs(":$generate_enum_target_name")
369 base_gen_dir = 397 base_gen_dir = get_label_info(":$generate_enum_target_name", "target_gen_dir")
370 get_label_info(":${target_name}__generate_enum", "target_gen_dir")
371 398
372 srcjar_path = "${target_gen_dir}/${target_name}.srcjar" 399 srcjar_path = "${target_gen_dir}/${target_name}.srcjar"
373 zip("${target_name}__zip_srcjar") { 400 zip(zip_srcjar_target_name) {
401 visibility = [ ":$final_target_name" ]
374 inputs = generate_enum_outputs 402 inputs = generate_enum_outputs
375 output = srcjar_path 403 output = srcjar_path
376 base_dir = base_gen_dir 404 base_dir = base_gen_dir
405 deps = [
406 ":$generate_enum_target_name",
407 ]
377 } 408 }
378 409
379 group(target_name) { 410 group(final_target_name) {
411 if (defined(invoker.visibility)) {
412 visibility = invoker.visibility
413 }
380 deps = [ 414 deps = [
381 ":${target_name}__zip_srcjar", 415 ":$zip_srcjar_target_name",
382 ] 416 ]
383 } 417 }
384 } 418 }
385 419
386 # Declare a target for processing a Jinja template. 420 # Declare a target for processing a Jinja template.
387 # 421 #
388 # Variables 422 # Variables
389 # input: The template file to be processed. 423 # input: The template file to be processed.
390 # output: Where to save the result. 424 # output: Where to save the result.
391 # variables: (Optional) A list of variables to make available to the template 425 # variables: (Optional) A list of variables to make available to the template
392 # processing environment, e.g. ["name=foo", "color=red"]. 426 # processing environment, e.g. ["name=foo", "color=red"].
393 # 427 #
394 # Example 428 # Example
395 # jinja_template("chrome_shell_manifest") { 429 # jinja_template("chrome_shell_manifest") {
396 # input = "shell/java/AndroidManifest.xml" 430 # input = "shell/java/AndroidManifest.xml"
397 # output = "$target_gen_dir/AndroidManifest.xml" 431 # output = "$target_gen_dir/AndroidManifest.xml"
398 # } 432 # }
399 template("jinja_template") { 433 template("jinja_template") {
400 set_sources_assignment_filter([]) 434 set_sources_assignment_filter([])
401 if (defined(invoker.testonly)) { 435 if (defined(invoker.testonly)) {
402 testonly = invoker.testonly 436 testonly = invoker.testonly
403 } 437 }
404 438
405 assert(defined(invoker.input)) 439 assert(defined(invoker.input))
406 assert(defined(invoker.output)) 440 assert(defined(invoker.output))
407 441
408 action(target_name) { 442 action(target_name) {
443 if (defined(invoker.visibility)) {
444 visibility = invoker.visibility
445 }
446
409 sources = [ 447 sources = [
410 invoker.input, 448 invoker.input,
411 ] 449 ]
412 script = "//build/android/gyp/jinja_template.py" 450 script = "//build/android/gyp/jinja_template.py"
413 depfile = "$target_gen_dir/$target_name.d" 451 depfile = "$target_gen_dir/$target_name.d"
414 452
415 outputs = [ 453 outputs = [
416 depfile, 454 depfile,
417 invoker.output, 455 invoker.output,
418 ] 456 ]
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 # own dependencies. 554 # own dependencies.
517 # 555 #
518 # Variables 556 # Variables
519 # deps: Specifies the dependencies of this target. Any Android resources 557 # deps: Specifies the dependencies of this target. Any Android resources
520 # listed in deps will be included by libraries/apks that depend on this 558 # listed in deps will be included by libraries/apks that depend on this
521 # target. 559 # target.
522 # resource_dirs: List of directories containing resources for this target. 560 # resource_dirs: List of directories containing resources for this target.
523 # android_manifest: AndroidManifest.xml for this target. Defaults to 561 # android_manifest: AndroidManifest.xml for this target. Defaults to
524 # //build/android/AndroidManifest.xml. 562 # //build/android/AndroidManifest.xml.
525 # custom_package: java package for generated .java files. 563 # custom_package: java package for generated .java files.
526 # v14_verify_only: If true, don't generate v14/v17 resources and just verify 564 # v14_skip: If true, don't run v14 resource generator on this. Defaults to
527 # that the resources are v14-compliant (see 565 # false. (see build/android/gyp/generate_v14_compatible_resources.py)
528 # build/android/gyp/generate_v14_compatible_resources.py). Defaults to 566 #
529 # false.
530 # shared_resources: If true make a resource package that can be loaded by a 567 # shared_resources: If true make a resource package that can be loaded by a
531 # different application at runtime to access the package's resources. 568 # different application at runtime to access the package's resources.
532 # 569 #
533 570
534 # Example 571 # Example
535 # android_resources("foo_resources") { 572 # android_resources("foo_resources") {
536 # deps = [":foo_strings_grd"] 573 # deps = [":foo_strings_grd"]
537 # resource_dirs = ["res"] 574 # resource_dirs = ["res"]
538 # custom_package = "org.chromium.foo" 575 # custom_package = "org.chromium.foo"
539 # } 576 # }
540 template("android_resources") { 577 template("android_resources") {
541 set_sources_assignment_filter([]) 578 set_sources_assignment_filter([])
542 if (defined(invoker.testonly)) { 579 if (defined(invoker.testonly)) {
543 testonly = invoker.testonly 580 testonly = invoker.testonly
544 } 581 }
545 582
546 assert(defined(invoker.resource_dirs)) 583 assert(defined(invoker.resource_dirs))
547 assert(defined(invoker.android_manifest) || defined(invoker.custom_package)) 584 assert(defined(invoker.android_manifest) || defined(invoker.custom_package))
548 585
549 base_path = "$target_gen_dir/$target_name" 586 base_path = "$target_gen_dir/$target_name"
550 zip_path = base_path + ".resources.zip" 587 zip_path = base_path + ".resources.zip"
551 srcjar_path = base_path + ".srcjar" 588 srcjar_path = base_path + ".srcjar"
552 r_text_path = base_path + "_R.txt" 589 r_text_path = base_path + "_R.txt"
553 build_config = base_path + ".build_config" 590 build_config = base_path + ".build_config"
554 591
555 write_build_config("${target_name}__build_config") { 592 build_config_target_name = "${target_name}__build_config"
593 process_resources_target_name = "${target_name}__process_resources"
594 final_target_name = target_name
595
596 write_build_config(build_config_target_name) {
597 visibility = [ ":$process_resources_target_name" ]
598
556 type = "android_resources" 599 type = "android_resources"
557 resources_zip = zip_path 600 resources_zip = zip_path
558 srcjar = srcjar_path 601 srcjar = srcjar_path
559 r_text = r_text_path 602 r_text = r_text_path
560 if (defined(invoker.deps)) { 603 if (defined(invoker.deps)) {
561 deps = invoker.deps 604 deps = invoker.deps
562 } 605 }
563 if (defined(invoker.android_manifest)) { 606 if (defined(invoker.android_manifest)) {
564 android_manifest = invoker.android_manifest 607 android_manifest = invoker.android_manifest
565 } 608 }
566 if (defined(invoker.custom_package)) { 609 if (defined(invoker.custom_package)) {
567 custom_package = invoker.custom_package 610 custom_package = invoker.custom_package
568 } 611 }
569 } 612 }
570 613
571 android_manifest = "//build/android/AndroidManifest.xml" 614 android_manifest = "//build/android/AndroidManifest.xml"
572 if (defined(invoker.android_manifest)) { 615 if (defined(invoker.android_manifest)) {
573 android_manifest = invoker.android_manifest 616 android_manifest = invoker.android_manifest
574 } 617 }
575 618
576 process_resources("${target_name}__process_resources") { 619 process_resources(process_resources_target_name) {
620 visibility = [ ":$final_target_name" ]
621
577 resource_dirs = invoker.resource_dirs 622 resource_dirs = invoker.resource_dirs
578 if (defined(invoker.custom_package)) { 623 if (defined(invoker.custom_package)) {
579 custom_package = invoker.custom_package 624 custom_package = invoker.custom_package
580 } 625 }
581 626
582 if (defined(invoker.v14_verify_only)) { 627 if (defined(invoker.v14_skip)) {
583 v14_verify_only = invoker.v14_verify_only 628 v14_skip = invoker.v14_skip
584 } 629 }
585 630
586 if (defined(invoker.shared_resources)) { 631 if (defined(invoker.shared_resources)) {
587 shared_resources = invoker.shared_resources 632 shared_resources = invoker.shared_resources
588 } 633 }
634
635 deps = [
636 ":$build_config_target_name",
637 ]
638 if (defined(invoker.deps)) {
639 # Invoker may have added deps that generate the input resources.
640 deps += invoker.deps
641 }
589 } 642 }
590 643
591 group(target_name) { 644 group(final_target_name) {
645 if (defined(invoker.visibility)) {
646 visibility = invoker.visibility
647 }
592 deps = [ 648 deps = [
593 ":${target_name}__build_config",
594 ":${target_name}__process_resources", 649 ":${target_name}__process_resources",
595 ] 650 ]
596 } 651 }
597 } 652 }
598 653
599 # Declare a target that generates localized strings.xml from a .grd file. 654 # Declare a target that generates localized strings.xml from a .grd file.
600 # 655 #
601 # If this target is included in the deps of an android resources/library/apk, 656 # If this target is included in the deps of an android resources/library/apk,
602 # the strings.xml will be included with that target. 657 # the strings.xml will be included with that target.
603 # 658 #
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
644 } 699 }
645 700
646 # This needs to get outputs from grit's internal target, not the final 701 # This needs to get outputs from grit's internal target, not the final
647 # source_set. 702 # source_set.
648 generate_strings_outputs = get_target_outputs(":${grit_target_name}_grit") 703 generate_strings_outputs = get_target_outputs(":${grit_target_name}_grit")
649 704
650 zip("${target_name}__zip") { 705 zip("${target_name}__zip") {
651 base_dir = grit_output_dir 706 base_dir = grit_output_dir
652 inputs = generate_strings_outputs 707 inputs = generate_strings_outputs
653 output = resources_zip 708 output = resources_zip
709 deps = [
710 ":$grit_target_name",
711 ]
654 } 712 }
655 713
656 group(target_name) { 714 group(target_name) {
657 deps = [ 715 deps = [
658 ":${target_name}__build_config", 716 ":${target_name}__build_config",
659 ":${target_name}__zip", 717 ":${target_name}__zip",
660 ] 718 ]
661 } 719 }
662 } 720 }
663 721
(...skipping 16 matching lines...) Expand all
680 template("java_strings_grd_prebuilt") { 738 template("java_strings_grd_prebuilt") {
681 set_sources_assignment_filter([]) 739 set_sources_assignment_filter([])
682 if (defined(invoker.testonly)) { 740 if (defined(invoker.testonly)) {
683 testonly = invoker.testonly 741 testonly = invoker.testonly
684 } 742 }
685 743
686 base_path = "$target_gen_dir/$target_name" 744 base_path = "$target_gen_dir/$target_name"
687 resources_zip = base_path + ".resources.zip" 745 resources_zip = base_path + ".resources.zip"
688 build_config = base_path + ".build_config" 746 build_config = base_path + ".build_config"
689 747
690 write_build_config("${target_name}__build_config") { 748 build_config_target_name = "${target_name}__build_config"
749 zip_target_name = "${target_name}__zip"
750 final_target_name = target_name
751
752 write_build_config(build_config_target_name) {
753 visibility = [ ":$zip_target_name" ]
691 type = "android_resources" 754 type = "android_resources"
755 }
756
757 zip(zip_target_name) {
758 visibility = [ ":$final_target_name" ]
759
760 base_dir = invoker.grit_output_dir
761 inputs = rebase_path(invoker.generated_files, ".", base_dir)
762 output = resources_zip
763 deps = [
764 ":$build_config_target_name",
765 ]
692 if (defined(invoker.deps)) { 766 if (defined(invoker.deps)) {
693 deps = invoker.deps 767 deps += invoker.deps
694 } 768 }
695 } 769 }
696 770
697 zip("${target_name}__zip") { 771 group(final_target_name) {
698 base_dir = invoker.grit_output_dir 772 if (defined(invoker.visibility)) {
699 inputs = rebase_path(invoker.generated_files, ".", base_dir) 773 visibility = invoker.visibility
700 output = resources_zip 774 }
701 }
702
703 group(target_name) {
704 deps = [ 775 deps = [
705 ":${target_name}__build_config", 776 ":$zip_target_name",
706 ":${target_name}__zip",
707 ] 777 ]
708 } 778 }
709 } 779 }
710 780
711 # Declare a Java executable target 781 # Declare a Java executable target
712 # 782 #
713 # This target creates an executable from java code and libraries. The executable 783 # This target creates an executable from java code and libraries. The executable
714 # will be in the output folder's /bin/ directory. 784 # will be in the output folder's /bin/ directory.
715 # 785 #
716 # Variables 786 # Variables
717 # deps: Specifies the dependencies of this target. Java targets in this list 787 # deps: Specifies the dependencies of this target. Java targets in this list
718 # will be included in the executable (and the javac classpath). 788 # will be included in the executable (and the javac classpath).
719 # 789 #
720 # java_files: List of .java files included in this library. 790 # java_files: List of .java files included in this library.
721 # srcjar_deps: List of srcjar dependencies. The .java files in the srcjars 791 # srcjar_deps: List of srcjar dependencies. The .java files in the srcjars
722 # will be added to java_files and be included in this library. 792 # will be added to java_files and be included in this library.
723 # srcjars: List of srcjars to be included in this library, together with the 793 # srcjars: List of srcjars to be included in this library, together with the
724 # ones obtained from srcjar_deps. 794 # ones obtained from srcjar_deps.
725 # 795 #
726 # bypass_platform_checks: Disables checks about cross-platform (Java/Android) 796 # bypass_platform_checks: Disables checks about cross-platform (Java/Android)
727 # dependencies for this target. This will allow depending on an 797 # dependencies for this target. This will allow depending on an
728 # android_library target, for example. 798 # android_library target, for example.
729 # 799 #
730 # chromium_code: If true, extra analysis warning/errors will be enabled. 800 # chromium_code: If true, extra analysis warning/errors will be enabled.
731 # 801 #
732 # datadeps, testonly 802 # data_deps, testonly
733 # 803 #
734 # Example 804 # Example
735 # java_binary("foo") { 805 # java_binary("foo") {
736 # java_files = [ "org/chromium/foo/FooMain.java" ] 806 # java_files = [ "org/chromium/foo/FooMain.java" ]
737 # deps = [ ":bar_java" ] 807 # deps = [ ":bar_java" ]
738 # main_class = "org.chromium.foo.FooMain" 808 # main_class = "org.chromium.foo.FooMain"
739 # } 809 # }
740 template("java_binary") { 810 template("java_binary") {
741 set_sources_assignment_filter([]) 811 set_sources_assignment_filter([])
742 812
743 # TODO(cjhopman): This should not act like a java_library for dependents (i.e. 813 # TODO(cjhopman): This should not act like a java_library for dependents (i.e.
744 # dependents shouldn't get the jar in their classpath, etc.). 814 # dependents shouldn't get the jar in their classpath, etc.).
745 java_library_impl(target_name) { 815 java_library_impl(target_name) {
746 if (defined(invoker.DEPRECATED_java_in_dir)) { 816 if (defined(invoker.DEPRECATED_java_in_dir)) {
747 DEPRECATED_java_in_dir = invoker.DEPRECATED_java_in_dir 817 DEPRECATED_java_in_dir = invoker.DEPRECATED_java_in_dir
748 } 818 }
749 if (defined(invoker.chromium_code)) { 819 if (defined(invoker.chromium_code)) {
750 chromium_code = invoker.chromium_code 820 chromium_code = invoker.chromium_code
751 } 821 }
752 if (defined(invoker.datadeps)) { 822 if (defined(invoker.data_deps)) {
753 deps = invoker.datadeps 823 deps = invoker.data_deps
754 } 824 }
755 if (defined(invoker.deps)) { 825 if (defined(invoker.deps)) {
756 deps = invoker.deps 826 deps = invoker.deps
757 } 827 }
758 if (defined(invoker.java_files)) { 828 if (defined(invoker.java_files)) {
759 java_files = invoker.java_files 829 java_files = invoker.java_files
760 } 830 }
761 if (defined(invoker.srcjar_deps)) { 831 if (defined(invoker.srcjar_deps)) {
762 srcjar_deps = invoker.srcjar_deps 832 srcjar_deps = invoker.srcjar_deps
763 } 833 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 # be used to remove unwanted parts of the library. 926 # be used to remove unwanted parts of the library.
857 # proguard_config: Path to the proguard config for preprocessing. 927 # proguard_config: Path to the proguard config for preprocessing.
858 # 928 #
859 # supports_android: If true, Android targets (android_library, android_apk) 929 # supports_android: If true, Android targets (android_library, android_apk)
860 # may depend on this target. Note: if true, this target must only use the 930 # may depend on this target. Note: if true, this target must only use the
861 # subset of Java available on Android. 931 # subset of Java available on Android.
862 # bypass_platform_checks: Disables checks about cross-platform (Java/Android) 932 # bypass_platform_checks: Disables checks about cross-platform (Java/Android)
863 # dependencies for this target. This will allow depending on an 933 # dependencies for this target. This will allow depending on an
864 # android_library target, for example. 934 # android_library target, for example.
865 # 935 #
866 # datadeps, testonly 936 # data_deps, testonly
867 # 937 #
868 # Example 938 # Example
869 # java_library("foo_java") { 939 # java_library("foo_java") {
870 # java_files = [ 940 # java_files = [
871 # "org/chromium/foo/Foo.java", 941 # "org/chromium/foo/Foo.java",
872 # "org/chromium/foo/FooInterface.java", 942 # "org/chromium/foo/FooInterface.java",
873 # "org/chromium/foo/FooService.java", 943 # "org/chromium/foo/FooService.java",
874 # ] 944 # ]
875 # deps = [ 945 # deps = [
876 # ":bar_java" 946 # ":bar_java"
877 # ] 947 # ]
878 # srcjar_deps = [ 948 # srcjar_deps = [
879 # ":foo_generated_enum" 949 # ":foo_generated_enum"
880 # ] 950 # ]
881 # jar_excluded_patterns = [ 951 # jar_excluded_patterns = [
882 # "*/FooService.class", "*/FooService##*.class" 952 # "*/FooService.class", "*/FooService##*.class"
883 # ] 953 # ]
884 # } 954 # }
885 template("java_library") { 955 template("java_library") {
886 set_sources_assignment_filter([]) 956 set_sources_assignment_filter([])
887 java_library_impl(target_name) { 957 java_library_impl(target_name) {
888 if (defined(invoker.DEPRECATED_java_in_dir)) { 958 if (defined(invoker.DEPRECATED_java_in_dir)) {
889 DEPRECATED_java_in_dir = invoker.DEPRECATED_java_in_dir 959 DEPRECATED_java_in_dir = invoker.DEPRECATED_java_in_dir
890 } 960 }
891 if (defined(invoker.chromium_code)) { 961 if (defined(invoker.chromium_code)) {
892 chromium_code = invoker.chromium_code 962 chromium_code = invoker.chromium_code
893 } 963 }
894 if (defined(invoker.datadeps)) { 964 if (defined(invoker.data_deps)) {
895 deps = invoker.datadeps 965 deps = invoker.data_deps
896 } 966 }
897 if (defined(invoker.deps)) { 967 if (defined(invoker.deps)) {
898 deps = invoker.deps 968 deps = invoker.deps
899 } 969 }
900 if (defined(invoker.jar_excluded_patterns)) { 970 if (defined(invoker.jar_excluded_patterns)) {
901 jar_excluded_patterns = invoker.jar_excluded_patterns 971 jar_excluded_patterns = invoker.jar_excluded_patterns
902 } 972 }
903 if (defined(invoker.java_files)) { 973 if (defined(invoker.java_files)) {
904 java_files = invoker.java_files 974 java_files = invoker.java_files
905 } 975 }
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1020 set_sources_assignment_filter([]) 1090 set_sources_assignment_filter([])
1021 assert(!defined(invoker.jar_path), 1091 assert(!defined(invoker.jar_path),
1022 "android_library does not support a custom jar path") 1092 "android_library does not support a custom jar path")
1023 java_library_impl(target_name) { 1093 java_library_impl(target_name) {
1024 if (defined(invoker.DEPRECATED_java_in_dir)) { 1094 if (defined(invoker.DEPRECATED_java_in_dir)) {
1025 DEPRECATED_java_in_dir = invoker.DEPRECATED_java_in_dir 1095 DEPRECATED_java_in_dir = invoker.DEPRECATED_java_in_dir
1026 } 1096 }
1027 if (defined(invoker.chromium_code)) { 1097 if (defined(invoker.chromium_code)) {
1028 chromium_code = invoker.chromium_code 1098 chromium_code = invoker.chromium_code
1029 } 1099 }
1030 if (defined(invoker.datadeps)) { 1100 if (defined(invoker.data_deps)) {
1031 deps = invoker.datadeps 1101 deps = invoker.data_deps
1032 } 1102 }
1033 if (defined(invoker.deps)) { 1103 if (defined(invoker.deps)) {
1034 deps = invoker.deps 1104 deps = invoker.deps
1035 } 1105 }
1036 if (defined(invoker.jar_excluded_patterns)) { 1106 if (defined(invoker.jar_excluded_patterns)) {
1037 jar_excluded_patterns = invoker.jar_excluded_patterns 1107 jar_excluded_patterns = invoker.jar_excluded_patterns
1038 } 1108 }
1039 if (defined(invoker.java_files)) { 1109 if (defined(invoker.java_files)) {
1040 java_files = invoker.java_files 1110 java_files = invoker.java_files
1041 } 1111 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
1140 } 1210 }
1141 } 1211 }
1142 1212
1143 # Declare an Android apk target 1213 # Declare an Android apk target
1144 # 1214 #
1145 # This target creates an Android APK containing java code, resources, assets, 1215 # This target creates an Android APK containing java code, resources, assets,
1146 # and (possibly) native libraries. 1216 # and (possibly) native libraries.
1147 # 1217 #
1148 # Variables 1218 # Variables
1149 # android_manifest: Path to AndroidManifest.xml. 1219 # android_manifest: Path to AndroidManifest.xml.
1150 # datadeps: List of dependencies needed at runtime. These will be built but 1220 # data_deps: List of dependencies needed at runtime. These will be built but
1151 # won't change the generated .apk in any way (in fact they may be built 1221 # won't change the generated .apk in any way (in fact they may be built
1152 # after the .apk is). 1222 # after the .apk is).
1153 # deps: List of dependencies. All Android java resources and libraries in the 1223 # deps: List of dependencies. All Android java resources and libraries in the
1154 # "transitive closure" of these dependencies will be included in the apk. 1224 # "transitive closure" of these dependencies will be included in the apk.
1155 # Note: this "transitive closure" actually only includes such targets if 1225 # Note: this "transitive closure" actually only includes such targets if
1156 # they are depended on through android_library or android_resources targets 1226 # they are depended on through android_library or android_resources targets
1157 # (and so not through builtin targets like 'action', 'group', etc). 1227 # (and so not through builtin targets like 'action', 'group', etc).
1158 # java_files: List of .java files to include in the apk. 1228 # java_files: List of .java files to include in the apk.
1159 # srcjar_deps: List of srcjar dependencies. The .java files in the srcjars 1229 # srcjar_deps: List of srcjar dependencies. The .java files in the srcjars
1160 # will be added to java_files and be included in this apk. 1230 # will be added to java_files and be included in this apk.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1197 if (defined(invoker.testonly)) { 1267 if (defined(invoker.testonly)) {
1198 testonly = invoker.testonly 1268 testonly = invoker.testonly
1199 } 1269 }
1200 1270
1201 assert(defined(invoker.final_apk_path) || defined(invoker.apk_name)) 1271 assert(defined(invoker.final_apk_path) || defined(invoker.apk_name))
1202 assert(defined(invoker.android_manifest)) 1272 assert(defined(invoker.android_manifest))
1203 gen_dir = "$target_gen_dir/$target_name" 1273 gen_dir = "$target_gen_dir/$target_name"
1204 base_path = "$gen_dir/$target_name" 1274 base_path = "$gen_dir/$target_name"
1205 _build_config = "$target_gen_dir/$target_name.build_config" 1275 _build_config = "$target_gen_dir/$target_name.build_config"
1206 resources_zip_path = "$base_path.resources.zip" 1276 resources_zip_path = "$base_path.resources.zip"
1207 all_resources_zip_path = "$base_path.resources.all.zip" 1277 _all_resources_zip_path = "$base_path.resources.all.zip"
1208 jar_path = "$base_path.jar" 1278 jar_path = "$base_path.jar"
1279 _template_name = target_name
1280
1209 final_dex_path = "$gen_dir/classes.dex" 1281 final_dex_path = "$gen_dir/classes.dex"
1210 _template_name = target_name 1282 final_dex_target_name = "${_template_name}__final_dex"
1283
1211 _final_apk_path = "" 1284 _final_apk_path = ""
1212 if (defined(invoker.final_apk_path)) { 1285 if (defined(invoker.final_apk_path)) {
1213 _final_apk_path = invoker.final_apk_path 1286 _final_apk_path = invoker.final_apk_path
1214 } else if (defined(invoker.apk_name)) { 1287 } else if (defined(invoker.apk_name)) {
1215 _final_apk_path = "$root_build_dir/apks/" + invoker.apk_name + ".apk" 1288 _final_apk_path = "$root_build_dir/apks/" + invoker.apk_name + ".apk"
1216 } 1289 }
1217 _dist_jar_path_list = 1290 _dist_jar_path_list =
1218 process_file_template( 1291 process_file_template(
1219 [ _final_apk_path ], 1292 [ _final_apk_path ],
1220 "$root_build_dir/test.lib.java/{{source_name_part}}.jar") 1293 "$root_build_dir/test.lib.java/{{source_name_part}}.jar")
1221 _dist_jar_path = _dist_jar_path_list[0] 1294 _dist_jar_path = _dist_jar_path_list[0]
1222 1295
1223 _native_libs = [] 1296 _native_libs = []
1224 1297
1298 _version_code = "1"
1299 if (defined(invoker.version_code)) {
1300 _version_code = invoker.version_code
1301 }
1302
1303 _version_name = "Developer Build"
1304 if (defined(invoker.version_name)) {
1305 _version_name = invoker.version_name
1306 }
1225 _keystore_path = android_default_keystore_path 1307 _keystore_path = android_default_keystore_path
1226 _keystore_name = android_default_keystore_name 1308 _keystore_name = android_default_keystore_name
1227 _keystore_password = android_default_keystore_password 1309 _keystore_password = android_default_keystore_password
1228 1310
1229 if (defined(invoker.keystore_path)) { 1311 if (defined(invoker.keystore_path)) {
1230 _keystore_path = invoker.keystore_path 1312 _keystore_path = invoker.keystore_path
1231 _keystore_name = invoker.keystore_name 1313 _keystore_name = invoker.keystore_name
1232 _keystore_password = invoker.keystore_password 1314 _keystore_password = invoker.keystore_password
1233 } 1315 }
1234 1316
1235 _srcjar_deps = [] 1317 _srcjar_deps = []
1236 if (defined(invoker.srcjar_deps)) { 1318 if (defined(invoker.srcjar_deps)) {
1237 _srcjar_deps += invoker.srcjar_deps 1319 _srcjar_deps += invoker.srcjar_deps
1238 } 1320 }
1239 1321
1240 _load_library_from_apk = false 1322 _load_library_from_apk = false
1241 1323
1324 # The dependency that makes the chromium linker, if any is needed.
1325 _chromium_linker_dep = []
1326
1242 if (defined(invoker.native_libs)) { 1327 if (defined(invoker.native_libs)) {
1243 _use_chromium_linker = false 1328 _use_chromium_linker = false
1244 if (defined(invoker.use_chromium_linker)) { 1329 if (defined(invoker.use_chromium_linker)) {
1245 _use_chromium_linker = 1330 _use_chromium_linker =
1246 invoker.use_chromium_linker && chromium_linker_supported 1331 invoker.use_chromium_linker && chromium_linker_supported
1332 _chromium_linker_dep = [ "//base/android/linker:chromium_android_linker" ]
1247 } 1333 }
1248 1334
1249 if (defined(invoker.load_library_from_apk) && 1335 if (defined(invoker.load_library_from_apk) &&
1250 invoker.load_library_from_apk) { 1336 invoker.load_library_from_apk) {
1251 _load_library_from_apk = true 1337 _load_library_from_apk = true
1252 assert(_use_chromium_linker, 1338 assert(_use_chromium_linker,
1253 "Loading library from the apk requires use" + 1339 "Loading library from the apk requires use" +
1254 " of the Chromium linker.") 1340 " of the Chromium linker.")
1255 } 1341 }
1256 1342
(...skipping 23 matching lines...) Expand all
1280 } 1366 }
1281 1367
1282 _native_lib_version_name = "" 1368 _native_lib_version_name = ""
1283 if (defined(invoker.native_lib_version_name)) { 1369 if (defined(invoker.native_lib_version_name)) {
1284 _native_lib_version_name = invoker.native_lib_version_name 1370 _native_lib_version_name = invoker.native_lib_version_name
1285 } 1371 }
1286 } 1372 }
1287 1373
1288 _android_manifest = invoker.android_manifest 1374 _android_manifest = invoker.android_manifest
1289 _rebased_build_config = rebase_path(_build_config, root_build_dir) 1375 _rebased_build_config = rebase_path(_build_config, root_build_dir)
1376 _create_abi_split =
1377 defined(invoker.create_abi_split) && invoker.create_abi_split
1378 _create_density_splits =
1379 defined(invoker.create_density_splits) && invoker.create_density_splits
1290 1380
1291 write_build_config("${_template_name}__build_config") { 1381 # Help GN understand that _create_abi_split is not unused (bug in GN).
1382 assert(_create_abi_split || true)
1383
1384 build_config_target = "${_template_name}__build_config"
1385 write_build_config(build_config_target) {
1292 type = "android_apk" 1386 type = "android_apk"
1293 dex_path = final_dex_path 1387 dex_path = final_dex_path
1294 resources_zip = resources_zip_path 1388 resources_zip = resources_zip_path
1295 build_config = _build_config 1389 build_config = _build_config
1296 android_manifest = _android_manifest 1390 android_manifest = _android_manifest
1297 1391
1392 deps = _chromium_linker_dep
1298 if (defined(invoker.deps)) { 1393 if (defined(invoker.deps)) {
1299 deps = invoker.deps 1394 deps += invoker.deps
1300 } 1395 }
1301 1396
1302 if (defined(invoker.apk_under_test)) { 1397 if (defined(invoker.apk_under_test)) {
1303 apk_under_test = invoker.apk_under_test 1398 apk_under_test = invoker.apk_under_test
1304 } 1399 }
1305 1400
1306 native_libs = _native_libs 1401 native_libs = _native_libs
1307 } 1402 }
1308 1403
1309 final_deps = [] 1404 final_deps = []
1310 1405
1311 final_deps += [ ":${_template_name}__process_resources" ] 1406 process_resources_target = "${_template_name}__process_resources"
1312 process_resources("${_template_name}__process_resources") { 1407 final_deps += [ ":$process_resources_target" ]
1408 process_resources(process_resources_target) {
1313 srcjar_path = "${target_gen_dir}/${target_name}.srcjar" 1409 srcjar_path = "${target_gen_dir}/${target_name}.srcjar"
1314 r_text_path = "${target_gen_dir}/${target_name}_R.txt" 1410 r_text_path = "${target_gen_dir}/${target_name}_R.txt"
1315 android_manifest = _android_manifest 1411 android_manifest = _android_manifest
1316 resource_dirs = [ "//build/android/ant/empty/res" ] 1412 resource_dirs = [ "//build/android/ant/empty/res" ]
1317 zip_path = resources_zip_path 1413 zip_path = resources_zip_path
1414 all_resources_zip_path = _all_resources_zip_path
1318 generate_constant_ids = true 1415 generate_constant_ids = true
1319 build_config = _build_config
1320 1416
1321 if (defined(invoker.include_all_resources)) { 1417 if (defined(invoker.include_all_resources)) {
1322 include_all_resources = invoker.include_all_resources 1418 include_all_resources = invoker.include_all_resources
1323 } 1419 }
1420
1421 build_config = _build_config
1422 deps = [
1423 ":$build_config_target",
1424 ]
1425 if (defined(invoker.deps)) {
1426 deps += invoker.deps
1427 }
1324 } 1428 }
1325 _srcjar_deps += [ ":${_template_name}__process_resources" ] 1429 _srcjar_deps += [ ":$process_resources_target" ]
1326 1430
1327 if (_native_libs != []) { 1431 if (_native_libs != []) {
1328 _enable_chromium_linker_tests = false 1432 _enable_chromium_linker_tests = false
1329 if (defined(invoker.enable_chromium_linker_tests)) { 1433 if (defined(invoker.enable_chromium_linker_tests)) {
1330 _enable_chromium_linker_tests = invoker.enable_chromium_linker_tests 1434 _enable_chromium_linker_tests = invoker.enable_chromium_linker_tests
1331 } 1435 }
1332 1436
1333 java_cpp_template("${_template_name}__native_libraries_java") { 1437 java_cpp_template("${_template_name}__native_libraries_java") {
1334 package_name = "org/chromium/base/library_loader" 1438 package_name = "org/chromium/base/library_loader"
1335 sources = [ 1439 sources = [
1336 "//base/android/java/templates/NativeLibraries.template", 1440 "//base/android/java/templates/NativeLibraries.template",
1337 ] 1441 ]
1338 inputs = [ 1442 inputs = [
1339 _build_config, 1443 _build_config,
1340 ] 1444 ]
1445 deps = [
1446 ":$build_config_target",
1447 ]
1341 1448
1342 defines = [ 1449 defines = [
1343 "NATIVE_LIBRARIES_LIST=" + 1450 "NATIVE_LIBRARIES_LIST=" +
1344 "@FileArg($_rebased_build_config:native:java_libraries_list)", 1451 "@FileArg($_rebased_build_config:native:java_libraries_list)",
1345 "NATIVE_LIBRARIES_VERSION_NUMBER=\"$_native_lib_version_name\"", 1452 "NATIVE_LIBRARIES_VERSION_NUMBER=\"$_native_lib_version_name\"",
1346 ] 1453 ]
1347 if (_use_chromium_linker) { 1454 if (_use_chromium_linker) {
1348 defines += [ "ENABLE_CHROMIUM_LINKER" ] 1455 defines += [ "ENABLE_CHROMIUM_LINKER" ]
1349 } 1456 }
1350 if (_load_library_from_apk) { 1457 if (_load_library_from_apk) {
1351 defines += [ "ENABLE_CHROMIUM_LINKER_LIBRARY_IN_ZIP_FILE" ] 1458 defines += [ "ENABLE_CHROMIUM_LINKER_LIBRARY_IN_ZIP_FILE" ]
1352 } 1459 }
1353 if (_enable_chromium_linker_tests) { 1460 if (_enable_chromium_linker_tests) {
1354 defines += [ "ENABLE_CHROMIUM_LINKER_TESTS" ] 1461 defines += [ "ENABLE_CHROMIUM_LINKER_TESTS" ]
1355 } 1462 }
1356 } 1463 }
1357 _srcjar_deps += [ ":${_template_name}__native_libraries_java" ] 1464 _srcjar_deps += [ ":${_template_name}__native_libraries_java" ]
1358 } 1465 }
1359 1466
1360 final_deps += [ ":${_template_name}__java" ] 1467 java_target = "${_template_name}__java"
1361 java_library_impl("${_template_name}__java") { 1468 final_deps += [ ":$java_target" ]
1469 java_library_impl(java_target) {
1362 supports_android = true 1470 supports_android = true
1363 requires_android = true 1471 requires_android = true
1364 override_build_config = _build_config 1472 override_build_config = _build_config
1473 deps = [
1474 ":$build_config_target",
1475 ]
1476
1365 android_manifest = _android_manifest 1477 android_manifest = _android_manifest
1366 chromium_code = true 1478 chromium_code = true
1367 if (defined(invoker.java_files)) { 1479 if (defined(invoker.java_files)) {
1368 java_files = invoker.java_files 1480 java_files = invoker.java_files
1369 } else if (defined(invoker.DEPRECATED_java_in_dir)) { 1481 } else if (defined(invoker.DEPRECATED_java_in_dir)) {
1370 DEPRECATED_java_in_dir = invoker.DEPRECATED_java_in_dir 1482 DEPRECATED_java_in_dir = invoker.DEPRECATED_java_in_dir
1371 } else { 1483 } else {
1372 java_files = [] 1484 java_files = []
1373 } 1485 }
1374 srcjar_deps = _srcjar_deps 1486 srcjar_deps = _srcjar_deps
1375 dex_path = base_path + ".dex.jar" 1487 dex_path = base_path + ".dex.jar"
1488
1489 if (defined(invoker.deps)) {
1490 deps += invoker.deps
1491 }
1376 } 1492 }
1377 1493
1378 if (_dist_jar_path != "") { 1494 if (_dist_jar_path != "") {
1379 final_deps += [ ":${_template_name}__create_dist_jar" ] 1495 create_dist_target = "${_template_name}__create_dist_jar"
1496 final_deps += [ ":$create_dist_target" ]
1380 1497
1381 # TODO(cjhopman): This is only ever needed to calculate the list of tests to 1498 # TODO(cjhopman): This is only ever needed to calculate the list of tests to
1382 # run. See build/android/pylib/instrumentation/test_jar.py. We should be 1499 # run. See build/android/pylib/instrumentation/test_jar.py. We should be
1383 # able to just do that calculation at build time instead. 1500 # able to just do that calculation at build time instead.
1384 action("${_template_name}__create_dist_jar") { 1501 action(create_dist_target) {
1385 script = "//build/android/gyp/create_dist_jar.py" 1502 script = "//build/android/gyp/create_dist_jar.py"
1386 depfile = "$target_gen_dir/$target_name.d" 1503 depfile = "$target_gen_dir/$target_name.d"
1387 inputs = [ 1504 inputs = [
1388 _build_config, 1505 _build_config,
1389 ] 1506 ]
1390 outputs = [ 1507 outputs = [
1391 depfile, 1508 depfile,
1392 _dist_jar_path, 1509 _dist_jar_path,
1393 ] 1510 ]
1394 args = [ 1511 args = [
1395 "--depfile", 1512 "--depfile",
1396 rebase_path(depfile, root_build_dir), 1513 rebase_path(depfile, root_build_dir),
1397 "--output", 1514 "--output",
1398 rebase_path(_dist_jar_path, root_build_dir), 1515 rebase_path(_dist_jar_path, root_build_dir),
1399 "--inputs=@FileArg($_rebased_build_config:dist_jar:dependency_jars)", 1516 "--inputs=@FileArg($_rebased_build_config:dist_jar:dependency_jars)",
1400 ] 1517 ]
1401 inputs += [ jar_path ] 1518 inputs += [ jar_path ]
1402 _rebased_jar_path = rebase_path([ jar_path ], root_build_dir) 1519 _rebased_jar_path = rebase_path([ jar_path ], root_build_dir)
1403 args += [ "--inputs=$_rebased_jar_path" ] 1520 args += [ "--inputs=$_rebased_jar_path" ]
1521 deps = [
1522 ":$build_config_target", # Generates the build config file.
1523 ":$java_target", # Generates the jar file.
1524 ]
1404 } 1525 }
1405 } 1526 }
1406 1527
1407 final_deps += [ ":${_template_name}__final_dex" ] 1528 final_deps += [ ":$final_dex_target_name" ]
1408 dex("${_template_name}__final_dex") { 1529 dex("$final_dex_target_name") {
1409 deps = [ 1530 deps = [
1410 ":${_template_name}__java", 1531 ":$build_config_target",
1532 ":$java_target",
1411 ] 1533 ]
1412 sources = [ 1534 sources = [
1413 jar_path, 1535 jar_path,
1414 ] 1536 ]
1415 inputs = [ 1537 inputs = [
1416 _build_config, 1538 _build_config,
1417 ] 1539 ]
1418 output = final_dex_path 1540 output = final_dex_path
1419 dex_arg_key = "${_rebased_build_config}:final_dex:dependency_dex_files" 1541 dex_arg_key = "${_rebased_build_config}:final_dex:dependency_dex_files"
1420 args = [ "--inputs=@FileArg($dex_arg_key)" ] 1542 args = [ "--inputs=@FileArg($dex_arg_key)" ]
1421 } 1543 }
1422 1544
1423 if (_native_libs != []) { 1545 if (_native_libs != []) {
1424 action("${_template_name}__prepare_native") { 1546 action("${_template_name}__prepare_native") {
1425 script = "//build/android/gyp/pack_arm_relocations.py" 1547 script = "//build/android/gyp/pack_arm_relocations.py"
1426 packed_libraries_dir = "$_native_libs_dir/$android_app_abi" 1548 packed_libraries_dir = "$_native_libs_dir/$android_app_abi"
1427 depfile = "$target_gen_dir/$target_name.d" 1549 depfile = "$target_gen_dir/$target_name.d"
1428 outputs = [ 1550 outputs = [
1429 depfile, 1551 depfile,
1430 ] 1552 ]
1431 inputs = [ _build_config ] + _native_libs 1553
1432 deps = [] 1554 inputs = _native_libs
1555 deps = _chromium_linker_dep
1556
1557 inputs += [ _build_config ]
1558 deps += [ ":$build_config_target" ]
1559
1433 skip_packing_list = [ 1560 skip_packing_list = [
1434 "gdbserver", 1561 "gdbserver",
1435 "libchromium_android_linker.so", 1562 "libchromium_android_linker.so",
1436 ] 1563 ]
1437 1564
1438 enable_packing_arg = 0 1565 enable_packing_arg = 0
1439 if (_enable_relocation_packing) { 1566 if (_enable_relocation_packing) {
1440 enable_packing_arg = 1 1567 enable_packing_arg = 1
1441 deps += [ relocation_packer_target ] 1568 deps += [ relocation_packer_target ]
1442 } 1569 }
1443 1570
1444 args = [ 1571 args = [
1445 "--depfile", 1572 "--depfile",
1446 rebase_path(depfile, root_build_dir), 1573 rebase_path(depfile, root_build_dir),
1447 "--enable-packing=$enable_packing_arg", 1574 "--enable-packing=$enable_packing_arg",
1448 "--has-relocations-with-addends=$relocations_have_addends",
1449 "--exclude-packing-list=$skip_packing_list", 1575 "--exclude-packing-list=$skip_packing_list",
1450 "--android-pack-relocations", 1576 "--android-pack-relocations",
1451 rebase_path(relocation_packer_exe, root_build_dir), 1577 rebase_path(relocation_packer_exe, root_build_dir),
1452 "--android-objcopy",
1453 rebase_path(android_objcopy, root_build_dir),
1454 "--stripped-libraries-dir", 1578 "--stripped-libraries-dir",
1455 rebase_path(root_build_dir, root_build_dir), 1579 rebase_path(root_build_dir, root_build_dir),
1456 "--packed-libraries-dir", 1580 "--packed-libraries-dir",
1457 rebase_path(packed_libraries_dir, root_build_dir), 1581 rebase_path(packed_libraries_dir, root_build_dir),
1458 "--libraries=@FileArg(${_rebased_build_config}:native:libraries)", 1582 "--libraries=@FileArg(${_rebased_build_config}:native:libraries)",
1459 "--clear-dir", 1583 "--clear-dir",
1460 ] 1584 ]
1461 1585
1586 if (defined(invoker.deps)) {
1587 deps += invoker.deps
1588 }
1589 if (defined(invoker.public_deps)) {
1590 public_deps = invoker.public_deps
1591 }
1592 if (defined(invoker.data_deps)) {
1593 data_deps = invoker.data_deps
1594 }
1595
1462 if (is_debug) { 1596 if (is_debug) {
1463 rebased_gdbserver = rebase_path([ android_gdbserver ], root_build_dir) 1597 rebased_gdbserver = rebase_path([ android_gdbserver ], root_build_dir)
1464 inputs += [ android_gdbserver ] 1598 inputs += [ android_gdbserver ]
1465 args += [ "--libraries=$rebased_gdbserver" ] 1599 args += [ "--libraries=$rebased_gdbserver" ]
1466 } 1600 }
1467 } 1601 }
1468 } 1602 }
1469 1603
1470 final_deps += [ ":${_template_name}__create" ] 1604 final_deps += [ ":${_template_name}__create" ]
1471 create_apk("${_template_name}__create") { 1605 create_apk("${_template_name}__create") {
1472 apk_path = _final_apk_path 1606 apk_path = _final_apk_path
1473 android_manifest = _android_manifest 1607 android_manifest = _android_manifest
1474 resources_zip = all_resources_zip_path 1608 resources_zip = _all_resources_zip_path
1475 dex_path = final_dex_path 1609 dex_path = final_dex_path
1476 load_library_from_apk = _load_library_from_apk 1610 load_library_from_apk = _load_library_from_apk
1611 create_density_splits = _create_density_splits
1477 1612
1478 version_code = "1" 1613 version_code = _version_code
1479 if (defined(invoker.version_code)) { 1614 version_name = _version_name
1480 version_code = invoker.version_code
1481 }
1482
1483 version_name = "Developer Build"
1484 if (defined(invoker.version_name)) {
1485 version_name = invoker.version_name
1486 }
1487 1615
1488 keystore_name = _keystore_name 1616 keystore_name = _keystore_name
1489 keystore_path = _keystore_path 1617 keystore_path = _keystore_path
1490 keystore_password = _keystore_password 1618 keystore_password = _keystore_password
1491 1619
1492 deps = [] 1620 # This target generates the input file _all_resources_zip_path.
1621 deps = [
1622 ":$process_resources_target",
1623 ":$final_dex_target_name",
1624 ]
1625 if (defined(invoker.deps)) {
1626 deps += invoker.deps
1627 }
1628
1493 if (defined(invoker.asset_location)) { 1629 if (defined(invoker.asset_location)) {
1494 asset_location = invoker.asset_location 1630 asset_location = invoker.asset_location
1495 1631
1496 # We don't know the exact dependencies that create the assets in 1632 # We don't know the exact dependencies that create the assets in
1497 # |asset_location|; we depend on all caller deps until a better solution 1633 # |asset_location|; we depend on all caller deps until a better solution
1498 # is figured out (http://crbug.com/433330). 1634 # is figured out (http://crbug.com/433330).
1499 if (defined(invoker.deps)) { 1635 if (defined(invoker.deps)) {
1500 deps += invoker.deps 1636 deps += invoker.deps
1501 } 1637 }
1502 } 1638 }
1503 1639
1504 if (_native_libs != []) { 1640 if (_native_libs != [] && !_create_abi_split) {
1505 native_libs_dir = _native_libs_dir 1641 native_libs_dir = _native_libs_dir
1506 deps += [ ":${_template_name}__prepare_native" ] 1642 deps += [ ":${_template_name}__prepare_native" ]
1507 } 1643 }
1508 } 1644 }
1509 1645
1646 if (_native_libs != [] && _create_abi_split) {
1647 _manifest_rule = "${_template_name}__split_manifest_abi_${android_app_abi}"
1648 generate_split_manifest(_manifest_rule) {
1649 main_manifest = _android_manifest
1650 out_manifest =
1651 "$gen_dir/split-manifests/${android_app_abi}/AndroidManifest.xml"
1652 split_name = "abi_${android_app_abi}"
1653 }
1654
1655 _apk_rule = "${_template_name}__split_apk_abi_${android_app_abi}"
1656 final_deps += [ ":$_apk_rule" ]
1657 create_apk(_apk_rule) {
1658 _split_paths = process_file_template(
1659 [ _final_apk_path ],
1660 "{{source_dir}}/{{source_name_part}}-abi-${android_app_abi}.apk")
1661 apk_path = _split_paths[0]
1662 base_path = "$gen_dir/$_apk_rule"
1663
1664 manifest_outputs = get_target_outputs(":${_manifest_rule}")
1665 android_manifest = manifest_outputs[1]
1666 load_library_from_apk = _load_library_from_apk
1667
1668 version_code = _version_code
1669 version_name = _version_name
1670
1671 keystore_name = _keystore_name
1672 keystore_path = _keystore_path
1673 keystore_password = _keystore_password
1674
1675 native_libs_dir = _native_libs_dir
1676 deps = [
1677 ":${_template_name}__prepare_native",
1678 ]
1679 }
1680 }
1681
1510 group(target_name) { 1682 group(target_name) {
1511 deps = final_deps 1683 deps = final_deps
1512 if (defined(invoker.datadeps)) { 1684 if (defined(invoker.data_deps)) {
1513 datadeps = invoker.datadeps 1685 data_deps = invoker.data_deps
1514 } 1686 }
1515 } 1687 }
1516 } 1688 }
1689
1690 # Declare an Android instrumentation test apk
1691 #
1692 # This target creates an Android instrumentation test apk.
1693 #
1694 # Variables
1695 # android_manifest: Path to AndroidManifest.xml.
1696 # data_deps: List of dependencies needed at runtime. These will be built but
1697 # won't change the generated .apk in any way (in fact they may be built
1698 # after the .apk is).
1699 # deps: List of dependencies. All Android java resources and libraries in the
1700 # "transitive closure" of these dependencies will be included in the apk.
1701 # Note: this "transitive closure" actually only includes such targets if
1702 # they are depended on through android_library or android_resources targets
1703 # (and so not through builtin targets like 'action', 'group', etc).
1704 # java_files: List of .java files to include in the apk.
1705 # srcjar_deps: List of srcjar dependencies. The .java files in the srcjars
1706 # will be added to java_files and be included in this apk.
1707 # apk_name: Name for final apk.
1708 # final_apk_path: Path to final built apk. Default is
1709 # $root_out_dir/apks/$apk_name.apk. Setting this will override apk_name.
1710 # native_libs: List paths of native libraries to include in this apk. If these
1711 # libraries depend on other shared_library targets, those dependencies will
1712 # also be included in the apk.
1713 # apk_under_test: The apk being tested.
1714 # isolate_file: Isolate file containing the list of test data dependencies.
1715 #
1716 # DEPRECATED_java_in_dir: Directory containing java files. All .java files in
1717 # this directory will be included in the library. This is only supported to
1718 # ease the gyp->gn conversion and will be removed in the future.
1719 #
1720 # Example
1721 # instrumentation_test_apk("foo_test_apk") {
1722 # android_manifest = "AndroidManifest.xml"
1723 # apk_name = "FooTest"
1724 # apk_under_test = "Foo"
1725 # java_files = [
1726 # "android/org/chromium/foo/FooTestCase.java",
1727 # "android/org/chromium/foo/FooExampleTest.java",
1728 # ]
1729 # deps = [
1730 # ":foo_test_support_java"
1731 # ]
1732 # }
1733 template("instrumentation_test_apk") {
1734 set_sources_assignment_filter([])
1735 testonly = true
1736 _template_name = target_name
1737
1738 if (defined(invoker.apk_name)) {
1739 test_runner_data_dep = [ ":${_template_name}__test_runner_script" ]
1740 test_runner_script("${_template_name}__test_runner_script") {
1741 test_name = invoker.target_name
1742 test_type = "instrumentation"
1743 test_apk = invoker.apk_name
1744 if (defined(invoker.isolate_file)) {
1745 isolate_file = invoker.isolate_file
1746 }
1747 }
1748 }
1749
1750 android_apk(target_name) {
1751 if (defined(invoker.android_manifest)) {
1752 android_manifest = invoker.android_manifest
1753 }
1754 data_deps = [
1755 "//testing/android/driver:driver_apk",
1756 "//tools/android/forwarder2",
1757 "//tools/android/md5sum",
1758 ]
1759 if (defined(test_runner_data_dep)) {
1760 data_deps += test_runner_data_dep
1761 }
1762 if (defined(invoker.data_deps)) {
1763 data_deps += invoker.data_deps
1764 }
1765 deps = [
1766 "//testing/android/broker:broker_java",
1767 ]
1768 if (defined(invoker.deps)) {
1769 deps += invoker.deps
1770 }
1771 if (defined(invoker.java_files)) {
1772 java_files = invoker.java_files
1773 }
1774 if (defined(invoker.srcjar_deps)) {
1775 srcjar_deps = invoker.srcjar_deps
1776 }
1777 if (defined(invoker.apk_name)) {
1778 apk_name = invoker.apk_name
1779 }
1780 if (defined(invoker.final_apk_path)) {
1781 final_apk_path = invoker.final_apk_path
1782 }
1783 if (defined(invoker.native_libs)) {
1784 native_libs = invoker.native_libs
1785 }
1786 if (defined(invoker.apk_under_test)) {
1787 apk_under_test = invoker.apk_under_test
1788 }
1789 if (defined(invoker.DEPRECATED_java_in_dir)) {
1790 DEPRECATED_java_in_dir = invoker.DEPRECATED_java_in_dir
1791 }
1792 }
1793 }
1517 1794
1518 # Declare an Android gtest apk 1795 # Declare an Android gtest apk
1519 # 1796 #
1520 # This target creates an Android apk for running gtest-based unittests. 1797 # This target creates an Android apk for running gtest-based unittests.
1521 # 1798 #
1522 # Variables 1799 # Variables
1523 # deps: Specifies the dependencies of this target. These will be passed to 1800 # deps: Specifies the dependencies of this target. These will be passed to
1524 # the underlying android_apk invocation and should include the java and 1801 # the underlying android_apk invocation and should include the java and
1525 # resource dependencies of the apk. 1802 # resource dependencies of the apk.
1526 # unittests_dep: This should be the label of the gtest native target. This 1803 # unittests_dep: This should be the label of the gtest native target. This
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1558 1835
1559 if (defined(invoker.apk_name)) { 1836 if (defined(invoker.apk_name)) {
1560 apk_name = invoker.apk_name 1837 apk_name = invoker.apk_name
1561 } else { 1838 } else {
1562 apk_name = test_suite_name 1839 apk_name = test_suite_name
1563 } 1840 }
1564 1841
1565 android_apk(target_name) { 1842 android_apk(target_name) {
1566 final_apk_path = "$root_build_dir/${apk_name}_apk/${apk_name}-debug.apk" 1843 final_apk_path = "$root_build_dir/${apk_name}_apk/${apk_name}-debug.apk"
1567 java_files = [ 1844 java_files = [
1845 "//testing/android/native_test/java/src/org/chromium/native_test/NativeBro wserTestActivity.java",
1568 "//testing/android/native_test/java/src/org/chromium/native_test/NativeTes tActivity.java", 1846 "//testing/android/native_test/java/src/org/chromium/native_test/NativeTes tActivity.java",
1847 "//testing/android/native_test/java/src/org/chromium/native_test/NativeUni tTestActivity.java",
1569 "//testing/android/native_test/java/src/org/chromium/native_test/NativeTes tInstrumentationTestRunner.java", 1848 "//testing/android/native_test/java/src/org/chromium/native_test/NativeTes tInstrumentationTestRunner.java",
1570 ] 1849 ]
1571 android_manifest = "//testing/android/native_test/java/AndroidManifest.xml" 1850 android_manifest = "//testing/android/native_test/java/AndroidManifest.xml"
1572 native_libs = [ unittests_binary ] 1851 native_libs = [ unittests_binary ]
1573 if (defined(invoker.asset_location)) { 1852 if (defined(invoker.asset_location)) {
1574 asset_location = invoker.asset_location 1853 asset_location = invoker.asset_location
1575 } 1854 }
1576 deps = [ 1855 deps = [
1577 "//base:base_java", 1856 "//base:base_java",
1578 "//build/android/pylib/remote/device/dummy:remote_device_dummy_apk", 1857 "//build/android/pylib/remote/device/dummy:remote_device_dummy_apk",
1579 "//testing/android/appurify_support:appurify_support_java", 1858 "//testing/android/appurify_support:appurify_support_java",
1580 ] 1859 ]
1581 if (defined(invoker.deps)) { 1860 if (defined(invoker.deps)) {
1582 deps += invoker.deps 1861 deps += invoker.deps
1583 } 1862 }
1584 datadeps = [ 1863 data_deps = [ "//tools/android/md5sum" ]
1585 "//tools/android/md5sum",
1586 ]
1587 if (host_os == "linux") { 1864 if (host_os == "linux") {
1588 datadeps += [ "//tools/android/forwarder2" ] 1865 data_deps += [ "//tools/android/forwarder2" ]
1589 } 1866 }
1590 if (defined(invoker.datadeps)) { 1867 if (defined(invoker.data_deps)) {
1591 datadeps += invoker.datadeps 1868 data_deps += invoker.data_deps
1592 } 1869 }
1593 } 1870 }
1594 } 1871 }
1595 1872
1596 # Generate .java files from .aidl files. 1873 # Generate .java files from .aidl files.
1597 # 1874 #
1598 # This target will store the .java files in a srcjar and should be included in 1875 # This target will store the .java files in a srcjar and should be included in
1599 # an android_library or android_apk's srcjar_deps. 1876 # an android_library or android_apk's srcjar_deps.
1600 # 1877 #
1601 # Variables 1878 # Variables
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1680 # 1957 #
1681 # Variables 1958 # Variables
1682 # dist_dir: Directory for the exe and libraries. Everything in this directory 1959 # dist_dir: Directory for the exe and libraries. Everything in this directory
1683 # will be deleted before copying in the exe and libraries. 1960 # will be deleted before copying in the exe and libraries.
1684 # binary: Path to (stripped) executable. 1961 # binary: Path to (stripped) executable.
1685 # 1962 #
1686 # Example 1963 # Example
1687 # create_native_executable_dist("foo_dist") { 1964 # create_native_executable_dist("foo_dist") {
1688 # dist_dir = "$root_build_dir/foo_dist" 1965 # dist_dir = "$root_build_dir/foo_dist"
1689 # binary = "$root_build_dir/exe.stripped/foo" 1966 # binary = "$root_build_dir/exe.stripped/foo"
1967 # deps = [ ":the_thing_that_makes_foo" ]
1690 # } 1968 # }
1691 template("create_native_executable_dist") { 1969 template("create_native_executable_dist") {
1692 set_sources_assignment_filter([]) 1970 set_sources_assignment_filter([])
1693 if (defined(invoker.testonly)) { 1971 if (defined(invoker.testonly)) {
1694 testonly = invoker.testonly 1972 testonly = invoker.testonly
1695 } 1973 }
1696 1974
1697 dist_dir = invoker.dist_dir 1975 dist_dir = invoker.dist_dir
1698 binary = invoker.binary 1976 binary = invoker.binary
1699 final_deps = []
1700 template_name = target_name 1977 template_name = target_name
1701 1978
1702 libraries_list = 1979 libraries_list =
1703 "${target_gen_dir}/${template_name}_library_dependencies.list" 1980 "${target_gen_dir}/${template_name}_library_dependencies.list"
1704 1981
1705 # TODO(gyp) 1982 # TODO(gyp)
1706 #'dependencies': [ 1983 #'dependencies': [
1707 #'<(DEPTH)/build/android/setup.gyp:copy_system_libraries', 1984 #'<(DEPTH)/build/android/setup.gyp:copy_system_libraries',
1708 #], 1985 #],
1709 1986
1987 find_deps_target_name = "${template_name}__find_library_dependencies"
1988 copy_target_name = "${template_name}__copy_libraries_and_exe"
1989
1710 stripped_libraries_dir = "$root_build_dir/lib.stripped" 1990 stripped_libraries_dir = "$root_build_dir/lib.stripped"
1711 final_deps += [ ":${template_name}__find_library_dependencies" ] 1991 action(find_deps_target_name) {
1712 action("${template_name}__find_library_dependencies") { 1992 visibility = [ ":$copy_target_name" ]
1993
1713 script = "//build/android/gyp/write_ordered_libraries.py" 1994 script = "//build/android/gyp/write_ordered_libraries.py"
1714 depfile = "$target_gen_dir/$target_name.d" 1995 depfile = "$target_gen_dir/$target_name.d"
1715 inputs = [ 1996 inputs = [
1716 binary, 1997 binary,
1717 android_readelf, 1998 android_readelf,
1718 ] 1999 ]
1719 outputs = [ 2000 outputs = [
1720 depfile, 2001 depfile,
1721 libraries_list, 2002 libraries_list,
1722 ] 2003 ]
1723 rebased_binaries = rebase_path([ binary ], root_build_dir) 2004 rebased_binaries = rebase_path([ binary ], root_build_dir)
1724 args = [ 2005 args = [
1725 "--depfile", 2006 "--depfile",
1726 rebase_path(depfile, root_build_dir), 2007 rebase_path(depfile, root_build_dir),
1727 "--input-libraries=$rebased_binaries", 2008 "--input-libraries=$rebased_binaries",
1728 "--libraries-dir", 2009 "--libraries-dir",
1729 rebase_path(stripped_libraries_dir, root_build_dir), 2010 rebase_path(stripped_libraries_dir, root_build_dir),
1730 "--output", 2011 "--output",
1731 rebase_path(libraries_list, root_build_dir), 2012 rebase_path(libraries_list, root_build_dir),
1732 "--readelf", 2013 "--readelf",
1733 rebase_path(android_readelf, root_build_dir), 2014 rebase_path(android_readelf, root_build_dir),
1734 ] 2015 ]
2016 if (defined(invoker.deps)) {
2017 deps = invoker.deps
2018 }
1735 } 2019 }
1736 2020
1737 final_deps += [ ":${template_name}__copy_libraries_and_exe" ] 2021 copy_ex(copy_target_name) {
1738 copy_ex("${template_name}__copy_libraries_and_exe") { 2022 visibility = [ ":$template_name" ]
2023
1739 clear_dir = true 2024 clear_dir = true
1740 inputs = [ 2025 inputs = [
1741 binary, 2026 binary,
1742 libraries_list, 2027 libraries_list,
1743 ] 2028 ]
1744 dest = dist_dir 2029 dest = dist_dir
1745 rebased_binaries_list = rebase_path([ binary ], root_build_dir) 2030 rebased_binaries_list = rebase_path([ binary ], root_build_dir)
1746 rebased_libraries_list = rebase_path(libraries_list, root_build_dir) 2031 rebased_libraries_list = rebase_path(libraries_list, root_build_dir)
1747 args = [ 2032 args = [
1748 "--files=$rebased_binaries_list", 2033 "--files=$rebased_binaries_list",
1749 "--files=@FileArg($rebased_libraries_list:libraries)", 2034 "--files=@FileArg($rebased_libraries_list:libraries)",
1750 ] 2035 ]
2036
2037 deps = [
2038 ":$find_deps_target_name",
2039 ]
2040 if (defined(invoker.deps)) {
2041 deps += invoker.deps
2042 }
1751 } 2043 }
1752 2044
1753 group(target_name) { 2045 group(template_name) {
1754 deps = final_deps 2046 if (defined(invoker.visibility)) {
2047 visibility = invoker.visibility
2048 }
2049 deps = [
2050 ":$copy_target_name",
2051 ]
1755 } 2052 }
1756 } 2053 }
1757 2054
1758 # Compile a protocol buffer to java. 2055 # Compile a protocol buffer to java.
1759 # 2056 #
1760 # This generates java files from protocol buffers and creates an Android library 2057 # This generates java files from protocol buffers and creates an Android library
1761 # containing the classes. 2058 # containing the classes.
1762 # 2059 #
1763 # Variables 2060 # Variables
1764 # sources: Paths to .proto files to compile. 2061 # sources: Paths to .proto files to compile.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1815 template("uiautomator_test") { 2112 template("uiautomator_test") {
1816 set_sources_assignment_filter([]) 2113 set_sources_assignment_filter([])
1817 if (defined(invoker.testonly)) { 2114 if (defined(invoker.testonly)) {
1818 testonly = invoker.testonly 2115 testonly = invoker.testonly
1819 } 2116 }
1820 assert(target_name != "") 2117 assert(target_name != "")
1821 assert(invoker.deps != [] || true) 2118 assert(invoker.deps != [] || true)
1822 group(target_name) { 2119 group(target_name) {
1823 } 2120 }
1824 } 2121 }
OLDNEW
« no previous file with comments | « build/config/android/internal_rules.gni ('k') | build/config/arm.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698