OLD | NEW |
(Empty) | |
| 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 |
| 3 # found in the LICENSE file. |
| 4 |
| 5 import("//build/config/android/config.gni") |
| 6 import("//build/config/sanitizers/sanitizers.gni") |
| 7 import("//build/config/zip.gni") |
| 8 import("//third_party/ijar/ijar.gni") |
| 9 |
| 10 assert(is_android) |
| 11 |
| 12 rebased_android_sdk = rebase_path(android_sdk, root_build_dir) |
| 13 rebased_android_sdk_root = rebase_path(android_sdk_root, root_build_dir) |
| 14 rebased_android_sdk_build_tools = |
| 15 rebase_path(android_sdk_build_tools, root_build_dir) |
| 16 |
| 17 android_sdk_jar = "$android_sdk/android.jar" |
| 18 rebased_android_sdk_jar = rebase_path(android_sdk_jar, root_build_dir) |
| 19 android_default_aapt_path = "$rebased_android_sdk_build_tools/aapt" |
| 20 |
| 21 android_configuration_name = "Release" |
| 22 if (is_debug) { |
| 23 android_configuration_name = "Debug" |
| 24 } |
| 25 |
| 26 template("android_lint") { |
| 27 action(target_name) { |
| 28 forward_variables_from(invoker, |
| 29 [ |
| 30 "deps", |
| 31 "data_deps", |
| 32 "public_deps", |
| 33 "testonly", |
| 34 ]) |
| 35 if (!defined(deps)) { |
| 36 deps = [] |
| 37 } |
| 38 _cache_dir = "$root_build_dir/android_lint_cache" |
| 39 _result_path = "$target_gen_dir/$target_name/result.xml" |
| 40 _config_path = "$target_gen_dir/$target_name/config.xml" |
| 41 _suppressions_file = "//build/android/lint/suppressions.xml" |
| 42 _platform_xml_path = |
| 43 "${android_sdk_root}/platform-tools/api/api-versions.xml" |
| 44 |
| 45 script = "//build/android/gyp/lint.py" |
| 46 depfile = "$target_gen_dir/$target_name.d" |
| 47 inputs = [ |
| 48 _platform_xml_path, |
| 49 _suppressions_file, |
| 50 invoker.android_manifest, |
| 51 ] |
| 52 |
| 53 outputs = [ |
| 54 depfile, |
| 55 _config_path, |
| 56 _result_path, |
| 57 ] |
| 58 |
| 59 args = [ |
| 60 "--lint-path=$rebased_android_sdk_root/tools/lint", |
| 61 "--cache-dir", |
| 62 rebase_path(_cache_dir, root_build_dir), |
| 63 "--platform-xml-path", |
| 64 rebase_path(_platform_xml_path, root_build_dir), |
| 65 "--android-sdk-version=${android_sdk_version}", |
| 66 "--depfile", |
| 67 rebase_path(depfile, root_build_dir), |
| 68 "--config-path", |
| 69 rebase_path(_suppressions_file, root_build_dir), |
| 70 "--manifest-path", |
| 71 rebase_path(invoker.android_manifest, root_build_dir), |
| 72 "--product-dir=.", |
| 73 "--processed-config-path", |
| 74 rebase_path(_config_path, root_build_dir), |
| 75 "--result-path", |
| 76 rebase_path(_result_path, root_build_dir), |
| 77 "--enable", |
| 78 ] |
| 79 |
| 80 if (defined(invoker.create_cache) && invoker.create_cache) { |
| 81 args += [ |
| 82 "--create-cache", |
| 83 "--silent", |
| 84 ] |
| 85 } else { |
| 86 inputs += invoker.java_files |
| 87 inputs += [ |
| 88 invoker.jar_path, |
| 89 invoker.build_config, |
| 90 ] |
| 91 deps += [ "//build/android:prepare_android_lint_cache" ] |
| 92 _rebased_java_files = rebase_path(invoker.java_files, root_build_dir) |
| 93 _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) |
| 94 args += [ |
| 95 "--jar-path", |
| 96 rebase_path(invoker.jar_path, root_build_dir), |
| 97 "--java-files=$_rebased_java_files", |
| 98 "--classpath=@FileArg($_rebased_build_config:javac:interface_classpath)"
, |
| 99 ] |
| 100 } |
| 101 } |
| 102 } |
| 103 |
| 104 template("proguard") { |
| 105 action(target_name) { |
| 106 set_sources_assignment_filter([]) |
| 107 forward_variables_from(invoker, |
| 108 [ |
| 109 "deps", |
| 110 "data_deps", |
| 111 "public_deps", |
| 112 "testonly", |
| 113 ]) |
| 114 script = "//build/android/gyp/proguard.py" |
| 115 _proguard_jar_path = "//third_party/proguard/lib/proguard.jar" |
| 116 _output_jar_path = invoker.output_jar_path |
| 117 inputs = [ |
| 118 _proguard_jar_path, |
| 119 ] |
| 120 if (defined(invoker.alternative_android_sdk_jar)) { |
| 121 inputs += [ invoker.alternative_android_sdk_jar ] |
| 122 _rebased_android_sdk_jar = |
| 123 rebase_path(invoker.alternative_android_sdk_jar) |
| 124 } else { |
| 125 inputs += [ android_sdk_jar ] |
| 126 _rebased_android_sdk_jar = rebased_android_sdk_jar |
| 127 } |
| 128 if (defined(invoker.inputs)) { |
| 129 inputs += invoker.inputs |
| 130 } |
| 131 depfile = "${target_gen_dir}/${target_name}.d" |
| 132 outputs = [ |
| 133 depfile, |
| 134 _output_jar_path, |
| 135 "$_output_jar_path.dump", |
| 136 "$_output_jar_path.seeds", |
| 137 "$_output_jar_path.mapping", |
| 138 "$_output_jar_path.usage", |
| 139 ] |
| 140 args = [ |
| 141 "--depfile", |
| 142 rebase_path(depfile, root_build_dir), |
| 143 "--proguard-path", |
| 144 rebase_path(_proguard_jar_path, root_build_dir), |
| 145 "--output-path", |
| 146 rebase_path(_output_jar_path, root_build_dir), |
| 147 "--classpath", |
| 148 _rebased_android_sdk_jar, |
| 149 ] |
| 150 if (proguard_verbose) { |
| 151 args += [ "--verbose" ] |
| 152 } |
| 153 if (defined(invoker.args)) { |
| 154 args += invoker.args |
| 155 } |
| 156 } |
| 157 } |
| 158 |
| 159 template("findbugs") { |
| 160 action(target_name) { |
| 161 forward_variables_from(invoker, |
| 162 [ |
| 163 "deps", |
| 164 "testonly", |
| 165 ]) |
| 166 script = "//build/android/findbugs_diff.py" |
| 167 depfile = "$target_gen_dir/$target_name.d" |
| 168 _result_path = "$target_gen_dir/$target_name/result.xml" |
| 169 _exclusions_file = "//build/android/findbugs_filter/findbugs_exclude.xml" |
| 170 |
| 171 _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) |
| 172 |
| 173 inputs = [ |
| 174 "//build/android/pylib/utils/findbugs.py", |
| 175 _exclusions_file, |
| 176 invoker.jar_path, |
| 177 invoker.build_config, |
| 178 ] |
| 179 |
| 180 outputs = [ |
| 181 depfile, |
| 182 _result_path, |
| 183 ] |
| 184 |
| 185 args = [ |
| 186 "--depfile", |
| 187 rebase_path(depfile, root_build_dir), |
| 188 "--exclude", |
| 189 rebase_path(_exclusions_file, root_build_dir), |
| 190 "--auxclasspath-gyp", |
| 191 "@FileArg($_rebased_build_config:javac:classpath)", |
| 192 "--output-file", |
| 193 rebase_path(_result_path, root_build_dir), |
| 194 rebase_path(invoker.jar_path, root_build_dir), |
| 195 ] |
| 196 |
| 197 if (findbugs_verbose) { |
| 198 args += [ "-vv" ] |
| 199 } |
| 200 } |
| 201 } |
| 202 |
| 203 # Generates a script in the output bin.java directory to run a java binary. |
| 204 # |
| 205 # Variables |
| 206 # main_class: The class containing the progam entry point. |
| 207 # jar_path: The path to the jar to run. |
| 208 # script_name: Name of the script to generate. |
| 209 # build_config: Path to .build_config for the jar (contains classpath). |
| 210 # wrapper_script_args: List of extra arguments to pass to the executable. |
| 211 # |
| 212 template("java_binary_script") { |
| 213 set_sources_assignment_filter([]) |
| 214 forward_variables_from(invoker, [ "testonly" ]) |
| 215 |
| 216 _main_class = invoker.main_class |
| 217 _build_config = invoker.build_config |
| 218 _jar_path = invoker.jar_path |
| 219 _script_name = invoker.script_name |
| 220 |
| 221 action(target_name) { |
| 222 script = "//build/android/gyp/create_java_binary_script.py" |
| 223 depfile = "$target_gen_dir/$_script_name.d" |
| 224 java_script = "$root_build_dir/bin/$_script_name" |
| 225 inputs = [ |
| 226 _build_config, |
| 227 ] |
| 228 outputs = [ |
| 229 depfile, |
| 230 java_script, |
| 231 ] |
| 232 forward_variables_from(invoker, [ "deps" ]) |
| 233 _rebased_build_config = rebase_path(_build_config, root_build_dir) |
| 234 args = [ |
| 235 "--depfile", |
| 236 rebase_path(depfile, root_build_dir), |
| 237 "--output", |
| 238 rebase_path(java_script, root_build_dir), |
| 239 "--classpath=@FileArg($_rebased_build_config:java:full_classpath)", |
| 240 "--jar-path", |
| 241 rebase_path(_jar_path, root_build_dir), |
| 242 "--main-class", |
| 243 _main_class, |
| 244 ] |
| 245 if (emma_coverage) { |
| 246 args += [ |
| 247 "--classpath", |
| 248 rebase_path("//third_party/android_tools/sdk/tools/lib/emma.jar", |
| 249 root_build_dir), |
| 250 ] |
| 251 args += [ "--noverify" ] |
| 252 } |
| 253 if (defined(invoker.wrapper_script_args)) { |
| 254 args += [ "--" ] + invoker.wrapper_script_args |
| 255 } |
| 256 if (defined(invoker.bootclasspath)) { |
| 257 inputs += [ invoker.bootclasspath ] |
| 258 args += [ |
| 259 "--bootclasspath", |
| 260 rebase_path(invoker.bootclasspath, root_build_dir), |
| 261 ] |
| 262 } |
| 263 } |
| 264 } |
| 265 |
| 266 template("dex") { |
| 267 set_sources_assignment_filter([]) |
| 268 |
| 269 _enable_multidex = defined(invoker.enable_multidex) && invoker.enable_multidex |
| 270 |
| 271 if (_enable_multidex) { |
| 272 _main_dex_list_path = invoker.output + ".main_dex_list" |
| 273 _main_dex_list_target_name = "${target_name}__main_dex_list" |
| 274 action(_main_dex_list_target_name) { |
| 275 forward_variables_from(invoker, |
| 276 [ |
| 277 "deps", |
| 278 "inputs", |
| 279 "sources", |
| 280 "testonly", |
| 281 ]) |
| 282 |
| 283 script = "//build/android/gyp/main_dex_list.py" |
| 284 depfile = "$target_gen_dir/$target_name.d" |
| 285 |
| 286 main_dex_rules = "//build/android/main_dex_classes.flags" |
| 287 |
| 288 outputs = [ |
| 289 depfile, |
| 290 _main_dex_list_path, |
| 291 ] |
| 292 |
| 293 args = [ |
| 294 "--depfile", |
| 295 rebase_path(depfile, root_build_dir), |
| 296 "--android-sdk-tools", |
| 297 rebased_android_sdk_build_tools, |
| 298 "--main-dex-list-path", |
| 299 rebase_path(_main_dex_list_path, root_build_dir), |
| 300 "--main-dex-rules-path", |
| 301 rebase_path(main_dex_rules, root_build_dir), |
| 302 ] |
| 303 |
| 304 if (defined(invoker.args)) { |
| 305 args += invoker.args |
| 306 } |
| 307 |
| 308 if (defined(invoker.sources)) { |
| 309 args += rebase_path(invoker.sources, root_build_dir) |
| 310 } |
| 311 } |
| 312 } |
| 313 |
| 314 assert(defined(invoker.output)) |
| 315 action(target_name) { |
| 316 forward_variables_from(invoker, |
| 317 [ |
| 318 "deps", |
| 319 "inputs", |
| 320 "sources", |
| 321 "testonly", |
| 322 ]) |
| 323 script = "//build/android/gyp/dex.py" |
| 324 depfile = "$target_gen_dir/$target_name.d" |
| 325 outputs = [ |
| 326 depfile, |
| 327 invoker.output, |
| 328 ] |
| 329 |
| 330 rebased_output = rebase_path(invoker.output, root_build_dir) |
| 331 |
| 332 args = [ |
| 333 "--depfile", |
| 334 rebase_path(depfile, root_build_dir), |
| 335 "--android-sdk-tools", |
| 336 rebased_android_sdk_build_tools, |
| 337 "--dex-path", |
| 338 rebased_output, |
| 339 ] |
| 340 |
| 341 if (enable_incremental_dx) { |
| 342 args += [ "--incremental" ] |
| 343 } |
| 344 |
| 345 # EMMA requires --no-locals. |
| 346 if (emma_coverage) { |
| 347 args += [ "--no-locals=1" ] |
| 348 } |
| 349 |
| 350 if (_enable_multidex) { |
| 351 args += [ |
| 352 "--multi-dex", |
| 353 "--main-dex-list-path", |
| 354 rebase_path(_main_dex_list_path, root_build_dir), |
| 355 ] |
| 356 deps += [ ":${_main_dex_list_target_name}" ] |
| 357 inputs += [ _main_dex_list_path ] |
| 358 } |
| 359 |
| 360 if (defined(invoker.args)) { |
| 361 args += invoker.args |
| 362 } |
| 363 |
| 364 if (defined(invoker.sources)) { |
| 365 args += rebase_path(invoker.sources, root_build_dir) |
| 366 } |
| 367 } |
| 368 } |
| 369 |
| 370 # Write the target's .build_config file. This is a json file that contains a |
| 371 # dictionary of information about how to build this target (things that |
| 372 # require knowledge about this target's dependencies and cannot be calculated |
| 373 # at gn-time). There is a special syntax to add a value in that dictionary to |
| 374 # an action/action_foreachs args: |
| 375 # --python-arg=@FileArg($rebased_build_config_path:key0:key1) |
| 376 # At runtime, such an arg will be replaced by the value in the build_config. |
| 377 # See build/android/gyp/write_build_config.py and |
| 378 # build/android/gyp/util/build_utils.py:ExpandFileArgs |
| 379 template("write_build_config") { |
| 380 action(target_name) { |
| 381 set_sources_assignment_filter([]) |
| 382 type = invoker.type |
| 383 build_config = invoker.build_config |
| 384 |
| 385 assert(type == "android_apk" || type == "java_library" || |
| 386 type == "android_resources" || type == "deps_dex" || |
| 387 type == "android_assets" || type == "resource_rewriter" || |
| 388 type == "java_binary" || type == "group") |
| 389 |
| 390 forward_variables_from(invoker, |
| 391 [ |
| 392 "deps", |
| 393 "testonly", |
| 394 "visibility", |
| 395 ]) |
| 396 if (!defined(deps)) { |
| 397 deps = [] |
| 398 } |
| 399 |
| 400 script = "//build/android/gyp/write_build_config.py" |
| 401 depfile = "$target_gen_dir/$target_name.d" |
| 402 inputs = [] |
| 403 |
| 404 possible_deps_configs = [] |
| 405 foreach(d, deps) { |
| 406 dep_gen_dir = get_label_info(d, "target_gen_dir") |
| 407 dep_name = get_label_info(d, "name") |
| 408 possible_deps_configs += [ "$dep_gen_dir/$dep_name.build_config" ] |
| 409 } |
| 410 rebase_possible_deps_configs = |
| 411 rebase_path(possible_deps_configs, root_build_dir) |
| 412 |
| 413 outputs = [ |
| 414 depfile, |
| 415 build_config, |
| 416 ] |
| 417 |
| 418 args = [ |
| 419 "--type", |
| 420 type, |
| 421 "--depfile", |
| 422 rebase_path(depfile, root_build_dir), |
| 423 "--possible-deps-configs=$rebase_possible_deps_configs", |
| 424 "--build-config", |
| 425 rebase_path(build_config, root_build_dir), |
| 426 ] |
| 427 |
| 428 is_java = type == "java_library" || type == "java_binary" |
| 429 is_apk = type == "android_apk" |
| 430 is_android_assets = type == "android_assets" |
| 431 is_android_resources = type == "android_resources" |
| 432 is_deps_dex = type == "deps_dex" |
| 433 is_group = type == "group" |
| 434 |
| 435 supports_android = is_apk || is_android_assets || is_android_resources || |
| 436 is_deps_dex || is_group || |
| 437 (is_java && defined(invoker.supports_android) && |
| 438 invoker.supports_android) |
| 439 requires_android = |
| 440 is_apk || is_android_assets || is_android_resources || is_deps_dex || |
| 441 (is_java && defined(invoker.requires_android) && |
| 442 invoker.requires_android) |
| 443 |
| 444 assert(!requires_android || supports_android, |
| 445 "requires_android requires" + " supports_android") |
| 446 |
| 447 # Mark these variables as used. |
| 448 assert(is_java || true) |
| 449 assert(is_apk || true) |
| 450 assert(is_android_resources || true) |
| 451 assert(is_deps_dex || true) |
| 452 assert(is_group || true) |
| 453 |
| 454 if (is_java || is_apk) { |
| 455 args += [ |
| 456 "--jar-path", |
| 457 rebase_path(invoker.jar_path, root_build_dir), |
| 458 ] |
| 459 } |
| 460 |
| 461 if (is_apk || is_deps_dex || (is_java && supports_android)) { |
| 462 args += [ |
| 463 "--dex-path", |
| 464 rebase_path(invoker.dex_path, root_build_dir), |
| 465 ] |
| 466 } |
| 467 if (supports_android) { |
| 468 args += [ "--supports-android" ] |
| 469 } |
| 470 if (requires_android) { |
| 471 args += [ "--requires-android" ] |
| 472 } |
| 473 if (defined(invoker.bypass_platform_checks) && |
| 474 invoker.bypass_platform_checks) { |
| 475 args += [ "--bypass-platform-checks" ] |
| 476 } |
| 477 |
| 478 if (defined(invoker.apk_under_test)) { |
| 479 deps += [ "${invoker.apk_under_test}__build_config" ] |
| 480 apk_under_test_gen_dir = |
| 481 get_label_info(invoker.apk_under_test, "target_gen_dir") |
| 482 apk_under_test_name = get_label_info(invoker.apk_under_test, "name") |
| 483 apk_under_test_config = |
| 484 "$apk_under_test_gen_dir/$apk_under_test_name.build_config" |
| 485 args += [ |
| 486 "--tested-apk-config", |
| 487 rebase_path(apk_under_test_config, root_build_dir), |
| 488 ] |
| 489 } |
| 490 |
| 491 if (is_android_assets) { |
| 492 if (defined(invoker.asset_sources)) { |
| 493 inputs += invoker.asset_sources |
| 494 _rebased_asset_sources = |
| 495 rebase_path(invoker.asset_sources, root_build_dir) |
| 496 args += [ "--asset-sources=$_rebased_asset_sources" ] |
| 497 } |
| 498 if (defined(invoker.asset_renaming_sources)) { |
| 499 inputs += invoker.asset_renaming_sources |
| 500 _rebased_asset_renaming_sources = |
| 501 rebase_path(invoker.asset_renaming_sources, root_build_dir) |
| 502 args += [ "--asset-renaming-sources=$_rebased_asset_renaming_sources" ] |
| 503 |
| 504 # These are zip paths, so no need to rebase. |
| 505 args += [ "--asset-renaming-destinations=${invoker.asset_renaming_destin
ations}" ] |
| 506 } |
| 507 if (defined(invoker.disable_compression) && invoker.disable_compression) { |
| 508 args += [ "--disable-asset-compression" ] |
| 509 } |
| 510 } |
| 511 |
| 512 if (is_android_resources || is_apk) { |
| 513 assert(defined(invoker.resources_zip)) |
| 514 args += [ |
| 515 "--resources-zip", |
| 516 rebase_path(invoker.resources_zip, root_build_dir), |
| 517 ] |
| 518 if (defined(invoker.android_manifest)) { |
| 519 inputs += [ invoker.android_manifest ] |
| 520 args += [ |
| 521 "--android-manifest", |
| 522 rebase_path(invoker.android_manifest, root_build_dir), |
| 523 ] |
| 524 } else { |
| 525 assert(!is_apk, "apk build configs require an android_manifest") |
| 526 } |
| 527 if (defined(invoker.custom_package)) { |
| 528 args += [ |
| 529 "--package-name", |
| 530 invoker.custom_package, |
| 531 ] |
| 532 } |
| 533 if (defined(invoker.r_text)) { |
| 534 args += [ |
| 535 "--r-text", |
| 536 rebase_path(invoker.r_text, root_build_dir), |
| 537 ] |
| 538 } |
| 539 if (defined(invoker.is_locale_resource) && invoker.is_locale_resource) { |
| 540 args += [ "--is-locale-resource" ] |
| 541 } |
| 542 if (defined(invoker.has_alternative_locale_resource) && |
| 543 invoker.has_alternative_locale_resource) { |
| 544 args += [ "--has-alternative-locale-resource" ] |
| 545 } |
| 546 } |
| 547 |
| 548 if (is_apk) { |
| 549 if (defined(invoker.native_libs)) { |
| 550 inputs += invoker.native_libs |
| 551 rebased_native_libs = rebase_path(invoker.native_libs, root_build_dir) |
| 552 rebased_android_readelf = rebase_path(android_readelf, root_build_dir) |
| 553 args += [ |
| 554 "--native-libs=$rebased_native_libs", |
| 555 "--readelf-path=$rebased_android_readelf", |
| 556 ] |
| 557 } |
| 558 |
| 559 if (defined(invoker.proguard_enabled) && invoker.proguard_enabled) { |
| 560 args += [ |
| 561 "--proguard-enabled", |
| 562 "--proguard-info", |
| 563 rebase_path(invoker.proguard_info, root_build_dir), |
| 564 ] |
| 565 } |
| 566 |
| 567 if (defined(invoker.apk_path)) { |
| 568 _rebased_apk_path = rebase_path(invoker.apk_path, root_build_dir) |
| 569 _rebased_incremental_apk_path = |
| 570 rebase_path(invoker.incremental_apk_path, root_build_dir) |
| 571 _rebased_incremental_install_script_path = |
| 572 rebase_path(invoker.incremental_install_script_path, root_build_dir) |
| 573 args += [ "--apk-path=$_rebased_apk_path" ] |
| 574 args += [ "--incremental-apk-path=$_rebased_incremental_apk_path" ] |
| 575 args += [ "--incremental-install-script-path=$_rebased_incremental_insta
ll_script_path" ] |
| 576 } |
| 577 } |
| 578 |
| 579 if (defined(invoker.srcjar)) { |
| 580 args += [ |
| 581 "--srcjar", |
| 582 rebase_path(invoker.srcjar, root_build_dir), |
| 583 ] |
| 584 } |
| 585 } |
| 586 } |
| 587 |
| 588 template("process_java_prebuilt") { |
| 589 set_sources_assignment_filter([]) |
| 590 forward_variables_from(invoker, [ "testonly" ]) |
| 591 |
| 592 assert(invoker.build_config != "") |
| 593 _build_config = invoker.build_config |
| 594 _rebased_build_config = rebase_path(_build_config, root_build_dir) |
| 595 assert(_rebased_build_config != "" || true) # Mark used. |
| 596 |
| 597 _proguard_preprocess = |
| 598 defined(invoker.proguard_preprocess) && invoker.proguard_preprocess |
| 599 _input_jar_path = invoker.input_jar_path |
| 600 _output_jar_path = invoker.output_jar_path |
| 601 |
| 602 _jar_excluded_patterns = [] |
| 603 if (defined(invoker.jar_excluded_patterns)) { |
| 604 _jar_excluded_patterns = invoker.jar_excluded_patterns |
| 605 } |
| 606 _strip_resource_classes = |
| 607 defined(invoker.strip_resource_classes) && invoker.strip_resource_classes |
| 608 _filter_jar = _jar_excluded_patterns != [] || _strip_resource_classes |
| 609 |
| 610 if (_filter_jar) { |
| 611 _filter_target = "${target_name}__filter" |
| 612 _output_jar_target = _filter_target |
| 613 } |
| 614 if (_proguard_preprocess) { |
| 615 _proguard_target = "${target_name}__proguard_process" |
| 616 _output_jar_target = _proguard_target |
| 617 } |
| 618 if (!_filter_jar && !_proguard_preprocess) { |
| 619 _copy_target = "${target_name}__copy" |
| 620 _output_jar_target = _copy_target |
| 621 } |
| 622 |
| 623 if (_filter_jar) { |
| 624 _filtered_jar_path = _output_jar_path |
| 625 if (_proguard_preprocess) { |
| 626 _filtered_jar_path = "$target_out_dir/$target_name-filtered.jar" |
| 627 } |
| 628 action(_filter_target) { |
| 629 script = "//build/android/gyp/jar.py" |
| 630 forward_variables_from(invoker, |
| 631 [ |
| 632 "deps", |
| 633 "public_deps", |
| 634 ]) |
| 635 inputs = [ |
| 636 _build_config, |
| 637 _input_jar_path, |
| 638 ] |
| 639 outputs = [ |
| 640 _filtered_jar_path, |
| 641 ] |
| 642 args = [ |
| 643 "--input-jar", |
| 644 rebase_path(_input_jar_path, root_build_dir), |
| 645 "--jar-path", |
| 646 rebase_path(_filtered_jar_path, root_build_dir), |
| 647 "--excluded-classes=$_jar_excluded_patterns", |
| 648 ] |
| 649 if (_strip_resource_classes) { |
| 650 args += [ "--strip-resource-classes-for=@FileArg($_rebased_build_config:
javac:resource_packages)" ] |
| 651 } |
| 652 } |
| 653 } |
| 654 |
| 655 if (_proguard_preprocess) { |
| 656 _proguard_config_path = invoker.proguard_config |
| 657 proguard(_proguard_target) { |
| 658 if (_filter_jar) { |
| 659 _proguard_input_jar = _filtered_jar_path |
| 660 public_deps = [ |
| 661 ":$_filter_target", |
| 662 ] |
| 663 } else { |
| 664 _proguard_input_jar = _input_jar_path |
| 665 public_deps = [] |
| 666 } |
| 667 if (defined(invoker.deps)) { |
| 668 deps = invoker.deps |
| 669 } |
| 670 if (defined(invoker.public_deps)) { |
| 671 public_deps += invoker.public_deps |
| 672 } |
| 673 inputs = [ |
| 674 _build_config, |
| 675 _proguard_config_path, |
| 676 _proguard_input_jar, |
| 677 ] |
| 678 output_jar_path = _output_jar_path |
| 679 |
| 680 _rebased_input_paths = [ rebase_path(_input_jar_path, root_build_dir) ] |
| 681 _rebased_proguard_configs = |
| 682 [ rebase_path(_proguard_config_path, root_build_dir) ] |
| 683 args = [ |
| 684 "--input-paths=$_rebased_input_paths", |
| 685 "--proguard-configs=$_rebased_proguard_configs", |
| 686 "--classpath=@FileArg($_rebased_build_config:javac:classpath)", |
| 687 ] |
| 688 } |
| 689 } else if (!_filter_jar) { |
| 690 copy(_copy_target) { |
| 691 forward_variables_from(invoker, |
| 692 [ |
| 693 "deps", |
| 694 "public_deps", |
| 695 ]) |
| 696 sources = [ |
| 697 _input_jar_path, |
| 698 ] |
| 699 outputs = [ |
| 700 _output_jar_path, |
| 701 ] |
| 702 } |
| 703 } |
| 704 |
| 705 group(target_name) { |
| 706 forward_variables_from(invoker, |
| 707 [ |
| 708 "data_deps", |
| 709 "visibility", |
| 710 ]) |
| 711 public_deps = [ |
| 712 ":$_output_jar_target", |
| 713 ] |
| 714 } |
| 715 } |
| 716 |
| 717 template("emma_instr") { |
| 718 set_sources_assignment_filter([]) |
| 719 forward_variables_from(invoker, [ "testonly" ]) |
| 720 |
| 721 assert(invoker.source_files != [] || true) # Mark as used |
| 722 |
| 723 if (invoker.emma_instrument) { |
| 724 _output_jar_target = "${target_name}__process" |
| 725 _coverage_file = "$target_out_dir/${target_name}.em" |
| 726 _source_dirs_listing_file = "$target_out_dir/${target_name}_sources.txt" |
| 727 _emma_jar = "${android_sdk_root}/tools/lib/emma.jar" |
| 728 _rebased_source_files = rebase_path(invoker.source_files, root_build_dir) |
| 729 action(_output_jar_target) { |
| 730 forward_variables_from(invoker, [ "deps" ]) |
| 731 |
| 732 script = "//build/android/gyp/emma_instr.py" |
| 733 depfile = "${target_gen_dir}/${target_name}.d" |
| 734 inputs = [ |
| 735 _emma_jar, |
| 736 invoker.input_jar_path, |
| 737 ] |
| 738 outputs = [ |
| 739 depfile, |
| 740 _coverage_file, |
| 741 _source_dirs_listing_file, |
| 742 invoker.output_jar_path, |
| 743 ] |
| 744 args = [ |
| 745 "instrument_jar", |
| 746 "--input-path", |
| 747 rebase_path(invoker.input_jar_path, root_build_dir), |
| 748 "--output-path", |
| 749 rebase_path(invoker.output_jar_path, root_build_dir), |
| 750 "--depfile", |
| 751 rebase_path(depfile, root_build_dir), |
| 752 "--coverage-file", |
| 753 rebase_path(_coverage_file, root_build_dir), |
| 754 "--sources-list-file", |
| 755 rebase_path(_source_dirs_listing_file, root_build_dir), |
| 756 "--source-files=$_rebased_source_files", |
| 757 "--src-root", |
| 758 rebase_path("//", root_build_dir), |
| 759 "--emma-jar", |
| 760 rebase_path(_emma_jar, root_build_dir), |
| 761 ] |
| 762 |
| 763 if (emma_filter != "") { |
| 764 args += [ |
| 765 "--filter-string", |
| 766 emma_filter, |
| 767 ] |
| 768 } |
| 769 } |
| 770 } else { |
| 771 _output_jar_target = "${target_name}__copy_jar" |
| 772 copy(_output_jar_target) { |
| 773 forward_variables_from(invoker, [ "deps" ]) |
| 774 |
| 775 sources = [ |
| 776 invoker.input_jar_path, |
| 777 ] |
| 778 outputs = [ |
| 779 invoker.output_jar_path, |
| 780 ] |
| 781 } |
| 782 } |
| 783 |
| 784 group(target_name) { |
| 785 forward_variables_from(invoker, [ "visibility" ]) |
| 786 public_deps = [ |
| 787 ":$_output_jar_target", |
| 788 ] |
| 789 } |
| 790 } |
| 791 |
| 792 # Creates an unsigned .apk. |
| 793 # |
| 794 # Variables |
| 795 # assets_build_config: Path to android_apk .build_config containing merged |
| 796 # asset information. |
| 797 # deps: Specifies the dependencies of this target. |
| 798 # dex_path: Path to classes.dex file to include (optional). |
| 799 # resource_packaged_apk_path: Path to .ap_ to use. |
| 800 # output_apk_path: Output path for the generated .apk. |
| 801 # native_lib_placeholders: List of placeholder filenames to add to the apk |
| 802 # (optional). |
| 803 # native_libs: List of native libraries. |
| 804 # native_libs_filearg: @FileArg() of additionaly native libraries. |
| 805 # write_asset_list: Adds an extra file to the assets, which contains a list of |
| 806 # all other asset files. |
| 807 template("package_apk") { |
| 808 action(target_name) { |
| 809 forward_variables_from(invoker, |
| 810 [ |
| 811 "deps", |
| 812 "public_deps", |
| 813 "testonly", |
| 814 ]) |
| 815 _native_lib_placeholders = [] |
| 816 if (defined(invoker.native_lib_placeholders)) { |
| 817 _native_lib_placeholders = invoker.native_lib_placeholders |
| 818 } |
| 819 |
| 820 script = "//build/android/gyp/apkbuilder.py" |
| 821 depfile = "$target_gen_dir/$target_name.d" |
| 822 data_deps = [ |
| 823 "//tools/android/md5sum", |
| 824 ] # Used when deploying APKs |
| 825 |
| 826 inputs = invoker.native_libs + [ invoker.resource_packaged_apk_path ] |
| 827 if (defined(invoker.dex_path)) { |
| 828 inputs += [ invoker.dex_path ] |
| 829 } |
| 830 |
| 831 outputs = [ |
| 832 depfile, |
| 833 invoker.output_apk_path, |
| 834 ] |
| 835 |
| 836 _rebased_resource_packaged_apk_path = |
| 837 rebase_path(invoker.resource_packaged_apk_path, root_build_dir) |
| 838 _rebased_packaged_apk_path = |
| 839 rebase_path(invoker.output_apk_path, root_build_dir) |
| 840 args = [ |
| 841 "--depfile", |
| 842 rebase_path(depfile, root_build_dir), |
| 843 "--resource-apk=$_rebased_resource_packaged_apk_path", |
| 844 "--output-apk=$_rebased_packaged_apk_path", |
| 845 ] |
| 846 if (defined(invoker.assets_build_config)) { |
| 847 inputs += [ invoker.assets_build_config ] |
| 848 _rebased_build_config = |
| 849 rebase_path(invoker.assets_build_config, root_build_dir) |
| 850 args += [ |
| 851 "--assets=@FileArg($_rebased_build_config:assets)", |
| 852 "--uncompressed-assets=@FileArg($_rebased_build_config:uncompressed_asse
ts)", |
| 853 ] |
| 854 } |
| 855 if (defined(invoker.write_asset_list) && invoker.write_asset_list) { |
| 856 args += [ "--write-asset-list" ] |
| 857 } |
| 858 if (defined(invoker.dex_path)) { |
| 859 _rebased_dex_path = rebase_path(invoker.dex_path, root_build_dir) |
| 860 args += [ "--dex-file=$_rebased_dex_path" ] |
| 861 } |
| 862 if (invoker.native_libs != [] || defined(invoker.native_libs_filearg) || |
| 863 _native_lib_placeholders != []) { |
| 864 args += [ "--android-abi=$android_app_abi" ] |
| 865 } |
| 866 if (invoker.native_libs != []) { |
| 867 _rebased_native_libs = rebase_path(invoker.native_libs, root_build_dir) |
| 868 args += [ "--native-libs=$_rebased_native_libs" ] |
| 869 } |
| 870 if (defined(invoker.native_libs_filearg)) { |
| 871 args += [ "--native-libs=${invoker.native_libs_filearg}" ] |
| 872 } |
| 873 if (_native_lib_placeholders != []) { |
| 874 args += [ "--native-lib-placeholders=$_native_lib_placeholders" ] |
| 875 } |
| 876 if (defined(invoker.secondary_native_libs) && |
| 877 invoker.secondary_native_libs != []) { |
| 878 assert(defined(android_app_secondary_abi)) |
| 879 inputs += invoker.secondary_native_libs |
| 880 _secondary_native_libs = rebase_path(invoker.secondary_native_libs) |
| 881 args += [ |
| 882 "--secondary-native-libs=$_secondary_native_libs", |
| 883 "--secondary-android-abi=$android_app_secondary_abi", |
| 884 ] |
| 885 } |
| 886 |
| 887 if (defined(invoker.emma_instrument) && invoker.emma_instrument) { |
| 888 _emma_device_jar = "$android_sdk_root/tools/lib/emma_device.jar" |
| 889 _rebased_emma_device_jar = rebase_path(_emma_device_jar, root_build_dir) |
| 890 args += [ "--emma-device-jar=$_rebased_emma_device_jar" ] |
| 891 } |
| 892 |
| 893 if (defined(invoker.uncompress_shared_libraries) && |
| 894 invoker.uncompress_shared_libraries) { |
| 895 args += [ "--uncompress-shared-libraries" ] |
| 896 } |
| 897 } |
| 898 } |
| 899 |
| 900 # Signs & zipaligns an apk. |
| 901 # |
| 902 # Variables |
| 903 # input_apk_path: Path of the .apk to be finalized. |
| 904 # output_apk_path: Output path for the generated .apk. |
| 905 # keystore_path: Path to keystore to use for signing. |
| 906 # keystore_name: Key alias to use. |
| 907 # keystore_password: Keystore password. |
| 908 # rezip_apk: Whether to add crazy-linker alignment. |
| 909 template("finalize_apk") { |
| 910 action(target_name) { |
| 911 deps = [] |
| 912 script = "//build/android/gyp/finalize_apk.py" |
| 913 depfile = "$target_gen_dir/$target_name.d" |
| 914 forward_variables_from(invoker, |
| 915 [ |
| 916 "deps", |
| 917 "data_deps", |
| 918 "public_deps", |
| 919 "testonly", |
| 920 ]) |
| 921 |
| 922 sources = [ |
| 923 invoker.input_apk_path, |
| 924 ] |
| 925 inputs = [ |
| 926 invoker.keystore_path, |
| 927 ] |
| 928 outputs = [ |
| 929 depfile, |
| 930 invoker.output_apk_path, |
| 931 ] |
| 932 data = [ |
| 933 invoker.output_apk_path, |
| 934 ] |
| 935 |
| 936 args = [ |
| 937 "--depfile", |
| 938 rebase_path(depfile, root_build_dir), |
| 939 "--zipalign-path", |
| 940 rebase_path(zipalign_path, root_build_dir), |
| 941 "--unsigned-apk-path", |
| 942 rebase_path(invoker.input_apk_path, root_build_dir), |
| 943 "--final-apk-path", |
| 944 rebase_path(invoker.output_apk_path, root_build_dir), |
| 945 "--key-path", |
| 946 rebase_path(invoker.keystore_path, root_build_dir), |
| 947 "--key-name", |
| 948 invoker.keystore_name, |
| 949 "--key-passwd", |
| 950 invoker.keystore_password, |
| 951 ] |
| 952 if (defined(invoker.rezip_apk) && invoker.rezip_apk) { |
| 953 deps += [ "//build/android/rezip" ] |
| 954 _rezip_jar_path = "$root_build_dir/lib.java/rezip_apk.jar" |
| 955 args += [ |
| 956 "--load-library-from-zip=1", |
| 957 "--rezip-apk-jar-path", |
| 958 rebase_path(_rezip_jar_path, root_build_dir), |
| 959 ] |
| 960 } |
| 961 |
| 962 if (defined(invoker.page_align_shared_libraries) && |
| 963 invoker.page_align_shared_libraries) { |
| 964 args += [ "--page-align-shared-libraries" ] |
| 965 } |
| 966 } |
| 967 } |
| 968 |
| 969 # Packages resources, assets, dex, and native libraries into an apk. Signs and |
| 970 # zipaligns the apk. |
| 971 template("create_apk") { |
| 972 set_sources_assignment_filter([]) |
| 973 forward_variables_from(invoker, [ "testonly" ]) |
| 974 |
| 975 _android_manifest = invoker.android_manifest |
| 976 _base_path = invoker.base_path |
| 977 _final_apk_path = invoker.apk_path |
| 978 _incremental_final_apk_path_helper = |
| 979 process_file_template( |
| 980 [ _final_apk_path ], |
| 981 "{{source_dir}}/{{source_name_part}}_incremental.apk") |
| 982 _incremental_final_apk_path = _incremental_final_apk_path_helper[0] |
| 983 |
| 984 if (defined(invoker.resources_zip)) { |
| 985 _resources_zip = invoker.resources_zip |
| 986 assert(_resources_zip != "") # Mark as used. |
| 987 } |
| 988 if (defined(invoker.dex_path)) { |
| 989 _dex_path = invoker.dex_path |
| 990 } |
| 991 _load_library_from_apk = invoker.load_library_from_apk |
| 992 |
| 993 _deps = [] |
| 994 if (defined(invoker.deps)) { |
| 995 _deps = invoker.deps |
| 996 } |
| 997 _incremental_deps = [] |
| 998 if (defined(invoker.incremental_deps)) { |
| 999 _incremental_deps = invoker.incremental_deps |
| 1000 } |
| 1001 _native_libs = [] |
| 1002 if (defined(invoker.native_libs)) { |
| 1003 _native_libs = invoker.native_libs |
| 1004 } |
| 1005 _native_libs_even_when_incremental = [] |
| 1006 if (defined(invoker.native_libs_even_when_incremental)) { |
| 1007 _native_libs_even_when_incremental = |
| 1008 invoker.native_libs_even_when_incremental |
| 1009 } |
| 1010 |
| 1011 _version_code = invoker.version_code |
| 1012 _version_name = invoker.version_name |
| 1013 assert(_version_code != -1) # Mark as used. |
| 1014 assert(_version_name != "") # Mark as used. |
| 1015 |
| 1016 _base_apk_path = _base_path + ".apk_intermediates" |
| 1017 |
| 1018 _resource_packaged_apk_path = _base_apk_path + ".ap_" |
| 1019 _incremental_resource_packaged_apk_path = _base_apk_path + "_incremental.ap_" |
| 1020 _packaged_apk_path = _base_apk_path + ".unfinished.apk" |
| 1021 _incremental_packaged_apk_path = |
| 1022 _base_apk_path + "_incremental.unfinished.apk" |
| 1023 _shared_resources = |
| 1024 defined(invoker.shared_resources) && invoker.shared_resources |
| 1025 assert(_shared_resources || true) # Mark as used. |
| 1026 _app_as_shared_lib = |
| 1027 defined(invoker.app_as_shared_lib) && invoker.app_as_shared_lib |
| 1028 assert(_app_as_shared_lib || true) # Mark as used. |
| 1029 assert(!(_shared_resources && _app_as_shared_lib)) |
| 1030 |
| 1031 _keystore_path = invoker.keystore_path |
| 1032 _keystore_name = invoker.keystore_name |
| 1033 _keystore_password = invoker.keystore_password |
| 1034 |
| 1035 _split_densities = [] |
| 1036 if (defined(invoker.create_density_splits) && invoker.create_density_splits) { |
| 1037 _split_densities = [ |
| 1038 "hdpi", |
| 1039 "xhdpi", |
| 1040 "xxhdpi", |
| 1041 "xxxhdpi", |
| 1042 "tvdpi", |
| 1043 ] |
| 1044 } |
| 1045 |
| 1046 _split_languages = [] |
| 1047 if (defined(invoker.language_splits)) { |
| 1048 _split_languages = invoker.language_splits |
| 1049 } |
| 1050 |
| 1051 template("package_resources_helper") { |
| 1052 action(target_name) { |
| 1053 deps = invoker.deps |
| 1054 |
| 1055 script = "//build/android/gyp/package_resources.py" |
| 1056 depfile = "${target_gen_dir}/${target_name}.d" |
| 1057 inputs = [ |
| 1058 invoker.android_manifest, |
| 1059 ] |
| 1060 if (defined(_resources_zip)) { |
| 1061 inputs += [ _resources_zip ] |
| 1062 } |
| 1063 outputs = [ |
| 1064 depfile, |
| 1065 invoker.resource_packaged_apk_path, |
| 1066 ] |
| 1067 |
| 1068 if (defined(invoker.android_aapt_path)) { |
| 1069 _android_aapt_path = invoker.android_aapt_path |
| 1070 } else { |
| 1071 _android_aapt_path = android_default_aapt_path |
| 1072 } |
| 1073 |
| 1074 if (defined(invoker.alternative_android_sdk_jar)) { |
| 1075 _rebased_android_sdk_jar = |
| 1076 rebase_path(invoker.alternative_android_sdk_jar) |
| 1077 } else { |
| 1078 _rebased_android_sdk_jar = rebased_android_sdk_jar |
| 1079 } |
| 1080 |
| 1081 args = [ |
| 1082 "--depfile", |
| 1083 rebase_path(depfile, root_build_dir), |
| 1084 "--android-sdk-jar", |
| 1085 _rebased_android_sdk_jar, |
| 1086 "--aapt-path", |
| 1087 _android_aapt_path, |
| 1088 "--configuration-name=$android_configuration_name", |
| 1089 "--android-manifest", |
| 1090 rebase_path(invoker.android_manifest, root_build_dir), |
| 1091 "--version-code", |
| 1092 _version_code, |
| 1093 "--version-name", |
| 1094 _version_name, |
| 1095 "--apk-path", |
| 1096 rebase_path(invoker.resource_packaged_apk_path, root_build_dir), |
| 1097 ] |
| 1098 |
| 1099 if (defined(_resources_zip)) { |
| 1100 args += [ |
| 1101 "--resource-zips", |
| 1102 rebase_path(_resources_zip, root_build_dir), |
| 1103 ] |
| 1104 } |
| 1105 if (_shared_resources) { |
| 1106 args += [ "--shared-resources" ] |
| 1107 } |
| 1108 if (_app_as_shared_lib) { |
| 1109 args += [ "--app-as-shared-lib" ] |
| 1110 } |
| 1111 if (_split_densities != []) { |
| 1112 args += [ "--create-density-splits" ] |
| 1113 foreach(_density, _split_densities) { |
| 1114 outputs += [ "${invoker.resource_packaged_apk_path}_${_density}" ] |
| 1115 } |
| 1116 } |
| 1117 if (_split_languages != []) { |
| 1118 args += [ "--language-splits=$_split_languages" ] |
| 1119 foreach(_language, _split_languages) { |
| 1120 outputs += [ "${invoker.resource_packaged_apk_path}_${_language}" ] |
| 1121 } |
| 1122 } |
| 1123 if (defined(invoker.extensions_to_not_compress)) { |
| 1124 args += [ |
| 1125 "--no-compress", |
| 1126 invoker.extensions_to_not_compress, |
| 1127 ] |
| 1128 } |
| 1129 } |
| 1130 } |
| 1131 |
| 1132 _package_resources_target_name = "${target_name}__package_resources" |
| 1133 package_resources_helper(_package_resources_target_name) { |
| 1134 forward_variables_from(invoker, |
| 1135 [ |
| 1136 "alternative_android_sdk_jar", |
| 1137 "android_aapt_path", |
| 1138 "extensions_to_not_compress", |
| 1139 ]) |
| 1140 deps = _deps |
| 1141 android_manifest = _android_manifest |
| 1142 resource_packaged_apk_path = _resource_packaged_apk_path |
| 1143 } |
| 1144 |
| 1145 _generate_incremental_manifest_target_name = |
| 1146 "${target_name}_incremental_generate_manifest" |
| 1147 _incremental_android_manifest = |
| 1148 get_label_info(_generate_incremental_manifest_target_name, |
| 1149 "target_gen_dir") + "/AndroidManifest.xml" |
| 1150 action(_generate_incremental_manifest_target_name) { |
| 1151 deps = _incremental_deps |
| 1152 script = "//build/android/incremental_install/generate_android_manifest.py" |
| 1153 depfile = "${target_gen_dir}/${target_name}.d" |
| 1154 inputs = [ |
| 1155 _android_manifest, |
| 1156 ] |
| 1157 outputs = [ |
| 1158 depfile, |
| 1159 _incremental_android_manifest, |
| 1160 ] |
| 1161 |
| 1162 _rebased_src_manifest = rebase_path(_android_manifest, root_build_dir) |
| 1163 _rebased_incremental_manifest = |
| 1164 rebase_path(_incremental_android_manifest, root_build_dir) |
| 1165 _rebased_depfile = rebase_path(depfile, root_build_dir) |
| 1166 args = [ |
| 1167 "--src-manifest=$_rebased_src_manifest", |
| 1168 "--out-manifest=$_rebased_incremental_manifest", |
| 1169 "--depfile=$_rebased_depfile", |
| 1170 ] |
| 1171 if (disable_incremental_isolated_processes) { |
| 1172 args += [ "--disable-isolated-processes" ] |
| 1173 } |
| 1174 } |
| 1175 |
| 1176 _incremental_package_resources_target_name = |
| 1177 "${target_name}_incremental__package_resources" |
| 1178 |
| 1179 # TODO(agrieve): See if we can speed up this step by swapping the manifest |
| 1180 # from the result of the main package_resources step. |
| 1181 package_resources_helper(_incremental_package_resources_target_name) { |
| 1182 forward_variables_from(invoker, |
| 1183 [ |
| 1184 "alternative_android_sdk_jar", |
| 1185 "android_aapt_path", |
| 1186 "extensions_to_not_compress", |
| 1187 ]) |
| 1188 deps = |
| 1189 _incremental_deps + [ ":$_generate_incremental_manifest_target_name" ] |
| 1190 android_manifest = _incremental_android_manifest |
| 1191 resource_packaged_apk_path = _incremental_resource_packaged_apk_path |
| 1192 } |
| 1193 |
| 1194 package_target = "${target_name}__package" |
| 1195 package_apk(package_target) { |
| 1196 forward_variables_from(invoker, |
| 1197 [ |
| 1198 "assets_build_config", |
| 1199 "emma_instrument", |
| 1200 "native_lib_placeholders", |
| 1201 "native_libs_filearg", |
| 1202 "secondary_native_libs", |
| 1203 "uncompress_shared_libraries", |
| 1204 "write_asset_list", |
| 1205 ]) |
| 1206 deps = _deps + [ ":${_package_resources_target_name}" ] |
| 1207 native_libs = _native_libs + _native_libs_even_when_incremental |
| 1208 |
| 1209 if (defined(_dex_path)) { |
| 1210 dex_path = _dex_path |
| 1211 } |
| 1212 |
| 1213 output_apk_path = _packaged_apk_path |
| 1214 resource_packaged_apk_path = _resource_packaged_apk_path |
| 1215 } |
| 1216 |
| 1217 _incremental_package_target = "${target_name}_incremental__package" |
| 1218 package_apk(_incremental_package_target) { |
| 1219 forward_variables_from(invoker, |
| 1220 [ |
| 1221 "assets_build_config", |
| 1222 "emma_instrument", |
| 1223 "secondary_native_libs", |
| 1224 "uncompress_shared_libraries", |
| 1225 ]) |
| 1226 _dex_target = "//build/android/incremental_install:bootstrap_java__dex" |
| 1227 deps = _incremental_deps + [ |
| 1228 ":${_incremental_package_resources_target_name}", |
| 1229 _dex_target, |
| 1230 ] |
| 1231 |
| 1232 if (defined(_dex_path)) { |
| 1233 dex_path = |
| 1234 get_label_info(_dex_target, "target_gen_dir") + "/bootstrap.dex" |
| 1235 } |
| 1236 |
| 1237 native_libs = _native_libs_even_when_incremental |
| 1238 |
| 1239 # http://crbug.com/384638 |
| 1240 _has_native_libs = |
| 1241 defined(invoker.native_libs_filearg) || _native_libs != [] |
| 1242 if (_has_native_libs && _native_libs_even_when_incremental == []) { |
| 1243 native_lib_placeholders = [ "libfix.crbug.384638.so" ] |
| 1244 } |
| 1245 |
| 1246 output_apk_path = _incremental_packaged_apk_path |
| 1247 resource_packaged_apk_path = _incremental_resource_packaged_apk_path |
| 1248 } |
| 1249 |
| 1250 _finalize_apk_rule_name = "${target_name}__finalize" |
| 1251 finalize_apk(_finalize_apk_rule_name) { |
| 1252 forward_variables_from(invoker, [ "page_align_shared_libraries" ]) |
| 1253 |
| 1254 input_apk_path = _packaged_apk_path |
| 1255 output_apk_path = _final_apk_path |
| 1256 keystore_path = _keystore_path |
| 1257 keystore_name = _keystore_name |
| 1258 keystore_password = _keystore_password |
| 1259 rezip_apk = _load_library_from_apk |
| 1260 |
| 1261 public_deps = [ |
| 1262 # Generator of the _packaged_apk_path this target takes as input. |
| 1263 ":$package_target", |
| 1264 ] |
| 1265 } |
| 1266 |
| 1267 _incremental_finalize_apk_rule_name = "${target_name}_incremental__finalize" |
| 1268 finalize_apk(_incremental_finalize_apk_rule_name) { |
| 1269 input_apk_path = _incremental_packaged_apk_path |
| 1270 output_apk_path = _incremental_final_apk_path |
| 1271 keystore_path = _keystore_path |
| 1272 keystore_name = _keystore_name |
| 1273 keystore_password = _keystore_password |
| 1274 |
| 1275 public_deps = [ |
| 1276 ":$_incremental_package_target", |
| 1277 ] |
| 1278 } |
| 1279 |
| 1280 _split_deps = [] |
| 1281 |
| 1282 template("finalize_split") { |
| 1283 finalize_apk(target_name) { |
| 1284 _config = invoker.split_config |
| 1285 _type = invoker.split_type |
| 1286 input_apk_path = "${_resource_packaged_apk_path}_${_config}" |
| 1287 _output_paths = process_file_template( |
| 1288 [ _final_apk_path ], |
| 1289 "{{source_dir}}/{{source_name_part}}-${_type}-${_config}.apk") |
| 1290 output_apk_path = _output_paths[0] |
| 1291 keystore_path = _keystore_path |
| 1292 keystore_name = _keystore_name |
| 1293 keystore_password = _keystore_password |
| 1294 deps = [ |
| 1295 ":${_package_resources_target_name}", |
| 1296 ] |
| 1297 } |
| 1298 } |
| 1299 |
| 1300 foreach(_split, _split_densities) { |
| 1301 _split_rule = "${target_name}__finalize_${_split}_split" |
| 1302 finalize_split(_split_rule) { |
| 1303 split_type = "density" |
| 1304 split_config = _split |
| 1305 } |
| 1306 _split_deps += [ ":$_split_rule" ] |
| 1307 } |
| 1308 foreach(_split, _split_languages) { |
| 1309 _split_rule = "${target_name}__finalize_${_split}_split" |
| 1310 finalize_split(_split_rule) { |
| 1311 split_type = "lang" |
| 1312 split_config = _split |
| 1313 } |
| 1314 _split_deps += [ ":$_split_rule" ] |
| 1315 } |
| 1316 |
| 1317 group(target_name) { |
| 1318 public_deps = [ ":${_finalize_apk_rule_name}" ] + _split_deps |
| 1319 } |
| 1320 group("${target_name}_incremental") { |
| 1321 public_deps = [ ":${_incremental_finalize_apk_rule_name}" ] + _split_deps |
| 1322 } |
| 1323 } |
| 1324 |
| 1325 template("java_prebuilt_impl") { |
| 1326 set_sources_assignment_filter([]) |
| 1327 forward_variables_from(invoker, [ "testonly" ]) |
| 1328 _supports_android = |
| 1329 defined(invoker.supports_android) && invoker.supports_android |
| 1330 |
| 1331 assert(defined(invoker.jar_path)) |
| 1332 _base_path = "${target_gen_dir}/$target_name" |
| 1333 |
| 1334 # Jar files can be needed at runtime (by Robolectric tests or java binaries), |
| 1335 # so do not put them under gen/. |
| 1336 _target_dir_name = get_label_info(":$target_name", "dir") |
| 1337 _jar_path = "$root_out_dir/lib.java$_target_dir_name/$target_name.jar" |
| 1338 _ijar_path = |
| 1339 "$root_out_dir/lib.java$_target_dir_name/$target_name.interface.jar" |
| 1340 _build_config = _base_path + ".build_config" |
| 1341 |
| 1342 if (_supports_android) { |
| 1343 _dex_path = _base_path + ".dex.jar" |
| 1344 } |
| 1345 _deps = [] |
| 1346 if (defined(invoker.deps)) { |
| 1347 _deps = invoker.deps |
| 1348 } |
| 1349 _jar_deps = [] |
| 1350 if (defined(invoker.jar_dep)) { |
| 1351 _jar_deps = [ invoker.jar_dep ] |
| 1352 } |
| 1353 |
| 1354 _template_name = target_name |
| 1355 |
| 1356 _build_config_target_name = "${_template_name}__build_config" |
| 1357 _process_jar_target_name = "${_template_name}__process_jar" |
| 1358 _ijar_target_name = "${_template_name}__ijar" |
| 1359 if (_supports_android) { |
| 1360 _dex_target_name = "${_template_name}__dex" |
| 1361 } |
| 1362 |
| 1363 write_build_config(_build_config_target_name) { |
| 1364 type = "java_library" |
| 1365 supports_android = _supports_android |
| 1366 requires_android = |
| 1367 defined(invoker.requires_android) && invoker.requires_android |
| 1368 |
| 1369 deps = _deps |
| 1370 build_config = _build_config |
| 1371 jar_path = _jar_path |
| 1372 if (_supports_android) { |
| 1373 dex_path = _dex_path |
| 1374 } |
| 1375 } |
| 1376 |
| 1377 process_java_prebuilt(_process_jar_target_name) { |
| 1378 forward_variables_from(invoker, |
| 1379 [ |
| 1380 "jar_excluded_patterns", |
| 1381 "strip_resource_classes", |
| 1382 ]) |
| 1383 visibility = [ |
| 1384 ":$_ijar_target_name", |
| 1385 ":$_template_name", |
| 1386 ] |
| 1387 if (_supports_android) { |
| 1388 visibility += [ ":$_dex_target_name" ] |
| 1389 } |
| 1390 |
| 1391 if (defined(invoker.proguard_preprocess) && invoker.proguard_preprocess) { |
| 1392 proguard_preprocess = true |
| 1393 proguard_config = invoker.proguard_config |
| 1394 } |
| 1395 |
| 1396 build_config = _build_config |
| 1397 input_jar_path = invoker.jar_path |
| 1398 output_jar_path = _jar_path |
| 1399 |
| 1400 deps = [ ":$_build_config_target_name" ] + _deps + _jar_deps |
| 1401 } |
| 1402 |
| 1403 generate_interface_jar(_ijar_target_name) { |
| 1404 input_jar = _jar_path |
| 1405 output_jar = _ijar_path |
| 1406 deps = [ |
| 1407 ":$_process_jar_target_name", |
| 1408 ] |
| 1409 } |
| 1410 |
| 1411 if (_supports_android) { |
| 1412 dex(_dex_target_name) { |
| 1413 sources = [ |
| 1414 _jar_path, |
| 1415 ] |
| 1416 output = _dex_path |
| 1417 deps = [ ":$_process_jar_target_name" ] + _deps + _jar_deps |
| 1418 } |
| 1419 } |
| 1420 |
| 1421 if (defined(invoker.main_class)) { |
| 1422 _binary_script_target_name = "${_template_name}__java_binary_script" |
| 1423 java_binary_script(_binary_script_target_name) { |
| 1424 forward_variables_from(invoker, |
| 1425 [ |
| 1426 "bootclasspath", |
| 1427 "deps", |
| 1428 "main_class", |
| 1429 "wrapper_script_args", |
| 1430 ]) |
| 1431 if (!defined(deps)) { |
| 1432 deps = [] |
| 1433 } |
| 1434 build_config = _build_config |
| 1435 jar_path = _jar_path |
| 1436 script_name = _template_name |
| 1437 if (defined(invoker.wrapper_script_name)) { |
| 1438 script_name = invoker.wrapper_script_name |
| 1439 } |
| 1440 deps += [ ":$_build_config_target_name" ] |
| 1441 } |
| 1442 } |
| 1443 |
| 1444 group(target_name) { |
| 1445 forward_variables_from(invoker, [ "data_deps" ]) |
| 1446 public_deps = [ |
| 1447 ":$_ijar_target_name", |
| 1448 ":$_process_jar_target_name", |
| 1449 ] |
| 1450 if (_supports_android) { |
| 1451 public_deps += [ ":$_dex_target_name" ] |
| 1452 } |
| 1453 if (defined(invoker.main_class)) { |
| 1454 # Some targets use the generated script while building, so make it a dep |
| 1455 # rather than a data_dep. |
| 1456 public_deps += [ ":$_binary_script_target_name" ] |
| 1457 } |
| 1458 } |
| 1459 } |
| 1460 |
| 1461 # Compiles and jars a set of java files. |
| 1462 # |
| 1463 # Outputs: |
| 1464 # $jar_path.jar |
| 1465 # $jar_path.interface.jar |
| 1466 # |
| 1467 # Variables |
| 1468 # java_files: List of .java files to compile. |
| 1469 # chromium_code: If true, enable extra warnings. |
| 1470 # srcjar_deps: List of srcjar dependencies. The .java files contained in the |
| 1471 # dependencies srcjar outputs will be compiled and added to the output jar. |
| 1472 # jar_path: Use this to explicitly set the output jar path. Defaults to |
| 1473 # "${target_gen_dir}/${target_name}.jar. |
| 1474 template("compile_java") { |
| 1475 set_sources_assignment_filter([]) |
| 1476 forward_variables_from(invoker, [ "testonly" ]) |
| 1477 |
| 1478 assert(defined(invoker.java_files)) |
| 1479 assert(defined(invoker.build_config)) |
| 1480 assert(defined(invoker.jar_path)) |
| 1481 |
| 1482 _java_files = invoker.java_files |
| 1483 _final_jar_path = invoker.jar_path |
| 1484 _javac_jar_path = "$target_gen_dir/$target_name.javac.jar" |
| 1485 _process_prebuilt_jar_path = |
| 1486 "$target_gen_dir/$target_name.process_prebuilt.jar" |
| 1487 _final_ijar_path = get_path_info(_final_jar_path, "dir") + "/" + |
| 1488 get_path_info(_final_jar_path, "name") + ".interface.jar" |
| 1489 |
| 1490 _build_config = invoker.build_config |
| 1491 |
| 1492 _input_jars_paths = [] |
| 1493 if (defined(invoker.input_jars_paths)) { |
| 1494 _input_jars_paths += invoker.input_jars_paths |
| 1495 } |
| 1496 |
| 1497 _chromium_code = false |
| 1498 if (defined(invoker.chromium_code)) { |
| 1499 _chromium_code = invoker.chromium_code |
| 1500 } |
| 1501 |
| 1502 _supports_android = true |
| 1503 if (defined(invoker.supports_android)) { |
| 1504 _supports_android = invoker.supports_android |
| 1505 } |
| 1506 |
| 1507 _enable_errorprone = use_errorprone_java_compiler |
| 1508 if (!_chromium_code) { |
| 1509 _enable_errorprone = false |
| 1510 } else if (defined(invoker.enable_errorprone)) { |
| 1511 _enable_errorprone = invoker.enable_errorprone |
| 1512 } |
| 1513 |
| 1514 if (defined(invoker.enable_incremental_javac_override)) { |
| 1515 # Use invoker-specified override. |
| 1516 _enable_incremental_javac = invoker.enable_incremental_javac_override |
| 1517 } else { |
| 1518 # Default to build arg if not overridden. |
| 1519 _enable_incremental_javac = enable_incremental_javac |
| 1520 } |
| 1521 |
| 1522 _manifest_entries = [] |
| 1523 if (defined(invoker.manifest_entries)) { |
| 1524 _manifest_entries = invoker.manifest_entries |
| 1525 } |
| 1526 |
| 1527 _srcjar_deps = [] |
| 1528 if (defined(invoker.srcjar_deps)) { |
| 1529 _srcjar_deps += invoker.srcjar_deps |
| 1530 } |
| 1531 |
| 1532 _java_srcjars = [] |
| 1533 if (defined(invoker.srcjars)) { |
| 1534 _java_srcjars = invoker.srcjars |
| 1535 } |
| 1536 foreach(dep, _srcjar_deps) { |
| 1537 _dep_gen_dir = get_label_info(dep, "target_gen_dir") |
| 1538 _dep_name = get_label_info(dep, "name") |
| 1539 _java_srcjars += [ "$_dep_gen_dir/$_dep_name.srcjar" ] |
| 1540 } |
| 1541 |
| 1542 # Mark srcjar_deps as used. |
| 1543 assert(_srcjar_deps == [] || true) |
| 1544 |
| 1545 _rebased_build_config = rebase_path(_build_config, root_build_dir) |
| 1546 _rebased_jar_path = rebase_path(_javac_jar_path, root_build_dir) |
| 1547 |
| 1548 _javac_target_name = "${target_name}__javac" |
| 1549 _process_prebuilt_target_name = "${target_name}__process_prebuilt" |
| 1550 _emma_instr_target_name = "${target_name}__emma_instr" |
| 1551 _ijar_target_name = "${target_name}__ijar" |
| 1552 _final_target_name = target_name |
| 1553 |
| 1554 action(_javac_target_name) { |
| 1555 script = "//build/android/gyp/javac.py" |
| 1556 depfile = "$target_gen_dir/$target_name.d" |
| 1557 deps = _srcjar_deps |
| 1558 if (defined(invoker.deps)) { |
| 1559 deps += invoker.deps |
| 1560 } |
| 1561 |
| 1562 outputs = [ |
| 1563 depfile, |
| 1564 _javac_jar_path, |
| 1565 _javac_jar_path + ".md5.stamp", |
| 1566 ] |
| 1567 sources = _java_files + _java_srcjars |
| 1568 inputs = [ |
| 1569 _build_config, |
| 1570 ] |
| 1571 |
| 1572 _rebased_java_srcjars = rebase_path(_java_srcjars, root_build_dir) |
| 1573 _rebased_depfile = rebase_path(depfile, root_build_dir) |
| 1574 args = [ |
| 1575 "--depfile=$_rebased_depfile", |
| 1576 "--classpath=@FileArg($_rebased_build_config:javac:interface_classpath)", |
| 1577 "--jar-path=$_rebased_jar_path", |
| 1578 "--java-srcjars=$_rebased_java_srcjars", |
| 1579 "--java-srcjars=@FileArg($_rebased_build_config:javac:srcjars)", |
| 1580 ] |
| 1581 if (_enable_incremental_javac) { |
| 1582 args += [ "--incremental" ] |
| 1583 deps += [ "//third_party/jmake" ] |
| 1584 inputs += [ "$root_out_dir/bin/jmake" ] |
| 1585 outputs += [ "${_javac_jar_path}.pdb" ] |
| 1586 } |
| 1587 if (_supports_android) { |
| 1588 if (defined(invoker.alternative_android_sdk_ijar)) { |
| 1589 deps += [ invoker.alternative_android_sdk_ijar_dep ] |
| 1590 _android_sdk_ijar = invoker.alternative_android_sdk_ijar |
| 1591 } else { |
| 1592 deps += [ "//build/android:android_ijar" ] |
| 1593 _android_sdk_ijar = "$root_out_dir/lib.java/android.interface.jar" |
| 1594 } |
| 1595 inputs += [ _android_sdk_ijar ] |
| 1596 _rebased_android_sdk_ijar = rebase_path(_android_sdk_ijar, root_build_dir) |
| 1597 args += [ "--bootclasspath=$_rebased_android_sdk_ijar" ] |
| 1598 } |
| 1599 foreach(c, _input_jars_paths) { |
| 1600 args += [ "--classpath=" + c ] |
| 1601 } |
| 1602 foreach(e, _manifest_entries) { |
| 1603 args += [ "--manifest-entry=" + e ] |
| 1604 } |
| 1605 if (_chromium_code) { |
| 1606 args += [ "--chromium-code=1" ] |
| 1607 } |
| 1608 if (_enable_errorprone) { |
| 1609 deps += [ "//third_party/errorprone:chromium_errorprone" ] |
| 1610 args += [ |
| 1611 "--use-errorprone-path", |
| 1612 "bin/chromium_errorprone", |
| 1613 ] |
| 1614 } |
| 1615 args += rebase_path(_java_files, root_build_dir) |
| 1616 } |
| 1617 |
| 1618 process_java_prebuilt(_process_prebuilt_target_name) { |
| 1619 forward_variables_from(invoker, [ "jar_excluded_patterns" ]) |
| 1620 build_config = _build_config |
| 1621 input_jar_path = _javac_jar_path |
| 1622 output_jar_path = _process_prebuilt_jar_path |
| 1623 if (defined(invoker.proguard_preprocess) && invoker.proguard_preprocess) { |
| 1624 proguard_preprocess = invoker.proguard_preprocess |
| 1625 proguard_config = invoker.proguard_config |
| 1626 } |
| 1627 deps = [ |
| 1628 ":$_javac_target_name", |
| 1629 ] |
| 1630 if (defined(invoker.deps)) { |
| 1631 deps += invoker.deps |
| 1632 } |
| 1633 } |
| 1634 |
| 1635 emma_instr(_emma_instr_target_name) { |
| 1636 visibility = [ |
| 1637 ":$_ijar_target_name", |
| 1638 ":$_final_target_name", |
| 1639 ] |
| 1640 |
| 1641 forward_variables_from(invoker, [ "emma_instrument" ]) |
| 1642 |
| 1643 input_jar_path = _process_prebuilt_jar_path |
| 1644 output_jar_path = _final_jar_path |
| 1645 source_files = _java_files |
| 1646 |
| 1647 deps = [ |
| 1648 ":$_process_prebuilt_target_name", |
| 1649 ] |
| 1650 } |
| 1651 |
| 1652 generate_interface_jar(_ijar_target_name) { |
| 1653 input_jar = _final_jar_path |
| 1654 output_jar = _final_ijar_path |
| 1655 deps = [ |
| 1656 ":$_emma_instr_target_name", |
| 1657 ] |
| 1658 } |
| 1659 |
| 1660 group(_final_target_name) { |
| 1661 forward_variables_from(invoker, [ "visibility" ]) |
| 1662 public_deps = [ |
| 1663 ":$_emma_instr_target_name", |
| 1664 ":$_ijar_target_name", |
| 1665 ] |
| 1666 } |
| 1667 } |
| 1668 |
| 1669 template("java_library_impl") { |
| 1670 set_sources_assignment_filter([]) |
| 1671 forward_variables_from(invoker, [ "testonly" ]) |
| 1672 _accumulated_deps = [] |
| 1673 if (defined(invoker.deps)) { |
| 1674 _accumulated_deps = invoker.deps |
| 1675 } |
| 1676 |
| 1677 assert(defined(invoker.java_files) || defined(invoker.srcjars) || |
| 1678 defined(invoker.srcjar_deps)) |
| 1679 _base_path = "$target_gen_dir/$target_name" |
| 1680 |
| 1681 # Jar files can be needed at runtime (by Robolectric tests or java binaries), |
| 1682 # so do not put them under gen/. |
| 1683 _jar_name = target_name |
| 1684 if (defined(invoker.jar_name)) { |
| 1685 _jar_name = invoker.jar_name |
| 1686 } |
| 1687 target_dir_name = get_label_info(":$target_name", "dir") |
| 1688 _jar_path = "$root_out_dir/lib.java$target_dir_name/$_jar_name.jar" |
| 1689 if (defined(invoker.jar_path)) { |
| 1690 _jar_path = invoker.jar_path |
| 1691 } |
| 1692 _template_name = target_name |
| 1693 |
| 1694 _final_deps = [] |
| 1695 |
| 1696 _supports_android = |
| 1697 defined(invoker.supports_android) && invoker.supports_android |
| 1698 _requires_android = |
| 1699 defined(invoker.requires_android) && invoker.requires_android |
| 1700 assert(_requires_android || true) # Mark as used. |
| 1701 _android_manifest = "//build/android/AndroidManifest.xml" |
| 1702 if (defined(invoker.android_manifest)) { |
| 1703 _android_manifest = invoker.android_manifest |
| 1704 } |
| 1705 assert(_android_manifest != "") # Mark as used. |
| 1706 |
| 1707 if (defined(invoker.run_findbugs_override)) { |
| 1708 _run_findbugs = invoker.run_findbugs_override |
| 1709 } else { |
| 1710 _run_findbugs = run_findbugs # Default to build arg if not overridden. |
| 1711 } |
| 1712 assert(_run_findbugs || true) # Mark as used. |
| 1713 |
| 1714 # Don't enable coverage, lint, findbugs unless the target has some |
| 1715 # non-generated files. |
| 1716 _chromium_code = defined(invoker.java_files) && invoker.java_files != [] |
| 1717 if (defined(invoker.chromium_code)) { |
| 1718 _chromium_code = invoker.chromium_code |
| 1719 } |
| 1720 |
| 1721 _emma_never_instrument = !_chromium_code |
| 1722 if (defined(invoker.emma_never_instrument)) { |
| 1723 _emma_never_instrument = invoker.emma_never_instrument |
| 1724 } |
| 1725 assert(_emma_never_instrument || true) # Mark as used |
| 1726 _emma_instrument = emma_coverage && !_emma_never_instrument |
| 1727 |
| 1728 if (_supports_android) { |
| 1729 _dex_path = _base_path + ".dex.jar" |
| 1730 if (defined(invoker.dex_path)) { |
| 1731 _dex_path = invoker.dex_path |
| 1732 } |
| 1733 } |
| 1734 |
| 1735 # Define build_config_deps which will be a list of targets required to |
| 1736 # build the _build_config. |
| 1737 if (defined(invoker.override_build_config)) { |
| 1738 _build_config = invoker.override_build_config |
| 1739 } else { |
| 1740 _build_config = _base_path + ".build_config" |
| 1741 build_config_target_name = "${_template_name}__build_config" |
| 1742 |
| 1743 write_build_config(build_config_target_name) { |
| 1744 deps = _accumulated_deps |
| 1745 if (defined(invoker.is_java_binary) && invoker.is_java_binary) { |
| 1746 type = "java_binary" |
| 1747 } else { |
| 1748 type = "java_library" |
| 1749 } |
| 1750 supports_android = _supports_android |
| 1751 requires_android = _requires_android |
| 1752 bypass_platform_checks = defined(invoker.bypass_platform_checks) && |
| 1753 invoker.bypass_platform_checks |
| 1754 |
| 1755 build_config = _build_config |
| 1756 jar_path = _jar_path |
| 1757 if (_supports_android) { |
| 1758 dex_path = _dex_path |
| 1759 } |
| 1760 } |
| 1761 _accumulated_deps += [ ":$build_config_target_name" ] |
| 1762 } |
| 1763 |
| 1764 _srcjar_deps = [] |
| 1765 if (defined(invoker.srcjar_deps)) { |
| 1766 _srcjar_deps = invoker.srcjar_deps |
| 1767 } |
| 1768 |
| 1769 _srcjars = [] |
| 1770 if (defined(invoker.srcjars)) { |
| 1771 _srcjars = invoker.srcjars |
| 1772 } |
| 1773 |
| 1774 _java_files = [] |
| 1775 if (defined(invoker.java_files)) { |
| 1776 _java_files += invoker.java_files |
| 1777 } |
| 1778 assert(_java_files != [] || _srcjar_deps != [] || _srcjars != []) |
| 1779 |
| 1780 _compile_java_target = "${_template_name}__compile_java" |
| 1781 _final_deps += [ ":$_compile_java_target" ] |
| 1782 compile_java(_compile_java_target) { |
| 1783 forward_variables_from(invoker, |
| 1784 [ |
| 1785 "alternative_android_sdk_ijar", |
| 1786 "alternative_android_sdk_ijar_dep", |
| 1787 "dist_jar_path", |
| 1788 "enable_errorprone", |
| 1789 "enable_incremental_javac_override", |
| 1790 "input_jars_paths", |
| 1791 "jar_excluded_patterns", |
| 1792 "manifest_entries", |
| 1793 "proguard_config", |
| 1794 "proguard_preprocess", |
| 1795 ]) |
| 1796 jar_path = _jar_path |
| 1797 build_config = _build_config |
| 1798 java_files = _java_files |
| 1799 srcjar_deps = _srcjar_deps |
| 1800 srcjars = _srcjars |
| 1801 chromium_code = _chromium_code |
| 1802 supports_android = _supports_android |
| 1803 emma_instrument = _emma_instrument |
| 1804 deps = _accumulated_deps |
| 1805 } |
| 1806 _accumulated_deps += [ ":$_compile_java_target" ] |
| 1807 assert(_accumulated_deps != []) # Mark used. |
| 1808 |
| 1809 if (defined(invoker.main_class)) { |
| 1810 # Targets might use the generated script while building, so make it a dep |
| 1811 # rather than a data_dep. |
| 1812 _final_deps += [ ":${_template_name}__java_binary_script" ] |
| 1813 java_binary_script("${_template_name}__java_binary_script") { |
| 1814 forward_variables_from(invoker, |
| 1815 [ |
| 1816 "bootclasspath", |
| 1817 "main_class", |
| 1818 "wrapper_script_args", |
| 1819 ]) |
| 1820 build_config = _build_config |
| 1821 jar_path = _jar_path |
| 1822 script_name = _template_name |
| 1823 if (defined(invoker.wrapper_script_name)) { |
| 1824 script_name = invoker.wrapper_script_name |
| 1825 } |
| 1826 deps = _accumulated_deps |
| 1827 } |
| 1828 } |
| 1829 |
| 1830 _has_lint_target = false |
| 1831 if (_supports_android) { |
| 1832 if (_chromium_code) { |
| 1833 _has_lint_target = true |
| 1834 android_lint("${_template_name}__lint") { |
| 1835 android_manifest = _android_manifest |
| 1836 build_config = _build_config |
| 1837 jar_path = _jar_path |
| 1838 java_files = _java_files |
| 1839 deps = _accumulated_deps |
| 1840 } |
| 1841 |
| 1842 if (_run_findbugs) { |
| 1843 findbugs("${_template_name}__findbugs") { |
| 1844 build_config = _build_config |
| 1845 jar_path = _jar_path |
| 1846 deps = _accumulated_deps |
| 1847 } |
| 1848 } |
| 1849 |
| 1850 # Use an intermediate group() rather as the data_deps target in order to |
| 1851 # avoid lint artifacts showing up as runtime_deps (while still having lint |
| 1852 # run in parallel to other targets). |
| 1853 group("${_template_name}__analysis") { |
| 1854 public_deps = [ |
| 1855 ":${_template_name}__lint", |
| 1856 ] |
| 1857 if (_run_findbugs) { |
| 1858 public_deps += [ ":${_template_name}__findbugs" ] |
| 1859 } |
| 1860 } |
| 1861 } |
| 1862 |
| 1863 _final_deps += [ ":${_template_name}__dex" ] |
| 1864 dex("${_template_name}__dex") { |
| 1865 sources = [ |
| 1866 _jar_path, |
| 1867 ] |
| 1868 output = _dex_path |
| 1869 deps = [ |
| 1870 ":$_compile_java_target", |
| 1871 ] |
| 1872 } |
| 1873 } |
| 1874 |
| 1875 group(target_name) { |
| 1876 forward_variables_from(invoker, |
| 1877 [ |
| 1878 "data_deps", |
| 1879 "visibility", |
| 1880 ]) |
| 1881 if (!defined(data_deps)) { |
| 1882 data_deps = [] |
| 1883 } |
| 1884 public_deps = _final_deps |
| 1885 if (_has_lint_target) { |
| 1886 data_deps += [ ":${_template_name}__analysis" ] |
| 1887 } |
| 1888 } |
| 1889 } |
| 1890 |
| 1891 # Runs process_resources.py |
| 1892 template("process_resources") { |
| 1893 set_sources_assignment_filter([]) |
| 1894 forward_variables_from(invoker, [ "testonly" ]) |
| 1895 |
| 1896 zip_path = invoker.zip_path |
| 1897 srcjar_path = invoker.srcjar_path |
| 1898 r_text_path = invoker.r_text_path |
| 1899 build_config = invoker.build_config |
| 1900 android_manifest = invoker.android_manifest |
| 1901 |
| 1902 non_constant_id = true |
| 1903 if (defined(invoker.generate_constant_ids) && invoker.generate_constant_ids) { |
| 1904 non_constant_id = false |
| 1905 } |
| 1906 |
| 1907 action(target_name) { |
| 1908 forward_variables_from(invoker, |
| 1909 [ |
| 1910 "deps", |
| 1911 "visibility", |
| 1912 ]) |
| 1913 script = "//build/android/gyp/process_resources.py" |
| 1914 |
| 1915 depfile = "$target_gen_dir/$target_name.d" |
| 1916 outputs = [ |
| 1917 depfile, |
| 1918 zip_path, |
| 1919 srcjar_path, |
| 1920 r_text_path, |
| 1921 ] |
| 1922 |
| 1923 _all_resource_dirs = [] |
| 1924 sources = [] |
| 1925 |
| 1926 if (defined(invoker.resource_dirs)) { |
| 1927 _all_resource_dirs += invoker.resource_dirs |
| 1928 |
| 1929 # Speed up "gn gen" by short-circuiting the empty directory. |
| 1930 if (invoker.resource_dirs != [ "//build/android/ant/empty/res" ] && |
| 1931 invoker.resource_dirs != []) { |
| 1932 _sources_build_rel = |
| 1933 exec_script("//build/android/gyp/find.py", |
| 1934 rebase_path(invoker.resource_dirs, root_build_dir), |
| 1935 "list lines") |
| 1936 sources += rebase_path(_sources_build_rel, ".", root_build_dir) |
| 1937 } |
| 1938 } |
| 1939 |
| 1940 if (defined(invoker.generated_resource_dirs)) { |
| 1941 assert(defined(invoker.generated_resource_files)) |
| 1942 _all_resource_dirs += invoker.generated_resource_dirs |
| 1943 sources += invoker.generated_resource_files |
| 1944 } |
| 1945 |
| 1946 inputs = [ |
| 1947 build_config, |
| 1948 android_manifest, |
| 1949 ] |
| 1950 |
| 1951 _rebased_all_resource_dirs = rebase_path(_all_resource_dirs, root_build_dir) |
| 1952 rebase_build_config = rebase_path(build_config, root_build_dir) |
| 1953 |
| 1954 if (defined(invoker.android_aapt_path)) { |
| 1955 _android_aapt_path = invoker.android_aapt_path |
| 1956 } else { |
| 1957 _android_aapt_path = android_default_aapt_path |
| 1958 } |
| 1959 |
| 1960 if (defined(invoker.alternative_android_sdk_jar)) { |
| 1961 _rebased_android_sdk_jar = |
| 1962 rebase_path(invoker.alternative_android_sdk_jar) |
| 1963 } else { |
| 1964 _rebased_android_sdk_jar = rebased_android_sdk_jar |
| 1965 } |
| 1966 |
| 1967 args = [ |
| 1968 "--depfile", |
| 1969 rebase_path(depfile, root_build_dir), |
| 1970 "--android-sdk-jar", |
| 1971 _rebased_android_sdk_jar, |
| 1972 "--aapt-path", |
| 1973 _android_aapt_path, |
| 1974 "--android-manifest", |
| 1975 rebase_path(android_manifest, root_build_dir), |
| 1976 "--resource-dirs=$_rebased_all_resource_dirs", |
| 1977 "--srcjar-out", |
| 1978 rebase_path(srcjar_path, root_build_dir), |
| 1979 "--resource-zip-out", |
| 1980 rebase_path(zip_path, root_build_dir), |
| 1981 "--r-text-out", |
| 1982 rebase_path(r_text_path, root_build_dir), |
| 1983 "--dependencies-res-zips=@FileArg($rebase_build_config:resources:dependenc
y_zips)", |
| 1984 "--extra-res-packages=@FileArg($rebase_build_config:resources:extra_packag
e_names)", |
| 1985 "--extra-r-text-files=@FileArg($rebase_build_config:resources:extra_r_text
_files)", |
| 1986 ] |
| 1987 |
| 1988 if (non_constant_id) { |
| 1989 args += [ "--non-constant-id" ] |
| 1990 } |
| 1991 |
| 1992 if (defined(invoker.custom_package)) { |
| 1993 args += [ |
| 1994 "--custom-package", |
| 1995 invoker.custom_package, |
| 1996 ] |
| 1997 } |
| 1998 |
| 1999 if (defined(invoker.v14_skip) && invoker.v14_skip) { |
| 2000 args += [ "--v14-skip" ] |
| 2001 } |
| 2002 |
| 2003 if (defined(invoker.shared_resources) && invoker.shared_resources) { |
| 2004 args += [ "--shared-resources" ] |
| 2005 } |
| 2006 |
| 2007 if (defined(invoker.app_as_shared_lib) && invoker.app_as_shared_lib) { |
| 2008 args += [ "--app-as-shared-lib" ] |
| 2009 } |
| 2010 |
| 2011 if (defined(invoker.include_all_resources) && |
| 2012 invoker.include_all_resources) { |
| 2013 args += [ "--include-all-resources" ] |
| 2014 } |
| 2015 |
| 2016 if (defined(invoker.all_resources_zip_path)) { |
| 2017 all_resources_zip = invoker.all_resources_zip_path |
| 2018 outputs += [ all_resources_zip ] |
| 2019 args += [ |
| 2020 "--all-resources-zip-out", |
| 2021 rebase_path(all_resources_zip, root_build_dir), |
| 2022 ] |
| 2023 } |
| 2024 |
| 2025 if (defined(invoker.proguard_file)) { |
| 2026 outputs += [ invoker.proguard_file ] |
| 2027 args += [ |
| 2028 "--proguard-file", |
| 2029 rebase_path(invoker.proguard_file, root_build_dir), |
| 2030 ] |
| 2031 } |
| 2032 |
| 2033 if (defined(invoker.args)) { |
| 2034 args += invoker.args |
| 2035 } |
| 2036 } |
| 2037 } |
| 2038 |
| 2039 template("copy_ex") { |
| 2040 set_sources_assignment_filter([]) |
| 2041 action(target_name) { |
| 2042 forward_variables_from(invoker, |
| 2043 [ |
| 2044 "data", |
| 2045 "deps", |
| 2046 "inputs", |
| 2047 "sources", |
| 2048 "testonly", |
| 2049 "visibility", |
| 2050 ]) |
| 2051 if (!defined(sources)) { |
| 2052 sources = [] |
| 2053 } |
| 2054 script = "//build/android/gyp/copy_ex.py" |
| 2055 |
| 2056 depfile = "$target_gen_dir/$target_name.d" |
| 2057 outputs = [ |
| 2058 depfile, |
| 2059 ] |
| 2060 |
| 2061 args = [ |
| 2062 "--depfile", |
| 2063 rebase_path(depfile, root_build_dir), |
| 2064 "--dest", |
| 2065 rebase_path(invoker.dest, root_build_dir), |
| 2066 ] |
| 2067 rebased_sources = rebase_path(sources, root_build_dir) |
| 2068 args += [ "--files=$rebased_sources" ] |
| 2069 |
| 2070 if (defined(invoker.clear_dir) && invoker.clear_dir) { |
| 2071 args += [ "--clear" ] |
| 2072 } |
| 2073 |
| 2074 if (defined(invoker.args)) { |
| 2075 args += invoker.args |
| 2076 } |
| 2077 |
| 2078 if (defined(invoker.renaming_sources) && |
| 2079 defined(invoker.renaming_destinations)) { |
| 2080 sources += invoker.renaming_sources |
| 2081 rebased_renaming_sources = |
| 2082 rebase_path(invoker.renaming_sources, root_build_dir) |
| 2083 args += [ "--renaming-sources=$rebased_renaming_sources" ] |
| 2084 |
| 2085 renaming_destinations = invoker.renaming_destinations |
| 2086 args += [ "--renaming-destinations=$renaming_destinations" ] |
| 2087 } |
| 2088 } |
| 2089 } |
| 2090 |
| 2091 # Produces a single .dex.jar out of a set of Java dependencies. |
| 2092 template("deps_dex") { |
| 2093 set_sources_assignment_filter([]) |
| 2094 build_config = "$target_gen_dir/${target_name}.build_config" |
| 2095 build_config_target_name = "${target_name}__build_config" |
| 2096 |
| 2097 write_build_config(build_config_target_name) { |
| 2098 forward_variables_from(invoker, |
| 2099 [ |
| 2100 "deps", |
| 2101 "dex_path", |
| 2102 ]) |
| 2103 type = "deps_dex" |
| 2104 build_config = build_config |
| 2105 } |
| 2106 |
| 2107 rebased_build_config = rebase_path(build_config, root_build_dir) |
| 2108 dex(target_name) { |
| 2109 inputs = [ |
| 2110 build_config, |
| 2111 ] |
| 2112 output = invoker.dex_path |
| 2113 dex_arg_key = "${rebased_build_config}:final_dex:dependency_dex_files" |
| 2114 args = [ "--inputs=@FileArg($dex_arg_key)" ] |
| 2115 if (defined(invoker.excluded_jars)) { |
| 2116 excluded_jars = rebase_path(invoker.excluded_jars, root_build_dir) |
| 2117 args += [ "--excluded-paths=${excluded_jars}" ] |
| 2118 } |
| 2119 deps = [ |
| 2120 ":$build_config_target_name", |
| 2121 ] |
| 2122 } |
| 2123 } |
| 2124 |
| 2125 # Creates an AndroidManifest.xml for an APK split. |
| 2126 template("generate_split_manifest") { |
| 2127 assert(defined(invoker.main_manifest)) |
| 2128 assert(defined(invoker.out_manifest)) |
| 2129 assert(defined(invoker.split_name)) |
| 2130 |
| 2131 action(target_name) { |
| 2132 forward_variables_from(invoker, |
| 2133 [ |
| 2134 "deps", |
| 2135 "testonly", |
| 2136 ]) |
| 2137 depfile = "$target_gen_dir/$target_name.d" |
| 2138 args = [ |
| 2139 "--main-manifest", |
| 2140 rebase_path(invoker.main_manifest, root_build_dir), |
| 2141 "--out-manifest", |
| 2142 rebase_path(invoker.out_manifest, root_build_dir), |
| 2143 "--split", |
| 2144 invoker.split_name, |
| 2145 ] |
| 2146 if (defined(invoker.version_code)) { |
| 2147 args += [ |
| 2148 "--version-code", |
| 2149 invoker.version_code, |
| 2150 ] |
| 2151 } |
| 2152 if (defined(invoker.version_name)) { |
| 2153 args += [ |
| 2154 "--version-name", |
| 2155 invoker.version_name, |
| 2156 ] |
| 2157 } |
| 2158 if (defined(invoker.has_code)) { |
| 2159 args += [ |
| 2160 "--has-code", |
| 2161 invoker.has_code, |
| 2162 ] |
| 2163 } |
| 2164 args += [ |
| 2165 "--depfile", |
| 2166 rebase_path(depfile, root_build_dir), |
| 2167 ] |
| 2168 |
| 2169 script = "//build/android/gyp/generate_split_manifest.py" |
| 2170 outputs = [ |
| 2171 depfile, |
| 2172 invoker.out_manifest, |
| 2173 ] |
| 2174 inputs = [ |
| 2175 invoker.main_manifest, |
| 2176 ] |
| 2177 } |
| 2178 } |
| 2179 |
| 2180 # Generates a script in the output bin directory which runs the test |
| 2181 # target using the test runner script in build/android/test_runner.py. |
| 2182 template("test_runner_script") { |
| 2183 testonly = true |
| 2184 _test_name = invoker.test_name |
| 2185 _test_type = invoker.test_type |
| 2186 _incremental_install = |
| 2187 defined(invoker.incremental_install) && invoker.incremental_install |
| 2188 |
| 2189 action(target_name) { |
| 2190 forward_variables_from(invoker, |
| 2191 [ |
| 2192 "data_deps", |
| 2193 "deps", |
| 2194 ]) |
| 2195 if (!defined(deps)) { |
| 2196 deps = [] |
| 2197 } |
| 2198 if (!defined(data_deps)) { |
| 2199 data_deps = [] |
| 2200 } |
| 2201 |
| 2202 script = "//build/android/gyp/create_test_runner_script.py" |
| 2203 depfile = "$target_gen_dir/$target_name.d" |
| 2204 |
| 2205 data_deps += [ "//build/android:test_runner_py" ] |
| 2206 data = [] |
| 2207 |
| 2208 test_runner_args = [ |
| 2209 _test_type, |
| 2210 "--output-directory", |
| 2211 rebase_path(root_build_dir, root_build_dir), |
| 2212 ] |
| 2213 |
| 2214 # apk_target is not used for native executable tests |
| 2215 # (e.g. breakpad_unittests). |
| 2216 if (defined(invoker.apk_target)) { |
| 2217 assert(!defined(invoker.executable_dist_dir)) |
| 2218 deps += [ "${invoker.apk_target}__build_config" ] |
| 2219 _apk_build_config = |
| 2220 get_label_info(invoker.apk_target, "target_gen_dir") + "/" + |
| 2221 get_label_info(invoker.apk_target, "name") + ".build_config" |
| 2222 _rebased_apk_build_config = rebase_path(_apk_build_config, root_build_dir) |
| 2223 assert(_rebased_apk_build_config != "") # Mark as used. |
| 2224 } else if (_test_type == "gtest") { |
| 2225 assert( |
| 2226 defined(invoker.executable_dist_dir), |
| 2227 "Must define either apk_target or executable_dist_dir for test_runner_
script()") |
| 2228 test_runner_args += [ |
| 2229 "--executable-dist-dir", |
| 2230 rebase_path(invoker.executable_dist_dir, root_build_dir), |
| 2231 ] |
| 2232 } |
| 2233 |
| 2234 if (_test_type == "gtest") { |
| 2235 assert(defined(invoker.test_suite)) |
| 2236 test_runner_args += [ |
| 2237 "--suite", |
| 2238 invoker.test_suite, |
| 2239 ] |
| 2240 } else if (_test_type == "instrumentation") { |
| 2241 _test_apk = "@FileArg($_rebased_apk_build_config:deps_info:apk_path)" |
| 2242 if (_incremental_install) { |
| 2243 _test_apk = "@FileArg($_rebased_apk_build_config:deps_info:incremental_a
pk_path)" |
| 2244 } |
| 2245 test_runner_args += [ "--test-apk=$_test_apk" ] |
| 2246 if (defined(invoker.apk_under_test)) { |
| 2247 deps += [ "${invoker.apk_under_test}__build_config" ] |
| 2248 _apk_under_test_build_config = |
| 2249 get_label_info(invoker.apk_under_test, "target_gen_dir") + "/" + |
| 2250 get_label_info(invoker.apk_under_test, "name") + ".build_config" |
| 2251 _rebased_apk_under_test_build_config = |
| 2252 rebase_path(_apk_under_test_build_config, root_build_dir) |
| 2253 _apk_under_test = |
| 2254 "@FileArg($_rebased_apk_under_test_build_config:deps_info:apk_path)" |
| 2255 if (_incremental_install) { |
| 2256 _apk_under_test = "@FileArg($_rebased_apk_under_test_build_config:deps
_info:incremental_apk_path)" |
| 2257 } |
| 2258 test_runner_args += [ "--apk-under-test=$_apk_under_test" ] |
| 2259 } |
| 2260 if (emma_coverage) { |
| 2261 # Set a default coverage output directory (can be overridden by user |
| 2262 # passing the same flag). |
| 2263 test_runner_args += [ |
| 2264 "--coverage-dir", |
| 2265 rebase_path("$root_out_dir/coverage", root_build_dir), |
| 2266 ] |
| 2267 } |
| 2268 } else if (_test_type == "junit") { |
| 2269 assert(defined(invoker.test_suite)) |
| 2270 test_runner_args += [ |
| 2271 "--test-suite", |
| 2272 invoker.test_suite, |
| 2273 ] |
| 2274 } else { |
| 2275 assert(false, "Invalid test type: $_test_type.") |
| 2276 } |
| 2277 |
| 2278 if (defined(invoker.additional_apks)) { |
| 2279 foreach(additional_apk, invoker.additional_apks) { |
| 2280 deps += [ "${additional_apk}__build_config" ] |
| 2281 _build_config = get_label_info(additional_apk, "target_gen_dir") + "/" + |
| 2282 get_label_info(additional_apk, "name") + ".build_config" |
| 2283 _rebased_build_config = rebase_path(_build_config, root_build_dir) |
| 2284 test_runner_args += [ |
| 2285 "--additional-apk", |
| 2286 "@FileArg($_rebased_build_config:deps_info:apk_path)", |
| 2287 ] |
| 2288 } |
| 2289 } |
| 2290 if (defined(invoker.isolate_file)) { |
| 2291 data += [ invoker.isolate_file ] |
| 2292 test_runner_args += [ |
| 2293 "--isolate-file-path", |
| 2294 rebase_path(invoker.isolate_file, root_build_dir), |
| 2295 ] |
| 2296 } |
| 2297 if (defined(invoker.shard_timeout)) { |
| 2298 test_runner_args += [ "--shard-timeout=${invoker.shard_timeout}" ] |
| 2299 } |
| 2300 if (_incremental_install) { |
| 2301 test_runner_args += [ |
| 2302 "--test-apk-incremental-install-script", |
| 2303 "@FileArg($_rebased_apk_build_config:deps_info:incremental_install_scrip
t_path)", |
| 2304 ] |
| 2305 if (defined(invoker.apk_under_test)) { |
| 2306 test_runner_args += [ |
| 2307 "--apk-under-test-incremental-install-script", |
| 2308 "@FileArg($_rebased_apk_under_test_build_config:deps_info:incremental_
install_script_path)", |
| 2309 ] |
| 2310 } |
| 2311 test_runner_args += [ "--fast-local-dev" ] |
| 2312 } |
| 2313 if (is_asan) { |
| 2314 test_runner_args += [ "--tool=asan" ] |
| 2315 } |
| 2316 |
| 2317 generated_script = "$root_build_dir/bin/run_${_test_name}" |
| 2318 outputs = [ |
| 2319 depfile, |
| 2320 generated_script, |
| 2321 ] |
| 2322 data += [ generated_script ] |
| 2323 |
| 2324 args = [ |
| 2325 "--depfile", |
| 2326 rebase_path(depfile, root_build_dir), |
| 2327 "--script-output-path", |
| 2328 rebase_path(generated_script, root_build_dir), |
| 2329 ] |
| 2330 args += test_runner_args |
| 2331 } |
| 2332 } |
OLD | NEW |