OLD | NEW |
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("//build/config/android/config.gni") | 5 import("//build/config/android/config.gni") |
6 import("//build/config/android/internal_rules.gni") | 6 import("//build/config/android/internal_rules.gni") |
7 import("//tools/grit/grit_rule.gni") | 7 import("//tools/grit/grit_rule.gni") |
8 | 8 |
9 assert(is_android) | 9 assert(is_android) |
10 | 10 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 if (defined(invoker.jar_file)) { | 111 if (defined(invoker.jar_file)) { |
112 jar_file = invoker.jar_file | 112 jar_file = invoker.jar_file |
113 } else { | 113 } else { |
114 jar_file = android_sdk_jar | 114 jar_file = android_sdk_jar |
115 } | 115 } |
116 | 116 |
117 jni_package = invoker.jni_package | 117 jni_package = invoker.jni_package |
118 base_output_dir = "${root_gen_dir}/${target_name}/${jni_package}" | 118 base_output_dir = "${root_gen_dir}/${target_name}/${jni_package}" |
119 jni_output_dir = "${base_output_dir}/jni" | 119 jni_output_dir = "${base_output_dir}/jni" |
120 | 120 |
121 jni_generator_include = | 121 jni_generator_include = "//base/android/jni_generator/jni_generator_helper.h" |
122 rebase_path("//base/android/jni_generator/jni_generator_helper.h", | |
123 root_build_dir) | |
124 | 122 |
125 # TODO(cjhopman): make jni_generator.py support generating jni for multiple | 123 # TODO(cjhopman): make jni_generator.py support generating jni for multiple |
126 # .class files from a .jar. | 124 # .class files from a .jar. |
127 jni_actions = [] | 125 jni_actions = [] |
128 foreach(class, invoker.classes) { | 126 foreach(class, invoker.classes) { |
129 classname_list = process_file_template( | 127 _classname_list = [] |
| 128 _classname_list = process_file_template( |
130 [class], "{{source_name_part}}") | 129 [class], "{{source_name_part}}") |
131 classname = classname_list[0] | 130 classname = _classname_list[0] |
132 jni_target_name = "${target_name}__jni_${classname}" | 131 jni_target_name = "${target_name}__jni_${classname}" |
133 jni_actions += [ ":$jni_target_name" ] | 132 jni_actions += [ ":$jni_target_name" ] |
134 action(jni_target_name) { | 133 action(jni_target_name) { |
135 depfile = "$target_gen_dir/$target_name.d" | 134 depfile = "$target_gen_dir/$target_name.d" |
136 script = "//base/android/jni_generator/jni_generator.py" | 135 script = "//base/android/jni_generator/jni_generator.py" |
137 sources = [ | 136 sources = [ |
138 jni_generator_include, | 137 jni_generator_include, |
139 jar_file, | 138 jar_file, |
140 ] | 139 ] |
141 outputs = [ | 140 outputs = [ |
142 depfile, | 141 depfile, |
143 "${jni_output_dir}/${classname}_jni.h" | 142 "${jni_output_dir}/${classname}_jni.h" |
144 ] | 143 ] |
145 | 144 |
146 args = [ | 145 args = [ |
147 "--depfile", rebase_path(depfile, root_build_dir), | 146 "--depfile", rebase_path(depfile, root_build_dir), |
148 "--jar_file", rebase_path(jar_file, root_build_dir), | 147 "--jar_file", rebase_path(jar_file, root_build_dir), |
149 "--input_file", class, | 148 "--input_file", class, |
150 "--optimize_generation=1", | 149 "--optimize_generation=1", |
151 "--ptr_type=long", | 150 "--ptr_type=long", |
152 "--output_dir", rebase_path(jni_output_dir, root_build_dir), | 151 "--output_dir", rebase_path(jni_output_dir, root_build_dir), |
153 "--includes", rebase_path(jni_generator_include, "//"), | 152 "--includes", rebase_path(jni_generator_include, root_build_dir), |
154 ] | 153 ] |
155 } | 154 } |
156 } | 155 } |
157 | 156 |
158 config("jni_includes_${target_name}") { | 157 config("jni_includes_${target_name}") { |
159 include_dirs = [ base_output_dir ] | 158 include_dirs = [ base_output_dir ] |
160 } | 159 } |
161 | 160 |
162 group(target_name) { | 161 group(target_name) { |
163 deps = jni_actions | 162 deps = jni_actions |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 # false. | 285 # false. |
287 # | 286 # |
288 # Example | 287 # Example |
289 # android_resources("foo_resources") { | 288 # android_resources("foo_resources") { |
290 # deps = [":foo_strings_grd"] | 289 # deps = [":foo_strings_grd"] |
291 # resource_dirs = ["res"] | 290 # resource_dirs = ["res"] |
292 # custom_package = "org.chromium.foo" | 291 # custom_package = "org.chromium.foo" |
293 # } | 292 # } |
294 template("android_resources") { | 293 template("android_resources") { |
295 assert(defined(invoker.resource_dirs)) | 294 assert(defined(invoker.resource_dirs)) |
| 295 assert(defined(invoker.android_manifest) || defined(invoker.custom_package)) |
296 | 296 |
297 base_path = "$target_gen_dir/$target_name" | 297 base_path = "$target_gen_dir/$target_name" |
298 zip_path = base_path + ".resources.zip" | 298 zip_path = base_path + ".resources.zip" |
299 srcjar_path = base_path + ".srcjar" | 299 srcjar_path = base_path + ".srcjar" |
300 build_config = base_path + ".build_config" | 300 build_config = base_path + ".build_config" |
301 | 301 |
302 write_build_config("${target_name}__build_config") { | 302 write_build_config("${target_name}__build_config") { |
303 type = "android_resources" | 303 type = "android_resources" |
304 resources_zip = zip_path | 304 resources_zip = zip_path |
305 srcjar = srcjar_path | 305 srcjar = srcjar_path |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
467 } | 467 } |
468 build_config = _build_config | 468 build_config = _build_config |
469 jar_path = _jar_path | 469 jar_path = _jar_path |
470 dex_path = _dex_path | 470 dex_path = _dex_path |
471 | 471 |
472 if (defined(invoker.proguard_preprocess) && invoker.proguard_preprocess) { | 472 if (defined(invoker.proguard_preprocess) && invoker.proguard_preprocess) { |
473 proguard_preprocess = true | 473 proguard_preprocess = true |
474 proguard_config = invoker.proguard_config | 474 proguard_config = invoker.proguard_config |
475 } | 475 } |
476 | 476 |
| 477 jar_excluded_patterns = [ |
| 478 "*/R.class", "*/R##*.class", |
| 479 "*/Manifest.class", "*/Manifest##*.class", |
| 480 ] |
477 if (defined(invoker.jar_excluded_patterns)) { | 481 if (defined(invoker.jar_excluded_patterns)) { |
478 jar_excluded_patterns = invoker.jar_excluded_patterns | 482 jar_excluded_patterns += invoker.jar_excluded_patterns |
479 } | 483 } |
480 | 484 |
481 if (defined(invoker.srcjar_deps)) { | 485 if (defined(invoker.srcjar_deps)) { |
482 srcjar_deps = invoker.srcjar_deps | 486 srcjar_deps = invoker.srcjar_deps |
483 } | 487 } |
484 } | 488 } |
485 } | 489 } |
486 | 490 |
487 | 491 |
488 # Declare an Android library target for a prebuilt jar | 492 # Declare an Android library target for a prebuilt jar |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
593 # ":foo_resources" | 597 # ":foo_resources" |
594 # ] | 598 # ] |
595 # srcjar_deps = [ | 599 # srcjar_deps = [ |
596 # ":foo_generated_enum" | 600 # ":foo_generated_enum" |
597 # ] | 601 # ] |
598 # native_libs = [ | 602 # native_libs = [ |
599 # native_lib_path | 603 # native_lib_path |
600 # ] | 604 # ] |
601 # } | 605 # } |
602 template("android_apk") { | 606 template("android_apk") { |
| 607 assert(defined(invoker.final_apk_path) || defined(invoker.apk_name)) |
603 gen_dir = "$target_gen_dir/$target_name" | 608 gen_dir = "$target_gen_dir/$target_name" |
604 base_path = "$gen_dir/$target_name" | 609 base_path = "$gen_dir/$target_name" |
605 build_config = "$base_path.build_config" | 610 build_config = "$base_path.build_config" |
606 resources_zip_path = "$base_path.resources.zip" | 611 resources_zip_path = "$base_path.resources.zip" |
607 all_resources_zip_path = "$base_path.resources.all.zip" | 612 all_resources_zip_path = "$base_path.resources.all.zip" |
608 resource_srcjar_path = "$base_path.resources.srcjar" | 613 resource_srcjar_path = "$base_path.resources.srcjar" |
609 jar_path = "$base_path.jar" | 614 jar_path = "$base_path.jar" |
610 final_dex_path = "$gen_dir/classes.dex" | 615 final_dex_path = "$gen_dir/classes.dex" |
611 _template_name = target_name | 616 _template_name = target_name |
| 617 _final_apk_path = "" |
| 618 if (defined(invoker.final_apk_path)) { |
| 619 _final_apk_path = invoker.final_apk_path |
| 620 } else if (defined(invoker.apk_name)) { |
| 621 _final_apk_path = "$root_build_dir/apks/" + invoker.apk_name + ".apk" |
| 622 } |
612 | 623 |
613 _native_lib_version_name = "" | |
614 | |
615 _use_chromium_linker = false | |
616 _enable_chromium_linker_tests = false | |
617 _load_library_from_apk = false | |
618 | |
619 _native_libs_dir = base_path + "/libs" | |
620 _native_libs = [] | 624 _native_libs = [] |
621 if (defined(invoker.native_libs)) { | 625 if (defined(invoker.native_libs)) { |
622 _native_libs = invoker.native_libs | 626 _native_libs = invoker.native_libs |
| 627 _native_libs_dir = base_path + "/libs" |
623 } | 628 } |
624 | 629 |
625 _keystore_path = android_default_keystore_path | 630 _keystore_path = android_default_keystore_path |
626 _keystore_name = android_default_keystore_name | 631 _keystore_name = android_default_keystore_name |
627 _keystore_password = android_default_keystore_password | 632 _keystore_password = android_default_keystore_password |
628 | 633 |
629 if (defined(invoker.keystore_path)) { | 634 if (defined(invoker.keystore_path)) { |
630 _keystore_path = invoker.keystore_path | 635 _keystore_path = invoker.keystore_path |
631 _keystore_name = invoker.keystore_name | 636 _keystore_name = invoker.keystore_name |
632 _keystore_password = invoker.keystore_password | 637 _keystore_password = invoker.keystore_password |
633 } | 638 } |
634 | 639 |
635 _srcjar_deps = [] | 640 _srcjar_deps = [] |
636 if (defined(invoker.srcjar_deps)) { | 641 if (defined(invoker.srcjar_deps)) { |
637 _srcjar_deps += invoker.srcjar_deps | 642 _srcjar_deps += invoker.srcjar_deps |
638 } | 643 } |
639 | 644 |
640 _rebased_build_config = rebase_path(build_config, root_build_dir) | 645 _rebased_build_config = rebase_path(build_config, root_build_dir) |
641 | 646 |
642 write_build_config("${target_name}__build_config") { | 647 write_build_config("${_template_name}__build_config") { |
643 type = "android_apk" | 648 type = "android_apk" |
644 srcjar = resource_srcjar_path | 649 srcjar = resource_srcjar_path |
645 dex_path = final_dex_path | 650 dex_path = final_dex_path |
646 resources_zip = resources_zip_path | 651 resources_zip = resources_zip_path |
647 | 652 |
648 if (defined(invoker.deps)) { | 653 if (defined(invoker.deps)) { |
649 deps = invoker.deps | 654 deps = invoker.deps |
650 } | 655 } |
651 if (defined(invoker.testonly)) { | 656 if (defined(invoker.testonly)) { |
652 testonly = invoker.testonly | 657 testonly = invoker.testonly |
653 } | 658 } |
654 | 659 |
655 native_libs = _native_libs | 660 native_libs = _native_libs |
656 } | 661 } |
657 | 662 |
658 final_deps = [] | 663 final_deps = [] |
659 | 664 |
660 final_deps += [":${target_name}__process_resources"] | 665 final_deps += [":${_template_name}__process_resources"] |
661 process_resources("${target_name}__process_resources") { | 666 process_resources("${_template_name}__process_resources") { |
662 android_manifest = invoker.android_manifest | 667 android_manifest = invoker.android_manifest |
663 | 668 |
664 resource_dirs = ["//build/android/ant/empty/res"] | 669 resource_dirs = ["//build/android/ant/empty/res"] |
665 zip_path = resources_zip_path | 670 zip_path = resources_zip_path |
666 srcjar_path = resource_srcjar_path | 671 srcjar_path = resource_srcjar_path |
667 | 672 |
668 generate_constant_ids = true | 673 generate_constant_ids = true |
669 } | 674 } |
670 | 675 |
671 java_cpp_template("${target_name}__native_libraries_java") { | 676 if (_native_libs != []) { |
672 package_name = "org/chromium/base/library_loader" | 677 _use_chromium_linker = false |
673 sources = [ | 678 _enable_chromium_linker_tests = false |
674 "//base/android/java/templates/NativeLibraries.template", | 679 _load_library_from_apk = false |
675 ] | 680 _native_lib_version_name = "" |
676 inputs = [ | |
677 build_config, | |
678 ] | |
679 | 681 |
680 defines = [ | 682 |
681 "NATIVE_LIBRARIES_LIST=" + | 683 java_cpp_template("${_template_name}__native_libraries_java") { |
682 "@FileArg($_rebased_build_config:native:java_libraries_list)", | 684 package_name = "org/chromium/base/library_loader" |
683 "NATIVE_LIBRARIES_VERSION_NUMBER=\"$_native_lib_version_name\"", | 685 sources = [ |
684 ] | 686 "//base/android/java/templates/NativeLibraries.template", |
685 if (_use_chromium_linker) { | 687 ] |
686 defines += ["ENABLED_CHROMIUM_LINKER"] | 688 inputs = [ |
| 689 build_config, |
| 690 ] |
| 691 |
| 692 defines = [ |
| 693 "NATIVE_LIBRARIES_LIST=" + |
| 694 "@FileArg($_rebased_build_config:native:java_libraries_list)", |
| 695 "NATIVE_LIBRARIES_VERSION_NUMBER=\"$_native_lib_version_name\"", |
| 696 ] |
| 697 if (_use_chromium_linker) { |
| 698 defines += ["ENABLED_CHROMIUM_LINKER"] |
| 699 } |
| 700 if (_load_library_from_apk) { |
| 701 defines += ["ENABLE_CHROMIUM_LINKER_LIBRARY_IN_ZIP_FILE"] |
| 702 } |
| 703 if (_enable_chromium_linker_tests) { |
| 704 defines += ["ENABLE_CHROMIUM_LINKER_TESTS"] |
| 705 } |
687 } | 706 } |
688 if (_load_library_from_apk) { | 707 _srcjar_deps += [ ":${_template_name}__native_libraries_java" ] |
689 defines += ["ENABLE_CHROMIUM_LINKER_LIBRARY_IN_ZIP_FILE"] | |
690 } | |
691 if (_enable_chromium_linker_tests) { | |
692 defines += ["ENABLE_CHROMIUM_LINKER_TESTS"] | |
693 } | |
694 } | 708 } |
695 _srcjar_deps += [ ":${target_name}__native_libraries_java" ] | |
696 | 709 |
697 rebased_build_config = rebase_path(build_config, root_build_dir) | 710 final_deps += [":${_template_name}__java"] |
698 | 711 android_java_library("${_template_name}__java") { |
699 final_deps += [":${target_name}__java"] | |
700 android_java_library("${target_name}__java") { | |
701 android_manifest = invoker.android_manifest | 712 android_manifest = invoker.android_manifest |
702 if (defined(invoker.java_files)) { | 713 if (defined(invoker.java_files)) { |
703 java_files = invoker.java_files | 714 java_files = invoker.java_files |
704 } else { | 715 } else { |
705 DEPRECATED_java_in_dir = invoker.DEPRECATED_java_in_dir | 716 DEPRECATED_java_in_dir = invoker.DEPRECATED_java_in_dir |
706 } | 717 } |
707 srcjar_deps = _srcjar_deps | 718 srcjar_deps = _srcjar_deps |
708 dex_path = base_path + ".dex.jar" | 719 dex_path = base_path + ".dex.jar" |
709 } | 720 } |
710 | 721 |
711 final_deps += [":${target_name}__final_dex"] | 722 final_deps += [":${_template_name}__final_dex"] |
712 dex("${target_name}__final_dex") { | 723 dex("${_template_name}__final_dex") { |
713 sources = [jar_path] | 724 sources = [jar_path] |
714 inputs = [build_config] | 725 inputs = [build_config] |
715 output = final_dex_path | 726 output = final_dex_path |
716 dex_arg_key = "${rebased_build_config}:apk_dex:dependency_dex_files" | 727 dex_arg_key = "${_rebased_build_config}:apk_dex:dependency_dex_files" |
717 args = ["--inputs=@FileArg($dex_arg_key)"] | 728 args = ["--inputs=@FileArg($dex_arg_key)"] |
718 } | 729 } |
719 | 730 |
720 if (_native_libs != []) { | 731 if (_native_libs != []) { |
721 copy_ex("${target_name}__prepare_native") { | 732 copy_ex("${_template_name}__prepare_native") { |
722 clear_dir = true | 733 clear_dir = true |
723 inputs = [build_config] | 734 inputs = [ |
| 735 build_config |
| 736 ] |
724 dest = "$_native_libs_dir/$android_app_abi" | 737 dest = "$_native_libs_dir/$android_app_abi" |
725 args = [ | 738 args = [ |
726 "--files=@FileArg(${rebased_build_config}:native:libraries)", | 739 "--files=@FileArg(${_rebased_build_config}:native:libraries)", |
727 ] | 740 ] |
728 if (is_debug) { | 741 if (is_debug) { |
729 rebased_gdbserver = rebase_path(android_gdbserver, root_build_dir) | 742 rebased_gdbserver = rebase_path(android_gdbserver, root_build_dir) |
730 args += [ | 743 args += [ |
731 "--files=[\"$rebased_gdbserver\"]" | 744 "--files=[\"$rebased_gdbserver\"]" |
732 ] | 745 ] |
733 } | 746 } |
734 } | 747 } |
735 } | 748 } |
736 | 749 |
737 final_deps += [":${target_name}__create"] | 750 final_deps += [":${_template_name}__create"] |
738 create_apk("${target_name}__create") { | 751 create_apk("${_template_name}__create") { |
739 apk_path = invoker.final_apk_path | 752 apk_path = _final_apk_path |
740 android_manifest = invoker.android_manifest | 753 android_manifest = invoker.android_manifest |
741 resources_zip = all_resources_zip_path | 754 resources_zip = all_resources_zip_path |
742 dex_path = final_dex_path | 755 dex_path = final_dex_path |
743 | 756 |
| 757 if (defined(invoker.asset_location)) { |
| 758 asset_location = invoker.asset_location |
| 759 } |
| 760 |
744 keystore_name = _keystore_name | 761 keystore_name = _keystore_name |
745 keystore_path = _keystore_path | 762 keystore_path = _keystore_path |
746 keystore_password = _keystore_password | 763 keystore_password = _keystore_password |
747 | 764 |
748 if (_native_libs != []) { | 765 if (_native_libs != []) { |
749 native_libs_dir = _native_libs_dir | 766 native_libs_dir = _native_libs_dir |
750 deps = [":${_template_name}__prepare_native"] | 767 deps = [":${_template_name}__prepare_native"] |
751 } | 768 } |
752 } | 769 } |
753 | 770 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
787 | 804 |
788 test_suite_name = get_label_info(invoker.unittests_dep, "name") | 805 test_suite_name = get_label_info(invoker.unittests_dep, "name") |
789 | 806 |
790 if (defined(invoker.unittests_binary)) { | 807 if (defined(invoker.unittests_binary)) { |
791 unittests_binary = root_out_dir + "/" + invoker.unittests_binary | 808 unittests_binary = root_out_dir + "/" + invoker.unittests_binary |
792 } else { | 809 } else { |
793 unittests_binary = root_out_dir + "/" + test_suite_name | 810 unittests_binary = root_out_dir + "/" + test_suite_name |
794 } | 811 } |
795 | 812 |
796 android_apk(target_name) { | 813 android_apk(target_name) { |
797 apk_name = test_suite_name | 814 _apk_name = test_suite_name |
798 final_apk_path = "$root_build_dir/${apk_name}_apk/${apk_name}-debug.apk" | 815 final_apk_path = "$root_build_dir/${_apk_name}_apk/${_apk_name}-debug.apk" |
799 java_files = [ | 816 java_files = [ |
800 "//testing/android/java/src/org/chromium/native_test/ChromeNativeTestActiv
ity.java" | 817 "//testing/android/java/src/org/chromium/native_test/ChromeNativeTestActiv
ity.java" |
801 ] | 818 ] |
802 android_manifest = "//testing/android/java/AndroidManifest.xml" | 819 android_manifest = "//testing/android/java/AndroidManifest.xml" |
803 unittests_outputs = [ unittests_binary ] | 820 unittests_outputs = [ unittests_binary ] |
804 native_libs = [unittests_outputs[0]] | 821 native_libs = [unittests_outputs[0]] |
805 if (defined(invoker.deps)) { | 822 if (defined(invoker.deps)) { |
806 deps = invoker.deps | 823 deps = invoker.deps |
807 } | 824 } |
808 testonly = true | 825 testonly = true |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
871 "//build/android/gyp/find.py", | 888 "//build/android/gyp/find.py", |
872 rebase_path([invoker.import_include], root_build_dir), | 889 rebase_path([invoker.import_include], root_build_dir), |
873 "list lines" | 890 "list lines" |
874 ) | 891 ) |
875 _java_files = rebase_path(_java_files_build_rel, ".", root_build_dir) | 892 _java_files = rebase_path(_java_files_build_rel, ".", root_build_dir) |
876 inputs += _java_files | 893 inputs += _java_files |
877 } | 894 } |
878 args += rebase_path(sources, root_build_dir) | 895 args += rebase_path(sources, root_build_dir) |
879 } | 896 } |
880 } | 897 } |
OLD | NEW |