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 | 6 |
7 assert(is_android) | 7 assert(is_android) |
8 | 8 |
9 | 9 |
10 rebased_android_sdk = rebase_path(android_sdk, root_build_dir) | 10 rebased_android_sdk = rebase_path(android_sdk, root_build_dir) |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
48 "--jar-path", rebase_path(jar_path, root_build_dir), | 48 "--jar-path", rebase_path(jar_path, root_build_dir), |
49 "--processed-config-path", rebase_path(config_path, root_build_dir), | 49 "--processed-config-path", rebase_path(config_path, root_build_dir), |
50 "--result-path", rebase_path(result_path, root_build_dir), | 50 "--result-path", rebase_path(result_path, root_build_dir), |
51 "--java-files=$rebased_java_files", | 51 "--java-files=$rebased_java_files", |
52 "--enable", | 52 "--enable", |
53 ] | 53 ] |
54 } | 54 } |
55 } | 55 } |
56 | 56 |
57 | 57 |
58 template("dex") { | |
59 if (defined(invoker.testonly)) { testonly = invoker.testonly } | |
60 | |
61 assert(defined(invoker.sources)) | |
62 assert(defined(invoker.output)) | |
63 action(target_name) { | |
64 script = "//build/android/gyp/dex.py" | |
65 depfile = "$target_gen_dir/$target_name.d" | |
66 sources = invoker.sources | |
67 outputs = [depfile, invoker.output] | |
68 if (defined(invoker.inputs)) { | |
69 inputs = invoker.inputs | |
70 } | |
71 | |
72 if (defined(invoker.deps)) { | |
73 deps = invoker.deps | |
74 } | |
75 | |
76 rebased_output = rebase_path(invoker.output, root_build_dir) | |
77 | |
78 args = [ | |
79 "--depfile", rebase_path(depfile, root_build_dir), | |
80 "--android-sdk-tools", rebased_android_sdk_build_tools, | |
81 "--dex-path", rebased_output, | |
82 ] | |
83 | |
84 if (defined(invoker.no_locals) && invoker.no_locals) { | |
85 args += [ | |
86 "--no-locals=1" | |
87 ] | |
88 } | |
89 | |
90 if (defined(invoker.args)) { | |
91 args += invoker.args | |
92 } | |
93 | |
94 args += rebase_path(invoker.sources, root_build_dir) | |
95 } | |
96 } | |
97 | |
98 | |
58 # Write the target's .build_config file. This is a json file that contains a | 99 # Write the target's .build_config file. This is a json file that contains a |
59 # dictionary of information about how to build this target (things that | 100 # dictionary of information about how to build this target (things that |
60 # require knowledge about this target's dependencies and cannot be calculated | 101 # require knowledge about this target's dependencies and cannot be calculated |
61 # at gn-time). There is a special syntax to add a value in that dictionary to | 102 # at gn-time). There is a special syntax to add a value in that dictionary to |
62 # an action/action_foreachs args: | 103 # an action/action_foreachs args: |
63 # --python-arg=@FileArg($rebased_build_config_path:key0:key1) | 104 # --python-arg=@FileArg($rebased_build_config_path:key0:key1) |
64 # At runtime, such an arg will be replaced by the value in the build_config. | 105 # At runtime, such an arg will be replaced by the value in the build_config. |
65 # See build/android/gyp/write_build_config.py and | 106 # See build/android/gyp/write_build_config.py and |
66 # build/android/gyp/util/build_utils.py:ExpandFileArgs | 107 # build/android/gyp/util/build_utils.py:ExpandFileArgs |
67 template("write_build_config") { | 108 template("write_build_config") { |
68 if (defined(invoker.testonly)) { testonly = invoker.testonly } | 109 if (defined(invoker.testonly)) { testonly = invoker.testonly } |
69 | 110 |
70 assert(defined(invoker.type)) | 111 assert(defined(invoker.type)) |
71 assert(defined(invoker.build_config)) | 112 assert(defined(invoker.build_config)) |
72 | 113 |
73 type = invoker.type | 114 type = invoker.type |
74 build_config = invoker.build_config | 115 build_config = invoker.build_config |
75 | 116 |
76 assert(type == "android_apk" || type == "android_library" || type == "android_ resources") | 117 assert(type == "android_apk" || type == "java_library" || type == "android_res ources") |
77 | 118 |
78 action(target_name) { | 119 action(target_name) { |
79 script = "//build/android/gyp/write_build_config.py" | 120 script = "//build/android/gyp/write_build_config.py" |
80 depfile = "$target_gen_dir/$target_name.d" | 121 depfile = "$target_gen_dir/$target_name.d" |
81 inputs = [] | 122 inputs = [] |
82 | 123 |
83 deps = [] | 124 deps = [] |
84 if (defined(invoker.deps)) { | 125 if (defined(invoker.deps)) { |
85 deps += invoker.deps | 126 deps += invoker.deps |
86 } | 127 } |
(...skipping 11 matching lines...) Expand all Loading... | |
98 build_config | 139 build_config |
99 ] | 140 ] |
100 | 141 |
101 args = [ | 142 args = [ |
102 "--type", type, | 143 "--type", type, |
103 "--depfile", rebase_path(depfile, root_build_dir), | 144 "--depfile", rebase_path(depfile, root_build_dir), |
104 "--possible-deps-configs=$rebase_possible_deps_configs", | 145 "--possible-deps-configs=$rebase_possible_deps_configs", |
105 "--build-config", rebase_path(build_config, root_build_dir), | 146 "--build-config", rebase_path(build_config, root_build_dir), |
106 ] | 147 ] |
107 | 148 |
108 if (type == "android_library" || type == "android_apk") { | 149 is_java_library = type == "java_library" |
150 is_apk = type == "android_apk" | |
151 is_android_resources = type == "android_resources" | |
152 | |
153 supports_android = (is_apk || is_android_resources || | |
154 (is_java_library && defined(invoker.supports_android) && | |
155 invoker.supports_android)) | |
156 requires_android = (is_apk || is_android_resources || | |
157 (is_java_library && defined(invoker.requires_android) && | |
158 invoker.requires_android)) | |
159 | |
160 assert(!requires_android || supports_android, "requires_android requires" + | |
161 " supports_android") | |
162 assert(is_java_library || true) | |
newt (away)
2014/11/03 22:12:44
why this assert?
cjhopman
2014/11/15 03:37:59
Added comment about why.
| |
163 assert(is_apk || true) | |
164 assert(is_android_resources || true) | |
165 | |
166 if (is_java_library || is_apk) { | |
109 args += [ | 167 args += [ |
110 "--jar-path", rebase_path(invoker.jar_path, root_build_dir), | 168 "--jar-path", rebase_path(invoker.jar_path, root_build_dir), |
169 ] | |
170 } | |
171 | |
172 if (is_apk || (is_java_library && supports_android)) { | |
173 args += [ | |
111 "--dex-path", rebase_path(invoker.dex_path, root_build_dir), | 174 "--dex-path", rebase_path(invoker.dex_path, root_build_dir), |
112 ] | 175 ] |
113 } | 176 } |
177 if (supports_android) { | |
178 args += [ "--supports-android" ] | |
179 } | |
180 if (requires_android) { | |
181 args += [ "--requires-android" ] | |
182 } | |
114 | 183 |
115 if (type == "android_resources" || type == "android_apk") { | 184 if (is_android_resources || is_apk) { |
116 assert(defined(invoker.resources_zip)) | 185 assert(defined(invoker.resources_zip)) |
117 args += [ | 186 args += [ |
118 "--resources-zip", rebase_path(invoker.resources_zip, root_build_dir), | 187 "--resources-zip", rebase_path(invoker.resources_zip, root_build_dir), |
119 ] | 188 ] |
120 if (defined(invoker.android_manifest)) { | 189 if (defined(invoker.android_manifest)) { |
121 inputs += [ | 190 inputs += [ |
122 invoker.android_manifest | 191 invoker.android_manifest |
123 ] | 192 ] |
124 args += [ | 193 args += [ |
125 "--android-manifest", rebase_path(invoker.android_manifest, root_build _dir), | 194 "--android-manifest", rebase_path(invoker.android_manifest, root_build _dir), |
126 ] | 195 ] |
127 } | 196 } |
128 if (defined(invoker.custom_package)) { | 197 if (defined(invoker.custom_package)) { |
129 args += [ | 198 args += [ |
130 "--package-name", invoker.custom_package | 199 "--package-name", invoker.custom_package |
131 ] | 200 ] |
132 } | 201 } |
133 } | 202 } |
134 | 203 |
135 if (type == "android_apk") { | 204 if (is_apk) { |
136 if (defined(invoker.native_libs)) { | 205 if (defined(invoker.native_libs)) { |
137 rebased_native_libs = rebase_path(invoker.native_libs, root_build_dir) | 206 rebased_native_libs = rebase_path(invoker.native_libs, root_build_dir) |
138 rebased_android_readelf = rebase_path(android_readelf, root_build_dir) | 207 rebased_android_readelf = rebase_path(android_readelf, root_build_dir) |
139 args += [ | 208 args += [ |
140 "--native-libs=$rebased_native_libs", | 209 "--native-libs=$rebased_native_libs", |
141 "--readelf-path=$rebased_android_readelf", | 210 "--readelf-path=$rebased_android_readelf", |
142 ] | 211 ] |
143 } | 212 } |
144 } | 213 } |
145 | 214 |
146 if (defined(invoker.srcjar)) { | 215 if (defined(invoker.srcjar)) { |
147 args += [ | 216 args += [ |
148 "--srcjar", rebase_path(invoker.srcjar, root_build_dir) | 217 "--srcjar", rebase_path(invoker.srcjar, root_build_dir) |
149 ] | 218 ] |
150 } | 219 } |
151 } | 220 } |
152 } | 221 } |
153 | 222 |
154 | 223 |
155 # Creates a zip archive of the inputs. | 224 template("process_java_prebuilt") { |
156 # If base_dir is provided, the archive paths will be relative to it. | |
157 template("zip") { | |
158 if (defined(invoker.testonly)) { testonly = invoker.testonly } | |
159 | |
160 assert(defined(invoker.inputs)) | |
161 assert(defined(invoker.output)) | |
162 | |
163 rebase_inputs = rebase_path(invoker.inputs, root_build_dir) | |
164 rebase_output = rebase_path(invoker.output, root_build_dir) | |
165 action(target_name) { | |
166 script = "//build/android/gn/zip.py" | |
167 depfile = "$target_gen_dir/$target_name.d" | |
168 inputs = invoker.inputs | |
169 outputs = [ | |
170 depfile, | |
171 invoker.output | |
172 ] | |
173 args = [ | |
174 "--depfile", rebase_path(depfile, root_build_dir), | |
175 "--inputs=$rebase_inputs", | |
176 "--output=$rebase_output", | |
177 ] | |
178 if (defined(invoker.base_dir)) { | |
179 args += [ | |
180 "--base-dir", rebase_path(invoker.base_dir, root_build_dir) | |
181 ] | |
182 } | |
183 } | |
184 } | |
185 | |
186 template("dex") { | |
187 if (defined(invoker.testonly)) { testonly = invoker.testonly } | |
188 | |
189 assert(defined(invoker.sources)) | |
190 assert(defined(invoker.output)) | |
191 action(target_name) { | |
192 script = "//build/android/gyp/dex.py" | |
193 depfile = "$target_gen_dir/$target_name.d" | |
194 sources = invoker.sources | |
195 outputs = [depfile, invoker.output] | |
196 if (defined(invoker.inputs)) { | |
197 inputs = invoker.inputs | |
198 } | |
199 | |
200 if (defined(invoker.deps)) { | |
201 deps = invoker.deps | |
202 } | |
203 | |
204 rebased_output = rebase_path(invoker.output, root_build_dir) | |
205 | |
206 args = [ | |
207 "--depfile", rebase_path(depfile, root_build_dir), | |
208 "--android-sdk-tools", rebased_android_sdk_build_tools, | |
209 "--dex-path", rebased_output, | |
210 ] | |
211 | |
212 if (defined(invoker.no_locals) && invoker.no_locals) { | |
213 args += [ | |
214 "--no-locals=1" | |
215 ] | |
216 } | |
217 | |
218 if (defined(invoker.args)) { | |
219 args += invoker.args | |
220 } | |
221 | |
222 args += rebase_path(invoker.sources, root_build_dir) | |
223 } | |
224 } | |
225 | |
226 # Packages resources, assets, dex, and native libraries into an apk. Signs and | |
227 # zipaligns the apk. | |
228 template("create_apk") { | |
229 if (defined(invoker.testonly)) { testonly = invoker.testonly } | |
230 | |
231 _android_manifest = invoker.android_manifest | |
232 _base_path = invoker.base_path | |
233 _final_apk_path = invoker.apk_path | |
234 _resources_zip = invoker.resources_zip | |
235 _dex_path = invoker.dex_path | |
236 _keystore_path = invoker.keystore_path | |
237 _keystore_name = invoker.keystore_name | |
238 _keystore_password = invoker.keystore_password | |
239 _load_library_from_apk = invoker.load_library_from_apk | |
240 | |
241 _deps = [] | |
242 if (defined(invoker.deps)) { | |
243 _deps = invoker.deps | |
244 } | |
245 | |
246 _native_libs_dir = "//build/android/empty/res" | |
247 if (defined(invoker.native_libs_dir)) { | |
248 _native_libs_dir = invoker.native_libs_dir | |
249 } | |
250 | |
251 _asset_location = "//build/android/empty/res" | |
252 if (defined(invoker.asset_location)) { | |
253 _asset_location = invoker.asset_location | |
254 } | |
255 | |
256 _version_code = invoker.version_code | |
257 _version_name = invoker.version_name | |
258 | |
259 _base_apk_path = _base_path + ".apk_intermediates" | |
260 | |
261 _resource_packaged_apk_path = _base_apk_path + ".ap_" | |
262 _packaged_apk_path = _base_apk_path + ".unfinished.apk" | |
263 | |
264 | |
265 _configuration_name = "Release" | |
266 if (is_debug) { | |
267 _configuration_name = "Debug" | |
268 } | |
269 | |
270 action("${target_name}__package_resources") { | |
271 deps = _deps | |
272 | |
273 script = "//build/android/gyp/package_resources.py" | |
274 depfile = "${target_gen_dir}/${target_name}.d" | |
275 inputs = [ | |
276 _android_manifest, | |
277 _resources_zip, | |
278 ] | |
279 outputs = [depfile, _resource_packaged_apk_path] | |
280 | |
281 _rebased_resources_zips = [rebase_path(_resources_zip, root_build_dir)] | |
282 args = [ | |
283 "--depfile", rebase_path(depfile, root_build_dir), | |
284 "--android-sdk", rebased_android_sdk, | |
285 "--android-sdk-tools", rebased_android_sdk_build_tools, | |
286 | |
287 "--configuration-name=$_configuration_name", | |
288 | |
289 "--android-manifest", rebase_path(_android_manifest, root_build_dir), | |
290 "--version-code", _version_code, | |
291 "--version-name", _version_name, | |
292 | |
293 "--asset-dir", rebase_path(_asset_location, root_build_dir), | |
294 "--resource-zips=$_rebased_resources_zips", | |
295 | |
296 "--apk-path", rebase_path(_resource_packaged_apk_path, root_build_dir), | |
297 ] | |
298 } | |
299 | |
300 action("${target_name}__package") { | |
301 script = "//build/android/gyp/ant.py" | |
302 _ant_script = "//build/android/ant/apk-package.xml" | |
303 | |
304 depfile = "$target_gen_dir/$target_name.d" | |
305 | |
306 inputs = [ | |
307 _dex_path, | |
308 _resource_packaged_apk_path, | |
309 _ant_script | |
310 ] | |
311 | |
312 outputs = [ | |
313 depfile, | |
314 _packaged_apk_path, | |
315 ] | |
316 | |
317 _rebased_emma_jar = "" | |
318 _rebased_resource_packaged_apk_path = rebase_path( | |
319 _resource_packaged_apk_path, root_build_dir) | |
320 _rebased_packaged_apk_path = rebase_path(_packaged_apk_path, root_build_dir) | |
321 _rebased_native_libs_dir = rebase_path(_native_libs_dir, root_build_dir) | |
322 _rebased_dex_path = rebase_path(_dex_path, root_build_dir) | |
323 args = [ | |
324 "--depfile", rebase_path(depfile, root_build_dir), | |
325 "--", | |
326 "-quiet", | |
327 "-DANDROID_SDK_ROOT=$rebased_android_sdk_root", | |
328 "-DANDROID_SDK_TOOLS=$rebased_android_sdk_build_tools", | |
329 "-DRESOURCE_PACKAGED_APK_NAME=$_rebased_resource_packaged_apk_path", | |
330 "-DCONFIGURATION_NAME=$_configuration_name", | |
331 "-DNATIVE_LIBS_DIR=$_rebased_native_libs_dir", | |
332 "-DOUT_DIR=", | |
333 "-DUNSIGNED_APK_PATH=$_rebased_packaged_apk_path", | |
334 "-DEMMA_INSTRUMENT=0", | |
335 "-DEMMA_DEVICE_JAR=$_rebased_emma_jar", | |
336 "-DDEX_FILE_PATH=$_rebased_dex_path", | |
337 | |
338 "-Dbasedir=.", | |
339 "-buildfile", rebase_path(_ant_script, root_build_dir) | |
340 ] | |
341 } | |
342 | |
343 action("${target_name}__finalize") { | |
344 script = "//build/android/gyp/finalize_apk.py" | |
345 depfile = "$target_gen_dir/$target_name.d" | |
346 | |
347 sources = [_packaged_apk_path] | |
348 inputs = [_keystore_path] | |
349 outputs = [depfile, _final_apk_path] | |
350 | |
351 args = [ | |
352 "--depfile", rebase_path(depfile, root_build_dir), | |
353 "--zipalign-path", rebase_path(zipalign_path, root_build_dir), | |
354 "--unsigned-apk-path", rebase_path(_packaged_apk_path, root_build_dir), | |
355 "--final-apk-path", rebase_path(_final_apk_path, root_build_dir), | |
356 "--key-path", rebase_path(_keystore_path, root_build_dir), | |
357 "--key-name", _keystore_name, | |
358 "--key-passwd", _keystore_password, | |
359 ] | |
360 if (_load_library_from_apk) { | |
361 _rezip_jar_path = "$root_build_dir/lib.java/rezip_apk.jar" | |
362 inputs += [ | |
363 _rezip_jar_path | |
364 ] | |
365 args += [ | |
366 "--load-library-from-zip-file=1", | |
367 "--rezip-apk-jar-path", rebase_path(_rezip_jar_path, root_build_dir) | |
368 ] | |
369 } | |
370 } | |
371 | |
372 group(target_name) { | |
373 deps = [":${target_name}__finalize"] | |
374 } | |
375 } | |
376 | |
377 template("java_prebuilt") { | |
378 if (defined(invoker.testonly)) { testonly = invoker.testonly } | 225 if (defined(invoker.testonly)) { testonly = invoker.testonly } |
379 | 226 |
380 _input_jar_path = invoker.input_jar_path | 227 _input_jar_path = invoker.input_jar_path |
381 _output_jar_path = invoker.output_jar_path | 228 _output_jar_path = invoker.output_jar_path |
382 _jar_toc_path = _output_jar_path + ".TOC" | 229 _jar_toc_path = _output_jar_path + ".TOC" |
383 | 230 |
384 assert(invoker.build_config != "") | 231 assert(invoker.build_config != "") |
385 | 232 |
386 if (defined(invoker.proguard_preprocess) && invoker.proguard_preprocess) { | 233 if (defined(invoker.proguard_preprocess) && invoker.proguard_preprocess) { |
387 _proguard_jar_path = "$android_sdk_root/tools/proguard/lib/proguard.jar" | 234 _proguard_jar_path = "$android_sdk_root/tools/proguard/lib/proguard.jar" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
435 ] | 282 ] |
436 } | 283 } |
437 | 284 |
438 group(target_name) { | 285 group(target_name) { |
439 deps = [ | 286 deps = [ |
440 ":${target_name}__jar_toc" | 287 ":${target_name}__jar_toc" |
441 ] | 288 ] |
442 } | 289 } |
443 } | 290 } |
444 | 291 |
292 | |
293 template("java_prebuilt_impl") { | |
294 if (defined(invoker.testonly)) { testonly = invoker.testonly } | |
295 _supports_android = ( | |
296 defined(invoker.supports_android) && invoker.supports_android) | |
297 | |
298 assert(defined(invoker.jar_path)) | |
299 _base_path = "${target_gen_dir}/$target_name" | |
300 _jar_path = _base_path + ".jar" | |
301 _build_config = _base_path + ".build_config" | |
302 | |
303 if (_supports_android) { | |
304 _dex_path = _base_path + ".dex.jar" | |
305 } | |
306 | |
307 _final_deps = [] | |
308 _template_name = target_name | |
309 | |
310 | |
311 _final_deps += [ ":${_template_name}__build_config" ] | |
312 write_build_config("${_template_name}__build_config") { | |
313 type = "java_library" | |
314 supports_android = _supports_android | |
315 requires_android = (defined(invoker.requires_android) && | |
316 invoker.requires_android) | |
317 | |
318 deps = [] | |
319 if (defined(invoker.deps)) { | |
320 deps += invoker.deps | |
321 } | |
322 build_config = _build_config | |
323 jar_path = _jar_path | |
324 if (_supports_android) { | |
325 dex_path = _dex_path | |
326 } | |
327 } | |
328 | |
329 _final_deps += [ ":${_template_name}__process_jar" ] | |
330 process_java_prebuilt("${_template_name}__process_jar") { | |
331 if (defined(invoker.proguard_preprocess) && invoker.proguard_preprocess) { | |
332 proguard_preprocess = true | |
333 proguard_config = invoker.proguard_config | |
334 } | |
335 | |
336 build_config = _build_config | |
337 input_jar_path = invoker.jar_path | |
338 output_jar_path = _jar_path | |
339 } | |
340 | |
341 if (_supports_android) { | |
342 _final_deps += [ ":${_template_name}__dex" ] | |
343 dex("${_template_name}__dex") { | |
344 sources = [_jar_path] | |
345 output = _dex_path | |
346 } | |
347 } | |
348 | |
349 group(target_name) { | |
350 deps = _final_deps | |
351 } | |
352 } | |
353 | |
354 | |
445 # Compiles and jars a set of java files. | 355 # Compiles and jars a set of java files. |
446 # | 356 # |
447 # Outputs: | 357 # Outputs: |
448 # $jar_path.jar | 358 # $jar_path.jar |
449 # $jar_path.jar.TOC | 359 # $jar_path.jar.TOC |
450 # | 360 # |
451 # Variables | 361 # Variables |
452 # java_files: List of .java files to compile. | 362 # java_files: List of .java files to compile. |
453 # java_deps: List of java dependencies. These should all have a .jar output | 363 # java_deps: List of java dependencies. These should all have a .jar output |
454 # at "${target_gen_dir}/${target_name}.jar. | 364 # at "${target_gen_dir}/${target_name}.jar. |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
490 _java_srcjars = invoker.srcjars | 400 _java_srcjars = invoker.srcjars |
491 } | 401 } |
492 foreach(dep, _srcjar_deps) { | 402 foreach(dep, _srcjar_deps) { |
493 _dep_gen_dir = get_label_info(dep, "target_gen_dir") | 403 _dep_gen_dir = get_label_info(dep, "target_gen_dir") |
494 _dep_name = get_label_info(dep, "name") | 404 _dep_name = get_label_info(dep, "name") |
495 _java_srcjars += [ "$_dep_gen_dir/$_dep_name.srcjar" ] | 405 _java_srcjars += [ "$_dep_gen_dir/$_dep_name.srcjar" ] |
496 } | 406 } |
497 # Mark srcjar_deps as used. | 407 # Mark srcjar_deps as used. |
498 assert(_srcjar_deps == [] || true) | 408 assert(_srcjar_deps == [] || true) |
499 | 409 |
500 _system_jars = [ android_sdk_jar ] | 410 _system_jars = [] |
501 action("${target_name}__javac") { | 411 if (defined(invoker.android) && invoker.android) { |
412 _system_jars += [ android_sdk_jar ] | |
413 } | |
414 | |
415 _rebased_build_config = rebase_path(_build_config, root_build_dir) | |
416 _rebased_jar_path = rebase_path(_intermediate_jar_path, root_build_dir) | |
417 | |
418 _template_name = target_name | |
419 _final_deps = [ ":${_template_name}__javac" ] | |
420 action("${_template_name}__javac") { | |
502 script = "//build/android/gyp/javac.py" | 421 script = "//build/android/gyp/javac.py" |
503 depfile = "$target_gen_dir/$target_name.d" | 422 depfile = "$target_gen_dir/$target_name.d" |
423 deps = [] | |
504 outputs = [ | 424 outputs = [ |
505 depfile, | 425 depfile, |
506 _intermediate_jar_path, | 426 _intermediate_jar_path, |
507 _intermediate_jar_path + ".md5.stamp" | 427 _intermediate_jar_path + ".md5.stamp" |
508 ] | 428 ] |
509 sources = _java_files + _java_srcjars | 429 sources = _java_files + _java_srcjars |
510 inputs = _system_jars + [ _build_config ] | 430 inputs = _system_jars + [ _build_config ] |
511 | 431 |
512 _rebased_system_jars = rebase_path(_system_jars, root_build_dir) | 432 _rebased_system_jars = rebase_path(_system_jars, root_build_dir) |
513 _rebased_java_srcjars = rebase_path(_java_srcjars, root_build_dir) | 433 _rebased_java_srcjars = rebase_path(_java_srcjars, root_build_dir) |
514 _rebased_build_config = rebase_path(_build_config, root_build_dir) | |
515 _rebased_depfile = rebase_path(depfile, root_build_dir) | 434 _rebased_depfile = rebase_path(depfile, root_build_dir) |
516 _rebased_jar_path = rebase_path(_intermediate_jar_path, root_build_dir) | |
517 args = [ | 435 args = [ |
518 "--depfile=$_rebased_depfile", | 436 "--depfile=$_rebased_depfile", |
519 "--classpath=$_rebased_system_jars", | 437 "--classpath=$_rebased_system_jars", |
520 "--classpath=@FileArg($_rebased_build_config:javac:classpath)", | 438 "--classpath=@FileArg($_rebased_build_config:javac:classpath)", |
521 "--jar-path=$_rebased_jar_path", | 439 "--jar-path=$_rebased_jar_path", |
522 "--java-srcjars=$_rebased_java_srcjars", | 440 "--java-srcjars=$_rebased_java_srcjars", |
523 "--java-srcjars=@FileArg($_rebased_build_config:javac:srcjars)", | 441 "--java-srcjars=@FileArg($_rebased_build_config:javac:srcjars)", |
524 "--jar-excluded-classes=$_jar_excluded_patterns", | 442 "--jar-excluded-classes=$_jar_excluded_patterns", |
525 ] | 443 ] |
526 if (_chromium_code) { | 444 if (_chromium_code) { |
527 args += [ "--chromium-code" ] | 445 args += [ "--chromium-code=1" ] |
446 } | |
447 | |
448 if (defined(invoker.main_class)) { | |
449 args += [ | |
450 "--main-class", invoker.main_class | |
451 ] | |
528 } | 452 } |
529 | 453 |
530 args += rebase_path(_java_files, root_build_dir) | 454 args += rebase_path(_java_files, root_build_dir) |
531 } | 455 } |
532 | 456 |
533 java_prebuilt("${target_name}__finish") { | 457 _final_deps += [ ":${_template_name}__finish" ] |
458 process_java_prebuilt("${_template_name}__finish") { | |
534 build_config = _build_config | 459 build_config = _build_config |
535 input_jar_path = _intermediate_jar_path | 460 input_jar_path = _intermediate_jar_path |
536 output_jar_path = _final_jar_path | 461 output_jar_path = _final_jar_path |
537 if (defined(invoker.proguard_preprocess) && invoker.proguard_preprocess) { | 462 if (defined(invoker.proguard_preprocess) && invoker.proguard_preprocess) { |
538 proguard_preprocess = invoker.proguard_preprocess | 463 proguard_preprocess = invoker.proguard_preprocess |
539 proguard_config = invoker.proguard_config | 464 proguard_config = invoker.proguard_config |
540 } | 465 } |
541 } | 466 } |
542 | 467 |
543 group(target_name) { | 468 group(target_name) { |
544 deps = [ | 469 deps = _final_deps |
545 ":${target_name}__javac", | |
546 ":${target_name}__finish", | |
547 ] | |
548 } | 470 } |
549 } | 471 } |
550 | 472 |
551 | 473 |
552 # This adds Android-specific parts to the java_library template. | 474 template("java_library_impl") { |
553 # | |
554 # Runs Android lint against the compiled java files. | |
555 # Dexes the output jar for inclusion in an APK. | |
556 template("android_java_library") { | |
557 if (defined(invoker.testonly)) { testonly = invoker.testonly } | 475 if (defined(invoker.testonly)) { testonly = invoker.testonly } |
558 | 476 |
559 assert(defined(invoker.java_files) || defined(invoker.DEPRECATED_java_in_dir) | 477 assert(defined(invoker.java_files) || defined(invoker.DEPRECATED_java_in_dir) |
560 || defined(invoker.srcjars) || defined(invoker.srcjar_deps)) | 478 || defined(invoker.srcjars) || defined(invoker.srcjar_deps)) |
561 assert(defined(invoker.build_config)) | 479 _base_path = "$target_gen_dir/$target_name" |
562 assert(defined(invoker.jar_path)) | 480 _jar_path = _base_path + ".jar" |
563 assert(defined(invoker.dex_path)) | 481 if (defined(invoker.jar_path)) { |
482 _jar_path = invoker.jar_path | |
483 } | |
484 _template_name = target_name | |
485 | |
486 _final_deps = [] | |
487 _final_datadeps = [] | |
488 if (defined(invoker.datadeps)) { | |
489 _final_datadeps = invoker.datadeps | |
490 } | |
491 | |
492 _supports_android = (defined(invoker.supports_android) && | |
493 invoker.supports_android) | |
494 _requires_android = (defined(invoker.requires_android) && | |
495 invoker.requires_android) | |
496 | |
497 if (_supports_android) { | |
498 _dex_path = _base_path + ".dex.jar" | |
499 if (defined(invoker.dex_path)) { | |
500 _dex_path = invoker.dex_path | |
501 } | |
502 } | |
503 | |
504 if (defined(invoker.override_build_config)) { | |
505 _build_config = invoker.override_build_config | |
506 } else { | |
507 _build_config = _base_path + ".build_config" | |
508 _final_deps += [ ":${_template_name}__build_config" ] | |
509 write_build_config("${_template_name}__build_config") { | |
510 type = "java_library" | |
511 supports_android = _supports_android | |
512 requires_android = _requires_android | |
513 | |
514 deps = [] | |
515 if (defined(invoker.deps)) { | |
516 deps += invoker.deps | |
517 } | |
518 | |
519 build_config = _build_config | |
520 jar_path = _jar_path | |
521 if (_supports_android) { | |
522 dex_path = _dex_path | |
523 } | |
524 } | |
525 } | |
526 | |
527 _chromium_code = true | |
528 if (defined(invoker.chromium_code)) { | |
529 _chromium_code = invoker.chromium_code | |
530 } | |
564 | 531 |
565 _srcjar_deps = [] | 532 _srcjar_deps = [] |
566 if (defined(invoker.srcjar_deps)) { | 533 if (defined(invoker.srcjar_deps)) { |
567 _srcjar_deps = invoker.srcjar_deps | 534 _srcjar_deps = invoker.srcjar_deps |
568 } | 535 } |
569 | 536 |
570 _srcjars = [] | 537 _srcjars = [] |
571 if (defined(invoker.srcjars)) { | 538 if (defined(invoker.srcjars)) { |
572 _srcjars = invoker.srcjars | 539 _srcjars = invoker.srcjars |
573 } | 540 } |
(...skipping 16 matching lines...) Expand all Loading... | |
590 "--pattern", | 557 "--pattern", |
591 "*.java", | 558 "*.java", |
592 rebase_path(invoker.DEPRECATED_java_in_dir, root_build_dir) | 559 rebase_path(invoker.DEPRECATED_java_in_dir, root_build_dir) |
593 ], | 560 ], |
594 "list lines" | 561 "list lines" |
595 ) | 562 ) |
596 _java_files = rebase_path(_java_files_build_rel, ".", root_build_dir) | 563 _java_files = rebase_path(_java_files_build_rel, ".", root_build_dir) |
597 } | 564 } |
598 assert(_java_files != [] || _srcjar_deps != [] || _srcjars != []) | 565 assert(_java_files != [] || _srcjar_deps != [] || _srcjars != []) |
599 | 566 |
600 _jar_path = invoker.jar_path | 567 _final_deps += [ ":${_template_name}__compile_java" ] |
601 _dex_path = invoker.dex_path | 568 compile_java("${_template_name}__compile_java") { |
602 | |
603 _android_manifest = "//build/android/AndroidManifest.xml" | |
604 if (defined(invoker.android_manifest)) { | |
605 _android_manifest = invoker.android_manifest | |
606 } | |
607 assert(_android_manifest != "") | |
608 | |
609 _final_deps = [] | |
610 _final_datadeps = [] | |
611 | |
612 compile_java("${target_name}__compile_java") { | |
613 jar_path = _jar_path | 569 jar_path = _jar_path |
614 if (defined(invoker.jar_excluded_patterns)) { | 570 build_config = _build_config |
615 jar_excluded_patterns = invoker.jar_excluded_patterns | |
616 } | |
617 build_config = invoker.build_config | |
618 java_files = _java_files | 571 java_files = _java_files |
619 srcjar_deps = _srcjar_deps | 572 srcjar_deps = _srcjar_deps |
620 srcjars = _srcjars | 573 srcjars = _srcjars |
621 | 574 chromium_code = _chromium_code |
622 if (defined(invoker.proguard_preprocess) && invoker.proguard_preprocess) { | 575 android = _requires_android |
623 proguard_preprocess = invoker.proguard_preprocess | 576 |
624 proguard_config = invoker.proguard_config | 577 if (defined(invoker.jar_excluded_patterns)) { jar_excluded_patterns = invoke r.jar_excluded_patterns } |
625 } | 578 if (defined(invoker.main_class)) { main_class = invoker.main_class } |
626 | 579 if (defined(invoker.proguard_preprocess)) { proguard_preprocess = invoker.pr oguard_preprocess } |
627 if (defined(invoker.dist_jar_path)) { | 580 if (defined(invoker.proguard_config)) { proguard_config = invoker.proguard_c onfig } |
628 dist_jar_path = invoker.dist_jar_path | 581 if (defined(invoker.dist_jar_path)) { dist_jar_path = invoker.dist_jar_path } |
629 } | 582 } |
630 } | 583 |
631 | 584 if (defined(invoker.main_class)) { |
632 if (defined(invoker.chromium_code) && invoker.chromium_code) { | 585 _final_deps += [ ":${_template_name}__binary_script" ] |
633 _final_datadeps += [ ":${target_name}__lint" ] | 586 action("${_template_name}__binary_script") { |
634 android_lint("${target_name}__lint") { | 587 script = "//build/android/gyp/create_java_binary_script.py" |
635 android_manifest = _android_manifest | 588 depfile = "$target_gen_dir/$target_name.d" |
636 jar_path = _jar_path | 589 java_script = "$root_build_dir/bin/$_template_name" |
637 java_files = _java_files | 590 inputs = [ _build_config ] |
638 } | 591 outputs = [ |
639 } | 592 depfile, |
640 | 593 java_script, |
641 dex("${target_name}__dex") { | 594 ] |
642 sources = [_jar_path] | 595 _rebased_build_config = rebase_path(_build_config, root_build_dir) |
643 output = _dex_path | 596 args = [ |
597 "--depfile", rebase_path(depfile, root_build_dir), | |
598 "--output", rebase_path(java_script, root_build_dir), | |
599 "--classpath=@FileArg($_rebased_build_config:java:full_classpath)", | |
600 "--jar-path", rebase_path(_jar_path, root_build_dir), | |
601 "--main-class", invoker.main_class, | |
602 ] | |
603 } | |
604 } | |
605 | |
606 if (_requires_android) { | |
607 if (defined(invoker.chromium_code) && invoker.chromium_code) { | |
608 _android_manifest = "//build/android/AndroidManifest.xml" | |
609 if (defined(invoker.android_manifest)) { | |
610 _android_manifest = invoker.android_manifest | |
611 } | |
612 | |
613 _final_datadeps += [ ":${_template_name}__lint" ] | |
614 android_lint("${_template_name}__lint") { | |
615 android_manifest = _android_manifest | |
616 jar_path = _jar_path | |
617 java_files = _java_files | |
618 } | |
619 } | |
620 | |
621 _final_deps += [ ":${_template_name}__dex" ] | |
622 dex("${_template_name}__dex") { | |
newt (away)
2014/11/03 22:12:45
shouldn't we also run dex when supports_android is
cjhopman
2014/11/15 03:37:59
Done.
| |
623 sources = [_jar_path] | |
624 output = _dex_path | |
625 } | |
644 } | 626 } |
645 | 627 |
646 group(target_name) { | 628 group(target_name) { |
647 deps = [ | 629 deps = _final_deps |
648 ":${target_name}__compile_java", | 630 datadeps = _final_datadeps |
649 ":${target_name}__dex", | |
650 ] + _final_deps + _final_datadeps | |
651 } | 631 } |
652 } | 632 } |
653 | 633 |
634 # Creates a zip archive of the inputs. | |
635 # If base_dir is provided, the archive paths will be relative to it. | |
636 template("zip") { | |
637 if (defined(invoker.testonly)) { testonly = invoker.testonly } | |
638 | |
639 assert(defined(invoker.inputs)) | |
640 assert(defined(invoker.output)) | |
641 | |
642 rebase_inputs = rebase_path(invoker.inputs, root_build_dir) | |
643 rebase_output = rebase_path(invoker.output, root_build_dir) | |
644 action(target_name) { | |
645 script = "//build/android/gn/zip.py" | |
646 depfile = "$target_gen_dir/$target_name.d" | |
647 inputs = invoker.inputs | |
648 outputs = [ | |
649 depfile, | |
650 invoker.output | |
651 ] | |
652 args = [ | |
653 "--depfile", rebase_path(depfile, root_build_dir), | |
654 "--inputs=$rebase_inputs", | |
655 "--output=$rebase_output", | |
656 ] | |
657 if (defined(invoker.base_dir)) { | |
658 args += [ | |
659 "--base-dir", rebase_path(invoker.base_dir, root_build_dir) | |
660 ] | |
661 } | |
662 } | |
663 } | |
664 | |
665 # Packages resources, assets, dex, and native libraries into an apk. Signs and | |
666 # zipaligns the apk. | |
667 template("create_apk") { | |
668 if (defined(invoker.testonly)) { testonly = invoker.testonly } | |
669 | |
670 _android_manifest = invoker.android_manifest | |
671 _base_path = invoker.base_path | |
672 _final_apk_path = invoker.apk_path | |
673 _resources_zip = invoker.resources_zip | |
674 _dex_path = invoker.dex_path | |
675 _keystore_path = invoker.keystore_path | |
676 _keystore_name = invoker.keystore_name | |
677 _keystore_password = invoker.keystore_password | |
678 _load_library_from_apk = invoker.load_library_from_apk | |
679 | |
680 _deps = [] | |
681 if (defined(invoker.deps)) { | |
682 _deps = invoker.deps | |
683 } | |
684 | |
685 _native_libs_dir = "//build/android/empty/res" | |
686 if (defined(invoker.native_libs_dir)) { | |
687 _native_libs_dir = invoker.native_libs_dir | |
688 } | |
689 | |
690 _asset_location = "//build/android/empty/res" | |
691 if (defined(invoker.asset_location)) { | |
692 _asset_location = invoker.asset_location | |
693 } | |
694 | |
695 _version_code = invoker.version_code | |
696 _version_name = invoker.version_name | |
697 | |
698 _base_apk_path = _base_path + ".apk_intermediates" | |
699 | |
700 _resource_packaged_apk_path = _base_apk_path + ".ap_" | |
701 _packaged_apk_path = _base_apk_path + ".unfinished.apk" | |
702 | |
703 | |
704 _configuration_name = "Release" | |
705 if (is_debug) { | |
706 _configuration_name = "Debug" | |
707 } | |
708 | |
709 action("${target_name}__package_resources") { | |
710 deps = _deps | |
711 | |
712 script = "//build/android/gyp/package_resources.py" | |
713 depfile = "${target_gen_dir}/${target_name}.d" | |
714 inputs = [ | |
715 _android_manifest, | |
716 _resources_zip, | |
717 ] | |
718 outputs = [depfile, _resource_packaged_apk_path] | |
719 | |
720 _rebased_resources_zips = [rebase_path(_resources_zip, root_build_dir)] | |
721 args = [ | |
722 "--depfile", rebase_path(depfile, root_build_dir), | |
723 "--android-sdk", rebased_android_sdk, | |
724 "--android-sdk-tools", rebased_android_sdk_build_tools, | |
725 | |
726 "--configuration-name=$_configuration_name", | |
727 | |
728 "--android-manifest", rebase_path(_android_manifest, root_build_dir), | |
729 "--version-code", _version_code, | |
730 "--version-name", _version_name, | |
731 | |
732 "--asset-dir", rebase_path(_asset_location, root_build_dir), | |
733 "--resource-zips=$_rebased_resources_zips", | |
734 | |
735 "--apk-path", rebase_path(_resource_packaged_apk_path, root_build_dir), | |
736 ] | |
737 } | |
738 | |
739 action("${target_name}__package") { | |
740 script = "//build/android/gyp/ant.py" | |
741 _ant_script = "//build/android/ant/apk-package.xml" | |
742 | |
743 depfile = "$target_gen_dir/$target_name.d" | |
744 | |
745 inputs = [ | |
746 _dex_path, | |
747 _resource_packaged_apk_path, | |
748 _ant_script | |
749 ] | |
750 | |
751 outputs = [ | |
752 depfile, | |
753 _packaged_apk_path, | |
754 ] | |
755 | |
756 _rebased_emma_jar = "" | |
757 _rebased_resource_packaged_apk_path = rebase_path( | |
758 _resource_packaged_apk_path, root_build_dir) | |
759 _rebased_packaged_apk_path = rebase_path(_packaged_apk_path, root_build_dir) | |
760 _rebased_native_libs_dir = rebase_path(_native_libs_dir, root_build_dir) | |
761 _rebased_dex_path = rebase_path(_dex_path, root_build_dir) | |
762 args = [ | |
763 "--depfile", rebase_path(depfile, root_build_dir), | |
764 "--", | |
765 "-quiet", | |
766 "-DANDROID_SDK_ROOT=$rebased_android_sdk_root", | |
767 "-DANDROID_SDK_TOOLS=$rebased_android_sdk_build_tools", | |
768 "-DRESOURCE_PACKAGED_APK_NAME=$_rebased_resource_packaged_apk_path", | |
769 "-DCONFIGURATION_NAME=$_configuration_name", | |
770 "-DNATIVE_LIBS_DIR=$_rebased_native_libs_dir", | |
771 "-DOUT_DIR=", | |
772 "-DUNSIGNED_APK_PATH=$_rebased_packaged_apk_path", | |
773 "-DEMMA_INSTRUMENT=0", | |
774 "-DEMMA_DEVICE_JAR=$_rebased_emma_jar", | |
775 "-DDEX_FILE_PATH=$_rebased_dex_path", | |
776 | |
777 "-Dbasedir=.", | |
778 "-buildfile", rebase_path(_ant_script, root_build_dir) | |
779 ] | |
780 } | |
781 | |
782 action("${target_name}__finalize") { | |
783 script = "//build/android/gyp/finalize_apk.py" | |
784 depfile = "$target_gen_dir/$target_name.d" | |
785 | |
786 sources = [_packaged_apk_path] | |
787 inputs = [_keystore_path] | |
788 outputs = [depfile, _final_apk_path] | |
789 | |
790 args = [ | |
791 "--depfile", rebase_path(depfile, root_build_dir), | |
792 "--zipalign-path", rebase_path(zipalign_path, root_build_dir), | |
793 "--unsigned-apk-path", rebase_path(_packaged_apk_path, root_build_dir), | |
794 "--final-apk-path", rebase_path(_final_apk_path, root_build_dir), | |
795 "--key-path", rebase_path(_keystore_path, root_build_dir), | |
796 "--key-name", _keystore_name, | |
797 "--key-passwd", _keystore_password, | |
798 ] | |
799 if (_load_library_from_apk) { | |
800 _rezip_jar_path = "$root_build_dir/lib.java/rezip_apk.jar" | |
801 inputs += [ | |
802 _rezip_jar_path | |
803 ] | |
804 args += [ | |
805 "--load-library-from-zip-file=1", | |
806 "--rezip-apk-jar-path", rebase_path(_rezip_jar_path, root_build_dir) | |
807 ] | |
808 } | |
809 } | |
810 | |
811 group(target_name) { | |
812 deps = [":${target_name}__finalize"] | |
813 } | |
814 } | |
815 | |
654 # Runs process_resources.py | 816 # Runs process_resources.py |
655 template("process_resources") { | 817 template("process_resources") { |
656 if (defined(invoker.testonly)) { testonly = invoker.testonly } | 818 if (defined(invoker.testonly)) { testonly = invoker.testonly } |
657 | 819 |
658 zip_path = invoker.zip_path | 820 zip_path = invoker.zip_path |
659 srcjar_path = invoker.srcjar_path | 821 srcjar_path = invoker.srcjar_path |
660 build_config = invoker.build_config | 822 build_config = invoker.build_config |
661 resource_dirs = invoker.resource_dirs | 823 resource_dirs = invoker.resource_dirs |
662 android_manifest = invoker.android_manifest | 824 android_manifest = invoker.android_manifest |
663 | 825 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
764 | 926 |
765 if (defined(invoker.clear_dir) && invoker.clear_dir) { | 927 if (defined(invoker.clear_dir) && invoker.clear_dir) { |
766 args += ["--clear"] | 928 args += ["--clear"] |
767 } | 929 } |
768 | 930 |
769 if (defined(invoker.args)) { | 931 if (defined(invoker.args)) { |
770 args += invoker.args | 932 args += invoker.args |
771 } | 933 } |
772 } | 934 } |
773 } | 935 } |
OLD | NEW |