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

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

Issue 294323002: Add generate_jar_jni template (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase (+fix specified output file) Created 6 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 | Annotate | Revision Log
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("config.gni")
5 import("internal_rules.gni") 6 import("internal_rules.gni")
6 7
7 # Declare a jni target 8 # Declare a jni target
8 # 9 #
9 # This target generates the native jni bindings for a set of .java files. 10 # This target generates the native jni bindings for a set of .java files.
10 # 11 #
11 # See base/android/jni_generator/jni_generator.py for more info about the 12 # See base/android/jni_generator/jni_generator.py for more info about the
12 # format of generating JNI bindings. 13 # format of generating JNI bindings.
13 # 14 #
14 # Variables 15 # Variables
15 # sources: list of .java files to generate jni for 16 # sources: list of .java files to generate jni for
16 # jni_package: subdirectory path for generated bindings 17 # jni_package: subdirectory path for generated bindings
17 # 18 #
18 # Example 19 # Example
19 # generate_jni("foo_jni") { 20 # generate_jni("foo_jni") {
20 # sources = [ 21 # sources = [
21 # "android/java/src/org/chromium/foo/Foo.java", 22 # "android/java/src/org/chromium/foo/Foo.java",
22 # "android/java/src/org/chromium/foo/FooUtil.java", 23 # "android/java/src/org/chromium/foo/FooUtil.java",
23 # ] 24 # ]
24 # jni_package = "foo" 25 # jni_package = "foo"
25 # } 26 # }
26 template("generate_jni") { 27 template("generate_jni") {
27 assert(defined(invoker.sources)) 28 assert(defined(invoker.sources))
28 assert(defined(invoker.jni_package)) 29 assert(defined(invoker.jni_package))
29 jni_package = invoker.jni_package 30 jni_package = invoker.jni_package
30 base_output_dir = "${root_gen_dir}/${target_name}/${jni_package}" 31 base_output_dir = "${root_gen_dir}/${target_name}/${jni_package}"
31 jni_output_dir = "${base_output_dir}/jni" 32 jni_output_dir = "${base_output_dir}/jni"
32 33
33 jni_generator_includes = 34 jni_generator_include = "//base/android/jni_generator/jni_generator_helper.h"
34 rebase_path("//base/android/jni_generator/jni_generator_helper.h")
35 35
36 config("jni_includes_${target_name}") { 36 foreach_target_name = "${target_name}__jni_gen"
37 include_dirs = [ base_output_dir ] 37 action_foreach(foreach_target_name) {
38 }
39
40 action_foreach(target_name) {
41 script = "//base/android/jni_generator/jni_generator.py" 38 script = "//base/android/jni_generator/jni_generator.py"
42 direct_dependent_configs = [ ":jni_includes_${target_name}" ]
43 sources = invoker.sources 39 sources = invoker.sources
40 source_prereqs = [ jni_generator_include ]
44 outputs = [ 41 outputs = [
45 "${jni_output_dir}/{{source_name_part}}_jni.h" 42 "${jni_output_dir}/{{source_name_part}}_jni.h"
46 ] 43 ]
47 44
48 args = [ 45 args = [
49 "--input_file={{source}}", 46 "--input_file={{source}}",
50 "--optimize_generation=1", 47 "--optimize_generation=1",
51 "--ptr_type=long", 48 "--ptr_type=long",
52 "--output_dir", rebase_path(jni_output_dir), 49 "--output_dir", rebase_path(jni_output_dir, root_build_dir),
53 "--includes=${jni_generator_includes}", 50 "--includes", rebase_path(jni_generator_include, "//"),
54 ] 51 ]
55 if (defined(invoker.jni_generator_jarjar_file)) { 52 if (defined(invoker.jni_generator_jarjar_file)) {
56 args += [ 53 args += [
57 "--jarjar", rebase_path(jni_generator_jarjar_file) 54 "--jarjar", rebase_path(jni_generator_jarjar_file, root_build_dir),
58 ] 55 ]
59 } 56 }
60 } 57 }
58
59 config("jni_includes_${target_name}") {
60 include_dirs = [ base_output_dir ]
61 }
62
63 group(target_name) {
64 deps = [ ":$foreach_target_name" ]
65 direct_dependent_configs = [ ":jni_includes_${target_name}" ]
66
67 if (defined(invoker.deps)) {
68 deps += invoker.deps
69 }
70 if (defined(invoker.forward_dependent_configs_from)) {
71 forward_dependent_configs_from = invoker.forward_dependent_configs_from
72 }
73 }
61 } 74 }
62 75
76
77 # Declare a jni target for a prebuilt jar
78 #
79 # This target generates the native jni bindings for a set of classes in a .jar.
80 #
81 # See base/android/jni_generator/jni_generator.py for more info about the
82 # format of generating JNI bindings.
83 #
84 # Variables
85 # classes: list of .class files in the jar to generate jni for. These should
86 # include the full path to the .class file.
87 # jni_package: subdirectory path for generated bindings
88 # jar_file: the path to the .jar. If not provided, will default to the sdk's
89 # android.jar
90 #
91 # Example
92 # generate_jar_jni("foo_jni") {
93 # classes = [
94 # "android/view/Foo.class",
95 # ]
96 # jni_package = "foo"
97 # }
98 template("generate_jar_jni") {
99 assert(defined(invoker.classes))
100 assert(defined(invoker.jni_package))
101
102 if (defined(invoker.jar_file)) {
103 jar_file = invoker.jar_file
104 } else {
105 jar_file = android_sdk_jar
106 }
107
108 jni_package = invoker.jni_package
109 base_output_dir = "${root_gen_dir}/${target_name}/${jni_package}"
110 jni_output_dir = "${base_output_dir}/jni"
111
112 jni_generator_include =
113 rebase_path("//base/android/jni_generator/jni_generator_helper.h",
114 root_build_dir)
115
116 # TODO(cjhopman): make jni_generator.py support generating jni for multiple
117 # .class files from a .jar.
118 jni_actions = []
119 foreach(class, invoker.classes) {
120 classname_list = process_file_template(
121 [class], "{{source_name_part}}")
122 classname = classname_list[0]
123 jni_target_name = "${target_name}__jni_${classname}"
124 jni_actions += [ ":$jni_target_name" ]
125 action(jni_target_name) {
126 script = "//base/android/jni_generator/jni_generator.py"
127 sources = [
128 jni_generator_include,
129 jar_file,
130 ]
131 outputs = [
132 "${jni_output_dir}/${classname}_jni.h"
133 ]
134
135 args = [
136 "--jar_file", rebase_path(jar_file, root_build_dir),
137 "--input_file", class,
138 "--optimize_generation=1",
139 "--ptr_type=long",
140 "--output_dir", rebase_path(jni_output_dir, root_build_dir),
141 "--includes", rebase_path(jni_generator_include, "//"),
142 ]
143 }
144 }
145
146 config("jni_includes_${target_name}") {
147 include_dirs = [ base_output_dir ]
148 }
149
150 group(target_name) {
151 deps = jni_actions
152 if (defined(invoker.deps)) {
153 deps += invoker.deps
154 }
155 if (defined(invoker.forward_dependent_configs_from)) {
156 forward_dependent_configs_from = invoker.forward_dependent_configs_from
157 }
158 direct_dependent_configs = [ ":jni_includes_${target_name}" ]
159 }
160 }
161
63 # Declare a target for c-preprocessor-generated java files 162 # Declare a target for c-preprocessor-generated java files
64 # 163 #
65 # This target generates java files using the host C pre-processor. Each file in 164 # This target generates java files using the host C pre-processor. Each file in
66 # sources will be compiled using the C pre-processor. If include_path is 165 # sources will be compiled using the C pre-processor. If include_path is
67 # specified, it will be passed (with --I) to the pre-processor. 166 # specified, it will be passed (with --I) to the pre-processor.
68 # 167 #
69 # This target will create a single .srcjar. Adding this target to a library 168 # This target will create a single .srcjar. Adding this target to a library
70 # target's srcjar_deps will make the generated java files be included in that 169 # target's srcjar_deps will make the generated java files be included in that
71 # library's final outputs. 170 # library's final outputs.
72 # 171 #
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 output = srcjar_path 231 output = srcjar_path
133 base_dir = base_gen_dir 232 base_dir = base_gen_dir
134 } 233 }
135 234
136 group(target_name) { 235 group(target_name) {
137 deps = [ 236 deps = [
138 ":${target_name}__zip_srcjar" 237 ":${target_name}__zip_srcjar"
139 ] 238 ]
140 } 239 }
141 } 240 }
OLDNEW
« no previous file with comments | « build/config/android/config.gni ('k') | ui/gl/BUILD.gn » ('j') | ui/snapshot/BUILD.gn » ('J')

Powered by Google App Engine
This is Rietveld 408576698