1*6777b538SAndroid Build Coastguard Worker# Copyright 2014 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker# Do not add any imports to non-//build directories here. 6*6777b538SAndroid Build Coastguard Worker# Some projects (e.g. V8) do not have non-build directories DEPS'ed in. 7*6777b538SAndroid Build Coastguard Workerimport("//build/config/android/channel.gni") 8*6777b538SAndroid Build Coastguard Workerimport("//build/config/android/config.gni") 9*6777b538SAndroid Build Coastguard Workerimport("//build/config/compiler/compiler.gni") 10*6777b538SAndroid Build Coastguard Workerimport("//build/config/compute_inputs_for_analyze.gni") 11*6777b538SAndroid Build Coastguard Workerimport("//build/config/coverage/coverage.gni") 12*6777b538SAndroid Build Coastguard Workerimport("//build/config/python.gni") 13*6777b538SAndroid Build Coastguard Workerimport("//build/config/sanitizers/sanitizers.gni") 14*6777b538SAndroid Build Coastguard Workerimport("//build/toolchain/goma.gni") 15*6777b538SAndroid Build Coastguard Workerimport("//build/toolchain/kythe.gni") 16*6777b538SAndroid Build Coastguard Workerimport("//build/util/generate_wrapper.gni") 17*6777b538SAndroid Build Coastguard Workerimport("//build_overrides/build.gni") 18*6777b538SAndroid Build Coastguard Workerif (current_toolchain == default_toolchain) { 19*6777b538SAndroid Build Coastguard Worker import("//build/toolchain/concurrent_links.gni") 20*6777b538SAndroid Build Coastguard Worker} 21*6777b538SAndroid Build Coastguard Workerassert(is_android) 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Workerdefault_android_sdk_dep = "//third_party/android_sdk:android_sdk_java" 24*6777b538SAndroid Build Coastguard Worker_kotlin_stdlib_dep = "//third_party/kotlin_stdlib:kotlin_stdlib_java" 25*6777b538SAndroid Build Coastguard Worker_jacoco_dep = "//third_party/jacoco:jacocoagent_java" 26*6777b538SAndroid Build Coastguard Worker_jacoco_host_jar = 27*6777b538SAndroid Build Coastguard Worker "$root_build_dir/lib.java/third_party/jacoco/jacocoagent_java.jar" 28*6777b538SAndroid Build Coastguard Worker_robolectric_libs_dir = 29*6777b538SAndroid Build Coastguard Worker rebase_path( 30*6777b538SAndroid Build Coastguard Worker get_label_info("//:foo($robolectric_toolchain)", "root_out_dir"), 31*6777b538SAndroid Build Coastguard Worker root_build_dir) 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker# The following _java_*_types variables capture all the existing target types. 34*6777b538SAndroid Build Coastguard Worker# If a new type is introduced, please add it to one of these categories, 35*6777b538SAndroid Build Coastguard Worker# preferring the more specific resource/library types. 36*6777b538SAndroid Build Coastguard Worker_java_resource_types = [ 37*6777b538SAndroid Build Coastguard Worker "android_assets", 38*6777b538SAndroid Build Coastguard Worker "android_resources", 39*6777b538SAndroid Build Coastguard Worker] 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker_java_library_types = [ 42*6777b538SAndroid Build Coastguard Worker "java_library", 43*6777b538SAndroid Build Coastguard Worker "system_java_library", 44*6777b538SAndroid Build Coastguard Worker "android_app_bundle_module", 45*6777b538SAndroid Build Coastguard Worker] 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker# These are leaf java target types. They cannot be passed as deps to other 48*6777b538SAndroid Build Coastguard Worker# targets. Thus their naming schemes are not enforced. 49*6777b538SAndroid Build Coastguard Worker_java_leaf_types = [ 50*6777b538SAndroid Build Coastguard Worker "android_apk", 51*6777b538SAndroid Build Coastguard Worker "android_app_bundle", 52*6777b538SAndroid Build Coastguard Worker "dist_aar", 53*6777b538SAndroid Build Coastguard Worker "dist_jar", 54*6777b538SAndroid Build Coastguard Worker "java_annotation_processor", 55*6777b538SAndroid Build Coastguard Worker "java_binary", 56*6777b538SAndroid Build Coastguard Worker "robolectric_binary", 57*6777b538SAndroid Build Coastguard Worker] 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker# All _java_resource_types targets must conform to these patterns. 60*6777b538SAndroid Build Coastguard Workerjava_resource_patterns = [ 61*6777b538SAndroid Build Coastguard Worker "*_assets", 62*6777b538SAndroid Build Coastguard Worker "*_grd", 63*6777b538SAndroid Build Coastguard Worker "*_java_strings", 64*6777b538SAndroid Build Coastguard Worker "*locale_paks", 65*6777b538SAndroid Build Coastguard Worker "*_resources", 66*6777b538SAndroid Build Coastguard Worker "*strings_java", 67*6777b538SAndroid Build Coastguard Worker "*android*:assets", 68*6777b538SAndroid Build Coastguard Worker "*:*_apk_*resources", 69*6777b538SAndroid Build Coastguard Worker "*android*:resources", 70*6777b538SAndroid Build Coastguard Worker] 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Worker# All _java_library_types targets must conform to these patterns. This includes 73*6777b538SAndroid Build Coastguard Worker# all non-leaf targets that use java_library_impl. 74*6777b538SAndroid Build Coastguard Workerjava_library_patterns = [ 75*6777b538SAndroid Build Coastguard Worker "*_java", 76*6777b538SAndroid Build Coastguard Worker "*_javalib", 77*6777b538SAndroid Build Coastguard Worker "*javatests", 78*6777b538SAndroid Build Coastguard Worker "*_bundle_module", 79*6777b538SAndroid Build Coastguard Worker "*:*_java_*", # E.g. chrome_java_test_support 80*6777b538SAndroid Build Coastguard Worker "*:java", 81*6777b538SAndroid Build Coastguard Worker "*/java", # to allow filtering without expanding labels //a/java -> 82*6777b538SAndroid Build Coastguard Worker # //a/java:java 83*6777b538SAndroid Build Coastguard Worker "*:junit", 84*6777b538SAndroid Build Coastguard Worker "*/junit", 85*6777b538SAndroid Build Coastguard Worker "*:junit_*", 86*6777b538SAndroid Build Coastguard Worker "*:*_junit_*", 87*6777b538SAndroid Build Coastguard Worker 88*6777b538SAndroid Build Coastguard Worker # TODO(agrieve): Rename to glue_java 89*6777b538SAndroid Build Coastguard Worker "//android_webview/glue", 90*6777b538SAndroid Build Coastguard Worker "//android_webview/glue:glue", 91*6777b538SAndroid Build Coastguard Worker] 92*6777b538SAndroid Build Coastguard Worker 93*6777b538SAndroid Build Coastguard Worker# These identify all non-leaf targets that have .build_config.json files. This is the 94*6777b538SAndroid Build Coastguard Worker# set of patterns that other targets can use to filter out java targets. 95*6777b538SAndroid Build Coastguard Workerjava_target_patterns = java_library_patterns + java_resource_patterns 96*6777b538SAndroid Build Coastguard Worker 97*6777b538SAndroid Build Coastguard Worker_r8_path = "//third_party/r8/lib/r8.jar" 98*6777b538SAndroid Build Coastguard Worker_custom_r8_path = "//third_party/r8/custom_r8.jar" 99*6777b538SAndroid Build Coastguard Worker 100*6777b538SAndroid Build Coastguard Worker# This duplication is intentional, so we avoid updating the r8.jar used by 101*6777b538SAndroid Build Coastguard Worker# dexing unless necessary, since each update invalidates all incremental dexing 102*6777b538SAndroid Build Coastguard Worker# and unnecessarily slows down all bots. 103*6777b538SAndroid Build Coastguard Worker_d8_path = "//third_party/r8/d8/lib/r8.jar" 104*6777b538SAndroid Build Coastguard Worker_custom_d8_path = "//third_party/r8/custom_d8.jar" 105*6777b538SAndroid Build Coastguard Worker_default_lint_jar_path = "//third_party/android_build_tools/lint/lint.jar" 106*6777b538SAndroid Build Coastguard Worker_custom_lint_jar_path = "//third_party/android_build_tools/lint/custom_lint.jar" 107*6777b538SAndroid Build Coastguard Worker_manifest_merger_jar_path = 108*6777b538SAndroid Build Coastguard Worker "//third_party/android_build_tools/manifest_merger/manifest-merger.jar" 109*6777b538SAndroid Build Coastguard Worker 110*6777b538SAndroid Build Coastguard Worker# Put the bug number in the target name so that false-positives have a hint in 111*6777b538SAndroid Build Coastguard Worker# the error message about why non-existent dependencies are there. 112*6777b538SAndroid Build Coastguard Workerbuild_config_target_suffix = "__build_config_crbug_908819" 113*6777b538SAndroid Build Coastguard Worker 114*6777b538SAndroid Build Coastguard Worker# Write the target's .build_config.json file. This is a json file that contains a 115*6777b538SAndroid Build Coastguard Worker# dictionary of information about how to build this target (things that 116*6777b538SAndroid Build Coastguard Worker# require knowledge about this target's dependencies and cannot be calculated 117*6777b538SAndroid Build Coastguard Worker# at gn-time). There is a special syntax to add a value in that dictionary to 118*6777b538SAndroid Build Coastguard Worker# an action/action_foreachs args: 119*6777b538SAndroid Build Coastguard Worker# --python-arg=@FileArg($rebased_build_config_path:key0:key1) 120*6777b538SAndroid Build Coastguard Worker# At runtime, such an arg will be replaced by the value in the build_config. 121*6777b538SAndroid Build Coastguard Worker# See build/android/gyp/write_build_config.py and 122*6777b538SAndroid Build Coastguard Worker# build/android/gyp/util/build_utils.py:ExpandFileArgs 123*6777b538SAndroid Build Coastguard Workertemplate("write_build_config") { 124*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 125*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "testonly" ]) 126*6777b538SAndroid Build Coastguard Worker _type = invoker.type 127*6777b538SAndroid Build Coastguard Worker _parent_invoker = invoker.invoker 128*6777b538SAndroid Build Coastguard Worker _target_label = 129*6777b538SAndroid Build Coastguard Worker get_label_info(":${_parent_invoker.target_name}", "label_no_toolchain") 130*6777b538SAndroid Build Coastguard Worker 131*6777b538SAndroid Build Coastguard Worker # Ensure targets match naming patterns so that __assetres, __header, __host, 132*6777b538SAndroid Build Coastguard Worker # and __validate targets work properly. 133*6777b538SAndroid Build Coastguard Worker if (filter_exclude([ _type ], _java_resource_types) == []) { 134*6777b538SAndroid Build Coastguard Worker if (filter_exclude([ _target_label ], java_resource_patterns) != []) { 135*6777b538SAndroid Build Coastguard Worker assert(false, "Invalid java resource target name: $_target_label") 136*6777b538SAndroid Build Coastguard Worker } 137*6777b538SAndroid Build Coastguard Worker } else if (filter_exclude([ _type ], _java_library_types) == []) { 138*6777b538SAndroid Build Coastguard Worker if (filter_exclude([ _target_label ], java_library_patterns) != [] || 139*6777b538SAndroid Build Coastguard Worker filter_exclude([ _target_label ], java_resource_patterns) == []) { 140*6777b538SAndroid Build Coastguard Worker assert(false, "Invalid java library target name: $_target_label") 141*6777b538SAndroid Build Coastguard Worker } 142*6777b538SAndroid Build Coastguard Worker } else if (_type == "group") { 143*6777b538SAndroid Build Coastguard Worker if (filter_exclude([ _target_label ], java_target_patterns) != []) { 144*6777b538SAndroid Build Coastguard Worker assert(false, "Invalid java target name: $_target_label") 145*6777b538SAndroid Build Coastguard Worker } 146*6777b538SAndroid Build Coastguard Worker } else if (filter_exclude([ _type ], _java_leaf_types) != []) { 147*6777b538SAndroid Build Coastguard Worker assert(false, "This java type needs a category: $_type") 148*6777b538SAndroid Build Coastguard Worker } 149*6777b538SAndroid Build Coastguard Worker 150*6777b538SAndroid Build Coastguard Worker if (defined(invoker.public_target_label)) { 151*6777b538SAndroid Build Coastguard Worker _target_label = invoker.public_target_label 152*6777b538SAndroid Build Coastguard Worker } 153*6777b538SAndroid Build Coastguard Worker 154*6777b538SAndroid Build Coastguard Worker deps = [] 155*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 156*6777b538SAndroid Build Coastguard Worker deps = invoker.deps 157*6777b538SAndroid Build Coastguard Worker } 158*6777b538SAndroid Build Coastguard Worker if (defined(invoker.android_manifest_dep)) { 159*6777b538SAndroid Build Coastguard Worker deps += [ invoker.android_manifest_dep ] 160*6777b538SAndroid Build Coastguard Worker } 161*6777b538SAndroid Build Coastguard Worker 162*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/write_build_config.py" 163*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 164*6777b538SAndroid Build Coastguard Worker inputs = [] 165*6777b538SAndroid Build Coastguard Worker outputs = [ invoker.build_config ] 166*6777b538SAndroid Build Coastguard Worker 167*6777b538SAndroid Build Coastguard Worker _deps_configs = [] 168*6777b538SAndroid Build Coastguard Worker if (defined(invoker.possible_config_deps)) { 169*6777b538SAndroid Build Coastguard Worker foreach(_possible_dep, invoker.possible_config_deps) { 170*6777b538SAndroid Build Coastguard Worker _dep_label = get_label_info(_possible_dep, "label_no_toolchain") 171*6777b538SAndroid Build Coastguard Worker if (filter_exclude([ _dep_label ], java_target_patterns) == []) { 172*6777b538SAndroid Build Coastguard Worker deps += [ "$_dep_label$build_config_target_suffix" ] 173*6777b538SAndroid Build Coastguard Worker _dep_gen_dir = get_label_info(_possible_dep, "target_gen_dir") 174*6777b538SAndroid Build Coastguard Worker _dep_name = get_label_info(_possible_dep, "name") 175*6777b538SAndroid Build Coastguard Worker _dep_config = "$_dep_gen_dir/$_dep_name.build_config.json" 176*6777b538SAndroid Build Coastguard Worker 177*6777b538SAndroid Build Coastguard Worker _deps_configs += [ _dep_config ] 178*6777b538SAndroid Build Coastguard Worker } 179*6777b538SAndroid Build Coastguard Worker } 180*6777b538SAndroid Build Coastguard Worker } 181*6777b538SAndroid Build Coastguard Worker _public_deps_configs = [] 182*6777b538SAndroid Build Coastguard Worker if (defined(invoker.possible_config_public_deps)) { 183*6777b538SAndroid Build Coastguard Worker foreach(_possible_dep, invoker.possible_config_public_deps) { 184*6777b538SAndroid Build Coastguard Worker _dep_label = get_label_info(_possible_dep, "label_no_toolchain") 185*6777b538SAndroid Build Coastguard Worker 186*6777b538SAndroid Build Coastguard Worker # E.g. Adding an action that generates a .java file that is then 187*6777b538SAndroid Build Coastguard Worker # consumed by a subsequent java_library() target would not work 188*6777b538SAndroid Build Coastguard Worker # because the libraries depend only on the nested targets of one 189*6777b538SAndroid Build Coastguard Worker # another. It is simplest to just ban non-java public_deps. 190*6777b538SAndroid Build Coastguard Worker assert(filter_exclude([ _dep_label ], java_target_patterns) == [], 191*6777b538SAndroid Build Coastguard Worker "Only java_library targets can be used as public_deps. " + 192*6777b538SAndroid Build Coastguard Worker "Found:\n${_dep_label}\non Target:\n" + 193*6777b538SAndroid Build Coastguard Worker get_label_info(":$target_name", "label_no_toolchain")) 194*6777b538SAndroid Build Coastguard Worker 195*6777b538SAndroid Build Coastguard Worker # Put the bug number in the target name so that false-positives 196*6777b538SAndroid Build Coastguard Worker # have a hint in the error message about non-existent dependencies. 197*6777b538SAndroid Build Coastguard Worker deps += [ "$_dep_label$build_config_target_suffix" ] 198*6777b538SAndroid Build Coastguard Worker _dep_gen_dir = get_label_info(_possible_dep, "target_gen_dir") 199*6777b538SAndroid Build Coastguard Worker _dep_name = get_label_info(_possible_dep, "name") 200*6777b538SAndroid Build Coastguard Worker _dep_config = "$_dep_gen_dir/$_dep_name.build_config.json" 201*6777b538SAndroid Build Coastguard Worker 202*6777b538SAndroid Build Coastguard Worker _public_deps_configs += [ _dep_config ] 203*6777b538SAndroid Build Coastguard Worker } 204*6777b538SAndroid Build Coastguard Worker } 205*6777b538SAndroid Build Coastguard Worker inputs += _deps_configs 206*6777b538SAndroid Build Coastguard Worker inputs += _public_deps_configs 207*6777b538SAndroid Build Coastguard Worker _rebased_deps_configs = rebase_path(_deps_configs, root_build_dir) 208*6777b538SAndroid Build Coastguard Worker _rebased_public_deps_configs = 209*6777b538SAndroid Build Coastguard Worker rebase_path(_public_deps_configs, root_build_dir) 210*6777b538SAndroid Build Coastguard Worker 211*6777b538SAndroid Build Coastguard Worker args = [ 212*6777b538SAndroid Build Coastguard Worker "--type=$_type", 213*6777b538SAndroid Build Coastguard Worker "--depfile", 214*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 215*6777b538SAndroid Build Coastguard Worker "--deps-configs=$_rebased_deps_configs", 216*6777b538SAndroid Build Coastguard Worker "--public-deps-configs=$_rebased_public_deps_configs", 217*6777b538SAndroid Build Coastguard Worker "--build-config", 218*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.build_config, root_build_dir), 219*6777b538SAndroid Build Coastguard Worker "--gn-target", 220*6777b538SAndroid Build Coastguard Worker _target_label, 221*6777b538SAndroid Build Coastguard Worker ] 222*6777b538SAndroid Build Coastguard Worker 223*6777b538SAndroid Build Coastguard Worker if (defined(invoker.preferred_dep) && invoker.preferred_dep) { 224*6777b538SAndroid Build Coastguard Worker args += [ "--preferred-dep" ] 225*6777b538SAndroid Build Coastguard Worker } 226*6777b538SAndroid Build Coastguard Worker 227*6777b538SAndroid Build Coastguard Worker if (defined(invoker.aar_path)) { 228*6777b538SAndroid Build Coastguard Worker args += [ 229*6777b538SAndroid Build Coastguard Worker "--aar-path", 230*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.aar_path, root_build_dir), 231*6777b538SAndroid Build Coastguard Worker ] 232*6777b538SAndroid Build Coastguard Worker } 233*6777b538SAndroid Build Coastguard Worker 234*6777b538SAndroid Build Coastguard Worker if (defined(invoker.chromium_code) && !invoker.chromium_code) { 235*6777b538SAndroid Build Coastguard Worker # Default to chromium code if invoker did not pass anything. 236*6777b538SAndroid Build Coastguard Worker args += [ "--non-chromium-code" ] 237*6777b538SAndroid Build Coastguard Worker } 238*6777b538SAndroid Build Coastguard Worker 239*6777b538SAndroid Build Coastguard Worker if (defined(invoker.device_jar_path)) { 240*6777b538SAndroid Build Coastguard Worker args += [ 241*6777b538SAndroid Build Coastguard Worker "--device-jar-path", 242*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.device_jar_path, root_build_dir), 243*6777b538SAndroid Build Coastguard Worker ] 244*6777b538SAndroid Build Coastguard Worker } 245*6777b538SAndroid Build Coastguard Worker if (defined(invoker.host_jar_path)) { 246*6777b538SAndroid Build Coastguard Worker args += [ 247*6777b538SAndroid Build Coastguard Worker "--host-jar-path", 248*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.host_jar_path, root_build_dir), 249*6777b538SAndroid Build Coastguard Worker ] 250*6777b538SAndroid Build Coastguard Worker } 251*6777b538SAndroid Build Coastguard Worker if (defined(invoker.unprocessed_jar_path)) { 252*6777b538SAndroid Build Coastguard Worker args += [ 253*6777b538SAndroid Build Coastguard Worker "--unprocessed-jar-path", 254*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.unprocessed_jar_path, root_build_dir), 255*6777b538SAndroid Build Coastguard Worker ] 256*6777b538SAndroid Build Coastguard Worker } 257*6777b538SAndroid Build Coastguard Worker if (defined(invoker.ijar_path)) { 258*6777b538SAndroid Build Coastguard Worker args += [ 259*6777b538SAndroid Build Coastguard Worker "--interface-jar-path", 260*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.ijar_path, root_build_dir), 261*6777b538SAndroid Build Coastguard Worker ] 262*6777b538SAndroid Build Coastguard Worker } 263*6777b538SAndroid Build Coastguard Worker if (defined(invoker.kotlinc_jar_path)) { 264*6777b538SAndroid Build Coastguard Worker args += [ 265*6777b538SAndroid Build Coastguard Worker "--kotlinc-jar-path", 266*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.kotlinc_jar_path, root_build_dir), 267*6777b538SAndroid Build Coastguard Worker ] 268*6777b538SAndroid Build Coastguard Worker } 269*6777b538SAndroid Build Coastguard Worker if (defined(invoker.java_resources_jar)) { 270*6777b538SAndroid Build Coastguard Worker args += [ 271*6777b538SAndroid Build Coastguard Worker "--java-resources-jar-path", 272*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.java_resources_jar, root_build_dir), 273*6777b538SAndroid Build Coastguard Worker ] 274*6777b538SAndroid Build Coastguard Worker } 275*6777b538SAndroid Build Coastguard Worker if (defined(invoker.annotation_processor_deps) && 276*6777b538SAndroid Build Coastguard Worker invoker.annotation_processor_deps != []) { 277*6777b538SAndroid Build Coastguard Worker _processor_configs = [] 278*6777b538SAndroid Build Coastguard Worker foreach(_dep_label, invoker.annotation_processor_deps) { 279*6777b538SAndroid Build Coastguard Worker deps += [ "$_dep_label$build_config_target_suffix" ] 280*6777b538SAndroid Build Coastguard Worker _dep_gen_dir = get_label_info(_dep_label, "target_gen_dir") 281*6777b538SAndroid Build Coastguard Worker _dep_name = get_label_info(_dep_label, "name") 282*6777b538SAndroid Build Coastguard Worker _dep_config = "$_dep_gen_dir/$_dep_name.build_config.json" 283*6777b538SAndroid Build Coastguard Worker _processor_configs += [ _dep_config ] 284*6777b538SAndroid Build Coastguard Worker } 285*6777b538SAndroid Build Coastguard Worker _rebased_processor_configs = 286*6777b538SAndroid Build Coastguard Worker rebase_path(_processor_configs, root_build_dir) 287*6777b538SAndroid Build Coastguard Worker inputs += _processor_configs 288*6777b538SAndroid Build Coastguard Worker args += [ "--annotation-processor-configs=$_rebased_processor_configs" ] 289*6777b538SAndroid Build Coastguard Worker } 290*6777b538SAndroid Build Coastguard Worker 291*6777b538SAndroid Build Coastguard Worker # Dex path for library targets, or the the intermediate library for apks. 292*6777b538SAndroid Build Coastguard Worker if (defined(invoker.dex_path)) { 293*6777b538SAndroid Build Coastguard Worker args += [ 294*6777b538SAndroid Build Coastguard Worker "--dex-path", 295*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.dex_path, root_build_dir), 296*6777b538SAndroid Build Coastguard Worker ] 297*6777b538SAndroid Build Coastguard Worker } 298*6777b538SAndroid Build Coastguard Worker 299*6777b538SAndroid Build Coastguard Worker # Dex path for the final apk. 300*6777b538SAndroid Build Coastguard Worker if (defined(invoker.final_dex_path)) { 301*6777b538SAndroid Build Coastguard Worker args += [ 302*6777b538SAndroid Build Coastguard Worker "--final-dex-path", 303*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.final_dex_path, root_build_dir), 304*6777b538SAndroid Build Coastguard Worker ] 305*6777b538SAndroid Build Coastguard Worker } 306*6777b538SAndroid Build Coastguard Worker if (defined(invoker.supports_android) && invoker.supports_android) { 307*6777b538SAndroid Build Coastguard Worker args += [ "--supports-android" ] 308*6777b538SAndroid Build Coastguard Worker } 309*6777b538SAndroid Build Coastguard Worker if (defined(invoker.requires_android) && invoker.requires_android) { 310*6777b538SAndroid Build Coastguard Worker args += [ "--requires-android" ] 311*6777b538SAndroid Build Coastguard Worker } 312*6777b538SAndroid Build Coastguard Worker if (defined(invoker.is_prebuilt) && invoker.is_prebuilt) { 313*6777b538SAndroid Build Coastguard Worker args += [ "--is-prebuilt" ] 314*6777b538SAndroid Build Coastguard Worker } 315*6777b538SAndroid Build Coastguard Worker if (defined(invoker.bypass_platform_checks) && 316*6777b538SAndroid Build Coastguard Worker invoker.bypass_platform_checks) { 317*6777b538SAndroid Build Coastguard Worker args += [ "--bypass-platform-checks" ] 318*6777b538SAndroid Build Coastguard Worker } 319*6777b538SAndroid Build Coastguard Worker if (defined(invoker.is_robolectric) && invoker.is_robolectric) { 320*6777b538SAndroid Build Coastguard Worker args += [ "--is-robolectric" ] 321*6777b538SAndroid Build Coastguard Worker } 322*6777b538SAndroid Build Coastguard Worker 323*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apk_under_test)) { 324*6777b538SAndroid Build Coastguard Worker _dep_label = invoker.apk_under_test 325*6777b538SAndroid Build Coastguard Worker _dep_gen_dir = get_label_info(_dep_label, "target_gen_dir") 326*6777b538SAndroid Build Coastguard Worker _dep_name = get_label_info(_dep_label, "name") 327*6777b538SAndroid Build Coastguard Worker _dep_config = "$_dep_gen_dir/$_dep_name.build_config.json" 328*6777b538SAndroid Build Coastguard Worker inputs += [ _dep_config ] 329*6777b538SAndroid Build Coastguard Worker deps += [ "$_dep_label$build_config_target_suffix" ] 330*6777b538SAndroid Build Coastguard Worker args += [ 331*6777b538SAndroid Build Coastguard Worker "--tested-apk-config", 332*6777b538SAndroid Build Coastguard Worker rebase_path(_dep_config, root_build_dir), 333*6777b538SAndroid Build Coastguard Worker ] 334*6777b538SAndroid Build Coastguard Worker } 335*6777b538SAndroid Build Coastguard Worker 336*6777b538SAndroid Build Coastguard Worker if (defined(invoker.asset_sources)) { 337*6777b538SAndroid Build Coastguard Worker _rebased_asset_sources = 338*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.asset_sources, root_build_dir) 339*6777b538SAndroid Build Coastguard Worker args += [ "--asset-sources=$_rebased_asset_sources" ] 340*6777b538SAndroid Build Coastguard Worker } 341*6777b538SAndroid Build Coastguard Worker if (defined(invoker.asset_renaming_sources)) { 342*6777b538SAndroid Build Coastguard Worker _rebased_asset_renaming_sources = 343*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.asset_renaming_sources, root_build_dir) 344*6777b538SAndroid Build Coastguard Worker args += [ "--asset-renaming-sources=$_rebased_asset_renaming_sources" ] 345*6777b538SAndroid Build Coastguard Worker 346*6777b538SAndroid Build Coastguard Worker # These are zip paths, so no need to rebase. 347*6777b538SAndroid Build Coastguard Worker args += [ 348*6777b538SAndroid Build Coastguard Worker "--asset-renaming-destinations=${invoker.asset_renaming_destinations}", 349*6777b538SAndroid Build Coastguard Worker ] 350*6777b538SAndroid Build Coastguard Worker } 351*6777b538SAndroid Build Coastguard Worker if (defined(invoker.disable_compression) && invoker.disable_compression) { 352*6777b538SAndroid Build Coastguard Worker args += [ "--disable-asset-compression" ] 353*6777b538SAndroid Build Coastguard Worker } 354*6777b538SAndroid Build Coastguard Worker if (defined(invoker.treat_as_locale_paks) && invoker.treat_as_locale_paks) { 355*6777b538SAndroid Build Coastguard Worker args += [ "--treat-as-locale-paks" ] 356*6777b538SAndroid Build Coastguard Worker } 357*6777b538SAndroid Build Coastguard Worker 358*6777b538SAndroid Build Coastguard Worker if (defined(invoker.merged_android_manifest)) { 359*6777b538SAndroid Build Coastguard Worker args += [ 360*6777b538SAndroid Build Coastguard Worker "--merged-android-manifest", 361*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.merged_android_manifest, root_build_dir), 362*6777b538SAndroid Build Coastguard Worker ] 363*6777b538SAndroid Build Coastguard Worker } 364*6777b538SAndroid Build Coastguard Worker if (defined(invoker.android_manifest)) { 365*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.android_manifest ] 366*6777b538SAndroid Build Coastguard Worker args += [ 367*6777b538SAndroid Build Coastguard Worker "--android-manifest", 368*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.android_manifest, root_build_dir), 369*6777b538SAndroid Build Coastguard Worker ] 370*6777b538SAndroid Build Coastguard Worker } 371*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resources_zip)) { 372*6777b538SAndroid Build Coastguard Worker args += [ 373*6777b538SAndroid Build Coastguard Worker "--resources-zip", 374*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.resources_zip, root_build_dir), 375*6777b538SAndroid Build Coastguard Worker ] 376*6777b538SAndroid Build Coastguard Worker } 377*6777b538SAndroid Build Coastguard Worker 378*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resource_overlay) && invoker.resource_overlay) { 379*6777b538SAndroid Build Coastguard Worker args += [ "--resource-overlay" ] 380*6777b538SAndroid Build Coastguard Worker } 381*6777b538SAndroid Build Coastguard Worker 382*6777b538SAndroid Build Coastguard Worker if (defined(invoker.custom_package)) { 383*6777b538SAndroid Build Coastguard Worker args += [ 384*6777b538SAndroid Build Coastguard Worker "--package-name", 385*6777b538SAndroid Build Coastguard Worker invoker.custom_package, 386*6777b538SAndroid Build Coastguard Worker ] 387*6777b538SAndroid Build Coastguard Worker } 388*6777b538SAndroid Build Coastguard Worker if (defined(invoker.r_text)) { 389*6777b538SAndroid Build Coastguard Worker args += [ 390*6777b538SAndroid Build Coastguard Worker "--r-text-path", 391*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.r_text, root_build_dir), 392*6777b538SAndroid Build Coastguard Worker ] 393*6777b538SAndroid Build Coastguard Worker } 394*6777b538SAndroid Build Coastguard Worker if (defined(invoker.res_size_info_path)) { 395*6777b538SAndroid Build Coastguard Worker args += [ 396*6777b538SAndroid Build Coastguard Worker "--res-size-info", 397*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.res_size_info_path, root_build_dir), 398*6777b538SAndroid Build Coastguard Worker ] 399*6777b538SAndroid Build Coastguard Worker } 400*6777b538SAndroid Build Coastguard Worker if (defined(invoker.res_sources_path)) { 401*6777b538SAndroid Build Coastguard Worker _res_sources_path = rebase_path(invoker.res_sources_path, root_build_dir) 402*6777b538SAndroid Build Coastguard Worker args += [ "--res-sources-path=$_res_sources_path" ] 403*6777b538SAndroid Build Coastguard Worker } 404*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proto_resources_path)) { 405*6777b538SAndroid Build Coastguard Worker _rebased_proto_resources = 406*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.proto_resources_path, root_build_dir) 407*6777b538SAndroid Build Coastguard Worker args += [ "--apk-proto-resources=$_rebased_proto_resources" ] 408*6777b538SAndroid Build Coastguard Worker } 409*6777b538SAndroid Build Coastguard Worker if (defined(invoker.r_text_path)) { 410*6777b538SAndroid Build Coastguard Worker _rebased_rtxt_path = rebase_path(invoker.r_text_path, root_build_dir) 411*6777b538SAndroid Build Coastguard Worker args += [ "--r-text-path=$_rebased_rtxt_path" ] 412*6777b538SAndroid Build Coastguard Worker } 413*6777b538SAndroid Build Coastguard Worker if (defined(invoker.module_pathmap_path)) { 414*6777b538SAndroid Build Coastguard Worker _rebased_pathmap_path = 415*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.module_pathmap_path, root_build_dir) 416*6777b538SAndroid Build Coastguard Worker args += [ "--module-pathmap-path=$_rebased_pathmap_path" ] 417*6777b538SAndroid Build Coastguard Worker } 418*6777b538SAndroid Build Coastguard Worker 419*6777b538SAndroid Build Coastguard Worker if (defined(invoker.shared_libraries_runtime_deps_file)) { 420*6777b538SAndroid Build Coastguard Worker # Don't list shared_libraries_runtime_deps_file as an input in order to 421*6777b538SAndroid Build Coastguard Worker # avoid having to depend on the runtime_deps target. See comment in 422*6777b538SAndroid Build Coastguard Worker # rules.gni for why we do this. 423*6777b538SAndroid Build Coastguard Worker args += [ 424*6777b538SAndroid Build Coastguard Worker "--shared-libraries-runtime-deps", 425*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.shared_libraries_runtime_deps_file, root_build_dir), 426*6777b538SAndroid Build Coastguard Worker ] 427*6777b538SAndroid Build Coastguard Worker } 428*6777b538SAndroid Build Coastguard Worker 429*6777b538SAndroid Build Coastguard Worker if (defined(invoker.base_allowlist_rtxt_path)) { 430*6777b538SAndroid Build Coastguard Worker args += [ 431*6777b538SAndroid Build Coastguard Worker "--base-allowlist-rtxt-path", 432*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.base_allowlist_rtxt_path, root_build_dir), 433*6777b538SAndroid Build Coastguard Worker ] 434*6777b538SAndroid Build Coastguard Worker } 435*6777b538SAndroid Build Coastguard Worker 436*6777b538SAndroid Build Coastguard Worker if (defined(invoker.loadable_modules)) { 437*6777b538SAndroid Build Coastguard Worker _rebased_loadable_modules = 438*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.loadable_modules, root_build_dir) 439*6777b538SAndroid Build Coastguard Worker args += [ "--loadable-modules=$_rebased_loadable_modules" ] 440*6777b538SAndroid Build Coastguard Worker } 441*6777b538SAndroid Build Coastguard Worker 442*6777b538SAndroid Build Coastguard Worker if (defined(invoker.secondary_abi_shared_libraries_runtime_deps_file)) { 443*6777b538SAndroid Build Coastguard Worker # Don't list secondary_abi_shared_libraries_runtime_deps_file as an 444*6777b538SAndroid Build Coastguard Worker # input in order to avoid having to depend on the runtime_deps target. 445*6777b538SAndroid Build Coastguard Worker # See comment in rules.gni for why we do this. 446*6777b538SAndroid Build Coastguard Worker args += [ 447*6777b538SAndroid Build Coastguard Worker "--secondary-abi-shared-libraries-runtime-deps", 448*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.secondary_abi_shared_libraries_runtime_deps_file, 449*6777b538SAndroid Build Coastguard Worker root_build_dir), 450*6777b538SAndroid Build Coastguard Worker ] 451*6777b538SAndroid Build Coastguard Worker } 452*6777b538SAndroid Build Coastguard Worker 453*6777b538SAndroid Build Coastguard Worker if (defined(invoker.secondary_abi_loadable_modules) && 454*6777b538SAndroid Build Coastguard Worker invoker.secondary_abi_loadable_modules != []) { 455*6777b538SAndroid Build Coastguard Worker _rebased_secondary_abi_loadable_modules = 456*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.secondary_abi_loadable_modules, root_build_dir) 457*6777b538SAndroid Build Coastguard Worker args += [ "--secondary-abi-loadable-modules=$_rebased_secondary_abi_loadable_modules" ] 458*6777b538SAndroid Build Coastguard Worker } 459*6777b538SAndroid Build Coastguard Worker 460*6777b538SAndroid Build Coastguard Worker if (defined(invoker.native_lib_placeholders) && 461*6777b538SAndroid Build Coastguard Worker invoker.native_lib_placeholders != []) { 462*6777b538SAndroid Build Coastguard Worker args += [ "--native-lib-placeholders=${invoker.native_lib_placeholders}" ] 463*6777b538SAndroid Build Coastguard Worker } 464*6777b538SAndroid Build Coastguard Worker 465*6777b538SAndroid Build Coastguard Worker if (defined(invoker.secondary_native_lib_placeholders) && 466*6777b538SAndroid Build Coastguard Worker invoker.secondary_native_lib_placeholders != []) { 467*6777b538SAndroid Build Coastguard Worker args += [ "--secondary-native-lib-placeholders=${invoker.secondary_native_lib_placeholders}" ] 468*6777b538SAndroid Build Coastguard Worker } 469*6777b538SAndroid Build Coastguard Worker 470*6777b538SAndroid Build Coastguard Worker if (defined(invoker.library_always_compress)) { 471*6777b538SAndroid Build Coastguard Worker args += [ "--library-always-compress=${invoker.library_always_compress}" ] 472*6777b538SAndroid Build Coastguard Worker } 473*6777b538SAndroid Build Coastguard Worker 474*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apk_path)) { 475*6777b538SAndroid Build Coastguard Worker # TODO(tiborg): Remove APK path from build config and use 476*6777b538SAndroid Build Coastguard Worker # install_artifacts from metadata instead. 477*6777b538SAndroid Build Coastguard Worker _rebased_apk_path = rebase_path(invoker.apk_path, root_build_dir) 478*6777b538SAndroid Build Coastguard Worker args += [ "--apk-path=$_rebased_apk_path" ] 479*6777b538SAndroid Build Coastguard Worker if (defined(invoker.incremental_apk_path)) { 480*6777b538SAndroid Build Coastguard Worker _rebased_incremental_apk_path = 481*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.incremental_apk_path, root_build_dir) 482*6777b538SAndroid Build Coastguard Worker _rebased_incremental_install_json_path = 483*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.incremental_install_json_path, root_build_dir) 484*6777b538SAndroid Build Coastguard Worker args += [ 485*6777b538SAndroid Build Coastguard Worker "--incremental-install-json-path=$_rebased_incremental_install_json_path", 486*6777b538SAndroid Build Coastguard Worker "--incremental-apk-path=$_rebased_incremental_apk_path", 487*6777b538SAndroid Build Coastguard Worker ] 488*6777b538SAndroid Build Coastguard Worker } 489*6777b538SAndroid Build Coastguard Worker } 490*6777b538SAndroid Build Coastguard Worker 491*6777b538SAndroid Build Coastguard Worker if (defined(invoker.target_sources_file)) { 492*6777b538SAndroid Build Coastguard Worker args += [ 493*6777b538SAndroid Build Coastguard Worker "--target-sources-file", 494*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.target_sources_file, root_build_dir), 495*6777b538SAndroid Build Coastguard Worker ] 496*6777b538SAndroid Build Coastguard Worker } 497*6777b538SAndroid Build Coastguard Worker if (defined(invoker.srcjar)) { 498*6777b538SAndroid Build Coastguard Worker args += [ 499*6777b538SAndroid Build Coastguard Worker "--srcjar", 500*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.srcjar, root_build_dir), 501*6777b538SAndroid Build Coastguard Worker ] 502*6777b538SAndroid Build Coastguard Worker } 503*6777b538SAndroid Build Coastguard Worker if (defined(invoker.bundled_srcjars)) { 504*6777b538SAndroid Build Coastguard Worker _rebased_bundled_srcjars = 505*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.bundled_srcjars, root_build_dir) 506*6777b538SAndroid Build Coastguard Worker args += [ "--bundled-srcjars=$_rebased_bundled_srcjars" ] 507*6777b538SAndroid Build Coastguard Worker } 508*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_enabled) && invoker.proguard_enabled) { 509*6777b538SAndroid Build Coastguard Worker args += [ "--proguard-enabled" ] 510*6777b538SAndroid Build Coastguard Worker } 511*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_mapping_path)) { 512*6777b538SAndroid Build Coastguard Worker _rebased_proguard_mapping_path = 513*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.proguard_mapping_path, root_build_dir) 514*6777b538SAndroid Build Coastguard Worker args += [ "--proguard-mapping-path=$_rebased_proguard_mapping_path" ] 515*6777b538SAndroid Build Coastguard Worker } 516*6777b538SAndroid Build Coastguard Worker if (defined(invoker.input_jars_paths)) { 517*6777b538SAndroid Build Coastguard Worker _rebased_input_jars_paths = 518*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.input_jars_paths, root_build_dir) 519*6777b538SAndroid Build Coastguard Worker args += [ "--extra-classpath-jars=$_rebased_input_jars_paths" ] 520*6777b538SAndroid Build Coastguard Worker } 521*6777b538SAndroid Build Coastguard Worker if (defined(invoker.low_classpath_priority) && 522*6777b538SAndroid Build Coastguard Worker invoker.low_classpath_priority) { 523*6777b538SAndroid Build Coastguard Worker args += [ "--low-classpath-priority" ] 524*6777b538SAndroid Build Coastguard Worker } 525*6777b538SAndroid Build Coastguard Worker if (defined(invoker.mergeable_android_manifests)) { 526*6777b538SAndroid Build Coastguard Worker _rebased_mergeable_android_manifests = 527*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.mergeable_android_manifests, root_build_dir) 528*6777b538SAndroid Build Coastguard Worker args += [ 529*6777b538SAndroid Build Coastguard Worker "--mergeable-android-manifests=$_rebased_mergeable_android_manifests", 530*6777b538SAndroid Build Coastguard Worker ] 531*6777b538SAndroid Build Coastguard Worker } 532*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_configs)) { 533*6777b538SAndroid Build Coastguard Worker _rebased_proguard_configs = 534*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.proguard_configs, root_build_dir) 535*6777b538SAndroid Build Coastguard Worker args += [ "--proguard-configs=$_rebased_proguard_configs" ] 536*6777b538SAndroid Build Coastguard Worker } 537*6777b538SAndroid Build Coastguard Worker if (defined(invoker.gradle_treat_as_prebuilt) && 538*6777b538SAndroid Build Coastguard Worker invoker.gradle_treat_as_prebuilt) { 539*6777b538SAndroid Build Coastguard Worker args += [ "--gradle-treat-as-prebuilt" ] 540*6777b538SAndroid Build Coastguard Worker } 541*6777b538SAndroid Build Coastguard Worker if (defined(invoker.main_class)) { 542*6777b538SAndroid Build Coastguard Worker args += [ 543*6777b538SAndroid Build Coastguard Worker "--main-class", 544*6777b538SAndroid Build Coastguard Worker invoker.main_class, 545*6777b538SAndroid Build Coastguard Worker ] 546*6777b538SAndroid Build Coastguard Worker } 547*6777b538SAndroid Build Coastguard Worker if (defined(invoker.base_module_target)) { 548*6777b538SAndroid Build Coastguard Worker _dep_label = invoker.base_module_target 549*6777b538SAndroid Build Coastguard Worker _dep_gen_dir = get_label_info(_dep_label, "target_gen_dir") 550*6777b538SAndroid Build Coastguard Worker _dep_name = get_label_info(_dep_label, "name") 551*6777b538SAndroid Build Coastguard Worker _dep_config = "$_dep_gen_dir/$_dep_name.build_config.json" 552*6777b538SAndroid Build Coastguard Worker deps += [ "$_dep_label$build_config_target_suffix" ] 553*6777b538SAndroid Build Coastguard Worker inputs += [ _dep_config ] 554*6777b538SAndroid Build Coastguard Worker args += [ 555*6777b538SAndroid Build Coastguard Worker "--base-module-build-config", 556*6777b538SAndroid Build Coastguard Worker rebase_path(_dep_config, root_build_dir), 557*6777b538SAndroid Build Coastguard Worker ] 558*6777b538SAndroid Build Coastguard Worker } 559*6777b538SAndroid Build Coastguard Worker if (defined(invoker.parent_module_target)) { 560*6777b538SAndroid Build Coastguard Worker _dep_label = invoker.parent_module_target 561*6777b538SAndroid Build Coastguard Worker _dep_gen_dir = get_label_info(_dep_label, "target_gen_dir") 562*6777b538SAndroid Build Coastguard Worker _dep_name = get_label_info(_dep_label, "name") 563*6777b538SAndroid Build Coastguard Worker _dep_config = "$_dep_gen_dir/$_dep_name.build_config.json" 564*6777b538SAndroid Build Coastguard Worker deps += [ "$_dep_label$build_config_target_suffix" ] 565*6777b538SAndroid Build Coastguard Worker inputs += [ _dep_config ] 566*6777b538SAndroid Build Coastguard Worker args += [ 567*6777b538SAndroid Build Coastguard Worker "--parent-module-build-config", 568*6777b538SAndroid Build Coastguard Worker rebase_path(_dep_config, root_build_dir), 569*6777b538SAndroid Build Coastguard Worker ] 570*6777b538SAndroid Build Coastguard Worker } 571*6777b538SAndroid Build Coastguard Worker if (defined(invoker.module_name)) { 572*6777b538SAndroid Build Coastguard Worker args += [ 573*6777b538SAndroid Build Coastguard Worker "--module-name", 574*6777b538SAndroid Build Coastguard Worker invoker.module_name, 575*6777b538SAndroid Build Coastguard Worker ] 576*6777b538SAndroid Build Coastguard Worker } 577*6777b538SAndroid Build Coastguard Worker if (defined(invoker.modules)) { 578*6777b538SAndroid Build Coastguard Worker foreach(_module, invoker.modules) { 579*6777b538SAndroid Build Coastguard Worker if (defined(_module.uses_split)) { 580*6777b538SAndroid Build Coastguard Worker args += [ "--uses-split=${_module.name}:${_module.uses_split}" ] 581*6777b538SAndroid Build Coastguard Worker } 582*6777b538SAndroid Build Coastguard Worker } 583*6777b538SAndroid Build Coastguard Worker } 584*6777b538SAndroid Build Coastguard Worker if (defined(invoker.module_build_configs)) { 585*6777b538SAndroid Build Coastguard Worker inputs += invoker.module_build_configs 586*6777b538SAndroid Build Coastguard Worker _rebased_configs = 587*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.module_build_configs, root_build_dir) 588*6777b538SAndroid Build Coastguard Worker args += [ "--module-build-configs=$_rebased_configs" ] 589*6777b538SAndroid Build Coastguard Worker } 590*6777b538SAndroid Build Coastguard Worker if (defined(invoker.add_view_trace_events) && 591*6777b538SAndroid Build Coastguard Worker invoker.add_view_trace_events) { 592*6777b538SAndroid Build Coastguard Worker # Adding trace events involves rewriting bytecode and generating a new set 593*6777b538SAndroid Build Coastguard Worker # of jar files. In order to avoid conflicts between bundles we save the 594*6777b538SAndroid Build Coastguard Worker # new jars in a bundle specific gen/ directory. The build config for the 595*6777b538SAndroid Build Coastguard Worker # bundle, and each one of its modules need a path to a bundle specific 596*6777b538SAndroid Build Coastguard Worker # gen/ directory in order to generate a list of rewritten jar paths. 597*6777b538SAndroid Build Coastguard Worker # We use the base module's target_gen_dir because non-base modules and the 598*6777b538SAndroid Build Coastguard Worker # app bundle targets have a reference to it (base_module_target). 599*6777b538SAndroid Build Coastguard Worker if (_type == "android_app_bundle") { 600*6777b538SAndroid Build Coastguard Worker _trace_events_target_name = 601*6777b538SAndroid Build Coastguard Worker get_label_info(_parent_invoker.base_module_target, "name") 602*6777b538SAndroid Build Coastguard Worker } else if (defined(invoker.base_module_target)) { 603*6777b538SAndroid Build Coastguard Worker _trace_events_target_name = 604*6777b538SAndroid Build Coastguard Worker get_label_info(invoker.base_module_target, "name") 605*6777b538SAndroid Build Coastguard Worker } else { 606*6777b538SAndroid Build Coastguard Worker _grandparent_invoker = _parent_invoker.invoker 607*6777b538SAndroid Build Coastguard Worker _trace_events_target_name = _grandparent_invoker.target_name 608*6777b538SAndroid Build Coastguard Worker } 609*6777b538SAndroid Build Coastguard Worker 610*6777b538SAndroid Build Coastguard Worker # FIXME: This should likely be using the base module's target_out_dir 611*6777b538SAndroid Build Coastguard Worker # rather than the current target's. 612*6777b538SAndroid Build Coastguard Worker args += [ 613*6777b538SAndroid Build Coastguard Worker "--trace-events-jar-dir", 614*6777b538SAndroid Build Coastguard Worker rebase_path("$target_out_dir/$_trace_events_target_name", 615*6777b538SAndroid Build Coastguard Worker root_build_dir), 616*6777b538SAndroid Build Coastguard Worker ] 617*6777b538SAndroid Build Coastguard Worker } 618*6777b538SAndroid Build Coastguard Worker if (defined(invoker.version_name)) { 619*6777b538SAndroid Build Coastguard Worker args += [ 620*6777b538SAndroid Build Coastguard Worker "--version-name", 621*6777b538SAndroid Build Coastguard Worker invoker.version_name, 622*6777b538SAndroid Build Coastguard Worker ] 623*6777b538SAndroid Build Coastguard Worker } 624*6777b538SAndroid Build Coastguard Worker if (defined(invoker.version_code)) { 625*6777b538SAndroid Build Coastguard Worker args += [ 626*6777b538SAndroid Build Coastguard Worker "--version-code", 627*6777b538SAndroid Build Coastguard Worker invoker.version_code, 628*6777b538SAndroid Build Coastguard Worker ] 629*6777b538SAndroid Build Coastguard Worker } 630*6777b538SAndroid Build Coastguard Worker if (defined(invoker.recursive_resource_deps) && 631*6777b538SAndroid Build Coastguard Worker invoker.recursive_resource_deps) { 632*6777b538SAndroid Build Coastguard Worker args += [ "--recursive-resource-deps" ] 633*6777b538SAndroid Build Coastguard Worker } 634*6777b538SAndroid Build Coastguard Worker if (current_toolchain != default_toolchain) { 635*6777b538SAndroid Build Coastguard Worker # This has to be a built-time error rather than a GN assert because many 636*6777b538SAndroid Build Coastguard Worker # packages have a mix of java and non-java targets. For example, the 637*6777b538SAndroid Build Coastguard Worker # following would fail even though nothing depends on :bar(//baz): 638*6777b538SAndroid Build Coastguard Worker # 639*6777b538SAndroid Build Coastguard Worker # shared_library("foo") { 640*6777b538SAndroid Build Coastguard Worker # } 641*6777b538SAndroid Build Coastguard Worker # 642*6777b538SAndroid Build Coastguard Worker # android_library("bar") { 643*6777b538SAndroid Build Coastguard Worker # deps = [ ":foo(//baz)" ] 644*6777b538SAndroid Build Coastguard Worker # assert(current_toolchain == default_toolchain) 645*6777b538SAndroid Build Coastguard Worker # } 646*6777b538SAndroid Build Coastguard Worker _msg = [ 647*6777b538SAndroid Build Coastguard Worker "Tried to build an Android target in a non-default toolchain.", 648*6777b538SAndroid Build Coastguard Worker "target: $_target_label", 649*6777b538SAndroid Build Coastguard Worker "current_toolchain: $current_toolchain", 650*6777b538SAndroid Build Coastguard Worker "default_toolchain: $default_toolchain", 651*6777b538SAndroid Build Coastguard Worker ] 652*6777b538SAndroid Build Coastguard Worker args += [ "--fail=$_msg" ] 653*6777b538SAndroid Build Coastguard Worker } 654*6777b538SAndroid Build Coastguard Worker } 655*6777b538SAndroid Build Coastguard Worker} 656*6777b538SAndroid Build Coastguard Worker 657*6777b538SAndroid Build Coastguard Workertemplate("generate_android_wrapper") { 658*6777b538SAndroid Build Coastguard Worker generate_wrapper(target_name) { 659*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 660*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 661*6777b538SAndroid Build Coastguard Worker generator_script = "//build/android/gyp/generate_android_wrapper.py" 662*6777b538SAndroid Build Coastguard Worker sources = [ 663*6777b538SAndroid Build Coastguard Worker "//build/android/gyp/util/build_utils.py", 664*6777b538SAndroid Build Coastguard Worker "//build/gn_helpers.py", 665*6777b538SAndroid Build Coastguard Worker "//build/util/generate_wrapper.py", 666*6777b538SAndroid Build Coastguard Worker ] 667*6777b538SAndroid Build Coastguard Worker } 668*6777b538SAndroid Build Coastguard Worker} 669*6777b538SAndroid Build Coastguard Worker 670*6777b538SAndroid Build Coastguard Workertemplate("generate_r_java") { 671*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 672*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "deps" ]) 673*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/${invoker.target_name}.d" 674*6777b538SAndroid Build Coastguard Worker inputs = [ invoker.build_config ] 675*6777b538SAndroid Build Coastguard Worker outputs = [ invoker.srcjar_path ] 676*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) 677*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/create_r_java.py" 678*6777b538SAndroid Build Coastguard Worker args = [ 679*6777b538SAndroid Build Coastguard Worker "--depfile", 680*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 681*6777b538SAndroid Build Coastguard Worker "--srcjar-out", 682*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.srcjar_path, root_build_dir), 683*6777b538SAndroid Build Coastguard Worker "--deps-rtxts=@FileArg($_rebased_build_config:deps_info:dependency_r_txt_files)", 684*6777b538SAndroid Build Coastguard Worker "--r-package=${invoker.package}", 685*6777b538SAndroid Build Coastguard Worker ] 686*6777b538SAndroid Build Coastguard Worker } 687*6777b538SAndroid Build Coastguard Worker} 688*6777b538SAndroid Build Coastguard Worker 689*6777b538SAndroid Build Coastguard Worker# Generates a script in the build bin directory which runs the test 690*6777b538SAndroid Build Coastguard Worker# target using the test runner script in build/android/test_runner.py. 691*6777b538SAndroid Build Coastguard Workertemplate("test_runner_script") { 692*6777b538SAndroid Build Coastguard Worker testonly = true 693*6777b538SAndroid Build Coastguard Worker _test_name = invoker.test_name 694*6777b538SAndroid Build Coastguard Worker _test_type = invoker.test_type 695*6777b538SAndroid Build Coastguard Worker _is_unit_test = defined(invoker.is_unit_test) && invoker.is_unit_test 696*6777b538SAndroid Build Coastguard Worker _incremental_apk = defined(invoker.incremental_apk) && invoker.incremental_apk 697*6777b538SAndroid Build Coastguard Worker 698*6777b538SAndroid Build Coastguard Worker _runtime_deps = 699*6777b538SAndroid Build Coastguard Worker !defined(invoker.ignore_all_data_deps) || !invoker.ignore_all_data_deps 700*6777b538SAndroid Build Coastguard Worker 701*6777b538SAndroid Build Coastguard Worker if (_runtime_deps) { 702*6777b538SAndroid Build Coastguard Worker # This runtime_deps file is used at runtime and thus cannot go in 703*6777b538SAndroid Build Coastguard Worker # target_gen_dir. 704*6777b538SAndroid Build Coastguard Worker _target_dir_name = get_label_info(":$target_name", "dir") 705*6777b538SAndroid Build Coastguard Worker _runtime_deps_file = 706*6777b538SAndroid Build Coastguard Worker "$root_out_dir/gen.runtime/$_target_dir_name/$target_name.runtime_deps" 707*6777b538SAndroid Build Coastguard Worker _runtime_deps_target = "${target_name}__write_deps" 708*6777b538SAndroid Build Coastguard Worker group(_runtime_deps_target) { 709*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 710*6777b538SAndroid Build Coastguard Worker [ 711*6777b538SAndroid Build Coastguard Worker "data", 712*6777b538SAndroid Build Coastguard Worker "deps", 713*6777b538SAndroid Build Coastguard Worker "public_deps", 714*6777b538SAndroid Build Coastguard Worker ]) 715*6777b538SAndroid Build Coastguard Worker data_deps = [] 716*6777b538SAndroid Build Coastguard Worker if (defined(invoker.data_deps)) { 717*6777b538SAndroid Build Coastguard Worker data_deps += invoker.data_deps 718*6777b538SAndroid Build Coastguard Worker } 719*6777b538SAndroid Build Coastguard Worker if (defined(invoker.additional_apks)) { 720*6777b538SAndroid Build Coastguard Worker data_deps += invoker.additional_apks 721*6777b538SAndroid Build Coastguard Worker } 722*6777b538SAndroid Build Coastguard Worker write_runtime_deps = _runtime_deps_file 723*6777b538SAndroid Build Coastguard Worker } 724*6777b538SAndroid Build Coastguard Worker } 725*6777b538SAndroid Build Coastguard Worker 726*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apk_under_test)) { 727*6777b538SAndroid Build Coastguard Worker _install_artifacts_json = 728*6777b538SAndroid Build Coastguard Worker "${target_gen_dir}/${target_name}.install_artifacts" 729*6777b538SAndroid Build Coastguard Worker _install_artifacts_target_name = "${target_name}__install_artifacts" 730*6777b538SAndroid Build Coastguard Worker generated_file(_install_artifacts_target_name) { 731*6777b538SAndroid Build Coastguard Worker deps = [ invoker.apk_under_test ] 732*6777b538SAndroid Build Coastguard Worker output_conversion = "json" 733*6777b538SAndroid Build Coastguard Worker outputs = [ _install_artifacts_json ] 734*6777b538SAndroid Build Coastguard Worker data_keys = [ "install_artifacts" ] 735*6777b538SAndroid Build Coastguard Worker walk_keys = [ "install_artifacts_barrier" ] 736*6777b538SAndroid Build Coastguard Worker rebase = root_build_dir 737*6777b538SAndroid Build Coastguard Worker } 738*6777b538SAndroid Build Coastguard Worker } 739*6777b538SAndroid Build Coastguard Worker 740*6777b538SAndroid Build Coastguard Worker generate_android_wrapper(target_name) { 741*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 742*6777b538SAndroid Build Coastguard Worker [ 743*6777b538SAndroid Build Coastguard Worker "assert_no_deps", 744*6777b538SAndroid Build Coastguard Worker "metadata", 745*6777b538SAndroid Build Coastguard Worker "public_deps", 746*6777b538SAndroid Build Coastguard Worker "visibility", 747*6777b538SAndroid Build Coastguard Worker ]) 748*6777b538SAndroid Build Coastguard Worker wrapper_script = "$root_build_dir/bin/run_${_test_name}" 749*6777b538SAndroid Build Coastguard Worker 750*6777b538SAndroid Build Coastguard Worker executable = "//testing/test_env.py" 751*6777b538SAndroid Build Coastguard Worker 752*6777b538SAndroid Build Coastguard Worker if (defined(invoker.android_test_runner_script)) { 753*6777b538SAndroid Build Coastguard Worker _runner_script = invoker.android_test_runner_script 754*6777b538SAndroid Build Coastguard Worker } else { 755*6777b538SAndroid Build Coastguard Worker _runner_script = "//build/android/test_runner.py" 756*6777b538SAndroid Build Coastguard Worker } 757*6777b538SAndroid Build Coastguard Worker 758*6777b538SAndroid Build Coastguard Worker deps = [] 759*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 760*6777b538SAndroid Build Coastguard Worker deps = invoker.deps 761*6777b538SAndroid Build Coastguard Worker } 762*6777b538SAndroid Build Coastguard Worker data_deps = [ 763*6777b538SAndroid Build Coastguard Worker "//build/android:test_runner_core_py", 764*6777b538SAndroid Build Coastguard Worker "//testing:test_scripts_shared", 765*6777b538SAndroid Build Coastguard Worker ] 766*6777b538SAndroid Build Coastguard Worker if (_test_type != "junit") { 767*6777b538SAndroid Build Coastguard Worker data_deps += [ "//build/android:test_runner_device_support" ] 768*6777b538SAndroid Build Coastguard Worker } 769*6777b538SAndroid Build Coastguard Worker if (defined(invoker.data_deps)) { 770*6777b538SAndroid Build Coastguard Worker data_deps += invoker.data_deps 771*6777b538SAndroid Build Coastguard Worker } 772*6777b538SAndroid Build Coastguard Worker data = [] 773*6777b538SAndroid Build Coastguard Worker if (defined(invoker.data)) { 774*6777b538SAndroid Build Coastguard Worker data += invoker.data 775*6777b538SAndroid Build Coastguard Worker } 776*6777b538SAndroid Build Coastguard Worker 777*6777b538SAndroid Build Coastguard Worker executable_args = [ 778*6777b538SAndroid Build Coastguard Worker "@WrappedPath(" + rebase_path(_runner_script, root_build_dir) + ")", 779*6777b538SAndroid Build Coastguard Worker _test_type, 780*6777b538SAndroid Build Coastguard Worker "--output-directory", 781*6777b538SAndroid Build Coastguard Worker "@WrappedPath(.)", 782*6777b538SAndroid Build Coastguard Worker "--wrapper-script-args", 783*6777b538SAndroid Build Coastguard Worker ] 784*6777b538SAndroid Build Coastguard Worker 785*6777b538SAndroid Build Coastguard Worker if (_is_unit_test) { 786*6777b538SAndroid Build Coastguard Worker executable_args += [ "--is-unit-test" ] 787*6777b538SAndroid Build Coastguard Worker } 788*6777b538SAndroid Build Coastguard Worker 789*6777b538SAndroid Build Coastguard Worker if (_runtime_deps) { 790*6777b538SAndroid Build Coastguard Worker deps += [ ":$_runtime_deps_target" ] 791*6777b538SAndroid Build Coastguard Worker data += [ _runtime_deps_file ] 792*6777b538SAndroid Build Coastguard Worker _rebased_runtime_deps_file = 793*6777b538SAndroid Build Coastguard Worker rebase_path(_runtime_deps_file, root_build_dir) 794*6777b538SAndroid Build Coastguard Worker executable_args += [ 795*6777b538SAndroid Build Coastguard Worker "--runtime-deps-path", 796*6777b538SAndroid Build Coastguard Worker "@WrappedPath(${_rebased_runtime_deps_file})", 797*6777b538SAndroid Build Coastguard Worker ] 798*6777b538SAndroid Build Coastguard Worker } 799*6777b538SAndroid Build Coastguard Worker 800*6777b538SAndroid Build Coastguard Worker # apk_target is not used for native executable tests 801*6777b538SAndroid Build Coastguard Worker # (e.g. breakpad_unittests). 802*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apk_target)) { 803*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.executable_dist_dir)) 804*6777b538SAndroid Build Coastguard Worker deps += [ "${invoker.apk_target}$build_config_target_suffix" ] 805*6777b538SAndroid Build Coastguard Worker _apk_build_config = 806*6777b538SAndroid Build Coastguard Worker get_label_info(invoker.apk_target, "target_gen_dir") + "/" + 807*6777b538SAndroid Build Coastguard Worker get_label_info(invoker.apk_target, "name") + ".build_config.json" 808*6777b538SAndroid Build Coastguard Worker _rebased_apk_build_config = rebase_path(_apk_build_config, root_build_dir) 809*6777b538SAndroid Build Coastguard Worker not_needed([ "_rebased_apk_build_config" ]) 810*6777b538SAndroid Build Coastguard Worker } else if (_test_type == "gtest") { 811*6777b538SAndroid Build Coastguard Worker assert( 812*6777b538SAndroid Build Coastguard Worker defined(invoker.executable_dist_dir), 813*6777b538SAndroid Build Coastguard Worker "Must define either apk_target or executable_dist_dir for test_runner_script()") 814*6777b538SAndroid Build Coastguard Worker _rebased_executable_dist_dir = 815*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.executable_dist_dir, root_build_dir) 816*6777b538SAndroid Build Coastguard Worker executable_args += [ 817*6777b538SAndroid Build Coastguard Worker "--executable-dist-dir", 818*6777b538SAndroid Build Coastguard Worker "@WrappedPath(${_rebased_executable_dist_dir})", 819*6777b538SAndroid Build Coastguard Worker ] 820*6777b538SAndroid Build Coastguard Worker } 821*6777b538SAndroid Build Coastguard Worker 822*6777b538SAndroid Build Coastguard Worker if (use_jacoco_coverage) { 823*6777b538SAndroid Build Coastguard Worker # Keep in sync with recipe constant for recipe to find coverage data 824*6777b538SAndroid Build Coastguard Worker # files from local java tests: https://bit.ly/3Zul6do 825*6777b538SAndroid Build Coastguard Worker _jacoco_coverage_dir_name = "java_coverage" 826*6777b538SAndroid Build Coastguard Worker } 827*6777b538SAndroid Build Coastguard Worker 828*6777b538SAndroid Build Coastguard Worker _device_test = true 829*6777b538SAndroid Build Coastguard Worker if (_test_type == "gtest") { 830*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.test_suite)) 831*6777b538SAndroid Build Coastguard Worker executable_args += [ 832*6777b538SAndroid Build Coastguard Worker "--suite", 833*6777b538SAndroid Build Coastguard Worker invoker.test_suite, 834*6777b538SAndroid Build Coastguard Worker ] 835*6777b538SAndroid Build Coastguard Worker if (use_clang_coverage) { 836*6777b538SAndroid Build Coastguard Worker # Set a default coverage output directory (can be overridden by user 837*6777b538SAndroid Build Coastguard Worker # passing the same flag). 838*6777b538SAndroid Build Coastguard Worker _rebased_coverage_dir = 839*6777b538SAndroid Build Coastguard Worker rebase_path("$root_out_dir/coverage", root_build_dir) 840*6777b538SAndroid Build Coastguard Worker executable_args += [ 841*6777b538SAndroid Build Coastguard Worker "--coverage-dir", 842*6777b538SAndroid Build Coastguard Worker "@WrappedPath(${_rebased_coverage_dir})", 843*6777b538SAndroid Build Coastguard Worker ] 844*6777b538SAndroid Build Coastguard Worker } 845*6777b538SAndroid Build Coastguard Worker } else if (_test_type == "instrumentation") { 846*6777b538SAndroid Build Coastguard Worker _test_apk = "@WrappedPath(@FileArg($_rebased_apk_build_config:deps_info:apk_path))" 847*6777b538SAndroid Build Coastguard Worker if (_incremental_apk) { 848*6777b538SAndroid Build Coastguard Worker _test_apk = "@WrappedPath(@FileArg($_rebased_apk_build_config:deps_info:incremental_apk_path))" 849*6777b538SAndroid Build Coastguard Worker } 850*6777b538SAndroid Build Coastguard Worker executable_args += [ 851*6777b538SAndroid Build Coastguard Worker "--test-apk", 852*6777b538SAndroid Build Coastguard Worker _test_apk, 853*6777b538SAndroid Build Coastguard Worker ] 854*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apk_under_test)) { 855*6777b538SAndroid Build Coastguard Worker if (_incremental_apk) { 856*6777b538SAndroid Build Coastguard Worker deps += [ "${invoker.apk_under_test}$build_config_target_suffix" ] 857*6777b538SAndroid Build Coastguard Worker _apk_under_test_build_config = 858*6777b538SAndroid Build Coastguard Worker get_label_info(invoker.apk_under_test, "target_gen_dir") + "/" + 859*6777b538SAndroid Build Coastguard Worker get_label_info(invoker.apk_under_test, "name") + 860*6777b538SAndroid Build Coastguard Worker ".build_config.json" 861*6777b538SAndroid Build Coastguard Worker _rebased_apk_under_test_build_config = 862*6777b538SAndroid Build Coastguard Worker rebase_path(_apk_under_test_build_config, root_build_dir) 863*6777b538SAndroid Build Coastguard Worker _apk_under_test = "@WrappedPath(@FileArg($_rebased_apk_under_test_build_config:deps_info:incremental_apk_path))" 864*6777b538SAndroid Build Coastguard Worker } else { 865*6777b538SAndroid Build Coastguard Worker deps += [ ":${_install_artifacts_target_name}" ] 866*6777b538SAndroid Build Coastguard Worker _rebased_install_artifacts_json = 867*6777b538SAndroid Build Coastguard Worker rebase_path(_install_artifacts_json, root_build_dir) 868*6777b538SAndroid Build Coastguard Worker _apk_under_test = 869*6777b538SAndroid Build Coastguard Worker "@WrappedPath(@FileArg($_rebased_install_artifacts_json[]))" 870*6777b538SAndroid Build Coastguard Worker } 871*6777b538SAndroid Build Coastguard Worker executable_args += [ 872*6777b538SAndroid Build Coastguard Worker "--apk-under-test", 873*6777b538SAndroid Build Coastguard Worker _apk_under_test, 874*6777b538SAndroid Build Coastguard Worker ] 875*6777b538SAndroid Build Coastguard Worker } 876*6777b538SAndroid Build Coastguard Worker if (defined(invoker.use_webview_provider)) { 877*6777b538SAndroid Build Coastguard Worker deps += [ "${invoker.use_webview_provider}$build_config_target_suffix" ] 878*6777b538SAndroid Build Coastguard Worker _build_config = 879*6777b538SAndroid Build Coastguard Worker get_label_info(invoker.use_webview_provider, "target_gen_dir") + 880*6777b538SAndroid Build Coastguard Worker "/" + get_label_info(invoker.use_webview_provider, "name") + 881*6777b538SAndroid Build Coastguard Worker ".build_config.json" 882*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(_build_config, root_build_dir) 883*6777b538SAndroid Build Coastguard Worker executable_args += [ 884*6777b538SAndroid Build Coastguard Worker "--use-webview-provider", 885*6777b538SAndroid Build Coastguard Worker "@WrappedPath(@FileArg($_rebased_build_config:deps_info:apk_path))", 886*6777b538SAndroid Build Coastguard Worker ] 887*6777b538SAndroid Build Coastguard Worker } 888*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_mapping_path)) { 889*6777b538SAndroid Build Coastguard Worker if (_incremental_apk) { 890*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "proguard_mapping_path" ]) 891*6777b538SAndroid Build Coastguard Worker } else { 892*6777b538SAndroid Build Coastguard Worker data += [ invoker.proguard_mapping_path ] 893*6777b538SAndroid Build Coastguard Worker _rebased_mapping_path = 894*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.proguard_mapping_path, root_build_dir) 895*6777b538SAndroid Build Coastguard Worker executable_args += [ 896*6777b538SAndroid Build Coastguard Worker "--proguard-mapping-path", 897*6777b538SAndroid Build Coastguard Worker "@WrappedPath($_rebased_mapping_path)", 898*6777b538SAndroid Build Coastguard Worker ] 899*6777b538SAndroid Build Coastguard Worker } 900*6777b538SAndroid Build Coastguard Worker } 901*6777b538SAndroid Build Coastguard Worker if (use_jacoco_coverage) { 902*6777b538SAndroid Build Coastguard Worker # Set a default coverage output directory (can be overridden by user 903*6777b538SAndroid Build Coastguard Worker # passing the same flag). 904*6777b538SAndroid Build Coastguard Worker _rebased_coverage_dir = 905*6777b538SAndroid Build Coastguard Worker rebase_path("$root_out_dir/$_jacoco_coverage_dir_name", 906*6777b538SAndroid Build Coastguard Worker root_build_dir) 907*6777b538SAndroid Build Coastguard Worker executable_args += [ 908*6777b538SAndroid Build Coastguard Worker "--coverage-dir", 909*6777b538SAndroid Build Coastguard Worker "@WrappedPath(${_rebased_coverage_dir})", 910*6777b538SAndroid Build Coastguard Worker ] 911*6777b538SAndroid Build Coastguard Worker } 912*6777b538SAndroid Build Coastguard Worker } else if (_test_type == "junit") { 913*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.test_suite)) 914*6777b538SAndroid Build Coastguard Worker _device_test = false 915*6777b538SAndroid Build Coastguard Worker executable_args += [ 916*6777b538SAndroid Build Coastguard Worker "--test-suite", 917*6777b538SAndroid Build Coastguard Worker invoker.test_suite, 918*6777b538SAndroid Build Coastguard Worker "--native-libs-dir", 919*6777b538SAndroid Build Coastguard Worker "@WrappedPath($_robolectric_libs_dir)", 920*6777b538SAndroid Build Coastguard Worker ] 921*6777b538SAndroid Build Coastguard Worker 922*6777b538SAndroid Build Coastguard Worker # Test runner uses this generated wrapper script. 923*6777b538SAndroid Build Coastguard Worker data += [ "$root_build_dir/bin/helper/${invoker.test_suite}" ] 924*6777b538SAndroid Build Coastguard Worker 925*6777b538SAndroid Build Coastguard Worker deps += [ ":${invoker.test_suite}$build_config_target_suffix" ] 926*6777b538SAndroid Build Coastguard Worker 927*6777b538SAndroid Build Coastguard Worker _rebased_robolectric_runtime_deps_dir = 928*6777b538SAndroid Build Coastguard Worker rebase_path("//third_party/robolectric/lib", root_build_dir) 929*6777b538SAndroid Build Coastguard Worker _rebased_resource_apk = rebase_path(invoker.resource_apk, root_build_dir) 930*6777b538SAndroid Build Coastguard Worker executable_args += [ 931*6777b538SAndroid Build Coastguard Worker "--resource-apk", 932*6777b538SAndroid Build Coastguard Worker "@WrappedPath(${_rebased_resource_apk})", 933*6777b538SAndroid Build Coastguard Worker "--robolectric-runtime-deps-dir", 934*6777b538SAndroid Build Coastguard Worker "@WrappedPath(${_rebased_robolectric_runtime_deps_dir})", 935*6777b538SAndroid Build Coastguard Worker ] 936*6777b538SAndroid Build Coastguard Worker if (use_jacoco_coverage) { 937*6777b538SAndroid Build Coastguard Worker # Set a default coverage output directory (can be overridden by user 938*6777b538SAndroid Build Coastguard Worker # passing the same flag). 939*6777b538SAndroid Build Coastguard Worker _rebased_coverage_dir = 940*6777b538SAndroid Build Coastguard Worker rebase_path("$root_out_dir/$_jacoco_coverage_dir_name", 941*6777b538SAndroid Build Coastguard Worker root_build_dir) 942*6777b538SAndroid Build Coastguard Worker executable_args += [ 943*6777b538SAndroid Build Coastguard Worker "--coverage-dir", 944*6777b538SAndroid Build Coastguard Worker "@WrappedPath(${_rebased_coverage_dir})", 945*6777b538SAndroid Build Coastguard Worker ] 946*6777b538SAndroid Build Coastguard Worker } 947*6777b538SAndroid Build Coastguard Worker } else if (_test_type == "linker") { 948*6777b538SAndroid Build Coastguard Worker executable_args += [ 949*6777b538SAndroid Build Coastguard Worker "--test-apk", 950*6777b538SAndroid Build Coastguard Worker "@WrappedPath(@FileArg($_rebased_apk_build_config:deps_info:apk_path))", 951*6777b538SAndroid Build Coastguard Worker ] 952*6777b538SAndroid Build Coastguard Worker } else { 953*6777b538SAndroid Build Coastguard Worker assert(false, "Invalid test type: $_test_type.") 954*6777b538SAndroid Build Coastguard Worker } 955*6777b538SAndroid Build Coastguard Worker 956*6777b538SAndroid Build Coastguard Worker # Devil does not reliably work with component builds of its tools. 957*6777b538SAndroid Build Coastguard Worker # There's no benefit to them, so fall back to prebuilts for component builds. 958*6777b538SAndroid Build Coastguard Worker # https://crbug.com/1404180 959*6777b538SAndroid Build Coastguard Worker if (_test_type != "junit" && !is_component_build) { 960*6777b538SAndroid Build Coastguard Worker executable_args += [ "--use-local-devil-tools" ] 961*6777b538SAndroid Build Coastguard Worker } 962*6777b538SAndroid Build Coastguard Worker 963*6777b538SAndroid Build Coastguard Worker if (defined(invoker.additional_apks)) { 964*6777b538SAndroid Build Coastguard Worker foreach(additional_apk, invoker.additional_apks) { 965*6777b538SAndroid Build Coastguard Worker deps += [ "$additional_apk$build_config_target_suffix" ] 966*6777b538SAndroid Build Coastguard Worker _build_config = 967*6777b538SAndroid Build Coastguard Worker get_label_info(additional_apk, "target_gen_dir") + "/" + 968*6777b538SAndroid Build Coastguard Worker get_label_info(additional_apk, "name") + ".build_config.json" 969*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(_build_config, root_build_dir) 970*6777b538SAndroid Build Coastguard Worker executable_args += [ 971*6777b538SAndroid Build Coastguard Worker "--additional-apk", 972*6777b538SAndroid Build Coastguard Worker "@WrappedPath(@FileArg($_rebased_build_config:deps_info:apk_path))", 973*6777b538SAndroid Build Coastguard Worker ] 974*6777b538SAndroid Build Coastguard Worker } 975*6777b538SAndroid Build Coastguard Worker } 976*6777b538SAndroid Build Coastguard Worker if (defined(invoker.shard_timeout)) { 977*6777b538SAndroid Build Coastguard Worker executable_args += [ "--shard-timeout=${invoker.shard_timeout}" ] 978*6777b538SAndroid Build Coastguard Worker } 979*6777b538SAndroid Build Coastguard Worker if (_incremental_apk) { 980*6777b538SAndroid Build Coastguard Worker executable_args += [ 981*6777b538SAndroid Build Coastguard Worker "--test-apk-incremental-install-json", 982*6777b538SAndroid Build Coastguard Worker "@WrappedPath(@FileArg($_rebased_apk_build_config:deps_info:incremental_install_json_path))", 983*6777b538SAndroid Build Coastguard Worker ] 984*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apk_under_test)) { 985*6777b538SAndroid Build Coastguard Worker executable_args += [ 986*6777b538SAndroid Build Coastguard Worker "--apk-under-test-incremental-install-json", 987*6777b538SAndroid Build Coastguard Worker "@WrappedPath(@FileArg($_rebased_apk_under_test_build_config:deps_info:incremental_install_json_path))", 988*6777b538SAndroid Build Coastguard Worker ] 989*6777b538SAndroid Build Coastguard Worker } 990*6777b538SAndroid Build Coastguard Worker executable_args += [ "--fast-local-dev" ] 991*6777b538SAndroid Build Coastguard Worker } 992*6777b538SAndroid Build Coastguard Worker if (_device_test && is_asan) { 993*6777b538SAndroid Build Coastguard Worker executable_args += [ "--tool=asan" ] 994*6777b538SAndroid Build Coastguard Worker } 995*6777b538SAndroid Build Coastguard Worker 996*6777b538SAndroid Build Coastguard Worker if (defined(invoker.modules)) { 997*6777b538SAndroid Build Coastguard Worker foreach(module, invoker.modules) { 998*6777b538SAndroid Build Coastguard Worker executable_args += [ 999*6777b538SAndroid Build Coastguard Worker "--module", 1000*6777b538SAndroid Build Coastguard Worker module, 1001*6777b538SAndroid Build Coastguard Worker ] 1002*6777b538SAndroid Build Coastguard Worker } 1003*6777b538SAndroid Build Coastguard Worker } 1004*6777b538SAndroid Build Coastguard Worker 1005*6777b538SAndroid Build Coastguard Worker if (defined(invoker.fake_modules)) { 1006*6777b538SAndroid Build Coastguard Worker foreach(fake_module, invoker.fake_modules) { 1007*6777b538SAndroid Build Coastguard Worker executable_args += [ 1008*6777b538SAndroid Build Coastguard Worker "--fake-module", 1009*6777b538SAndroid Build Coastguard Worker fake_module, 1010*6777b538SAndroid Build Coastguard Worker ] 1011*6777b538SAndroid Build Coastguard Worker } 1012*6777b538SAndroid Build Coastguard Worker } 1013*6777b538SAndroid Build Coastguard Worker 1014*6777b538SAndroid Build Coastguard Worker if (defined(invoker.additional_locales)) { 1015*6777b538SAndroid Build Coastguard Worker foreach(locale, invoker.additional_locales) { 1016*6777b538SAndroid Build Coastguard Worker executable_args += [ 1017*6777b538SAndroid Build Coastguard Worker "--additional-locale", 1018*6777b538SAndroid Build Coastguard Worker locale, 1019*6777b538SAndroid Build Coastguard Worker ] 1020*6777b538SAndroid Build Coastguard Worker } 1021*6777b538SAndroid Build Coastguard Worker } 1022*6777b538SAndroid Build Coastguard Worker 1023*6777b538SAndroid Build Coastguard Worker if (defined(invoker.extra_args)) { 1024*6777b538SAndroid Build Coastguard Worker executable_args += invoker.extra_args 1025*6777b538SAndroid Build Coastguard Worker } 1026*6777b538SAndroid Build Coastguard Worker } 1027*6777b538SAndroid Build Coastguard Worker} 1028*6777b538SAndroid Build Coastguard Worker 1029*6777b538SAndroid Build Coastguard Workerif (enable_java_templates) { 1030*6777b538SAndroid Build Coastguard Worker template("android_lint") { 1031*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 1032*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1033*6777b538SAndroid Build Coastguard Worker 1034*6777b538SAndroid Build Coastguard Worker # https://crbug.com/1098752 Fix for bot OOM (https://crbug.com/1098333). 1035*6777b538SAndroid Build Coastguard Worker if (defined(java_cmd_pool_size)) { 1036*6777b538SAndroid Build Coastguard Worker pool = "//build/config/android:java_cmd_pool($default_toolchain)" 1037*6777b538SAndroid Build Coastguard Worker } else { 1038*6777b538SAndroid Build Coastguard Worker pool = "//build/toolchain:link_pool($default_toolchain)" 1039*6777b538SAndroid Build Coastguard Worker } 1040*6777b538SAndroid Build Coastguard Worker 1041*6777b538SAndroid Build Coastguard Worker # Lint requires generated sources and generated resources from the build. 1042*6777b538SAndroid Build Coastguard Worker # Turbine __header targets depend on all generated sources, and the 1043*6777b538SAndroid Build Coastguard Worker # __assetres targets depend on all generated resources. 1044*6777b538SAndroid Build Coastguard Worker deps = [] 1045*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 1046*6777b538SAndroid Build Coastguard Worker _lib_deps = 1047*6777b538SAndroid Build Coastguard Worker filter_exclude(filter_include(invoker.deps, java_library_patterns), 1048*6777b538SAndroid Build Coastguard Worker java_resource_patterns) 1049*6777b538SAndroid Build Coastguard Worker foreach(_lib_dep, _lib_deps) { 1050*6777b538SAndroid Build Coastguard Worker # Expand //foo/java -> //foo/java:java 1051*6777b538SAndroid Build Coastguard Worker _lib_dep = get_label_info(_lib_dep, "label_no_toolchain") 1052*6777b538SAndroid Build Coastguard Worker deps += [ 1053*6777b538SAndroid Build Coastguard Worker "${_lib_dep}__assetres", 1054*6777b538SAndroid Build Coastguard Worker "${_lib_dep}__header", 1055*6777b538SAndroid Build Coastguard Worker ] 1056*6777b538SAndroid Build Coastguard Worker } 1057*6777b538SAndroid Build Coastguard Worker 1058*6777b538SAndroid Build Coastguard Worker # Keep non-java deps as they may generate files used only by lint. 1059*6777b538SAndroid Build Coastguard Worker # e.g. generated suppressions.xml files. 1060*6777b538SAndroid Build Coastguard Worker deps += filter_exclude(invoker.deps, _lib_deps) 1061*6777b538SAndroid Build Coastguard Worker } 1062*6777b538SAndroid Build Coastguard Worker 1063*6777b538SAndroid Build Coastguard Worker if (defined(invoker.min_sdk_version)) { 1064*6777b538SAndroid Build Coastguard Worker _min_sdk_version = invoker.min_sdk_version 1065*6777b538SAndroid Build Coastguard Worker } else { 1066*6777b538SAndroid Build Coastguard Worker _min_sdk_version = default_min_sdk_version 1067*6777b538SAndroid Build Coastguard Worker } 1068*6777b538SAndroid Build Coastguard Worker 1069*6777b538SAndroid Build Coastguard Worker if (defined(invoker.lint_jar_path)) { 1070*6777b538SAndroid Build Coastguard Worker _lint_jar_path = invoker.lint_jar_path 1071*6777b538SAndroid Build Coastguard Worker } else { 1072*6777b538SAndroid Build Coastguard Worker _lint_jar_path = _default_lint_jar_path 1073*6777b538SAndroid Build Coastguard Worker } 1074*6777b538SAndroid Build Coastguard Worker 1075*6777b538SAndroid Build Coastguard Worker # It is not safe to run two lint versions concurrently since they will 1076*6777b538SAndroid Build Coastguard Worker # wipe the cache on version mismatch. When using a non-default lint 1077*6777b538SAndroid Build Coastguard Worker # version, make each target use their own cache directory. 1078*6777b538SAndroid Build Coastguard Worker _use_custom_cache_dir = _lint_jar_path != _default_lint_jar_path 1079*6777b538SAndroid Build Coastguard Worker 1080*6777b538SAndroid Build Coastguard Worker # Save generated xml files in a consistent location for debugging. 1081*6777b538SAndroid Build Coastguard Worker if (defined(invoker.lint_gen_dir)) { 1082*6777b538SAndroid Build Coastguard Worker _lint_gen_dir = invoker.lint_gen_dir 1083*6777b538SAndroid Build Coastguard Worker } else { 1084*6777b538SAndroid Build Coastguard Worker _lint_gen_dir = "$target_gen_dir/$target_name" 1085*6777b538SAndroid Build Coastguard Worker } 1086*6777b538SAndroid Build Coastguard Worker _backported_methods = "//third_party/r8/backported_methods.txt" 1087*6777b538SAndroid Build Coastguard Worker 1088*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/lint.py" 1089*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 1090*6777b538SAndroid Build Coastguard Worker inputs = java_paths_for_inputs + [ 1091*6777b538SAndroid Build Coastguard Worker _lint_jar_path, 1092*6777b538SAndroid Build Coastguard Worker _custom_lint_jar_path, 1093*6777b538SAndroid Build Coastguard Worker _backported_methods, 1094*6777b538SAndroid Build Coastguard Worker ] 1095*6777b538SAndroid Build Coastguard Worker 1096*6777b538SAndroid Build Coastguard Worker args = [ 1097*6777b538SAndroid Build Coastguard Worker "--target-name", 1098*6777b538SAndroid Build Coastguard Worker get_label_info(":${target_name}", "label_no_toolchain"), 1099*6777b538SAndroid Build Coastguard Worker "--depfile", 1100*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 1101*6777b538SAndroid Build Coastguard Worker "--lint-jar-path", 1102*6777b538SAndroid Build Coastguard Worker rebase_path(_lint_jar_path, root_build_dir), 1103*6777b538SAndroid Build Coastguard Worker "--custom-lint-jar-path", 1104*6777b538SAndroid Build Coastguard Worker rebase_path(_custom_lint_jar_path, root_build_dir), 1105*6777b538SAndroid Build Coastguard Worker "--lint-gen-dir", 1106*6777b538SAndroid Build Coastguard Worker rebase_path(_lint_gen_dir, root_build_dir), 1107*6777b538SAndroid Build Coastguard Worker "--android-sdk-version=${lint_android_sdk_version}", 1108*6777b538SAndroid Build Coastguard Worker "--min-sdk-version=$_min_sdk_version", 1109*6777b538SAndroid Build Coastguard Worker "--android-sdk-root", 1110*6777b538SAndroid Build Coastguard Worker rebase_path(lint_android_sdk_root, root_build_dir), 1111*6777b538SAndroid Build Coastguard Worker "--backported-methods", 1112*6777b538SAndroid Build Coastguard Worker rebase_path(_backported_methods, root_build_dir), 1113*6777b538SAndroid Build Coastguard Worker ] 1114*6777b538SAndroid Build Coastguard Worker 1115*6777b538SAndroid Build Coastguard Worker if (!_use_custom_cache_dir) { 1116*6777b538SAndroid Build Coastguard Worker _cache_dir = "$root_build_dir/android_lint_cache" 1117*6777b538SAndroid Build Coastguard Worker _create_cache_stamp_path = "$_cache_dir/build.lint.stamp" 1118*6777b538SAndroid Build Coastguard Worker 1119*6777b538SAndroid Build Coastguard Worker # By default, lint.py will use "$_lint_gen_dir/cache". 1120*6777b538SAndroid Build Coastguard Worker args += [ 1121*6777b538SAndroid Build Coastguard Worker "--cache-dir", 1122*6777b538SAndroid Build Coastguard Worker rebase_path(_cache_dir, root_build_dir), 1123*6777b538SAndroid Build Coastguard Worker ] 1124*6777b538SAndroid Build Coastguard Worker } 1125*6777b538SAndroid Build Coastguard Worker 1126*6777b538SAndroid Build Coastguard Worker if (defined(invoker.skip_build_server) && invoker.skip_build_server) { 1127*6777b538SAndroid Build Coastguard Worker # Nocompile tests need lint to fail through ninja. 1128*6777b538SAndroid Build Coastguard Worker args += [ "--skip-build-server" ] 1129*6777b538SAndroid Build Coastguard Worker } else if (android_static_analysis == "build_server") { 1130*6777b538SAndroid Build Coastguard Worker args += [ "--use-build-server" ] 1131*6777b538SAndroid Build Coastguard Worker } 1132*6777b538SAndroid Build Coastguard Worker 1133*6777b538SAndroid Build Coastguard Worker if (defined(invoker.lint_suppressions_file)) { 1134*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.lint_suppressions_file ] 1135*6777b538SAndroid Build Coastguard Worker 1136*6777b538SAndroid Build Coastguard Worker args += [ 1137*6777b538SAndroid Build Coastguard Worker "--config-path", 1138*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.lint_suppressions_file, root_build_dir), 1139*6777b538SAndroid Build Coastguard Worker ] 1140*6777b538SAndroid Build Coastguard Worker } 1141*6777b538SAndroid Build Coastguard Worker 1142*6777b538SAndroid Build Coastguard Worker if (defined(testonly) && testonly) { 1143*6777b538SAndroid Build Coastguard Worker # Allows us to ignore unnecessary checks when linting test targets. 1144*6777b538SAndroid Build Coastguard Worker args += [ "--testonly" ] 1145*6777b538SAndroid Build Coastguard Worker } 1146*6777b538SAndroid Build Coastguard Worker 1147*6777b538SAndroid Build Coastguard Worker if (defined(invoker.manifest_package)) { 1148*6777b538SAndroid Build Coastguard Worker args += [ "--manifest-package=${invoker.manifest_package}" ] 1149*6777b538SAndroid Build Coastguard Worker } 1150*6777b538SAndroid Build Coastguard Worker 1151*6777b538SAndroid Build Coastguard Worker if (treat_warnings_as_errors) { 1152*6777b538SAndroid Build Coastguard Worker args += [ "--warnings-as-errors" ] 1153*6777b538SAndroid Build Coastguard Worker } 1154*6777b538SAndroid Build Coastguard Worker 1155*6777b538SAndroid Build Coastguard Worker if (defined(invoker.lint_baseline_file)) { 1156*6777b538SAndroid Build Coastguard Worker if (compute_inputs_for_analyze) { 1157*6777b538SAndroid Build Coastguard Worker # The baseline file is included in lint.py as a depfile dep. Since 1158*6777b538SAndroid Build Coastguard Worker # removing it regenerates the file, it is useful to not have this as 1159*6777b538SAndroid Build Coastguard Worker # a gn input during local development. Add it only for bots' analyze. 1160*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.lint_baseline_file ] 1161*6777b538SAndroid Build Coastguard Worker } 1162*6777b538SAndroid Build Coastguard Worker args += [ 1163*6777b538SAndroid Build Coastguard Worker # Baseline allows us to turn on lint warnings without fixing all the 1164*6777b538SAndroid Build Coastguard Worker # pre-existing issues. This stops the flood of new issues while the 1165*6777b538SAndroid Build Coastguard Worker # existing ones are being fixed. 1166*6777b538SAndroid Build Coastguard Worker "--baseline", 1167*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.lint_baseline_file, root_build_dir), 1168*6777b538SAndroid Build Coastguard Worker ] 1169*6777b538SAndroid Build Coastguard Worker } 1170*6777b538SAndroid Build Coastguard Worker 1171*6777b538SAndroid Build Coastguard Worker if (defined(invoker.create_cache) && invoker.create_cache) { 1172*6777b538SAndroid Build Coastguard Worker # Putting the stamp file in the cache dir allows us to depend on ninja 1173*6777b538SAndroid Build Coastguard Worker # to create the cache dir for us. 1174*6777b538SAndroid Build Coastguard Worker args += [ "--create-cache" ] 1175*6777b538SAndroid Build Coastguard Worker _stamp_path = _create_cache_stamp_path 1176*6777b538SAndroid Build Coastguard Worker } else { 1177*6777b538SAndroid Build Coastguard Worker _stamp_path = "$target_out_dir/$target_name/build.lint.stamp" 1178*6777b538SAndroid Build Coastguard Worker deps += [ invoker.build_config_dep ] 1179*6777b538SAndroid Build Coastguard Worker if (!_use_custom_cache_dir) { 1180*6777b538SAndroid Build Coastguard Worker deps += [ "//build/android:prepare_android_lint_cache" ] 1181*6777b538SAndroid Build Coastguard Worker inputs += [ _create_cache_stamp_path ] 1182*6777b538SAndroid Build Coastguard Worker } 1183*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.build_config ] 1184*6777b538SAndroid Build Coastguard Worker _rebased_build_config = 1185*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.build_config, root_build_dir) 1186*6777b538SAndroid Build Coastguard Worker 1187*6777b538SAndroid Build Coastguard Worker args += [ 1188*6777b538SAndroid Build Coastguard Worker "--manifest-path=@FileArg($_rebased_build_config:deps_info:lint_android_manifest)", 1189*6777b538SAndroid Build Coastguard Worker "--extra-manifest-paths=@FileArg($_rebased_build_config:deps_info:lint_extra_android_manifests)", 1190*6777b538SAndroid Build Coastguard Worker 1191*6777b538SAndroid Build Coastguard Worker # Lint requires all source and all resource files to be passed in the 1192*6777b538SAndroid Build Coastguard Worker # same invocation for checks like UnusedResources. 1193*6777b538SAndroid Build Coastguard Worker "--sources=@FileArg($_rebased_build_config:deps_info:lint_sources)", 1194*6777b538SAndroid Build Coastguard Worker "--aars=@FileArg($_rebased_build_config:deps_info:lint_aars)", 1195*6777b538SAndroid Build Coastguard Worker "--srcjars=@FileArg($_rebased_build_config:deps_info:lint_srcjars)", 1196*6777b538SAndroid Build Coastguard Worker "--resource-sources=@FileArg($_rebased_build_config:deps_info:lint_resource_sources)", 1197*6777b538SAndroid Build Coastguard Worker "--resource-zips=@FileArg($_rebased_build_config:deps_info:lint_resource_zips)", 1198*6777b538SAndroid Build Coastguard Worker 1199*6777b538SAndroid Build Coastguard Worker # The full classpath is required for annotation checks like @IntDef. 1200*6777b538SAndroid Build Coastguard Worker "--classpath=@FileArg($_rebased_build_config:deps_info:javac_full_interface_classpath)", 1201*6777b538SAndroid Build Coastguard Worker ] 1202*6777b538SAndroid Build Coastguard Worker } 1203*6777b538SAndroid Build Coastguard Worker 1204*6777b538SAndroid Build Coastguard Worker outputs = [ _stamp_path ] 1205*6777b538SAndroid Build Coastguard Worker args += [ 1206*6777b538SAndroid Build Coastguard Worker "--stamp", 1207*6777b538SAndroid Build Coastguard Worker rebase_path(_stamp_path, root_build_dir), 1208*6777b538SAndroid Build Coastguard Worker ] 1209*6777b538SAndroid Build Coastguard Worker } 1210*6777b538SAndroid Build Coastguard Worker } 1211*6777b538SAndroid Build Coastguard Worker 1212*6777b538SAndroid Build Coastguard Worker template("proguard") { 1213*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1214*6777b538SAndroid Build Coastguard Worker _script = "//build/android/gyp/proguard.py" 1215*6777b538SAndroid Build Coastguard Worker _deps = invoker.deps 1216*6777b538SAndroid Build Coastguard Worker 1217*6777b538SAndroid Build Coastguard Worker _inputs = java_paths_for_inputs + [ 1218*6777b538SAndroid Build Coastguard Worker invoker.build_config, 1219*6777b538SAndroid Build Coastguard Worker _r8_path, 1220*6777b538SAndroid Build Coastguard Worker _custom_r8_path, 1221*6777b538SAndroid Build Coastguard Worker ] 1222*6777b538SAndroid Build Coastguard Worker if (defined(invoker.inputs)) { 1223*6777b538SAndroid Build Coastguard Worker _inputs += invoker.inputs 1224*6777b538SAndroid Build Coastguard Worker } 1225*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_mapping_path)) { 1226*6777b538SAndroid Build Coastguard Worker _mapping_path = invoker.proguard_mapping_path 1227*6777b538SAndroid Build Coastguard Worker } else { 1228*6777b538SAndroid Build Coastguard Worker _mapping_path = "${invoker.output_path}.mapping" 1229*6777b538SAndroid Build Coastguard Worker } 1230*6777b538SAndroid Build Coastguard Worker 1231*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) 1232*6777b538SAndroid Build Coastguard Worker 1233*6777b538SAndroid Build Coastguard Worker # This is generally the apk name, and serves to identify the mapping 1234*6777b538SAndroid Build Coastguard Worker # file that would be required to deobfuscate a stacktrace. 1235*6777b538SAndroid Build Coastguard Worker _mapping_basename = get_path_info(_mapping_path, "name") 1236*6777b538SAndroid Build Coastguard Worker _version_code = "@FileArg($_rebased_build_config:deps_info:version_code)" 1237*6777b538SAndroid Build Coastguard Worker _package_name = "@FileArg($_rebased_build_config:deps_info:package_name)" 1238*6777b538SAndroid Build Coastguard Worker if (defined(invoker.package_name)) { 1239*6777b538SAndroid Build Coastguard Worker _package_name = invoker.package_name 1240*6777b538SAndroid Build Coastguard Worker } 1241*6777b538SAndroid Build Coastguard Worker if (defined(invoker.version_code)) { 1242*6777b538SAndroid Build Coastguard Worker _version_code = invoker.version_code 1243*6777b538SAndroid Build Coastguard Worker } 1244*6777b538SAndroid Build Coastguard Worker 1245*6777b538SAndroid Build Coastguard Worker # The Mapping ID is parsed to when uploading mapping files. 1246*6777b538SAndroid Build Coastguard Worker # See: https://crbug.com/1417308 1247*6777b538SAndroid Build Coastguard Worker _source_file_template = 1248*6777b538SAndroid Build Coastguard Worker "chromium-$_mapping_basename-$android_channel-$_version_code" 1249*6777b538SAndroid Build Coastguard Worker 1250*6777b538SAndroid Build Coastguard Worker _args = [ 1251*6777b538SAndroid Build Coastguard Worker "--min-api=${invoker.min_sdk_version}", 1252*6777b538SAndroid Build Coastguard Worker "--mapping-output", 1253*6777b538SAndroid Build Coastguard Worker rebase_path(_mapping_path, root_build_dir), 1254*6777b538SAndroid Build Coastguard Worker "--classpath", 1255*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_build_config:deps_info:proguard_classpath_jars)", 1256*6777b538SAndroid Build Coastguard Worker "--classpath", 1257*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_build_config:android:sdk_jars)", 1258*6777b538SAndroid Build Coastguard Worker "--r8-path", 1259*6777b538SAndroid Build Coastguard Worker rebase_path(_r8_path, root_build_dir), 1260*6777b538SAndroid Build Coastguard Worker "--custom-r8-path", 1261*6777b538SAndroid Build Coastguard Worker rebase_path(_custom_r8_path, root_build_dir), 1262*6777b538SAndroid Build Coastguard Worker "--package-name=$_package_name", 1263*6777b538SAndroid Build Coastguard Worker "--source-file", 1264*6777b538SAndroid Build Coastguard Worker _source_file_template, 1265*6777b538SAndroid Build Coastguard Worker "--proguard-configs=@FileArg($_rebased_build_config:deps_info:proguard_all_configs)", 1266*6777b538SAndroid Build Coastguard Worker ] 1267*6777b538SAndroid Build Coastguard Worker if (treat_warnings_as_errors) { 1268*6777b538SAndroid Build Coastguard Worker _args += [ "--warnings-as-errors" ] 1269*6777b538SAndroid Build Coastguard Worker } 1270*6777b538SAndroid Build Coastguard Worker 1271*6777b538SAndroid Build Coastguard Worker if ((!defined(invoker.proguard_enable_obfuscation) || 1272*6777b538SAndroid Build Coastguard Worker invoker.proguard_enable_obfuscation) && enable_proguard_obfuscation) { 1273*6777b538SAndroid Build Coastguard Worker _args += [ "--enable-obfuscation" ] 1274*6777b538SAndroid Build Coastguard Worker } 1275*6777b538SAndroid Build Coastguard Worker if (defined(invoker.repackage_classes)) { 1276*6777b538SAndroid Build Coastguard Worker _args += [ "--repackage-classes=" + invoker.repackage_classes ] 1277*6777b538SAndroid Build Coastguard Worker } 1278*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apply_mapping)) { 1279*6777b538SAndroid Build Coastguard Worker _inputs += [ invoker.apply_mapping ] 1280*6777b538SAndroid Build Coastguard Worker _rebased_apply_mapping_path = 1281*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.apply_mapping, root_build_dir) 1282*6777b538SAndroid Build Coastguard Worker args += [ "--apply-mapping=$_rebased_apply_mapping_path" ] 1283*6777b538SAndroid Build Coastguard Worker } 1284*6777b538SAndroid Build Coastguard Worker 1285*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_configs)) { 1286*6777b538SAndroid Build Coastguard Worker _inputs += invoker.proguard_configs 1287*6777b538SAndroid Build Coastguard Worker _rebased_proguard_configs = 1288*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.proguard_configs, root_build_dir) 1289*6777b538SAndroid Build Coastguard Worker _args += [ "--proguard-configs=$_rebased_proguard_configs" ] 1290*6777b538SAndroid Build Coastguard Worker } 1291*6777b538SAndroid Build Coastguard Worker 1292*6777b538SAndroid Build Coastguard Worker if (defined(invoker.modules)) { 1293*6777b538SAndroid Build Coastguard Worker foreach(_feature_module, invoker.modules) { 1294*6777b538SAndroid Build Coastguard Worker _rebased_module_build_config = 1295*6777b538SAndroid Build Coastguard Worker rebase_path(_feature_module.build_config, root_build_dir) 1296*6777b538SAndroid Build Coastguard Worker _args += [ 1297*6777b538SAndroid Build Coastguard Worker "--feature-name=${_feature_module.name}", 1298*6777b538SAndroid Build Coastguard Worker "--dex-dest=@FileArg($_rebased_module_build_config:final_dex:path)", 1299*6777b538SAndroid Build Coastguard Worker ] 1300*6777b538SAndroid Build Coastguard Worker 1301*6777b538SAndroid Build Coastguard Worker # The bundle's build config has the correct classpaths - the individual 1302*6777b538SAndroid Build Coastguard Worker # modules' build configs may double-use some jars. 1303*6777b538SAndroid Build Coastguard Worker if (defined(invoker.add_view_trace_events) && 1304*6777b538SAndroid Build Coastguard Worker invoker.add_view_trace_events) { 1305*6777b538SAndroid Build Coastguard Worker _args += [ "--feature-jars=@FileArg($_rebased_build_config:modules:${_feature_module.name}:trace_event_rewritten_device_classpath)" ] 1306*6777b538SAndroid Build Coastguard Worker } else { 1307*6777b538SAndroid Build Coastguard Worker _args += [ "--feature-jars=@FileArg($_rebased_build_config:modules:${_feature_module.name}:device_classpath)" ] 1308*6777b538SAndroid Build Coastguard Worker } 1309*6777b538SAndroid Build Coastguard Worker 1310*6777b538SAndroid Build Coastguard Worker if (defined(_feature_module.uses_split)) { 1311*6777b538SAndroid Build Coastguard Worker _args += [ "--uses-split=${_feature_module.name}:${_feature_module.uses_split}" ] 1312*6777b538SAndroid Build Coastguard Worker } 1313*6777b538SAndroid Build Coastguard Worker _deps += [ _feature_module.build_config_target ] 1314*6777b538SAndroid Build Coastguard Worker } 1315*6777b538SAndroid Build Coastguard Worker _stamp = "${target_gen_dir}/${target_name}.r8.stamp" 1316*6777b538SAndroid Build Coastguard Worker _outputs = [ _stamp ] 1317*6777b538SAndroid Build Coastguard Worker _output_arg = [ 1318*6777b538SAndroid Build Coastguard Worker "--stamp", 1319*6777b538SAndroid Build Coastguard Worker rebase_path(_stamp, root_build_dir), 1320*6777b538SAndroid Build Coastguard Worker ] 1321*6777b538SAndroid Build Coastguard Worker } else { 1322*6777b538SAndroid Build Coastguard Worker # We don't directly set the output arg on the _args variable since it is 1323*6777b538SAndroid Build Coastguard Worker # shared with the expectation target that uses its own stamp file and 1324*6777b538SAndroid Build Coastguard Worker # does not take an --output-path. 1325*6777b538SAndroid Build Coastguard Worker _output_arg = [ 1326*6777b538SAndroid Build Coastguard Worker "--output-path", 1327*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output_path, root_build_dir), 1328*6777b538SAndroid Build Coastguard Worker ] 1329*6777b538SAndroid Build Coastguard Worker _outputs = [ invoker.output_path ] 1330*6777b538SAndroid Build Coastguard Worker } 1331*6777b538SAndroid Build Coastguard Worker _outputs += [ _mapping_path ] 1332*6777b538SAndroid Build Coastguard Worker 1333*6777b538SAndroid Build Coastguard Worker if (defined(invoker.input_art_profile)) { 1334*6777b538SAndroid Build Coastguard Worker _inputs += [ invoker.input_art_profile ] 1335*6777b538SAndroid Build Coastguard Worker _args += [ "--input-art-profile=" + 1336*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.input_art_profile, root_build_dir) ] 1337*6777b538SAndroid Build Coastguard Worker if (defined(invoker.output_art_profile)) { 1338*6777b538SAndroid Build Coastguard Worker _outputs += [ invoker.output_art_profile ] 1339*6777b538SAndroid Build Coastguard Worker _args += [ "--output-art-profile=" + 1340*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output_art_profile, root_build_dir) ] 1341*6777b538SAndroid Build Coastguard Worker } 1342*6777b538SAndroid Build Coastguard Worker if (defined(invoker.enable_startup_profile) && 1343*6777b538SAndroid Build Coastguard Worker invoker.enable_startup_profile) { 1344*6777b538SAndroid Build Coastguard Worker _args += [ "--apply-startup-profile" ] 1345*6777b538SAndroid Build Coastguard Worker } 1346*6777b538SAndroid Build Coastguard Worker } 1347*6777b538SAndroid Build Coastguard Worker 1348*6777b538SAndroid Build Coastguard Worker if (defined(invoker.enable_proguard_checks) && 1349*6777b538SAndroid Build Coastguard Worker !invoker.enable_proguard_checks) { 1350*6777b538SAndroid Build Coastguard Worker _args += [ "--disable-checks" ] 1351*6777b538SAndroid Build Coastguard Worker } 1352*6777b538SAndroid Build Coastguard Worker 1353*6777b538SAndroid Build Coastguard Worker _ignore_desugar_missing_deps = 1354*6777b538SAndroid Build Coastguard Worker defined(invoker.ignore_desugar_missing_deps) && 1355*6777b538SAndroid Build Coastguard Worker invoker.ignore_desugar_missing_deps 1356*6777b538SAndroid Build Coastguard Worker if (!_ignore_desugar_missing_deps) { 1357*6777b538SAndroid Build Coastguard Worker _args += [ "--show-desugar-default-interface-warnings" ] 1358*6777b538SAndroid Build Coastguard Worker } 1359*6777b538SAndroid Build Coastguard Worker 1360*6777b538SAndroid Build Coastguard Worker if (defined(invoker.custom_assertion_handler)) { 1361*6777b538SAndroid Build Coastguard Worker _args += [ 1362*6777b538SAndroid Build Coastguard Worker "--assertion-handler", 1363*6777b538SAndroid Build Coastguard Worker invoker.custom_assertion_handler, 1364*6777b538SAndroid Build Coastguard Worker ] 1365*6777b538SAndroid Build Coastguard Worker } else if (enable_java_asserts) { 1366*6777b538SAndroid Build Coastguard Worker # The default for generating dex file format is 1367*6777b538SAndroid Build Coastguard Worker # --force-disable-assertions. 1368*6777b538SAndroid Build Coastguard Worker _args += [ "--force-enable-assertions" ] 1369*6777b538SAndroid Build Coastguard Worker } 1370*6777b538SAndroid Build Coastguard Worker 1371*6777b538SAndroid Build Coastguard Worker if (defined(invoker.args)) { 1372*6777b538SAndroid Build Coastguard Worker _args += invoker.args 1373*6777b538SAndroid Build Coastguard Worker } 1374*6777b538SAndroid Build Coastguard Worker 1375*6777b538SAndroid Build Coastguard Worker if (defined(invoker.expected_proguard_config)) { 1376*6777b538SAndroid Build Coastguard Worker _expectations_target = 1377*6777b538SAndroid Build Coastguard Worker "${invoker.top_target_name}_validate_proguard_config" 1378*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_expectations_target) { 1379*6777b538SAndroid Build Coastguard Worker script = _script 1380*6777b538SAndroid Build Coastguard Worker 1381*6777b538SAndroid Build Coastguard Worker # Need to depend on all deps so that proguard.txt within .aar files get 1382*6777b538SAndroid Build Coastguard Worker # extracted. 1383*6777b538SAndroid Build Coastguard Worker deps = _deps 1384*6777b538SAndroid Build Coastguard Worker depfile = "${target_gen_dir}/${target_name}.d" 1385*6777b538SAndroid Build Coastguard Worker inputs = [ 1386*6777b538SAndroid Build Coastguard Worker invoker.build_config, 1387*6777b538SAndroid Build Coastguard Worker invoker.expected_proguard_config, 1388*6777b538SAndroid Build Coastguard Worker ] 1389*6777b538SAndroid Build Coastguard Worker _actual_file = "$target_gen_dir/$target_name.proguard_configs" 1390*6777b538SAndroid Build Coastguard Worker _failure_file = 1391*6777b538SAndroid Build Coastguard Worker "$expectations_failure_dir/" + 1392*6777b538SAndroid Build Coastguard Worker string_replace(invoker.expected_proguard_config, "/", "_") 1393*6777b538SAndroid Build Coastguard Worker outputs = [ 1394*6777b538SAndroid Build Coastguard Worker _actual_file, 1395*6777b538SAndroid Build Coastguard Worker _failure_file, 1396*6777b538SAndroid Build Coastguard Worker ] 1397*6777b538SAndroid Build Coastguard Worker args = _args + [ 1398*6777b538SAndroid Build Coastguard Worker "--depfile", 1399*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 1400*6777b538SAndroid Build Coastguard Worker "--failure-file", 1401*6777b538SAndroid Build Coastguard Worker rebase_path(_failure_file, root_build_dir), 1402*6777b538SAndroid Build Coastguard Worker "--expected-file", 1403*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.expected_proguard_config, root_build_dir), 1404*6777b538SAndroid Build Coastguard Worker "--actual-file", 1405*6777b538SAndroid Build Coastguard Worker rebase_path(_actual_file, root_build_dir), 1406*6777b538SAndroid Build Coastguard Worker "--only-verify-expectations", 1407*6777b538SAndroid Build Coastguard Worker ] 1408*6777b538SAndroid Build Coastguard Worker if (defined(invoker.expected_proguard_config_base)) { 1409*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.expected_proguard_config_base ] 1410*6777b538SAndroid Build Coastguard Worker args += [ 1411*6777b538SAndroid Build Coastguard Worker "--expected-file-base", 1412*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.expected_proguard_config_base, root_build_dir), 1413*6777b538SAndroid Build Coastguard Worker ] 1414*6777b538SAndroid Build Coastguard Worker } 1415*6777b538SAndroid Build Coastguard Worker if (fail_on_android_expectations) { 1416*6777b538SAndroid Build Coastguard Worker args += [ "--fail-on-expectations" ] 1417*6777b538SAndroid Build Coastguard Worker } 1418*6777b538SAndroid Build Coastguard Worker } 1419*6777b538SAndroid Build Coastguard Worker _deps += [ ":$_expectations_target" ] 1420*6777b538SAndroid Build Coastguard Worker } 1421*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 1422*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1423*6777b538SAndroid Build Coastguard Worker [ 1424*6777b538SAndroid Build Coastguard Worker "data", 1425*6777b538SAndroid Build Coastguard Worker "data_deps", 1426*6777b538SAndroid Build Coastguard Worker "public_deps", 1427*6777b538SAndroid Build Coastguard Worker ]) 1428*6777b538SAndroid Build Coastguard Worker script = _script 1429*6777b538SAndroid Build Coastguard Worker deps = _deps 1430*6777b538SAndroid Build Coastguard Worker inputs = _inputs 1431*6777b538SAndroid Build Coastguard Worker outputs = _outputs 1432*6777b538SAndroid Build Coastguard Worker depfile = "${target_gen_dir}/${target_name}.d" 1433*6777b538SAndroid Build Coastguard Worker args = _args + _output_arg + [ 1434*6777b538SAndroid Build Coastguard Worker "--depfile", 1435*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 1436*6777b538SAndroid Build Coastguard Worker ] 1437*6777b538SAndroid Build Coastguard Worker 1438*6777b538SAndroid Build Coastguard Worker # http://crbug.com/725224. Fix for bots running out of memory. 1439*6777b538SAndroid Build Coastguard Worker if (defined(java_cmd_pool_size)) { 1440*6777b538SAndroid Build Coastguard Worker pool = "//build/config/android:java_cmd_pool($default_toolchain)" 1441*6777b538SAndroid Build Coastguard Worker } else { 1442*6777b538SAndroid Build Coastguard Worker pool = "//build/toolchain:link_pool($default_toolchain)" 1443*6777b538SAndroid Build Coastguard Worker } 1444*6777b538SAndroid Build Coastguard Worker } 1445*6777b538SAndroid Build Coastguard Worker } 1446*6777b538SAndroid Build Coastguard Worker 1447*6777b538SAndroid Build Coastguard Worker # Generates a script in the build bin directory to run a java binary. 1448*6777b538SAndroid Build Coastguard Worker # 1449*6777b538SAndroid Build Coastguard Worker # Variables 1450*6777b538SAndroid Build Coastguard Worker # main_class: The class containing the program entry point. 1451*6777b538SAndroid Build Coastguard Worker # build_config: Path to .build_config.json for the jar (contains classpath). 1452*6777b538SAndroid Build Coastguard Worker # script_name: Name of the script to generate. 1453*6777b538SAndroid Build Coastguard Worker # wrapper_script_args: List of extra arguments to pass to the executable. 1454*6777b538SAndroid Build Coastguard Worker # tiered_stop_at_level_one: Whether to pass --tiered-stop-at-level-one 1455*6777b538SAndroid Build Coastguard Worker # 1456*6777b538SAndroid Build Coastguard Worker template("java_binary_script") { 1457*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 1458*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1459*6777b538SAndroid Build Coastguard Worker 1460*6777b538SAndroid Build Coastguard Worker _main_class = invoker.main_class 1461*6777b538SAndroid Build Coastguard Worker _build_config = invoker.build_config 1462*6777b538SAndroid Build Coastguard Worker _script_name = invoker.script_name 1463*6777b538SAndroid Build Coastguard Worker if (defined(invoker.max_heap_size)) { 1464*6777b538SAndroid Build Coastguard Worker _max_heap_size = invoker.max_heap_size 1465*6777b538SAndroid Build Coastguard Worker } else { 1466*6777b538SAndroid Build Coastguard Worker _max_heap_size = "1G" 1467*6777b538SAndroid Build Coastguard Worker } 1468*6777b538SAndroid Build Coastguard Worker 1469*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/create_java_binary_script.py" 1470*6777b538SAndroid Build Coastguard Worker inputs = [ _build_config ] 1471*6777b538SAndroid Build Coastguard Worker _java_script = "$root_build_dir/bin/$_script_name" 1472*6777b538SAndroid Build Coastguard Worker outputs = [ _java_script ] 1473*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(_build_config, root_build_dir) 1474*6777b538SAndroid Build Coastguard Worker args = [ 1475*6777b538SAndroid Build Coastguard Worker "--output", 1476*6777b538SAndroid Build Coastguard Worker rebase_path(_java_script, root_build_dir), 1477*6777b538SAndroid Build Coastguard Worker "--main-class", 1478*6777b538SAndroid Build Coastguard Worker _main_class, 1479*6777b538SAndroid Build Coastguard Worker "--classpath=@FileArg($_rebased_build_config:deps_info:host_classpath)", 1480*6777b538SAndroid Build Coastguard Worker "--max-heap-size=$_max_heap_size", 1481*6777b538SAndroid Build Coastguard Worker ] 1482*6777b538SAndroid Build Coastguard Worker data = [] 1483*6777b538SAndroid Build Coastguard Worker deps = [ "//third_party/jdk:java_data" ] 1484*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 1485*6777b538SAndroid Build Coastguard Worker deps += invoker.deps 1486*6777b538SAndroid Build Coastguard Worker } 1487*6777b538SAndroid Build Coastguard Worker 1488*6777b538SAndroid Build Coastguard Worker if (enable_java_asserts) { 1489*6777b538SAndroid Build Coastguard Worker args += [ "--enable-asserts" ] 1490*6777b538SAndroid Build Coastguard Worker } 1491*6777b538SAndroid Build Coastguard Worker if (use_jacoco_coverage) { 1492*6777b538SAndroid Build Coastguard Worker args += [ 1493*6777b538SAndroid Build Coastguard Worker "--classpath", 1494*6777b538SAndroid Build Coastguard Worker rebase_path(_jacoco_host_jar, root_build_dir), 1495*6777b538SAndroid Build Coastguard Worker ] 1496*6777b538SAndroid Build Coastguard Worker data += [ _jacoco_host_jar ] 1497*6777b538SAndroid Build Coastguard Worker } 1498*6777b538SAndroid Build Coastguard Worker if (defined(invoker.tiered_stop_at_level_one) && 1499*6777b538SAndroid Build Coastguard Worker invoker.tiered_stop_at_level_one) { 1500*6777b538SAndroid Build Coastguard Worker args += [ "--tiered-stop-at-level-one" ] 1501*6777b538SAndroid Build Coastguard Worker } 1502*6777b538SAndroid Build Coastguard Worker if (defined(invoker.extra_classpath_jars)) { 1503*6777b538SAndroid Build Coastguard Worker _rebased_extra_classpath_jars = 1504*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.extra_classpath_jars, root_build_dir) 1505*6777b538SAndroid Build Coastguard Worker args += [ "--classpath=${_rebased_extra_classpath_jars}" ] 1506*6777b538SAndroid Build Coastguard Worker data += invoker.extra_classpath_jars 1507*6777b538SAndroid Build Coastguard Worker } 1508*6777b538SAndroid Build Coastguard Worker if (defined(invoker.wrapper_script_args)) { 1509*6777b538SAndroid Build Coastguard Worker args += [ "--" ] + invoker.wrapper_script_args 1510*6777b538SAndroid Build Coastguard Worker } 1511*6777b538SAndroid Build Coastguard Worker } 1512*6777b538SAndroid Build Coastguard Worker } 1513*6777b538SAndroid Build Coastguard Worker 1514*6777b538SAndroid Build Coastguard Worker # Variables 1515*6777b538SAndroid Build Coastguard Worker # apply_mapping: The path to the ProGuard mapping file to apply. 1516*6777b538SAndroid Build Coastguard Worker # disable_incremental: Disable incremental dexing. 1517*6777b538SAndroid Build Coastguard Worker template("dex") { 1518*6777b538SAndroid Build Coastguard Worker _min_sdk_version = default_min_sdk_version 1519*6777b538SAndroid Build Coastguard Worker if (defined(invoker.min_sdk_version)) { 1520*6777b538SAndroid Build Coastguard Worker _min_sdk_version = invoker.min_sdk_version 1521*6777b538SAndroid Build Coastguard Worker } 1522*6777b538SAndroid Build Coastguard Worker assert( 1523*6777b538SAndroid Build Coastguard Worker _min_sdk_version >= min_supported_sdk_version, 1524*6777b538SAndroid Build Coastguard Worker get_label_info(":$target_name", "label_no_toolchain") + " has an unsupported min_sdk_version of $_min_sdk_version (min is $min_supported_sdk_version)") 1525*6777b538SAndroid Build Coastguard Worker 1526*6777b538SAndroid Build Coastguard Worker _proguard_enabled = 1527*6777b538SAndroid Build Coastguard Worker defined(invoker.proguard_enabled) && invoker.proguard_enabled 1528*6777b538SAndroid Build Coastguard Worker _is_dex_merging = defined(invoker.input_dex_filearg) 1529*6777b538SAndroid Build Coastguard Worker _enable_desugar = !defined(invoker.enable_desugar) || invoker.enable_desugar 1530*6777b538SAndroid Build Coastguard Worker _desugar_needs_classpath = _enable_desugar 1531*6777b538SAndroid Build Coastguard Worker 1532*6777b538SAndroid Build Coastguard Worker # It's not safe to dex merge with libraries dex'ed at higher api versions. 1533*6777b538SAndroid Build Coastguard Worker assert(!_is_dex_merging || _min_sdk_version >= default_min_sdk_version) 1534*6777b538SAndroid Build Coastguard Worker 1535*6777b538SAndroid Build Coastguard Worker # For D8's backported method desugaring to work properly, the dex merge step 1536*6777b538SAndroid Build Coastguard Worker # must not be set to a higher minSdkVersion than it was for the libraries. 1537*6777b538SAndroid Build Coastguard Worker if (_enable_desugar && _is_dex_merging) { 1538*6777b538SAndroid Build Coastguard Worker _min_sdk_version = default_min_sdk_version 1539*6777b538SAndroid Build Coastguard Worker } 1540*6777b538SAndroid Build Coastguard Worker 1541*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.output) || 1542*6777b538SAndroid Build Coastguard Worker (_proguard_enabled && defined(invoker.modules))) 1543*6777b538SAndroid Build Coastguard Worker assert(!_proguard_enabled || !(defined(invoker.input_dex_filearg) || 1544*6777b538SAndroid Build Coastguard Worker defined(invoker.input_classes_filearg) || 1545*6777b538SAndroid Build Coastguard Worker defined(invoker.input_class_jars)), 1546*6777b538SAndroid Build Coastguard Worker "Cannot explicitly set inputs when proguarding a dex.") 1547*6777b538SAndroid Build Coastguard Worker 1548*6777b538SAndroid Build Coastguard Worker # Dex merging should not also be dexing. 1549*6777b538SAndroid Build Coastguard Worker assert(!(_is_dex_merging && defined(invoker.input_classes_filearg))) 1550*6777b538SAndroid Build Coastguard Worker assert(!(_is_dex_merging && defined(invoker.input_class_jars))) 1551*6777b538SAndroid Build Coastguard Worker 1552*6777b538SAndroid Build Coastguard Worker assert(!(defined(invoker.apply_mapping) && !_proguard_enabled), 1553*6777b538SAndroid Build Coastguard Worker "apply_mapping can only be specified if proguard is enabled.") 1554*6777b538SAndroid Build Coastguard Worker if (defined(invoker.custom_assertion_handler)) { 1555*6777b538SAndroid Build Coastguard Worker assert(_proguard_enabled, 1556*6777b538SAndroid Build Coastguard Worker "Proguard is required to support the custom assertion handler.") 1557*6777b538SAndroid Build Coastguard Worker } 1558*6777b538SAndroid Build Coastguard Worker 1559*6777b538SAndroid Build Coastguard Worker if (_desugar_needs_classpath || _proguard_enabled) { 1560*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) 1561*6777b538SAndroid Build Coastguard Worker } 1562*6777b538SAndroid Build Coastguard Worker 1563*6777b538SAndroid Build Coastguard Worker if (_proguard_enabled) { 1564*6777b538SAndroid Build Coastguard Worker _proguard_target_name = target_name 1565*6777b538SAndroid Build Coastguard Worker 1566*6777b538SAndroid Build Coastguard Worker proguard(_proguard_target_name) { 1567*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1568*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 1569*6777b538SAndroid Build Coastguard Worker "add_view_trace_events", 1570*6777b538SAndroid Build Coastguard Worker "apply_mapping", 1571*6777b538SAndroid Build Coastguard Worker "input_art_profile", 1572*6777b538SAndroid Build Coastguard Worker "output_art_profile", 1573*6777b538SAndroid Build Coastguard Worker "enable_startup_profile", 1574*6777b538SAndroid Build Coastguard Worker "build_config", 1575*6777b538SAndroid Build Coastguard Worker "custom_assertion_handler", 1576*6777b538SAndroid Build Coastguard Worker "data", 1577*6777b538SAndroid Build Coastguard Worker "data_deps", 1578*6777b538SAndroid Build Coastguard Worker "deps", 1579*6777b538SAndroid Build Coastguard Worker "enable_proguard_checks", 1580*6777b538SAndroid Build Coastguard Worker "expected_proguard_config", 1581*6777b538SAndroid Build Coastguard Worker "expected_proguard_config_base", 1582*6777b538SAndroid Build Coastguard Worker "ignore_desugar_missing_deps", 1583*6777b538SAndroid Build Coastguard Worker "inputs", 1584*6777b538SAndroid Build Coastguard Worker "modules", 1585*6777b538SAndroid Build Coastguard Worker "package_name", 1586*6777b538SAndroid Build Coastguard Worker "proguard_configs", 1587*6777b538SAndroid Build Coastguard Worker "proguard_enable_obfuscation", 1588*6777b538SAndroid Build Coastguard Worker "proguard_mapping_path", 1589*6777b538SAndroid Build Coastguard Worker "proguard_sourcefile_suffix", 1590*6777b538SAndroid Build Coastguard Worker "repackage_classes", 1591*6777b538SAndroid Build Coastguard Worker "top_target_name", 1592*6777b538SAndroid Build Coastguard Worker "version_code", 1593*6777b538SAndroid Build Coastguard Worker ]) 1594*6777b538SAndroid Build Coastguard Worker min_sdk_version = _min_sdk_version 1595*6777b538SAndroid Build Coastguard Worker 1596*6777b538SAndroid Build Coastguard Worker args = [] 1597*6777b538SAndroid Build Coastguard Worker if (defined(invoker.has_apk_under_test) && invoker.has_apk_under_test) { 1598*6777b538SAndroid Build Coastguard Worker args += [ "--input-paths=@FileArg($_rebased_build_config:deps_info:device_classpath_extended)" ] 1599*6777b538SAndroid Build Coastguard Worker } else if (defined(invoker.add_view_trace_events) && 1600*6777b538SAndroid Build Coastguard Worker invoker.add_view_trace_events && defined(invoker.modules)) { 1601*6777b538SAndroid Build Coastguard Worker args += [ "--input-paths=@FileArg($_rebased_build_config:deps_info:trace_event_rewritten_device_classpath)" ] 1602*6777b538SAndroid Build Coastguard Worker } else { 1603*6777b538SAndroid Build Coastguard Worker args += [ "--input-paths=@FileArg($_rebased_build_config:deps_info:device_classpath)" ] 1604*6777b538SAndroid Build Coastguard Worker } 1605*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_args)) { 1606*6777b538SAndroid Build Coastguard Worker args += invoker.proguard_args 1607*6777b538SAndroid Build Coastguard Worker } 1608*6777b538SAndroid Build Coastguard Worker 1609*6777b538SAndroid Build Coastguard Worker if (defined(invoker.output)) { 1610*6777b538SAndroid Build Coastguard Worker output_path = invoker.output 1611*6777b538SAndroid Build Coastguard Worker } else if (!defined(proguard_mapping_path)) { 1612*6777b538SAndroid Build Coastguard Worker proguard_mapping_path = "$target_out_dir/$target_name.mapping" 1613*6777b538SAndroid Build Coastguard Worker } 1614*6777b538SAndroid Build Coastguard Worker } 1615*6777b538SAndroid Build Coastguard Worker } else { # !_proguard_enabled 1616*6777b538SAndroid Build Coastguard Worker _is_library = defined(invoker.is_library) && invoker.is_library 1617*6777b538SAndroid Build Coastguard Worker assert(!(defined(invoker.input_classes_filearg) && _is_library)) 1618*6777b538SAndroid Build Coastguard Worker assert(_is_library == defined(invoker.unprocessed_jar_path)) 1619*6777b538SAndroid Build Coastguard Worker _input_class_jars = [] 1620*6777b538SAndroid Build Coastguard Worker if (defined(invoker.input_class_jars)) { 1621*6777b538SAndroid Build Coastguard Worker _input_class_jars = invoker.input_class_jars 1622*6777b538SAndroid Build Coastguard Worker } 1623*6777b538SAndroid Build Coastguard Worker _deps = invoker.deps 1624*6777b538SAndroid Build Coastguard Worker 1625*6777b538SAndroid Build Coastguard Worker if (_input_class_jars != []) { 1626*6777b538SAndroid Build Coastguard Worker _rebased_input_class_jars = 1627*6777b538SAndroid Build Coastguard Worker rebase_path(_input_class_jars, root_build_dir) 1628*6777b538SAndroid Build Coastguard Worker } 1629*6777b538SAndroid Build Coastguard Worker 1630*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 1631*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1632*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 1633*6777b538SAndroid Build Coastguard Worker "data", 1634*6777b538SAndroid Build Coastguard Worker "data_deps", 1635*6777b538SAndroid Build Coastguard Worker ]) 1636*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/dex.py" 1637*6777b538SAndroid Build Coastguard Worker deps = _deps 1638*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 1639*6777b538SAndroid Build Coastguard Worker outputs = [ invoker.output ] 1640*6777b538SAndroid Build Coastguard Worker inputs = [ 1641*6777b538SAndroid Build Coastguard Worker "$android_sdk/optional/android.test.base.jar", 1642*6777b538SAndroid Build Coastguard Worker "$android_sdk/optional/org.apache.http.legacy.jar", 1643*6777b538SAndroid Build Coastguard Worker "//third_party/jdk/current/bin/java", 1644*6777b538SAndroid Build Coastguard Worker _custom_d8_path, 1645*6777b538SAndroid Build Coastguard Worker _d8_path, 1646*6777b538SAndroid Build Coastguard Worker android_sdk_jar, 1647*6777b538SAndroid Build Coastguard Worker ] + java_paths_for_inputs 1648*6777b538SAndroid Build Coastguard Worker if (defined(invoker.inputs)) { 1649*6777b538SAndroid Build Coastguard Worker inputs += invoker.inputs 1650*6777b538SAndroid Build Coastguard Worker } 1651*6777b538SAndroid Build Coastguard Worker 1652*6777b538SAndroid Build Coastguard Worker if (!_is_library) { 1653*6777b538SAndroid Build Coastguard Worker # http://crbug.com/725224. Fix for bots running out of memory. 1654*6777b538SAndroid Build Coastguard Worker if (defined(java_cmd_pool_size)) { 1655*6777b538SAndroid Build Coastguard Worker pool = "//build/config/android:java_cmd_pool($default_toolchain)" 1656*6777b538SAndroid Build Coastguard Worker } else { 1657*6777b538SAndroid Build Coastguard Worker pool = "//build/toolchain:link_pool($default_toolchain)" 1658*6777b538SAndroid Build Coastguard Worker } 1659*6777b538SAndroid Build Coastguard Worker } 1660*6777b538SAndroid Build Coastguard Worker 1661*6777b538SAndroid Build Coastguard Worker args = [ 1662*6777b538SAndroid Build Coastguard Worker "--depfile", 1663*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 1664*6777b538SAndroid Build Coastguard Worker "--output", 1665*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output, root_build_dir), 1666*6777b538SAndroid Build Coastguard Worker "--min-api=$_min_sdk_version", 1667*6777b538SAndroid Build Coastguard Worker "--r8-jar-path", 1668*6777b538SAndroid Build Coastguard Worker rebase_path(_d8_path, root_build_dir), 1669*6777b538SAndroid Build Coastguard Worker "--custom-d8-jar-path", 1670*6777b538SAndroid Build Coastguard Worker rebase_path(_custom_d8_path, root_build_dir), 1671*6777b538SAndroid Build Coastguard Worker 1672*6777b538SAndroid Build Coastguard Worker # Uncomment when rebuilding custom_d8.jar. 1673*6777b538SAndroid Build Coastguard Worker #"--skip-custom-d8", 1674*6777b538SAndroid Build Coastguard Worker ] 1675*6777b538SAndroid Build Coastguard Worker if (treat_warnings_as_errors) { 1676*6777b538SAndroid Build Coastguard Worker args += [ "--warnings-as-errors" ] 1677*6777b538SAndroid Build Coastguard Worker } 1678*6777b538SAndroid Build Coastguard Worker 1679*6777b538SAndroid Build Coastguard Worker if (enable_incremental_d8 && !(defined(invoker.disable_incremental) && 1680*6777b538SAndroid Build Coastguard Worker invoker.disable_incremental)) { 1681*6777b538SAndroid Build Coastguard Worker # Don't use incremental dexing for ProGuarded inputs as a precaution. 1682*6777b538SAndroid Build Coastguard Worker args += [ 1683*6777b538SAndroid Build Coastguard Worker "--incremental-dir", 1684*6777b538SAndroid Build Coastguard Worker rebase_path("$target_out_dir/$target_name", root_build_dir), 1685*6777b538SAndroid Build Coastguard Worker ] 1686*6777b538SAndroid Build Coastguard Worker } 1687*6777b538SAndroid Build Coastguard Worker if (_is_library) { 1688*6777b538SAndroid Build Coastguard Worker args += [ "--library" ] 1689*6777b538SAndroid Build Coastguard Worker } 1690*6777b538SAndroid Build Coastguard Worker if (defined(invoker.input_dex_filearg)) { 1691*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.build_config ] 1692*6777b538SAndroid Build Coastguard Worker args += [ "--dex-inputs-filearg=${invoker.input_dex_filearg}" ] 1693*6777b538SAndroid Build Coastguard Worker } 1694*6777b538SAndroid Build Coastguard Worker if (defined(invoker.input_classes_filearg)) { 1695*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.build_config ] 1696*6777b538SAndroid Build Coastguard Worker args += [ "--class-inputs-filearg=${invoker.input_classes_filearg}" ] 1697*6777b538SAndroid Build Coastguard Worker 1698*6777b538SAndroid Build Coastguard Worker # Required for the same reason as unprocessed_jar_path is added to 1699*6777b538SAndroid Build Coastguard Worker # classpath (see note below). 1700*6777b538SAndroid Build Coastguard Worker args += [ "--classpath=${invoker.input_classes_filearg}" ] 1701*6777b538SAndroid Build Coastguard Worker } 1702*6777b538SAndroid Build Coastguard Worker if (_input_class_jars != []) { 1703*6777b538SAndroid Build Coastguard Worker inputs += _input_class_jars 1704*6777b538SAndroid Build Coastguard Worker args += [ "--class-inputs=${_rebased_input_class_jars}" ] 1705*6777b538SAndroid Build Coastguard Worker } 1706*6777b538SAndroid Build Coastguard Worker 1707*6777b538SAndroid Build Coastguard Worker # Never compile intemediates with --release in order to: 1708*6777b538SAndroid Build Coastguard Worker # 1) not require recompiles when toggling is_java_debug, 1709*6777b538SAndroid Build Coastguard Worker # 2) allow incremental_install=1 to still have local variable 1710*6777b538SAndroid Build Coastguard Worker # information even when is_java_debug=false. 1711*6777b538SAndroid Build Coastguard Worker if (!is_java_debug && !_is_library) { 1712*6777b538SAndroid Build Coastguard Worker args += [ "--release" ] 1713*6777b538SAndroid Build Coastguard Worker } 1714*6777b538SAndroid Build Coastguard Worker 1715*6777b538SAndroid Build Coastguard Worker if (_enable_desugar) { 1716*6777b538SAndroid Build Coastguard Worker args += [ "--desugar" ] 1717*6777b538SAndroid Build Coastguard Worker 1718*6777b538SAndroid Build Coastguard Worker _ignore_desugar_missing_deps = 1719*6777b538SAndroid Build Coastguard Worker defined(invoker.ignore_desugar_missing_deps) && 1720*6777b538SAndroid Build Coastguard Worker invoker.ignore_desugar_missing_deps 1721*6777b538SAndroid Build Coastguard Worker if (!_ignore_desugar_missing_deps) { 1722*6777b538SAndroid Build Coastguard Worker args += [ "--show-desugar-default-interface-warnings" ] 1723*6777b538SAndroid Build Coastguard Worker } 1724*6777b538SAndroid Build Coastguard Worker } 1725*6777b538SAndroid Build Coastguard Worker if (_desugar_needs_classpath) { 1726*6777b538SAndroid Build Coastguard Worker # Cannot use header jar for the active jar, because it does not 1727*6777b538SAndroid Build Coastguard Worker # contain anonymous classes. https://crbug.com/1342018#c5 1728*6777b538SAndroid Build Coastguard Worker # Cannot use processed .jar here because it might have classes 1729*6777b538SAndroid Build Coastguard Worker # filtered out via jar_excluded_patterns. 1730*6777b538SAndroid Build Coastguard Worker # Must come first in classpath in order to take precedence over 1731*6777b538SAndroid Build Coastguard Worker # deps that defined the same classes (via jar_excluded_patterns). 1732*6777b538SAndroid Build Coastguard Worker if (defined(invoker.unprocessed_jar_path)) { 1733*6777b538SAndroid Build Coastguard Worker args += [ 1734*6777b538SAndroid Build Coastguard Worker "--classpath", 1735*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.unprocessed_jar_path, root_build_dir), 1736*6777b538SAndroid Build Coastguard Worker 1737*6777b538SAndroid Build Coastguard Worker # Pass the full classpath to find new dependencies that are not in 1738*6777b538SAndroid Build Coastguard Worker # the .desugardeps file. 1739*6777b538SAndroid Build Coastguard Worker "--classpath=@FileArg($_rebased_build_config:deps_info:javac_full_interface_classpath)", 1740*6777b538SAndroid Build Coastguard Worker ] 1741*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.unprocessed_jar_path ] 1742*6777b538SAndroid Build Coastguard Worker } 1743*6777b538SAndroid Build Coastguard Worker _desugar_dependencies_path = 1744*6777b538SAndroid Build Coastguard Worker "$target_gen_dir/$target_name.desugardeps" 1745*6777b538SAndroid Build Coastguard Worker args += [ 1746*6777b538SAndroid Build Coastguard Worker "--desugar-dependencies", 1747*6777b538SAndroid Build Coastguard Worker rebase_path(_desugar_dependencies_path, root_build_dir), 1748*6777b538SAndroid Build Coastguard Worker "--bootclasspath=@FileArg($_rebased_build_config:android:sdk_jars)", 1749*6777b538SAndroid Build Coastguard Worker ] 1750*6777b538SAndroid Build Coastguard Worker } 1751*6777b538SAndroid Build Coastguard Worker 1752*6777b538SAndroid Build Coastguard Worker if (defined(invoker.custom_assertion_handler)) { 1753*6777b538SAndroid Build Coastguard Worker args += [ 1754*6777b538SAndroid Build Coastguard Worker "--assertion-handler", 1755*6777b538SAndroid Build Coastguard Worker invoker.custom_assertion_handler, 1756*6777b538SAndroid Build Coastguard Worker ] 1757*6777b538SAndroid Build Coastguard Worker } else if (enable_java_asserts) { 1758*6777b538SAndroid Build Coastguard Worker # The default for generating dex file format is 1759*6777b538SAndroid Build Coastguard Worker # --force-disable-assertions. 1760*6777b538SAndroid Build Coastguard Worker args += [ "--force-enable-assertions" ] 1761*6777b538SAndroid Build Coastguard Worker } 1762*6777b538SAndroid Build Coastguard Worker } 1763*6777b538SAndroid Build Coastguard Worker } 1764*6777b538SAndroid Build Coastguard Worker } 1765*6777b538SAndroid Build Coastguard Worker 1766*6777b538SAndroid Build Coastguard Worker template("jacoco_instr") { 1767*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 1768*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1769*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 1770*6777b538SAndroid Build Coastguard Worker "deps", 1771*6777b538SAndroid Build Coastguard Worker "public_deps", 1772*6777b538SAndroid Build Coastguard Worker ]) 1773*6777b538SAndroid Build Coastguard Worker 1774*6777b538SAndroid Build Coastguard Worker # The name needs to match the SOURCES_JSON_FILES_SUFFIX in 1775*6777b538SAndroid Build Coastguard Worker # generate_coverage_metadata_for_java.py. 1776*6777b538SAndroid Build Coastguard Worker _sources_json_file = "$target_out_dir/${target_name}__jacoco_sources.json" 1777*6777b538SAndroid Build Coastguard Worker _jacococli_jar = "//third_party/jacoco/lib/jacococli.jar" 1778*6777b538SAndroid Build Coastguard Worker 1779*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/jacoco_instr.py" 1780*6777b538SAndroid Build Coastguard Worker inputs = invoker.source_files + java_paths_for_inputs + [ 1781*6777b538SAndroid Build Coastguard Worker _jacococli_jar, 1782*6777b538SAndroid Build Coastguard Worker invoker.input_jar_path, 1783*6777b538SAndroid Build Coastguard Worker ] 1784*6777b538SAndroid Build Coastguard Worker outputs = [ 1785*6777b538SAndroid Build Coastguard Worker _sources_json_file, 1786*6777b538SAndroid Build Coastguard Worker invoker.output_jar_path, 1787*6777b538SAndroid Build Coastguard Worker ] 1788*6777b538SAndroid Build Coastguard Worker args = [ 1789*6777b538SAndroid Build Coastguard Worker "--input-path", 1790*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.input_jar_path, root_build_dir), 1791*6777b538SAndroid Build Coastguard Worker "--output-path", 1792*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output_jar_path, root_build_dir), 1793*6777b538SAndroid Build Coastguard Worker "--sources-json-file", 1794*6777b538SAndroid Build Coastguard Worker rebase_path(_sources_json_file, root_build_dir), 1795*6777b538SAndroid Build Coastguard Worker "--target-sources-file", 1796*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.target_sources_file, root_build_dir), 1797*6777b538SAndroid Build Coastguard Worker "--jacococli-jar", 1798*6777b538SAndroid Build Coastguard Worker rebase_path(_jacococli_jar, root_build_dir), 1799*6777b538SAndroid Build Coastguard Worker ] 1800*6777b538SAndroid Build Coastguard Worker if (coverage_instrumentation_input_file != "") { 1801*6777b538SAndroid Build Coastguard Worker args += [ 1802*6777b538SAndroid Build Coastguard Worker "--files-to-instrument", 1803*6777b538SAndroid Build Coastguard Worker rebase_path(coverage_instrumentation_input_file, root_build_dir), 1804*6777b538SAndroid Build Coastguard Worker ] 1805*6777b538SAndroid Build Coastguard Worker } 1806*6777b538SAndroid Build Coastguard Worker } 1807*6777b538SAndroid Build Coastguard Worker } 1808*6777b538SAndroid Build Coastguard Worker 1809*6777b538SAndroid Build Coastguard Worker template("filter_jar") { 1810*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 1811*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/filter_zip.py" 1812*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1813*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 1814*6777b538SAndroid Build Coastguard Worker "deps", 1815*6777b538SAndroid Build Coastguard Worker "data", 1816*6777b538SAndroid Build Coastguard Worker "data_deps", 1817*6777b538SAndroid Build Coastguard Worker ]) 1818*6777b538SAndroid Build Coastguard Worker inputs = [ invoker.input_jar ] 1819*6777b538SAndroid Build Coastguard Worker if (defined(invoker.inputs)) { 1820*6777b538SAndroid Build Coastguard Worker inputs += invoker.inputs 1821*6777b538SAndroid Build Coastguard Worker } 1822*6777b538SAndroid Build Coastguard Worker outputs = [ invoker.output_jar ] 1823*6777b538SAndroid Build Coastguard Worker 1824*6777b538SAndroid Build Coastguard Worker _jar_excluded_patterns = [] 1825*6777b538SAndroid Build Coastguard Worker if (defined(invoker.jar_excluded_patterns)) { 1826*6777b538SAndroid Build Coastguard Worker _jar_excluded_patterns = invoker.jar_excluded_patterns 1827*6777b538SAndroid Build Coastguard Worker } 1828*6777b538SAndroid Build Coastguard Worker _jar_included_patterns = [] 1829*6777b538SAndroid Build Coastguard Worker if (defined(invoker.jar_included_patterns)) { 1830*6777b538SAndroid Build Coastguard Worker _jar_included_patterns = invoker.jar_included_patterns 1831*6777b538SAndroid Build Coastguard Worker } 1832*6777b538SAndroid Build Coastguard Worker args = [ 1833*6777b538SAndroid Build Coastguard Worker "--input", 1834*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.input_jar, root_build_dir), 1835*6777b538SAndroid Build Coastguard Worker "--output", 1836*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output_jar, root_build_dir), 1837*6777b538SAndroid Build Coastguard Worker "--exclude-globs=${_jar_excluded_patterns}", 1838*6777b538SAndroid Build Coastguard Worker "--include-globs=${_jar_included_patterns}", 1839*6777b538SAndroid Build Coastguard Worker ] 1840*6777b538SAndroid Build Coastguard Worker } 1841*6777b538SAndroid Build Coastguard Worker } 1842*6777b538SAndroid Build Coastguard Worker 1843*6777b538SAndroid Build Coastguard Worker template("process_java_library") { 1844*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1845*6777b538SAndroid Build Coastguard Worker 1846*6777b538SAndroid Build Coastguard Worker _previous_output_jar = invoker.input_jar_path 1847*6777b538SAndroid Build Coastguard Worker 1848*6777b538SAndroid Build Coastguard Worker if (invoker.jacoco_instrument) { 1849*6777b538SAndroid Build Coastguard Worker _filter_jar_target_name = "${target_name}__filter_jar" 1850*6777b538SAndroid Build Coastguard Worker _filter_jar_output_jar = "$target_out_dir/$target_name.filter.jar" 1851*6777b538SAndroid Build Coastguard Worker } else { 1852*6777b538SAndroid Build Coastguard Worker _filter_jar_target_name = target_name 1853*6777b538SAndroid Build Coastguard Worker _filter_jar_output_jar = invoker.output_jar_path 1854*6777b538SAndroid Build Coastguard Worker } 1855*6777b538SAndroid Build Coastguard Worker 1856*6777b538SAndroid Build Coastguard Worker filter_jar(_filter_jar_target_name) { 1857*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1858*6777b538SAndroid Build Coastguard Worker [ 1859*6777b538SAndroid Build Coastguard Worker "data", 1860*6777b538SAndroid Build Coastguard Worker "data_deps", 1861*6777b538SAndroid Build Coastguard Worker "jar_excluded_patterns", 1862*6777b538SAndroid Build Coastguard Worker "jar_included_patterns", 1863*6777b538SAndroid Build Coastguard Worker ]) 1864*6777b538SAndroid Build Coastguard Worker deps = invoker.deps 1865*6777b538SAndroid Build Coastguard Worker input_jar = _previous_output_jar 1866*6777b538SAndroid Build Coastguard Worker output_jar = _filter_jar_output_jar 1867*6777b538SAndroid Build Coastguard Worker } 1868*6777b538SAndroid Build Coastguard Worker 1869*6777b538SAndroid Build Coastguard Worker if (invoker.jacoco_instrument) { 1870*6777b538SAndroid Build Coastguard Worker # Jacoco must run after desugar (or else desugar sometimes fails). 1871*6777b538SAndroid Build Coastguard Worker # It must run after filtering to avoid the same (filtered) class mapping 1872*6777b538SAndroid Build Coastguard Worker # to multiple .jar files. 1873*6777b538SAndroid Build Coastguard Worker # We run offline code coverage processing here rather than with a 1874*6777b538SAndroid Build Coastguard Worker # javaagent as the desired coverage data was not being generated. 1875*6777b538SAndroid Build Coastguard Worker # See crbug.com/1097815. 1876*6777b538SAndroid Build Coastguard Worker jacoco_instr(target_name) { 1877*6777b538SAndroid Build Coastguard Worker deps = [ ":$_filter_jar_target_name" ] + invoker.deps 1878*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1879*6777b538SAndroid Build Coastguard Worker [ 1880*6777b538SAndroid Build Coastguard Worker "source_files", 1881*6777b538SAndroid Build Coastguard Worker "target_sources_file", 1882*6777b538SAndroid Build Coastguard Worker ]) 1883*6777b538SAndroid Build Coastguard Worker 1884*6777b538SAndroid Build Coastguard Worker input_jar_path = _filter_jar_output_jar 1885*6777b538SAndroid Build Coastguard Worker output_jar_path = invoker.output_jar_path 1886*6777b538SAndroid Build Coastguard Worker } 1887*6777b538SAndroid Build Coastguard Worker } 1888*6777b538SAndroid Build Coastguard Worker } 1889*6777b538SAndroid Build Coastguard Worker 1890*6777b538SAndroid Build Coastguard Worker template("bytecode_processor") { 1891*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 1892*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1893*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 1894*6777b538SAndroid Build Coastguard Worker "data_deps", 1895*6777b538SAndroid Build Coastguard Worker "deps", 1896*6777b538SAndroid Build Coastguard Worker ]) 1897*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/bytecode_processor.py" 1898*6777b538SAndroid Build Coastguard Worker inputs = java_paths_for_inputs + [ 1899*6777b538SAndroid Build Coastguard Worker invoker.build_config, 1900*6777b538SAndroid Build Coastguard Worker invoker.input_jar, 1901*6777b538SAndroid Build Coastguard Worker ] 1902*6777b538SAndroid Build Coastguard Worker outputs = [ "$target_out_dir/$target_name.bytecode.stamp" ] 1903*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) 1904*6777b538SAndroid Build Coastguard Worker args = [ 1905*6777b538SAndroid Build Coastguard Worker "--target-name", 1906*6777b538SAndroid Build Coastguard Worker get_label_info(":${target_name}", "label_no_toolchain"), 1907*6777b538SAndroid Build Coastguard Worker "--gn-target=${invoker.target_label}", 1908*6777b538SAndroid Build Coastguard Worker "--input-jar", 1909*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.input_jar, root_build_dir), 1910*6777b538SAndroid Build Coastguard Worker "--stamp", 1911*6777b538SAndroid Build Coastguard Worker rebase_path(outputs[0], root_build_dir), 1912*6777b538SAndroid Build Coastguard Worker "--chromium-output-dir", 1913*6777b538SAndroid Build Coastguard Worker rebase_path(root_build_dir, root_build_dir), 1914*6777b538SAndroid Build Coastguard Worker "--direct-classpath-jars=@FileArg($_rebased_build_config:javac:classpath)", 1915*6777b538SAndroid Build Coastguard Worker "--full-classpath-jars=@FileArg($_rebased_build_config:deps_info:javac_full_classpath)", 1916*6777b538SAndroid Build Coastguard Worker "--full-classpath-gn-targets=@FileArg($_rebased_build_config:deps_info:javac_full_classpath_targets)", 1917*6777b538SAndroid Build Coastguard Worker ] 1918*6777b538SAndroid Build Coastguard Worker if (auto_add_missing_java_deps) { 1919*6777b538SAndroid Build Coastguard Worker args += [ "--auto-add-deps" ] 1920*6777b538SAndroid Build Coastguard Worker } 1921*6777b538SAndroid Build Coastguard Worker if (android_static_analysis == "build_server") { 1922*6777b538SAndroid Build Coastguard Worker args += [ "--use-build-server" ] 1923*6777b538SAndroid Build Coastguard Worker } 1924*6777b538SAndroid Build Coastguard Worker if (invoker.include_android_sdk) { 1925*6777b538SAndroid Build Coastguard Worker args += [ "--sdk-classpath-jars=@FileArg($_rebased_build_config:android:sdk_jars)" ] 1926*6777b538SAndroid Build Coastguard Worker } 1927*6777b538SAndroid Build Coastguard Worker if (treat_warnings_as_errors) { 1928*6777b538SAndroid Build Coastguard Worker args += [ "--warnings-as-errors" ] 1929*6777b538SAndroid Build Coastguard Worker } 1930*6777b538SAndroid Build Coastguard Worker } 1931*6777b538SAndroid Build Coastguard Worker } 1932*6777b538SAndroid Build Coastguard Worker 1933*6777b538SAndroid Build Coastguard Worker template("merge_manifests") { 1934*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 1935*6777b538SAndroid Build Coastguard Worker assert( 1936*6777b538SAndroid Build Coastguard Worker invoker.min_sdk_version >= min_supported_sdk_version, 1937*6777b538SAndroid Build Coastguard Worker get_label_info(":$target_name", "label_no_toolchain") + " has an unsupported min_sdk_version of ${invoker.min_sdk_version} (min is $min_supported_sdk_version)") 1938*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "deps" ]) 1939*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/merge_manifest.py" 1940*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 1941*6777b538SAndroid Build Coastguard Worker 1942*6777b538SAndroid Build Coastguard Worker inputs = java_paths_for_inputs + [ 1943*6777b538SAndroid Build Coastguard Worker invoker.build_config, 1944*6777b538SAndroid Build Coastguard Worker invoker.input_manifest, 1945*6777b538SAndroid Build Coastguard Worker _manifest_merger_jar_path, 1946*6777b538SAndroid Build Coastguard Worker ] 1947*6777b538SAndroid Build Coastguard Worker 1948*6777b538SAndroid Build Coastguard Worker outputs = [ invoker.output_manifest ] 1949*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) 1950*6777b538SAndroid Build Coastguard Worker 1951*6777b538SAndroid Build Coastguard Worker args = [ 1952*6777b538SAndroid Build Coastguard Worker "--depfile", 1953*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 1954*6777b538SAndroid Build Coastguard Worker "--manifest-merger-jar", 1955*6777b538SAndroid Build Coastguard Worker rebase_path(_manifest_merger_jar_path, root_build_dir), 1956*6777b538SAndroid Build Coastguard Worker "--root-manifest", 1957*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.input_manifest, root_build_dir), 1958*6777b538SAndroid Build Coastguard Worker "--output", 1959*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output_manifest, root_build_dir), 1960*6777b538SAndroid Build Coastguard Worker "--extras", 1961*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_build_config:extra_android_manifests)", 1962*6777b538SAndroid Build Coastguard Worker "--min-sdk-version=${invoker.min_sdk_version}", 1963*6777b538SAndroid Build Coastguard Worker "--target-sdk-version=${invoker.target_sdk_version}", 1964*6777b538SAndroid Build Coastguard Worker ] 1965*6777b538SAndroid Build Coastguard Worker 1966*6777b538SAndroid Build Coastguard Worker if (defined(invoker.manifest_package)) { 1967*6777b538SAndroid Build Coastguard Worker args += [ "--manifest-package=${invoker.manifest_package}" ] 1968*6777b538SAndroid Build Coastguard Worker } 1969*6777b538SAndroid Build Coastguard Worker 1970*6777b538SAndroid Build Coastguard Worker if (defined(invoker.max_sdk_version)) { 1971*6777b538SAndroid Build Coastguard Worker args += [ "--max-sdk-version=${invoker.max_sdk_version}" ] 1972*6777b538SAndroid Build Coastguard Worker } 1973*6777b538SAndroid Build Coastguard Worker 1974*6777b538SAndroid Build Coastguard Worker if (treat_warnings_as_errors) { 1975*6777b538SAndroid Build Coastguard Worker args += [ "--warnings-as-errors" ] 1976*6777b538SAndroid Build Coastguard Worker } 1977*6777b538SAndroid Build Coastguard Worker } 1978*6777b538SAndroid Build Coastguard Worker } 1979*6777b538SAndroid Build Coastguard Worker 1980*6777b538SAndroid Build Coastguard Worker # This template is used to parse a set of resource directories and 1981*6777b538SAndroid Build Coastguard Worker # create the R.txt, .srcjar and .resources.zip for it. 1982*6777b538SAndroid Build Coastguard Worker # 1983*6777b538SAndroid Build Coastguard Worker # Input variables: 1984*6777b538SAndroid Build Coastguard Worker # deps: Specifies the input dependencies for this target. 1985*6777b538SAndroid Build Coastguard Worker # 1986*6777b538SAndroid Build Coastguard Worker # build_config: Path to the .build_config.json file corresponding to the target. 1987*6777b538SAndroid Build Coastguard Worker # 1988*6777b538SAndroid Build Coastguard Worker # sources: 1989*6777b538SAndroid Build Coastguard Worker # List of input resource files. 1990*6777b538SAndroid Build Coastguard Worker # 1991*6777b538SAndroid Build Coastguard Worker # custom_package: (optional) 1992*6777b538SAndroid Build Coastguard Worker # Package name for the generated R.java source file. Optional if 1993*6777b538SAndroid Build Coastguard Worker # android_manifest is not provided. 1994*6777b538SAndroid Build Coastguard Worker # 1995*6777b538SAndroid Build Coastguard Worker # android_manifest: (optional) 1996*6777b538SAndroid Build Coastguard Worker # If custom_package is not provided, path to an AndroidManifest.xml file 1997*6777b538SAndroid Build Coastguard Worker # that is only used to extract a package name out of it. 1998*6777b538SAndroid Build Coastguard Worker # 1999*6777b538SAndroid Build Coastguard Worker # r_text_in_path: (optional) 2000*6777b538SAndroid Build Coastguard Worker # Path to an input R.txt file to use to generate the R.java file. 2001*6777b538SAndroid Build Coastguard Worker # The default is to use 'aapt' to generate the file from the content 2002*6777b538SAndroid Build Coastguard Worker # of the resource directories. 2003*6777b538SAndroid Build Coastguard Worker # 2004*6777b538SAndroid Build Coastguard Worker # Output variables: 2005*6777b538SAndroid Build Coastguard Worker # resources_zip: 2006*6777b538SAndroid Build Coastguard Worker # Path to a .resources.zip that will simply contain all the 2007*6777b538SAndroid Build Coastguard Worker # input resources, collected in a single archive. 2008*6777b538SAndroid Build Coastguard Worker # 2009*6777b538SAndroid Build Coastguard Worker # r_text_out_path: Path for the generated R.txt file. 2010*6777b538SAndroid Build Coastguard Worker # 2011*6777b538SAndroid Build Coastguard Worker template("prepare_resources") { 2012*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 2013*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 2014*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 2015*6777b538SAndroid Build Coastguard Worker "deps", 2016*6777b538SAndroid Build Coastguard Worker "public_deps", 2017*6777b538SAndroid Build Coastguard Worker "sources", 2018*6777b538SAndroid Build Coastguard Worker ]) 2019*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/prepare_resources.py" 2020*6777b538SAndroid Build Coastguard Worker 2021*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/${invoker.target_name}.d" 2022*6777b538SAndroid Build Coastguard Worker outputs = [ 2023*6777b538SAndroid Build Coastguard Worker invoker.resources_zip, 2024*6777b538SAndroid Build Coastguard Worker invoker.resources_zip + ".info", 2025*6777b538SAndroid Build Coastguard Worker invoker.r_text_out_path, 2026*6777b538SAndroid Build Coastguard Worker ] 2027*6777b538SAndroid Build Coastguard Worker 2028*6777b538SAndroid Build Coastguard Worker inputs = [ invoker.res_sources_path ] 2029*6777b538SAndroid Build Coastguard Worker 2030*6777b538SAndroid Build Coastguard Worker _rebased_res_sources_path = 2031*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.res_sources_path, root_build_dir) 2032*6777b538SAndroid Build Coastguard Worker 2033*6777b538SAndroid Build Coastguard Worker args = [ 2034*6777b538SAndroid Build Coastguard Worker "--depfile", 2035*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 2036*6777b538SAndroid Build Coastguard Worker "--res-sources-path=$_rebased_res_sources_path", 2037*6777b538SAndroid Build Coastguard Worker "--resource-zip-out", 2038*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.resources_zip, root_build_dir), 2039*6777b538SAndroid Build Coastguard Worker "--r-text-out", 2040*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.r_text_out_path, root_build_dir), 2041*6777b538SAndroid Build Coastguard Worker ] 2042*6777b538SAndroid Build Coastguard Worker 2043*6777b538SAndroid Build Coastguard Worker if (defined(invoker.r_text_in_path)) { 2044*6777b538SAndroid Build Coastguard Worker _r_text_in_path = invoker.r_text_in_path 2045*6777b538SAndroid Build Coastguard Worker inputs += [ _r_text_in_path ] 2046*6777b538SAndroid Build Coastguard Worker args += [ 2047*6777b538SAndroid Build Coastguard Worker "--r-text-in", 2048*6777b538SAndroid Build Coastguard Worker rebase_path(_r_text_in_path, root_build_dir), 2049*6777b538SAndroid Build Coastguard Worker ] 2050*6777b538SAndroid Build Coastguard Worker } 2051*6777b538SAndroid Build Coastguard Worker 2052*6777b538SAndroid Build Coastguard Worker if (defined(invoker.strip_drawables) && invoker.strip_drawables) { 2053*6777b538SAndroid Build Coastguard Worker args += [ "--strip-drawables" ] 2054*6777b538SAndroid Build Coastguard Worker } 2055*6777b538SAndroid Build Coastguard Worker if (defined(invoker.allow_missing_resources) && 2056*6777b538SAndroid Build Coastguard Worker invoker.allow_missing_resources) { 2057*6777b538SAndroid Build Coastguard Worker args += [ "--allow-missing-resources" ] 2058*6777b538SAndroid Build Coastguard Worker } 2059*6777b538SAndroid Build Coastguard Worker } 2060*6777b538SAndroid Build Coastguard Worker } 2061*6777b538SAndroid Build Coastguard Worker 2062*6777b538SAndroid Build Coastguard Worker # A template that is used to compile all resources needed by a binary 2063*6777b538SAndroid Build Coastguard Worker # (e.g. an android_apk or a robolectric_binary) into an intermediate .ar_ 2064*6777b538SAndroid Build Coastguard Worker # archive. It can also generate an associated .srcjar that contains the 2065*6777b538SAndroid Build Coastguard Worker # final R.java sources for all resource packages the binary depends on. 2066*6777b538SAndroid Build Coastguard Worker # 2067*6777b538SAndroid Build Coastguard Worker # Input variables: 2068*6777b538SAndroid Build Coastguard Worker # android_sdk_dep: The sdk dep that these resources should compile against. 2069*6777b538SAndroid Build Coastguard Worker # 2070*6777b538SAndroid Build Coastguard Worker # deps: Specifies the input dependencies for this target. 2071*6777b538SAndroid Build Coastguard Worker # 2072*6777b538SAndroid Build Coastguard Worker # build_config: Path to the .build_config.json file corresponding to the target. 2073*6777b538SAndroid Build Coastguard Worker # 2074*6777b538SAndroid Build Coastguard Worker # build_config_dep: Dep target to generate the .build_config.json file. 2075*6777b538SAndroid Build Coastguard Worker # 2076*6777b538SAndroid Build Coastguard Worker # android_manifest: Path to root manifest for the binary. 2077*6777b538SAndroid Build Coastguard Worker # 2078*6777b538SAndroid Build Coastguard Worker # version_code: (optional) 2079*6777b538SAndroid Build Coastguard Worker # 2080*6777b538SAndroid Build Coastguard Worker # version_name: (optional) 2081*6777b538SAndroid Build Coastguard Worker # 2082*6777b538SAndroid Build Coastguard Worker # shared_resources: (optional) 2083*6777b538SAndroid Build Coastguard Worker # If true, make all variables in each generated R.java file non-final, 2084*6777b538SAndroid Build Coastguard Worker # and provide an onResourcesLoaded() method that can be used to reset 2085*6777b538SAndroid Build Coastguard Worker # their package index at load time. Useful when the APK corresponds to 2086*6777b538SAndroid Build Coastguard Worker # a library that is loaded at runtime, like system_webview_apk or 2087*6777b538SAndroid Build Coastguard Worker # monochrome_apk. 2088*6777b538SAndroid Build Coastguard Worker # 2089*6777b538SAndroid Build Coastguard Worker # app_as_shared_lib: (optional) 2090*6777b538SAndroid Build Coastguard Worker # If true, same effect as shared_resources, but also ensures that the 2091*6777b538SAndroid Build Coastguard Worker # resources can be used by the APK when it is loaded as a regular 2092*6777b538SAndroid Build Coastguard Worker # application as well. Useful for the monochrome_public_apk target 2093*6777b538SAndroid Build Coastguard Worker # which is both an application and a shared runtime library that 2094*6777b538SAndroid Build Coastguard Worker # implements the system webview feature. 2095*6777b538SAndroid Build Coastguard Worker # 2096*6777b538SAndroid Build Coastguard Worker # shared_resources_allowlist: (optional) 2097*6777b538SAndroid Build Coastguard Worker # Path to an R.txt file. If provided, acts similar to shared_resources 2098*6777b538SAndroid Build Coastguard Worker # except that it restricts the list of non-final resource variables 2099*6777b538SAndroid Build Coastguard Worker # to the list from the input R.txt file. Overrides shared_resources 2100*6777b538SAndroid Build Coastguard Worker # when both are specified. 2101*6777b538SAndroid Build Coastguard Worker # 2102*6777b538SAndroid Build Coastguard Worker # shared_resources_allowlist_locales: (optional) 2103*6777b538SAndroid Build Coastguard Worker # If shared_resources_allowlist is used, provide an optional list of 2104*6777b538SAndroid Build Coastguard Worker # Chromium locale names to determine which localized shared string 2105*6777b538SAndroid Build Coastguard Worker # resources to put in the final output, even if aapt_locale_allowlist 2106*6777b538SAndroid Build Coastguard Worker # is defined to a smaller subset. 2107*6777b538SAndroid Build Coastguard Worker # 2108*6777b538SAndroid Build Coastguard Worker # aapt_locale_allowlist: (optional) 2109*6777b538SAndroid Build Coastguard Worker # Restrict compiled locale-dependent resources to a specific allowlist. 2110*6777b538SAndroid Build Coastguard Worker # NOTE: This is a list of Chromium locale names, not Android ones. 2111*6777b538SAndroid Build Coastguard Worker # 2112*6777b538SAndroid Build Coastguard Worker # r_java_root_package_name: (optional) 2113*6777b538SAndroid Build Coastguard Worker # Short package name for this target's root R java file (ex. input of 2114*6777b538SAndroid Build Coastguard Worker # "base" would become "gen.base_module" for the root R java package name). 2115*6777b538SAndroid Build Coastguard Worker # Optional as defaults to "base". 2116*6777b538SAndroid Build Coastguard Worker # 2117*6777b538SAndroid Build Coastguard Worker # resource_exclusion_regex: (optional) 2118*6777b538SAndroid Build Coastguard Worker # 2119*6777b538SAndroid Build Coastguard Worker # resource_exclusion_exceptions: (optional) 2120*6777b538SAndroid Build Coastguard Worker # 2121*6777b538SAndroid Build Coastguard Worker # resource_values_filter_rules: (optional) 2122*6777b538SAndroid Build Coastguard Worker # 2123*6777b538SAndroid Build Coastguard Worker # png_to_webp: (optional) 2124*6777b538SAndroid Build Coastguard Worker # If true, convert all PNG resources (except 9-patch files) to WebP. 2125*6777b538SAndroid Build Coastguard Worker # 2126*6777b538SAndroid Build Coastguard Worker # post_process_script: (optional) 2127*6777b538SAndroid Build Coastguard Worker # 2128*6777b538SAndroid Build Coastguard Worker # package_name: (optional) 2129*6777b538SAndroid Build Coastguard Worker # Name of the package for the purpose of creating R class. 2130*6777b538SAndroid Build Coastguard Worker # 2131*6777b538SAndroid Build Coastguard Worker # package_id: (optional) 2132*6777b538SAndroid Build Coastguard Worker # Use a custom package ID in resource IDs. 2133*6777b538SAndroid Build Coastguard Worker # 2134*6777b538SAndroid Build Coastguard Worker # arsc_package_name: (optional) 2135*6777b538SAndroid Build Coastguard Worker # Use this package name in the arsc file rather than the package name 2136*6777b538SAndroid Build Coastguard Worker # found in the AndroidManifest.xml. Does not affect the package name 2137*6777b538SAndroid Build Coastguard Worker # used in AndroidManifest.xml. 2138*6777b538SAndroid Build Coastguard Worker # 2139*6777b538SAndroid Build Coastguard Worker # resource_ids_provider_dep: (optional) 2140*6777b538SAndroid Build Coastguard Worker # Use resource IDs provided by another APK target when compiling resources 2141*6777b538SAndroid Build Coastguard Worker # (via. "aapt2 link --stable-ids") 2142*6777b538SAndroid Build Coastguard Worker # 2143*6777b538SAndroid Build Coastguard Worker # override_target_sdk: (optional) 2144*6777b538SAndroid Build Coastguard Worker # Update the manifest to target this SDK 2145*6777b538SAndroid Build Coastguard Worker # 2146*6777b538SAndroid Build Coastguard Worker # Output variables: 2147*6777b538SAndroid Build Coastguard Worker # arsc_output: Path to output .ap_ file (optional). 2148*6777b538SAndroid Build Coastguard Worker # 2149*6777b538SAndroid Build Coastguard Worker # proto_output: Path to output .proto.ap_ file (optional). 2150*6777b538SAndroid Build Coastguard Worker # 2151*6777b538SAndroid Build Coastguard Worker # r_text_out_path: (optional): 2152*6777b538SAndroid Build Coastguard Worker # Path for the corresponding generated R.txt file. 2153*6777b538SAndroid Build Coastguard Worker # 2154*6777b538SAndroid Build Coastguard Worker # proguard_file: (optional) 2155*6777b538SAndroid Build Coastguard Worker # Path to proguard configuration file for this apk target. 2156*6777b538SAndroid Build Coastguard Worker # 2157*6777b538SAndroid Build Coastguard Worker template("compile_resources") { 2158*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 2159*6777b538SAndroid Build Coastguard Worker 2160*6777b538SAndroid Build Coastguard Worker _deps = invoker.deps + [ invoker.build_config_dep ] 2161*6777b538SAndroid Build Coastguard Worker if (defined(invoker.android_manifest_dep)) { 2162*6777b538SAndroid Build Coastguard Worker _deps += [ invoker.android_manifest_dep ] 2163*6777b538SAndroid Build Coastguard Worker } 2164*6777b538SAndroid Build Coastguard Worker 2165*6777b538SAndroid Build Coastguard Worker if (defined(invoker.arsc_output)) { 2166*6777b538SAndroid Build Coastguard Worker _arsc_output = invoker.arsc_output 2167*6777b538SAndroid Build Coastguard Worker } 2168*6777b538SAndroid Build Coastguard Worker _final_srcjar_path = "${target_gen_dir}/${target_name}.srcjar" 2169*6777b538SAndroid Build Coastguard Worker 2170*6777b538SAndroid Build Coastguard Worker _script = "//build/android/gyp/compile_resources.py" 2171*6777b538SAndroid Build Coastguard Worker 2172*6777b538SAndroid Build Coastguard Worker _target_sdk_version = invoker.target_sdk_version 2173*6777b538SAndroid Build Coastguard Worker if (defined(invoker.override_target_sdk)) { 2174*6777b538SAndroid Build Coastguard Worker _target_sdk_version = invoker.override_target_sdk 2175*6777b538SAndroid Build Coastguard Worker } 2176*6777b538SAndroid Build Coastguard Worker 2177*6777b538SAndroid Build Coastguard Worker _common_inputs = [ 2178*6777b538SAndroid Build Coastguard Worker invoker.build_config, 2179*6777b538SAndroid Build Coastguard Worker android_sdk_tools_bundle_aapt2, 2180*6777b538SAndroid Build Coastguard Worker android_sdk_jar, 2181*6777b538SAndroid Build Coastguard Worker 2182*6777b538SAndroid Build Coastguard Worker # TODO(b/315080809#comment4): remove these files after fixing 2183*6777b538SAndroid Build Coastguard Worker # build/print_python_deps.py. 2184*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/__init__.py", 2185*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/__init__.py", 2186*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/compiler/__init__.py", 2187*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/compiler/plugin_pb2.py", 2188*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/descriptor.py", 2189*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/descriptor_database.py", 2190*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/descriptor_pb2.py", 2191*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/descriptor_pool.py", 2192*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/__init__.py", 2193*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/_parameterized.py", 2194*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/api_implementation.py", 2195*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/builder.py", 2196*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/containers.py", 2197*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/decoder.py", 2198*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/descriptor_database_test.py", 2199*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/descriptor_pool_test.py", 2200*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/descriptor_test.py", 2201*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/encoder.py", 2202*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/enum_type_wrapper.py", 2203*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/extension_dict.py", 2204*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/generator_test.py", 2205*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/import_test.py", 2206*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/import_test_package/__init__.py", 2207*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/json_format_test.py", 2208*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/keywords_test.py", 2209*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/message_factory_test.py", 2210*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/message_listener.py", 2211*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/message_test.py", 2212*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/proto_builder_test.py", 2213*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/python_message.py", 2214*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/reflection_test.py", 2215*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/service_reflection_test.py", 2216*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/symbol_database_test.py", 2217*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/test_util.py", 2218*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/testing_refleaks.py", 2219*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/text_encoding_test.py", 2220*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/text_format_test.py", 2221*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/type_checkers.py", 2222*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/unknown_fields_test.py", 2223*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/well_known_types.py", 2224*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/well_known_types_test.py", 2225*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/wire_format.py", 2226*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/internal/wire_format_test.py", 2227*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/json_format.py", 2228*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/message.py", 2229*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/message_factory.py", 2230*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/proto_builder.py", 2231*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/pyext/__init__.py", 2232*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/pyext/cpp_message.py", 2233*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/reflection.py", 2234*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/service.py", 2235*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/service_reflection.py", 2236*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/symbol_database.py", 2237*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/text_encoding.py", 2238*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/text_format.py", 2239*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/unknown_fields.py", 2240*6777b538SAndroid Build Coastguard Worker "//third_party/protobuf/python/google/protobuf/util/__init__.py", 2241*6777b538SAndroid Build Coastguard Worker ] 2242*6777b538SAndroid Build Coastguard Worker 2243*6777b538SAndroid Build Coastguard Worker _inputs = _common_inputs 2244*6777b538SAndroid Build Coastguard Worker 2245*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) 2246*6777b538SAndroid Build Coastguard Worker 2247*6777b538SAndroid Build Coastguard Worker _rebased_android_sdk_jar = rebase_path(android_sdk_jar, root_build_dir) 2248*6777b538SAndroid Build Coastguard Worker _args = [ 2249*6777b538SAndroid Build Coastguard Worker "--include-resources=$_rebased_android_sdk_jar", 2250*6777b538SAndroid Build Coastguard Worker "--aapt2-path", 2251*6777b538SAndroid Build Coastguard Worker rebase_path(android_sdk_tools_bundle_aapt2, root_build_dir), 2252*6777b538SAndroid Build Coastguard Worker "--dependencies-res-zips=@FileArg($_rebased_build_config:deps_info:dependency_zips)", 2253*6777b538SAndroid Build Coastguard Worker "--extra-res-packages=@FileArg($_rebased_build_config:deps_info:extra_package_names)", 2254*6777b538SAndroid Build Coastguard Worker "--min-sdk-version=${invoker.min_sdk_version}", 2255*6777b538SAndroid Build Coastguard Worker "--target-sdk-version=${_target_sdk_version}", 2256*6777b538SAndroid Build Coastguard Worker "--webp-cache-dir=obj/android-webp-cache", 2257*6777b538SAndroid Build Coastguard Worker ] 2258*6777b538SAndroid Build Coastguard Worker 2259*6777b538SAndroid Build Coastguard Worker _inputs += [ invoker.android_manifest ] 2260*6777b538SAndroid Build Coastguard Worker _outputs = [ _final_srcjar_path ] 2261*6777b538SAndroid Build Coastguard Worker _args += [ 2262*6777b538SAndroid Build Coastguard Worker "--android-manifest", 2263*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.android_manifest, root_build_dir), 2264*6777b538SAndroid Build Coastguard Worker "--srcjar-out", 2265*6777b538SAndroid Build Coastguard Worker rebase_path(_final_srcjar_path, root_build_dir), 2266*6777b538SAndroid Build Coastguard Worker ] 2267*6777b538SAndroid Build Coastguard Worker if (defined(invoker.version_code)) { 2268*6777b538SAndroid Build Coastguard Worker _args += [ 2269*6777b538SAndroid Build Coastguard Worker "--version-code", 2270*6777b538SAndroid Build Coastguard Worker invoker.version_code, 2271*6777b538SAndroid Build Coastguard Worker ] 2272*6777b538SAndroid Build Coastguard Worker } 2273*6777b538SAndroid Build Coastguard Worker if (defined(invoker.version_name)) { 2274*6777b538SAndroid Build Coastguard Worker _args += [ 2275*6777b538SAndroid Build Coastguard Worker "--version-name", 2276*6777b538SAndroid Build Coastguard Worker invoker.version_name, 2277*6777b538SAndroid Build Coastguard Worker ] 2278*6777b538SAndroid Build Coastguard Worker } 2279*6777b538SAndroid Build Coastguard Worker if (defined(_arsc_output)) { 2280*6777b538SAndroid Build Coastguard Worker _outputs += [ _arsc_output ] 2281*6777b538SAndroid Build Coastguard Worker _args += [ 2282*6777b538SAndroid Build Coastguard Worker "--arsc-path", 2283*6777b538SAndroid Build Coastguard Worker rebase_path(_arsc_output, root_build_dir), 2284*6777b538SAndroid Build Coastguard Worker ] 2285*6777b538SAndroid Build Coastguard Worker } 2286*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proto_output)) { 2287*6777b538SAndroid Build Coastguard Worker _outputs += [ invoker.proto_output ] 2288*6777b538SAndroid Build Coastguard Worker _args += [ 2289*6777b538SAndroid Build Coastguard Worker "--proto-path", 2290*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.proto_output, root_build_dir), 2291*6777b538SAndroid Build Coastguard Worker ] 2292*6777b538SAndroid Build Coastguard Worker } 2293*6777b538SAndroid Build Coastguard Worker if (defined(invoker.size_info_path)) { 2294*6777b538SAndroid Build Coastguard Worker _outputs += [ invoker.size_info_path ] 2295*6777b538SAndroid Build Coastguard Worker _args += [ 2296*6777b538SAndroid Build Coastguard Worker "--info-path", 2297*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.size_info_path, root_build_dir), 2298*6777b538SAndroid Build Coastguard Worker ] 2299*6777b538SAndroid Build Coastguard Worker } 2300*6777b538SAndroid Build Coastguard Worker 2301*6777b538SAndroid Build Coastguard Worker if (defined(invoker.r_java_root_package_name)) { 2302*6777b538SAndroid Build Coastguard Worker _args += [ 2303*6777b538SAndroid Build Coastguard Worker "--r-java-root-package-name", 2304*6777b538SAndroid Build Coastguard Worker invoker.r_java_root_package_name, 2305*6777b538SAndroid Build Coastguard Worker ] 2306*6777b538SAndroid Build Coastguard Worker } 2307*6777b538SAndroid Build Coastguard Worker 2308*6777b538SAndroid Build Coastguard Worker # Useful to have android:debuggable in the manifest even for Release 2309*6777b538SAndroid Build Coastguard Worker # builds. Just omit it for officai 2310*6777b538SAndroid Build Coastguard Worker if (debuggable_apks) { 2311*6777b538SAndroid Build Coastguard Worker _args += [ "--debuggable" ] 2312*6777b538SAndroid Build Coastguard Worker } 2313*6777b538SAndroid Build Coastguard Worker 2314*6777b538SAndroid Build Coastguard Worker if (defined(invoker.r_text_out_path)) { 2315*6777b538SAndroid Build Coastguard Worker _outputs += [ invoker.r_text_out_path ] 2316*6777b538SAndroid Build Coastguard Worker _args += [ 2317*6777b538SAndroid Build Coastguard Worker "--r-text-out", 2318*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.r_text_out_path, root_build_dir), 2319*6777b538SAndroid Build Coastguard Worker ] 2320*6777b538SAndroid Build Coastguard Worker } 2321*6777b538SAndroid Build Coastguard Worker 2322*6777b538SAndroid Build Coastguard Worker if (defined(invoker.rename_manifest_package)) { 2323*6777b538SAndroid Build Coastguard Worker _args += [ 2324*6777b538SAndroid Build Coastguard Worker "--rename-manifest-package", 2325*6777b538SAndroid Build Coastguard Worker invoker.rename_manifest_package, 2326*6777b538SAndroid Build Coastguard Worker ] 2327*6777b538SAndroid Build Coastguard Worker } 2328*6777b538SAndroid Build Coastguard Worker 2329*6777b538SAndroid Build Coastguard Worker # Define the flags related to shared resources. 2330*6777b538SAndroid Build Coastguard Worker # 2331*6777b538SAndroid Build Coastguard Worker # Note the small sanity check to ensure that the package ID of the 2332*6777b538SAndroid Build Coastguard Worker # generated resources table is correct. It should be 0x02 for runtime 2333*6777b538SAndroid Build Coastguard Worker # shared libraries, and 0x7f otherwise. 2334*6777b538SAndroid Build Coastguard Worker 2335*6777b538SAndroid Build Coastguard Worker if (defined(invoker.shared_resources) && invoker.shared_resources) { 2336*6777b538SAndroid Build Coastguard Worker _args += [ "--shared-resources" ] 2337*6777b538SAndroid Build Coastguard Worker } 2338*6777b538SAndroid Build Coastguard Worker if (defined(invoker.app_as_shared_lib) && invoker.app_as_shared_lib) { 2339*6777b538SAndroid Build Coastguard Worker _args += [ "--app-as-shared-lib" ] 2340*6777b538SAndroid Build Coastguard Worker } 2341*6777b538SAndroid Build Coastguard Worker if (defined(invoker.package_id)) { 2342*6777b538SAndroid Build Coastguard Worker _args += [ "--package-id=${invoker.package_id}" ] 2343*6777b538SAndroid Build Coastguard Worker } 2344*6777b538SAndroid Build Coastguard Worker if (defined(invoker.package_name)) { 2345*6777b538SAndroid Build Coastguard Worker _args += [ 2346*6777b538SAndroid Build Coastguard Worker "--package-name", 2347*6777b538SAndroid Build Coastguard Worker invoker.package_name, 2348*6777b538SAndroid Build Coastguard Worker ] 2349*6777b538SAndroid Build Coastguard Worker } 2350*6777b538SAndroid Build Coastguard Worker if (defined(invoker.arsc_package_name)) { 2351*6777b538SAndroid Build Coastguard Worker _args += [ 2352*6777b538SAndroid Build Coastguard Worker "--arsc-package-name", 2353*6777b538SAndroid Build Coastguard Worker invoker.arsc_package_name, 2354*6777b538SAndroid Build Coastguard Worker ] 2355*6777b538SAndroid Build Coastguard Worker } 2356*6777b538SAndroid Build Coastguard Worker 2357*6777b538SAndroid Build Coastguard Worker if (defined(invoker.shared_resources_allowlist)) { 2358*6777b538SAndroid Build Coastguard Worker _inputs += [ invoker.shared_resources_allowlist ] 2359*6777b538SAndroid Build Coastguard Worker _args += [ 2360*6777b538SAndroid Build Coastguard Worker "--shared-resources-allowlist", 2361*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.shared_resources_allowlist, root_build_dir), 2362*6777b538SAndroid Build Coastguard Worker ] 2363*6777b538SAndroid Build Coastguard Worker } 2364*6777b538SAndroid Build Coastguard Worker if (defined(invoker.shared_resources_allowlist_locales)) { 2365*6777b538SAndroid Build Coastguard Worker _args += [ "--shared-resources-allowlist-locales=" + 2366*6777b538SAndroid Build Coastguard Worker "${invoker.shared_resources_allowlist_locales}" ] 2367*6777b538SAndroid Build Coastguard Worker } 2368*6777b538SAndroid Build Coastguard Worker 2369*6777b538SAndroid Build Coastguard Worker if (!defined(testonly) || !testonly || 2370*6777b538SAndroid Build Coastguard Worker (defined(invoker.enforce_resource_overlays_in_tests) && 2371*6777b538SAndroid Build Coastguard Worker invoker.enforce_resource_overlays_in_tests)) { 2372*6777b538SAndroid Build Coastguard Worker _args += [ "--dependencies-res-zip-overlays=@FileArg($_rebased_build_config:deps_info:dependency_zip_overlays)" ] 2373*6777b538SAndroid Build Coastguard Worker } else { 2374*6777b538SAndroid Build Coastguard Worker _args += [ "--dependencies-res-zip-overlays=@FileArg($_rebased_build_config:deps_info:dependency_zips)" ] 2375*6777b538SAndroid Build Coastguard Worker } 2376*6777b538SAndroid Build Coastguard Worker 2377*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_file)) { 2378*6777b538SAndroid Build Coastguard Worker _outputs += [ invoker.proguard_file ] 2379*6777b538SAndroid Build Coastguard Worker _args += [ 2380*6777b538SAndroid Build Coastguard Worker "--proguard-file", 2381*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.proguard_file, root_build_dir), 2382*6777b538SAndroid Build Coastguard Worker ] 2383*6777b538SAndroid Build Coastguard Worker } 2384*6777b538SAndroid Build Coastguard Worker 2385*6777b538SAndroid Build Coastguard Worker if (defined(invoker.aapt_locale_allowlist)) { 2386*6777b538SAndroid Build Coastguard Worker _args += [ "--locale-allowlist=${invoker.aapt_locale_allowlist}" ] 2387*6777b538SAndroid Build Coastguard Worker } 2388*6777b538SAndroid Build Coastguard Worker if (defined(invoker.png_to_webp) && invoker.png_to_webp) { 2389*6777b538SAndroid Build Coastguard Worker _webp_target = "//third_party/libwebp:cwebp($host_toolchain)" 2390*6777b538SAndroid Build Coastguard Worker _webp_binary = get_label_info(_webp_target, "root_out_dir") + "/cwebp" 2391*6777b538SAndroid Build Coastguard Worker _deps += [ _webp_target ] 2392*6777b538SAndroid Build Coastguard Worker _inputs += [ _webp_binary ] 2393*6777b538SAndroid Build Coastguard Worker _args += [ 2394*6777b538SAndroid Build Coastguard Worker "--png-to-webp", 2395*6777b538SAndroid Build Coastguard Worker "--webp-binary", 2396*6777b538SAndroid Build Coastguard Worker rebase_path(_webp_binary, root_build_dir), 2397*6777b538SAndroid Build Coastguard Worker ] 2398*6777b538SAndroid Build Coastguard Worker } 2399*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resource_exclusion_regex)) { 2400*6777b538SAndroid Build Coastguard Worker _args += 2401*6777b538SAndroid Build Coastguard Worker [ "--resource-exclusion-regex=${invoker.resource_exclusion_regex}" ] 2402*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resource_exclusion_exceptions)) { 2403*6777b538SAndroid Build Coastguard Worker _args += [ "--resource-exclusion-exceptions=${invoker.resource_exclusion_exceptions}" ] 2404*6777b538SAndroid Build Coastguard Worker } 2405*6777b538SAndroid Build Coastguard Worker } 2406*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resource_values_filter_rules)) { 2407*6777b538SAndroid Build Coastguard Worker _args += 2408*6777b538SAndroid Build Coastguard Worker [ "--values-filter-rules=${invoker.resource_values_filter_rules}" ] 2409*6777b538SAndroid Build Coastguard Worker } 2410*6777b538SAndroid Build Coastguard Worker 2411*6777b538SAndroid Build Coastguard Worker if (defined(invoker.include_resource)) { 2412*6777b538SAndroid Build Coastguard Worker _inputs += [ invoker.include_resource ] 2413*6777b538SAndroid Build Coastguard Worker _rebased_include_resources = 2414*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.include_resource, root_build_dir) 2415*6777b538SAndroid Build Coastguard Worker _args += [ "--include-resources=$_rebased_include_resources" ] 2416*6777b538SAndroid Build Coastguard Worker } 2417*6777b538SAndroid Build Coastguard Worker 2418*6777b538SAndroid Build Coastguard Worker if (defined(invoker._args)) { 2419*6777b538SAndroid Build Coastguard Worker _args += invoker._args 2420*6777b538SAndroid Build Coastguard Worker } 2421*6777b538SAndroid Build Coastguard Worker 2422*6777b538SAndroid Build Coastguard Worker if (defined(invoker.emit_ids_out_path)) { 2423*6777b538SAndroid Build Coastguard Worker _outputs += [ invoker.emit_ids_out_path ] 2424*6777b538SAndroid Build Coastguard Worker _rebased_emit_ids_path = 2425*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.emit_ids_out_path, root_out_dir) 2426*6777b538SAndroid Build Coastguard Worker _args += [ "--emit-ids-out=$_rebased_emit_ids_path" ] 2427*6777b538SAndroid Build Coastguard Worker } 2428*6777b538SAndroid Build Coastguard Worker 2429*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resource_ids_provider_dep)) { 2430*6777b538SAndroid Build Coastguard Worker _compile_res_dep = 2431*6777b538SAndroid Build Coastguard Worker "${invoker.resource_ids_provider_dep}__compile_resources" 2432*6777b538SAndroid Build Coastguard Worker _gen_dir = get_label_info(_compile_res_dep, "target_gen_dir") 2433*6777b538SAndroid Build Coastguard Worker _name = get_label_info(_compile_res_dep, "name") 2434*6777b538SAndroid Build Coastguard Worker _resource_ids_path = "$_gen_dir/$_name.resource_ids" 2435*6777b538SAndroid Build Coastguard Worker _inputs += [ _resource_ids_path ] 2436*6777b538SAndroid Build Coastguard Worker _rebased_ids_path = rebase_path(_resource_ids_path, root_out_dir) 2437*6777b538SAndroid Build Coastguard Worker _args += [ "--use-resource-ids-path=$_rebased_ids_path" ] 2438*6777b538SAndroid Build Coastguard Worker _deps += [ _compile_res_dep ] 2439*6777b538SAndroid Build Coastguard Worker } 2440*6777b538SAndroid Build Coastguard Worker 2441*6777b538SAndroid Build Coastguard Worker if (defined(invoker.max_sdk_version)) { 2442*6777b538SAndroid Build Coastguard Worker _max_sdk_version = invoker.max_sdk_version 2443*6777b538SAndroid Build Coastguard Worker _args += [ "--max-sdk-version=$_max_sdk_version" ] 2444*6777b538SAndroid Build Coastguard Worker } 2445*6777b538SAndroid Build Coastguard Worker 2446*6777b538SAndroid Build Coastguard Worker if (defined(invoker.manifest_package)) { 2447*6777b538SAndroid Build Coastguard Worker _args += [ "--manifest-package=${invoker.manifest_package}" ] 2448*6777b538SAndroid Build Coastguard Worker } 2449*6777b538SAndroid Build Coastguard Worker 2450*6777b538SAndroid Build Coastguard Worker if (defined(invoker.is_bundle_module) && invoker.is_bundle_module) { 2451*6777b538SAndroid Build Coastguard Worker _args += [ "--is-bundle-module" ] 2452*6777b538SAndroid Build Coastguard Worker } 2453*6777b538SAndroid Build Coastguard Worker 2454*6777b538SAndroid Build Coastguard Worker if (defined(invoker.uses_split)) { 2455*6777b538SAndroid Build Coastguard Worker assert(invoker.is_bundle_module) 2456*6777b538SAndroid Build Coastguard Worker _args += [ "--uses-split=${invoker.uses_split}" ] 2457*6777b538SAndroid Build Coastguard Worker } 2458*6777b538SAndroid Build Coastguard Worker 2459*6777b538SAndroid Build Coastguard Worker if (defined(invoker.expected_android_manifest)) { 2460*6777b538SAndroid Build Coastguard Worker _expectations_target = 2461*6777b538SAndroid Build Coastguard Worker "${invoker.top_target_name}_validate_android_manifest" 2462*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_expectations_target) { 2463*6777b538SAndroid Build Coastguard Worker _actual_file = "${invoker.android_manifest}.normalized" 2464*6777b538SAndroid Build Coastguard Worker _failure_file = 2465*6777b538SAndroid Build Coastguard Worker "$expectations_failure_dir/" + 2466*6777b538SAndroid Build Coastguard Worker string_replace(invoker.expected_android_manifest, "/", "_") 2467*6777b538SAndroid Build Coastguard Worker inputs = [ 2468*6777b538SAndroid Build Coastguard Worker invoker.android_manifest, 2469*6777b538SAndroid Build Coastguard Worker invoker.expected_android_manifest, 2470*6777b538SAndroid Build Coastguard Worker ] + _common_inputs 2471*6777b538SAndroid Build Coastguard Worker outputs = [ 2472*6777b538SAndroid Build Coastguard Worker _actual_file, 2473*6777b538SAndroid Build Coastguard Worker _failure_file, 2474*6777b538SAndroid Build Coastguard Worker ] 2475*6777b538SAndroid Build Coastguard Worker deps = [ 2476*6777b538SAndroid Build Coastguard Worker invoker.android_manifest_dep, 2477*6777b538SAndroid Build Coastguard Worker invoker.build_config_dep, 2478*6777b538SAndroid Build Coastguard Worker ] 2479*6777b538SAndroid Build Coastguard Worker script = _script 2480*6777b538SAndroid Build Coastguard Worker args = _args + [ 2481*6777b538SAndroid Build Coastguard Worker "--expected-file", 2482*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.expected_android_manifest, root_build_dir), 2483*6777b538SAndroid Build Coastguard Worker "--actual-file", 2484*6777b538SAndroid Build Coastguard Worker rebase_path(_actual_file, root_build_dir), 2485*6777b538SAndroid Build Coastguard Worker "--failure-file", 2486*6777b538SAndroid Build Coastguard Worker rebase_path(_failure_file, root_build_dir), 2487*6777b538SAndroid Build Coastguard Worker "--only-verify-expectations", 2488*6777b538SAndroid Build Coastguard Worker ] 2489*6777b538SAndroid Build Coastguard Worker if (defined(invoker.expected_android_manifest_base)) { 2490*6777b538SAndroid Build Coastguard Worker args += [ 2491*6777b538SAndroid Build Coastguard Worker "--expected-file-base", 2492*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.expected_android_manifest_base, root_build_dir), 2493*6777b538SAndroid Build Coastguard Worker ] 2494*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.expected_android_manifest_base ] 2495*6777b538SAndroid Build Coastguard Worker } 2496*6777b538SAndroid Build Coastguard Worker if (defined(invoker.expected_android_manifest_version_code_offset)) { 2497*6777b538SAndroid Build Coastguard Worker args += [ 2498*6777b538SAndroid Build Coastguard Worker "--verification-version-code-offset", 2499*6777b538SAndroid Build Coastguard Worker invoker.expected_android_manifest_version_code_offset, 2500*6777b538SAndroid Build Coastguard Worker ] 2501*6777b538SAndroid Build Coastguard Worker } 2502*6777b538SAndroid Build Coastguard Worker if (defined(invoker.expected_android_manifest_library_version_offset)) { 2503*6777b538SAndroid Build Coastguard Worker args += [ 2504*6777b538SAndroid Build Coastguard Worker "--verification-library-version-offset", 2505*6777b538SAndroid Build Coastguard Worker invoker.expected_android_manifest_library_version_offset, 2506*6777b538SAndroid Build Coastguard Worker ] 2507*6777b538SAndroid Build Coastguard Worker } 2508*6777b538SAndroid Build Coastguard Worker if (fail_on_android_expectations) { 2509*6777b538SAndroid Build Coastguard Worker args += [ "--fail-on-expectations" ] 2510*6777b538SAndroid Build Coastguard Worker } 2511*6777b538SAndroid Build Coastguard Worker } 2512*6777b538SAndroid Build Coastguard Worker _deps += [ ":$_expectations_target" ] 2513*6777b538SAndroid Build Coastguard Worker } 2514*6777b538SAndroid Build Coastguard Worker 2515*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 2516*6777b538SAndroid Build Coastguard Worker script = _script 2517*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/${target_name}.d" 2518*6777b538SAndroid Build Coastguard Worker inputs = _inputs 2519*6777b538SAndroid Build Coastguard Worker outputs = _outputs 2520*6777b538SAndroid Build Coastguard Worker deps = _deps 2521*6777b538SAndroid Build Coastguard Worker args = _args + [ 2522*6777b538SAndroid Build Coastguard Worker "--depfile", 2523*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 2524*6777b538SAndroid Build Coastguard Worker ] 2525*6777b538SAndroid Build Coastguard Worker } 2526*6777b538SAndroid Build Coastguard Worker } 2527*6777b538SAndroid Build Coastguard Worker 2528*6777b538SAndroid Build Coastguard Worker # A template that is used to optimize compiled resources using aapt2 optimize. 2529*6777b538SAndroid Build Coastguard Worker # 2530*6777b538SAndroid Build Coastguard Worker # proto_input_path: 2531*6777b538SAndroid Build Coastguard Worker # Path to input compiled .proto.ap_ file. 2532*6777b538SAndroid Build Coastguard Worker # 2533*6777b538SAndroid Build Coastguard Worker # short_resource_paths: (optional) 2534*6777b538SAndroid Build Coastguard Worker # Rename the paths within a the apk to be randomly generated short 2535*6777b538SAndroid Build Coastguard Worker # strings to reduce binary size. 2536*6777b538SAndroid Build Coastguard Worker # 2537*6777b538SAndroid Build Coastguard Worker # strip_resource_names: (optional) 2538*6777b538SAndroid Build Coastguard Worker # Strip resource names from the resources table of the apk. 2539*6777b538SAndroid Build Coastguard Worker # 2540*6777b538SAndroid Build Coastguard Worker # resources_configs_paths: (optional) 2541*6777b538SAndroid Build Coastguard Worker # List of resource configs to use for optimization. 2542*6777b538SAndroid Build Coastguard Worker # 2543*6777b538SAndroid Build Coastguard Worker # optimized_proto_output: 2544*6777b538SAndroid Build Coastguard Worker # Path to output optimized .proto.ap_ file. 2545*6777b538SAndroid Build Coastguard Worker # 2546*6777b538SAndroid Build Coastguard Worker # resources_path_map_out_path: (optional): 2547*6777b538SAndroid Build Coastguard Worker # Path for the generated map between original resource paths and 2548*6777b538SAndroid Build Coastguard Worker # shortened resource paths. 2549*6777b538SAndroid Build Coastguard Worker template("optimize_resources") { 2550*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 2551*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 2552*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "deps" ]) 2553*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/optimize_resources.py" 2554*6777b538SAndroid Build Coastguard Worker outputs = [ invoker.optimized_proto_output ] 2555*6777b538SAndroid Build Coastguard Worker inputs = [ 2556*6777b538SAndroid Build Coastguard Worker android_sdk_tools_bundle_aapt2, 2557*6777b538SAndroid Build Coastguard Worker invoker.r_text_path, 2558*6777b538SAndroid Build Coastguard Worker invoker.proto_input_path, 2559*6777b538SAndroid Build Coastguard Worker ] 2560*6777b538SAndroid Build Coastguard Worker args = [ 2561*6777b538SAndroid Build Coastguard Worker "--aapt2-path", 2562*6777b538SAndroid Build Coastguard Worker rebase_path(android_sdk_tools_bundle_aapt2, root_build_dir), 2563*6777b538SAndroid Build Coastguard Worker "--r-text-in", 2564*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.r_text_path, root_build_dir), 2565*6777b538SAndroid Build Coastguard Worker "--proto-path", 2566*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.proto_input_path, root_build_dir), 2567*6777b538SAndroid Build Coastguard Worker "--optimized-proto-path", 2568*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.optimized_proto_output, root_build_dir), 2569*6777b538SAndroid Build Coastguard Worker ] 2570*6777b538SAndroid Build Coastguard Worker 2571*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resources_config_paths)) { 2572*6777b538SAndroid Build Coastguard Worker inputs += invoker.resources_config_paths 2573*6777b538SAndroid Build Coastguard Worker _rebased_resource_configs = 2574*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.resources_config_paths, root_build_dir) 2575*6777b538SAndroid Build Coastguard Worker args += [ "--resources-config-paths=${_rebased_resource_configs}" ] 2576*6777b538SAndroid Build Coastguard Worker } 2577*6777b538SAndroid Build Coastguard Worker 2578*6777b538SAndroid Build Coastguard Worker if (defined(invoker.short_resource_paths) && 2579*6777b538SAndroid Build Coastguard Worker invoker.short_resource_paths) { 2580*6777b538SAndroid Build Coastguard Worker args += [ "--short-resource-paths" ] 2581*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resources_path_map_out_path)) { 2582*6777b538SAndroid Build Coastguard Worker outputs += [ invoker.resources_path_map_out_path ] 2583*6777b538SAndroid Build Coastguard Worker args += [ 2584*6777b538SAndroid Build Coastguard Worker "--resources-path-map-out-path", 2585*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.resources_path_map_out_path, root_build_dir), 2586*6777b538SAndroid Build Coastguard Worker ] 2587*6777b538SAndroid Build Coastguard Worker } 2588*6777b538SAndroid Build Coastguard Worker } 2589*6777b538SAndroid Build Coastguard Worker 2590*6777b538SAndroid Build Coastguard Worker if (defined(invoker.strip_resource_names) && 2591*6777b538SAndroid Build Coastguard Worker invoker.strip_resource_names) { 2592*6777b538SAndroid Build Coastguard Worker args += [ "--strip-resource-names" ] 2593*6777b538SAndroid Build Coastguard Worker } 2594*6777b538SAndroid Build Coastguard Worker } 2595*6777b538SAndroid Build Coastguard Worker } 2596*6777b538SAndroid Build Coastguard Worker 2597*6777b538SAndroid Build Coastguard Worker # A template that is used to find unused resources. 2598*6777b538SAndroid Build Coastguard Worker template("unused_resources") { 2599*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 2600*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "deps" ]) 2601*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/unused_resources.py" 2602*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/${target_name}.d" 2603*6777b538SAndroid Build Coastguard Worker _unused_resources_script = "$root_build_dir/bin/helper/unused_resources" 2604*6777b538SAndroid Build Coastguard Worker inputs = [ _unused_resources_script ] + java_paths_for_inputs 2605*6777b538SAndroid Build Coastguard Worker outputs = [ 2606*6777b538SAndroid Build Coastguard Worker invoker.output_config, 2607*6777b538SAndroid Build Coastguard Worker invoker.output_r_txt, 2608*6777b538SAndroid Build Coastguard Worker ] 2609*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 2610*6777b538SAndroid Build Coastguard Worker deps = [] 2611*6777b538SAndroid Build Coastguard Worker } 2612*6777b538SAndroid Build Coastguard Worker deps += [ "//build/android/unused_resources:unused_resources" ] 2613*6777b538SAndroid Build Coastguard Worker _rebased_module_build_config = 2614*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.build_config, root_build_dir) 2615*6777b538SAndroid Build Coastguard Worker args = [ 2616*6777b538SAndroid Build Coastguard Worker "--script", 2617*6777b538SAndroid Build Coastguard Worker rebase_path(_unused_resources_script, root_build_dir), 2618*6777b538SAndroid Build Coastguard Worker "--output-config", 2619*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output_config, root_build_dir), 2620*6777b538SAndroid Build Coastguard Worker "--r-text-in=@FileArg($_rebased_module_build_config:deps_info:r_text_path)", 2621*6777b538SAndroid Build Coastguard Worker "--r-text-out", 2622*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output_r_txt, root_build_dir), 2623*6777b538SAndroid Build Coastguard Worker "--dependencies-res-zips=@FileArg($_rebased_module_build_config:deps_info:dependency_zips)", 2624*6777b538SAndroid Build Coastguard Worker "--depfile", 2625*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 2626*6777b538SAndroid Build Coastguard Worker ] 2627*6777b538SAndroid Build Coastguard Worker 2628*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_mapping_path)) { 2629*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.proguard_mapping_path ] 2630*6777b538SAndroid Build Coastguard Worker args += [ 2631*6777b538SAndroid Build Coastguard Worker "--proguard-mapping", 2632*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.proguard_mapping_path, root_build_dir), 2633*6777b538SAndroid Build Coastguard Worker ] 2634*6777b538SAndroid Build Coastguard Worker } 2635*6777b538SAndroid Build Coastguard Worker 2636*6777b538SAndroid Build Coastguard Worker foreach(_build_config, invoker.all_module_build_configs) { 2637*6777b538SAndroid Build Coastguard Worker inputs += [ _build_config ] 2638*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(_build_config, root_build_dir) 2639*6777b538SAndroid Build Coastguard Worker args += [ 2640*6777b538SAndroid Build Coastguard Worker "--dexes=@FileArg($_rebased_build_config:final_dex:path)", 2641*6777b538SAndroid Build Coastguard Worker "--android-manifests=@FileArg($_rebased_build_config:deps_info:merged_android_manifest)", 2642*6777b538SAndroid Build Coastguard Worker ] 2643*6777b538SAndroid Build Coastguard Worker } 2644*6777b538SAndroid Build Coastguard Worker } 2645*6777b538SAndroid Build Coastguard Worker } 2646*6777b538SAndroid Build Coastguard Worker 2647*6777b538SAndroid Build Coastguard Worker # Create an .jar.info file by merging several .jar.info files into one. 2648*6777b538SAndroid Build Coastguard Worker # 2649*6777b538SAndroid Build Coastguard Worker # Variables: 2650*6777b538SAndroid Build Coastguard Worker # build_config: Path to APK's build config file. Used to extract the 2651*6777b538SAndroid Build Coastguard Worker # list of input .jar files from its dependencies. 2652*6777b538SAndroid Build Coastguard Worker # name: Name of the apk or app bundle (e.g. "Foo.apk"). 2653*6777b538SAndroid Build Coastguard Worker # res_size_info_path: Path to input .ap_.info file (for apks). 2654*6777b538SAndroid Build Coastguard Worker # 2655*6777b538SAndroid Build Coastguard Worker template("create_size_info_files") { 2656*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 2657*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "deps" ]) 2658*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/create_size_info_files.py" 2659*6777b538SAndroid Build Coastguard Worker _jar_info_path = "$root_build_dir/size-info/${invoker.name}.jar.info" 2660*6777b538SAndroid Build Coastguard Worker _pak_info_path = "$root_build_dir/size-info/${invoker.name}.pak.info" 2661*6777b538SAndroid Build Coastguard Worker _res_info_path = "$root_build_dir/size-info/${invoker.name}.res.info" 2662*6777b538SAndroid Build Coastguard Worker outputs = [ 2663*6777b538SAndroid Build Coastguard Worker _jar_info_path, 2664*6777b538SAndroid Build Coastguard Worker _pak_info_path, 2665*6777b538SAndroid Build Coastguard Worker _res_info_path, 2666*6777b538SAndroid Build Coastguard Worker ] 2667*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 2668*6777b538SAndroid Build Coastguard Worker args = [ 2669*6777b538SAndroid Build Coastguard Worker "--depfile", 2670*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 2671*6777b538SAndroid Build Coastguard Worker "--jar-info-path", 2672*6777b538SAndroid Build Coastguard Worker rebase_path(_jar_info_path, root_build_dir), 2673*6777b538SAndroid Build Coastguard Worker "--pak-info-path", 2674*6777b538SAndroid Build Coastguard Worker rebase_path(_pak_info_path, root_build_dir), 2675*6777b538SAndroid Build Coastguard Worker "--res-info-path", 2676*6777b538SAndroid Build Coastguard Worker rebase_path(_res_info_path, root_build_dir), 2677*6777b538SAndroid Build Coastguard Worker ] 2678*6777b538SAndroid Build Coastguard Worker _is_bundle = defined(invoker.module_build_configs) 2679*6777b538SAndroid Build Coastguard Worker if (_is_bundle) { 2680*6777b538SAndroid Build Coastguard Worker inputs = invoker.module_build_configs 2681*6777b538SAndroid Build Coastguard Worker foreach(_build_config, invoker.module_build_configs) { 2682*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(_build_config, root_build_dir) 2683*6777b538SAndroid Build Coastguard Worker args += [ 2684*6777b538SAndroid Build Coastguard Worker "--jar-files=@FileArg($_rebased_build_config:deps_info:unprocessed_jar_path)", 2685*6777b538SAndroid Build Coastguard Worker "--jar-files=@FileArg($_rebased_build_config:deps_info:javac_full_classpath)", 2686*6777b538SAndroid Build Coastguard Worker "--in-res-info-path=@FileArg($_rebased_build_config:deps_info:res_size_info)", 2687*6777b538SAndroid Build Coastguard Worker "--assets=@FileArg($_rebased_build_config:assets)", 2688*6777b538SAndroid Build Coastguard Worker "--uncompressed-assets=@FileArg($_rebased_build_config:uncompressed_assets)", 2689*6777b538SAndroid Build Coastguard Worker ] 2690*6777b538SAndroid Build Coastguard Worker } 2691*6777b538SAndroid Build Coastguard Worker } else { 2692*6777b538SAndroid Build Coastguard Worker inputs = [ 2693*6777b538SAndroid Build Coastguard Worker invoker.build_config, 2694*6777b538SAndroid Build Coastguard Worker invoker.res_size_info_path, 2695*6777b538SAndroid Build Coastguard Worker ] 2696*6777b538SAndroid Build Coastguard Worker _rebased_build_config = 2697*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.build_config, root_build_dir) 2698*6777b538SAndroid Build Coastguard Worker args += [ 2699*6777b538SAndroid Build Coastguard Worker "--jar-files=@FileArg($_rebased_build_config:deps_info:unprocessed_jar_path)", 2700*6777b538SAndroid Build Coastguard Worker "--jar-files=@FileArg($_rebased_build_config:deps_info:javac_full_classpath)", 2701*6777b538SAndroid Build Coastguard Worker "--in-res-info-path", 2702*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.res_size_info_path, root_build_dir), 2703*6777b538SAndroid Build Coastguard Worker "--assets=@FileArg($_rebased_build_config:assets)", 2704*6777b538SAndroid Build Coastguard Worker "--uncompressed-assets=@FileArg($_rebased_build_config:uncompressed_assets)", 2705*6777b538SAndroid Build Coastguard Worker ] 2706*6777b538SAndroid Build Coastguard Worker } 2707*6777b538SAndroid Build Coastguard Worker } 2708*6777b538SAndroid Build Coastguard Worker } 2709*6777b538SAndroid Build Coastguard Worker 2710*6777b538SAndroid Build Coastguard Worker template("create_binary_profile") { 2711*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 2712*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 2713*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "deps" ]) 2714*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/binary_baseline_profile.py" 2715*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 2716*6777b538SAndroid Build Coastguard Worker outputs = [ 2717*6777b538SAndroid Build Coastguard Worker invoker.binary_baseline_profile_path, 2718*6777b538SAndroid Build Coastguard Worker invoker.binary_baseline_profile_metadata_path, 2719*6777b538SAndroid Build Coastguard Worker ] 2720*6777b538SAndroid Build Coastguard Worker _profgen_path = 2721*6777b538SAndroid Build Coastguard Worker "$public_android_sdk_root/cmdline-tools/latest/bin/profgen" 2722*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) 2723*6777b538SAndroid Build Coastguard Worker inputs = [ 2724*6777b538SAndroid Build Coastguard Worker invoker.build_config, 2725*6777b538SAndroid Build Coastguard Worker invoker.input_profile_path, 2726*6777b538SAndroid Build Coastguard Worker _profgen_path, 2727*6777b538SAndroid Build Coastguard Worker ] 2728*6777b538SAndroid Build Coastguard Worker args = [ 2729*6777b538SAndroid Build Coastguard Worker "--profgen", 2730*6777b538SAndroid Build Coastguard Worker rebase_path(_profgen_path, root_build_dir), 2731*6777b538SAndroid Build Coastguard Worker "--output-profile", 2732*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.binary_baseline_profile_path, root_build_dir), 2733*6777b538SAndroid Build Coastguard Worker "--output-metadata", 2734*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.binary_baseline_profile_metadata_path, 2735*6777b538SAndroid Build Coastguard Worker root_build_dir), 2736*6777b538SAndroid Build Coastguard Worker "--dex=@FileArg($_rebased_build_config:final_dex:path)", 2737*6777b538SAndroid Build Coastguard Worker "--input-profile-path", 2738*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.input_profile_path, root_build_dir), 2739*6777b538SAndroid Build Coastguard Worker "--depfile", 2740*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 2741*6777b538SAndroid Build Coastguard Worker ] 2742*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_mapping_path)) { 2743*6777b538SAndroid Build Coastguard Worker args += [ 2744*6777b538SAndroid Build Coastguard Worker "--proguard-mapping", 2745*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.proguard_mapping_path, root_build_dir), 2746*6777b538SAndroid Build Coastguard Worker ] 2747*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.proguard_mapping_path ] 2748*6777b538SAndroid Build Coastguard Worker } 2749*6777b538SAndroid Build Coastguard Worker } 2750*6777b538SAndroid Build Coastguard Worker } 2751*6777b538SAndroid Build Coastguard Worker 2752*6777b538SAndroid Build Coastguard Worker # Creates a signed and aligned .apk. 2753*6777b538SAndroid Build Coastguard Worker # 2754*6777b538SAndroid Build Coastguard Worker # Variables 2755*6777b538SAndroid Build Coastguard Worker # apk_name: (optional) APK name (without .apk suffix). If provided, will 2756*6777b538SAndroid Build Coastguard Worker # be used to generate .info files later used by the supersize tool. 2757*6777b538SAndroid Build Coastguard Worker # assets_build_config: Path to android_apk .build_config.json containing merged 2758*6777b538SAndroid Build Coastguard Worker # asset information. 2759*6777b538SAndroid Build Coastguard Worker # deps: Specifies the dependencies of this target. 2760*6777b538SAndroid Build Coastguard Worker # dex_path: Path to classes.dex file to include (optional). 2761*6777b538SAndroid Build Coastguard Worker # expected_libs_and_assets: Verify the list of included native libraries 2762*6777b538SAndroid Build Coastguard Worker # and assets is consistent with the given expectation file. 2763*6777b538SAndroid Build Coastguard Worker # expected_libs_and_assets_base: Treat expected_libs_and_assets as a diff 2764*6777b538SAndroid Build Coastguard Worker # with this file as the base. 2765*6777b538SAndroid Build Coastguard Worker # packaged_resources_path: Path to .ap_ to use. 2766*6777b538SAndroid Build Coastguard Worker # output_apk_path: Output path for the generated .apk. 2767*6777b538SAndroid Build Coastguard Worker # min_sdk_version: The minimum Android SDK version this target supports. 2768*6777b538SAndroid Build Coastguard Worker # native_lib_placeholders: List of placeholder filenames to add to the apk 2769*6777b538SAndroid Build Coastguard Worker # (optional). 2770*6777b538SAndroid Build Coastguard Worker # secondary_native_lib_placeholders: List of placeholder filenames to add to 2771*6777b538SAndroid Build Coastguard Worker # the apk for the secondary ABI (optional). 2772*6777b538SAndroid Build Coastguard Worker # loadable_modules: List of native libraries. 2773*6777b538SAndroid Build Coastguard Worker # native_libs_filearg: @FileArg() of additionally native libraries. 2774*6777b538SAndroid Build Coastguard Worker # secondary_abi_loadable_modules: (optional) List of native libraries for 2775*6777b538SAndroid Build Coastguard Worker # secondary ABI. 2776*6777b538SAndroid Build Coastguard Worker # secondary_abi_native_libs_filearg: (optional). @FileArg() of additional 2777*6777b538SAndroid Build Coastguard Worker # secondary ABI native libs. 2778*6777b538SAndroid Build Coastguard Worker # keystore_path: Path to keystore to use for signing. 2779*6777b538SAndroid Build Coastguard Worker # keystore_name: Key alias to use. 2780*6777b538SAndroid Build Coastguard Worker # keystore_password: Keystore password. 2781*6777b538SAndroid Build Coastguard Worker template("package_apk") { 2782*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "public_deps" ]) 2783*6777b538SAndroid Build Coastguard Worker _is_robolectric_apk = 2784*6777b538SAndroid Build Coastguard Worker defined(invoker.is_robolectric_apk) && invoker.is_robolectric_apk 2785*6777b538SAndroid Build Coastguard Worker _deps = invoker.deps 2786*6777b538SAndroid Build Coastguard Worker _native_lib_placeholders = [] 2787*6777b538SAndroid Build Coastguard Worker if (defined(invoker.native_lib_placeholders)) { 2788*6777b538SAndroid Build Coastguard Worker _native_lib_placeholders = invoker.native_lib_placeholders 2789*6777b538SAndroid Build Coastguard Worker } 2790*6777b538SAndroid Build Coastguard Worker _secondary_native_lib_placeholders = [] 2791*6777b538SAndroid Build Coastguard Worker if (defined(invoker.secondary_native_lib_placeholders)) { 2792*6777b538SAndroid Build Coastguard Worker _secondary_native_lib_placeholders = 2793*6777b538SAndroid Build Coastguard Worker invoker.secondary_native_lib_placeholders 2794*6777b538SAndroid Build Coastguard Worker } 2795*6777b538SAndroid Build Coastguard Worker 2796*6777b538SAndroid Build Coastguard Worker _script = "//build/android/gyp/apkbuilder.py" 2797*6777b538SAndroid Build Coastguard Worker 2798*6777b538SAndroid Build Coastguard Worker _inputs = [ invoker.packaged_resources_path ] 2799*6777b538SAndroid Build Coastguard Worker 2800*6777b538SAndroid Build Coastguard Worker _outputs = [ invoker.output_apk_path ] 2801*6777b538SAndroid Build Coastguard Worker _data = [ invoker.output_apk_path ] 2802*6777b538SAndroid Build Coastguard Worker 2803*6777b538SAndroid Build Coastguard Worker _rebased_compiled_resources_path = 2804*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.packaged_resources_path, root_build_dir) 2805*6777b538SAndroid Build Coastguard Worker _rebased_packaged_apk_path = 2806*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output_apk_path, root_build_dir) 2807*6777b538SAndroid Build Coastguard Worker _args = [ 2808*6777b538SAndroid Build Coastguard Worker "--resource-apk=$_rebased_compiled_resources_path", 2809*6777b538SAndroid Build Coastguard Worker "--output-apk=$_rebased_packaged_apk_path", 2810*6777b538SAndroid Build Coastguard Worker "--min-sdk-version=${invoker.min_sdk_version}", 2811*6777b538SAndroid Build Coastguard Worker ] 2812*6777b538SAndroid Build Coastguard Worker 2813*6777b538SAndroid Build Coastguard Worker # system_image_stub_apk does not use a build_config.json. 2814*6777b538SAndroid Build Coastguard Worker if (defined(invoker.build_config)) { 2815*6777b538SAndroid Build Coastguard Worker _inputs += [ invoker.build_config ] 2816*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) 2817*6777b538SAndroid Build Coastguard Worker _args += [ 2818*6777b538SAndroid Build Coastguard Worker "--assets=@FileArg($_rebased_build_config:assets)", 2819*6777b538SAndroid Build Coastguard Worker "--uncompressed-assets=@FileArg($_rebased_build_config:uncompressed_assets)", 2820*6777b538SAndroid Build Coastguard Worker ] 2821*6777b538SAndroid Build Coastguard Worker if (!_is_robolectric_apk) { 2822*6777b538SAndroid Build Coastguard Worker _args += [ "--java-resources=@FileArg($_rebased_build_config:java_resources_jars)" ] 2823*6777b538SAndroid Build Coastguard Worker } 2824*6777b538SAndroid Build Coastguard Worker } 2825*6777b538SAndroid Build Coastguard Worker if (defined(invoker.extra_assets)) { 2826*6777b538SAndroid Build Coastguard Worker _args += [ "--assets=${invoker.extra_assets}" ] 2827*6777b538SAndroid Build Coastguard Worker } 2828*6777b538SAndroid Build Coastguard Worker if (!_is_robolectric_apk) { 2829*6777b538SAndroid Build Coastguard Worker _apksigner = "$android_sdk_build_tools/lib/apksigner.jar" 2830*6777b538SAndroid Build Coastguard Worker _zipalign = "$android_sdk_build_tools/zipalign" 2831*6777b538SAndroid Build Coastguard Worker _keystore_path = android_keystore_path 2832*6777b538SAndroid Build Coastguard Worker _keystore_name = android_keystore_name 2833*6777b538SAndroid Build Coastguard Worker _keystore_password = android_keystore_password 2834*6777b538SAndroid Build Coastguard Worker 2835*6777b538SAndroid Build Coastguard Worker if (defined(invoker.keystore_path)) { 2836*6777b538SAndroid Build Coastguard Worker _keystore_path = invoker.keystore_path 2837*6777b538SAndroid Build Coastguard Worker _keystore_name = invoker.keystore_name 2838*6777b538SAndroid Build Coastguard Worker _keystore_password = invoker.keystore_password 2839*6777b538SAndroid Build Coastguard Worker } 2840*6777b538SAndroid Build Coastguard Worker 2841*6777b538SAndroid Build Coastguard Worker _inputs += [ 2842*6777b538SAndroid Build Coastguard Worker _apksigner, 2843*6777b538SAndroid Build Coastguard Worker _zipalign, 2844*6777b538SAndroid Build Coastguard Worker _keystore_path, 2845*6777b538SAndroid Build Coastguard Worker ] 2846*6777b538SAndroid Build Coastguard Worker _args += [ 2847*6777b538SAndroid Build Coastguard Worker "--apksigner-jar", 2848*6777b538SAndroid Build Coastguard Worker rebase_path(_apksigner, root_build_dir), 2849*6777b538SAndroid Build Coastguard Worker "--zipalign-path", 2850*6777b538SAndroid Build Coastguard Worker rebase_path(_zipalign, root_build_dir), 2851*6777b538SAndroid Build Coastguard Worker "--key-path", 2852*6777b538SAndroid Build Coastguard Worker rebase_path(_keystore_path, root_build_dir), 2853*6777b538SAndroid Build Coastguard Worker "--key-name", 2854*6777b538SAndroid Build Coastguard Worker _keystore_name, 2855*6777b538SAndroid Build Coastguard Worker "--key-passwd", 2856*6777b538SAndroid Build Coastguard Worker _keystore_password, 2857*6777b538SAndroid Build Coastguard Worker ] 2858*6777b538SAndroid Build Coastguard Worker if (is_official_build) { 2859*6777b538SAndroid Build Coastguard Worker _args += [ "--best-compression" ] 2860*6777b538SAndroid Build Coastguard Worker } 2861*6777b538SAndroid Build Coastguard Worker } 2862*6777b538SAndroid Build Coastguard Worker if (defined(invoker.uncompress_dex)) { 2863*6777b538SAndroid Build Coastguard Worker _uncompress_dex = invoker.uncompress_dex 2864*6777b538SAndroid Build Coastguard Worker } else { 2865*6777b538SAndroid Build Coastguard Worker # Uncompressed dex support started on Android P. 2866*6777b538SAndroid Build Coastguard Worker _uncompress_dex = invoker.min_sdk_version >= 28 2867*6777b538SAndroid Build Coastguard Worker } 2868*6777b538SAndroid Build Coastguard Worker 2869*6777b538SAndroid Build Coastguard Worker if (_uncompress_dex) { 2870*6777b538SAndroid Build Coastguard Worker _args += [ "--uncompress-dex" ] 2871*6777b538SAndroid Build Coastguard Worker } 2872*6777b538SAndroid Build Coastguard Worker if (defined(invoker.library_always_compress)) { 2873*6777b538SAndroid Build Coastguard Worker _args += 2874*6777b538SAndroid Build Coastguard Worker [ "--library-always-compress=${invoker.library_always_compress}" ] 2875*6777b538SAndroid Build Coastguard Worker } 2876*6777b538SAndroid Build Coastguard Worker if (defined(invoker.dex_path)) { 2877*6777b538SAndroid Build Coastguard Worker _inputs += [ invoker.dex_path ] 2878*6777b538SAndroid Build Coastguard Worker _args += [ 2879*6777b538SAndroid Build Coastguard Worker "--dex-file", 2880*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.dex_path, root_build_dir), 2881*6777b538SAndroid Build Coastguard Worker ] 2882*6777b538SAndroid Build Coastguard Worker } 2883*6777b538SAndroid Build Coastguard Worker if ((defined(invoker.loadable_modules) && invoker.loadable_modules != []) || 2884*6777b538SAndroid Build Coastguard Worker defined(invoker.native_libs_filearg) || 2885*6777b538SAndroid Build Coastguard Worker _native_lib_placeholders != []) { 2886*6777b538SAndroid Build Coastguard Worker _args += [ "--android-abi=$android_app_abi" ] 2887*6777b538SAndroid Build Coastguard Worker } 2888*6777b538SAndroid Build Coastguard Worker if (defined(android_app_secondary_abi)) { 2889*6777b538SAndroid Build Coastguard Worker _args += [ "--secondary-android-abi=$android_app_secondary_abi" ] 2890*6777b538SAndroid Build Coastguard Worker } 2891*6777b538SAndroid Build Coastguard Worker if (defined(invoker.loadable_modules) && invoker.loadable_modules != []) { 2892*6777b538SAndroid Build Coastguard Worker _inputs += invoker.loadable_modules 2893*6777b538SAndroid Build Coastguard Worker _rebased_loadable_modules = 2894*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.loadable_modules, root_build_dir) 2895*6777b538SAndroid Build Coastguard Worker _args += [ "--native-libs=$_rebased_loadable_modules" ] 2896*6777b538SAndroid Build Coastguard Worker } 2897*6777b538SAndroid Build Coastguard Worker if (defined(invoker.native_libs_filearg)) { 2898*6777b538SAndroid Build Coastguard Worker _args += [ "--native-libs=${invoker.native_libs_filearg}" ] 2899*6777b538SAndroid Build Coastguard Worker } 2900*6777b538SAndroid Build Coastguard Worker if (_native_lib_placeholders != []) { 2901*6777b538SAndroid Build Coastguard Worker _args += [ "--native-lib-placeholders=$_native_lib_placeholders" ] 2902*6777b538SAndroid Build Coastguard Worker } 2903*6777b538SAndroid Build Coastguard Worker 2904*6777b538SAndroid Build Coastguard Worker if (defined(invoker.secondary_abi_native_libs_filearg)) { 2905*6777b538SAndroid Build Coastguard Worker _args += [ 2906*6777b538SAndroid Build Coastguard Worker "--secondary-native-libs=${invoker.secondary_abi_native_libs_filearg}", 2907*6777b538SAndroid Build Coastguard Worker ] 2908*6777b538SAndroid Build Coastguard Worker } 2909*6777b538SAndroid Build Coastguard Worker if (defined(invoker.secondary_abi_loadable_modules)) { 2910*6777b538SAndroid Build Coastguard Worker _rebased_secondary_abi_loadable_modules = 2911*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.secondary_abi_loadable_modules, root_build_dir) 2912*6777b538SAndroid Build Coastguard Worker _args += 2913*6777b538SAndroid Build Coastguard Worker [ "--secondary-native-libs=$_rebased_secondary_abi_loadable_modules" ] 2914*6777b538SAndroid Build Coastguard Worker } 2915*6777b538SAndroid Build Coastguard Worker if (_secondary_native_lib_placeholders != []) { 2916*6777b538SAndroid Build Coastguard Worker _args += [ "--secondary-native-lib-placeholders=$_secondary_native_lib_placeholders" ] 2917*6777b538SAndroid Build Coastguard Worker } 2918*6777b538SAndroid Build Coastguard Worker if (treat_warnings_as_errors) { 2919*6777b538SAndroid Build Coastguard Worker _args += [ "--warnings-as-errors" ] 2920*6777b538SAndroid Build Coastguard Worker } 2921*6777b538SAndroid Build Coastguard Worker 2922*6777b538SAndroid Build Coastguard Worker if (defined(invoker.expected_libs_and_assets)) { 2923*6777b538SAndroid Build Coastguard Worker _expectations_target = 2924*6777b538SAndroid Build Coastguard Worker "${invoker.top_target_name}_validate_libs_and_assets" 2925*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_expectations_target) { 2926*6777b538SAndroid Build Coastguard Worker _actual_file = "$target_gen_dir/$target_name.libs_and_assets" 2927*6777b538SAndroid Build Coastguard Worker _failure_file = 2928*6777b538SAndroid Build Coastguard Worker "$expectations_failure_dir/" + 2929*6777b538SAndroid Build Coastguard Worker string_replace(invoker.expected_libs_and_assets, "/", "_") 2930*6777b538SAndroid Build Coastguard Worker inputs = [ invoker.expected_libs_and_assets ] 2931*6777b538SAndroid Build Coastguard Worker if (defined(invoker.build_config)) { 2932*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.build_config ] 2933*6777b538SAndroid Build Coastguard Worker } 2934*6777b538SAndroid Build Coastguard Worker deps = [ invoker.build_config_dep ] 2935*6777b538SAndroid Build Coastguard Worker outputs = [ 2936*6777b538SAndroid Build Coastguard Worker _actual_file, 2937*6777b538SAndroid Build Coastguard Worker _failure_file, 2938*6777b538SAndroid Build Coastguard Worker ] 2939*6777b538SAndroid Build Coastguard Worker script = _script 2940*6777b538SAndroid Build Coastguard Worker args = _args + [ 2941*6777b538SAndroid Build Coastguard Worker "--expected-file", 2942*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.expected_libs_and_assets, root_build_dir), 2943*6777b538SAndroid Build Coastguard Worker "--actual-file", 2944*6777b538SAndroid Build Coastguard Worker rebase_path(_actual_file, root_build_dir), 2945*6777b538SAndroid Build Coastguard Worker "--failure-file", 2946*6777b538SAndroid Build Coastguard Worker rebase_path(_failure_file, root_build_dir), 2947*6777b538SAndroid Build Coastguard Worker "--only-verify-expectations", 2948*6777b538SAndroid Build Coastguard Worker ] 2949*6777b538SAndroid Build Coastguard Worker if (defined(invoker.expected_libs_and_assets_base)) { 2950*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.expected_libs_and_assets_base ] 2951*6777b538SAndroid Build Coastguard Worker args += [ 2952*6777b538SAndroid Build Coastguard Worker "--expected-file-base", 2953*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.expected_libs_and_assets_base, root_build_dir), 2954*6777b538SAndroid Build Coastguard Worker ] 2955*6777b538SAndroid Build Coastguard Worker } 2956*6777b538SAndroid Build Coastguard Worker if (fail_on_android_expectations) { 2957*6777b538SAndroid Build Coastguard Worker args += [ "--fail-on-expectations" ] 2958*6777b538SAndroid Build Coastguard Worker } 2959*6777b538SAndroid Build Coastguard Worker } 2960*6777b538SAndroid Build Coastguard Worker _deps += [ ":$_expectations_target" ] 2961*6777b538SAndroid Build Coastguard Worker } 2962*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 2963*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 2964*6777b538SAndroid Build Coastguard Worker inputs = _inputs 2965*6777b538SAndroid Build Coastguard Worker deps = _deps 2966*6777b538SAndroid Build Coastguard Worker data = _data 2967*6777b538SAndroid Build Coastguard Worker outputs = _outputs 2968*6777b538SAndroid Build Coastguard Worker script = _script 2969*6777b538SAndroid Build Coastguard Worker args = _args + [ 2970*6777b538SAndroid Build Coastguard Worker "--depfile", 2971*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 2972*6777b538SAndroid Build Coastguard Worker ] 2973*6777b538SAndroid Build Coastguard Worker } 2974*6777b538SAndroid Build Coastguard Worker } 2975*6777b538SAndroid Build Coastguard Worker 2976*6777b538SAndroid Build Coastguard Worker # Compile Java source files into a .jar file, potentially using an 2977*6777b538SAndroid Build Coastguard Worker # annotation processor, and/or the errorprone compiler. Also includes Kotlin 2978*6777b538SAndroid Build Coastguard Worker # source files in the resulting info file. 2979*6777b538SAndroid Build Coastguard Worker # 2980*6777b538SAndroid Build Coastguard Worker # Note that the only way to specify custom annotation processors is 2981*6777b538SAndroid Build Coastguard Worker # by using build_config to point to a file that corresponds to a java-related 2982*6777b538SAndroid Build Coastguard Worker # target that includes javac:processor_classes entries (i.e. there is no 2983*6777b538SAndroid Build Coastguard Worker # variable here that can be used for this purpose). 2984*6777b538SAndroid Build Coastguard Worker # 2985*6777b538SAndroid Build Coastguard Worker # Note also the peculiar use of source_files / target_sources_file. The content 2986*6777b538SAndroid Build Coastguard Worker # of the source_files list and the source files in target_sources_file file must 2987*6777b538SAndroid Build Coastguard Worker # match exactly. 2988*6777b538SAndroid Build Coastguard Worker # 2989*6777b538SAndroid Build Coastguard Worker # Variables: 2990*6777b538SAndroid Build Coastguard Worker # main_target_name: Used when extracting srcjars for codesearch. 2991*6777b538SAndroid Build Coastguard Worker # source_files: Optional list of Java and Kotlin source file paths. 2992*6777b538SAndroid Build Coastguard Worker # srcjar_deps: Optional list of .srcjar dependencies (not file paths). 2993*6777b538SAndroid Build Coastguard Worker # The corresponding source files they contain will be compiled too. 2994*6777b538SAndroid Build Coastguard Worker # target_sources_file: Optional path to file containing list of source file 2995*6777b538SAndroid Build Coastguard Worker # paths. This must always be provided if java_files is not empty and the 2996*6777b538SAndroid Build Coastguard Worker # .java files in it must match the list of java_files exactly. 2997*6777b538SAndroid Build Coastguard Worker # build_config: Path to the .build_config.json file of the corresponding 2998*6777b538SAndroid Build Coastguard Worker # java_library_impl() target. The following entries will be used by this 2999*6777b538SAndroid Build Coastguard Worker # template: javac:srcjars, deps_info:javac_full_classpath, 3000*6777b538SAndroid Build Coastguard Worker # deps_info:javac_full_interface_classpath, javac:processor_classpath, 3001*6777b538SAndroid Build Coastguard Worker # javac:processor_classes 3002*6777b538SAndroid Build Coastguard Worker # javac_jar_path: Path to the final output .jar file. 3003*6777b538SAndroid Build Coastguard Worker # javac_args: Optional list of extra arguments to pass to javac. 3004*6777b538SAndroid Build Coastguard Worker # chromium_code: Whether this corresponds to Chromium-specific sources. 3005*6777b538SAndroid Build Coastguard Worker # requires_android: True if these sources can only run on Android. 3006*6777b538SAndroid Build Coastguard Worker # additional_jar_files: Optional list of files to copy into the resulting 3007*6777b538SAndroid Build Coastguard Worker # .jar file (by default, only .class files are put there). Each entry 3008*6777b538SAndroid Build Coastguard Worker # has the 'srcPath:dstPath' format. 3009*6777b538SAndroid Build Coastguard Worker # enable_errorprone: If True, use the errorprone compiler to check for 3010*6777b538SAndroid Build Coastguard Worker # error-prone constructs in the language. If not provided, whether this is 3011*6777b538SAndroid Build Coastguard Worker # enabled depends on chromium_code and the global 3012*6777b538SAndroid Build Coastguard Worker # use_errorprone_java_compiler variable. 3013*6777b538SAndroid Build Coastguard Worker # use_turbine: If True, compile headers using turbine.py. 3014*6777b538SAndroid Build Coastguard Worker # apk_name: Optional APK name. If provided, will tell compile_java.py to also 3015*6777b538SAndroid Build Coastguard Worker # generate an .apk.jar.info file under size-info/${apk_name}.apk.jar.info 3016*6777b538SAndroid Build Coastguard Worker # processor_args_javac: List of annotation processor arguments, each one 3017*6777b538SAndroid Build Coastguard Worker # will be passed to javac as -A<entry>. 3018*6777b538SAndroid Build Coastguard Worker # deps: Dependencies for the corresponding target. 3019*6777b538SAndroid Build Coastguard Worker # testonly: Usual meaning (should be True for test-only targets) 3020*6777b538SAndroid Build Coastguard Worker # 3021*6777b538SAndroid Build Coastguard Worker # [1] https://docs.oracle.com/javase/7/docs/api/java/util/ServiceLoader.html 3022*6777b538SAndroid Build Coastguard Worker # 3023*6777b538SAndroid Build Coastguard Worker template("compile_java") { 3024*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 3025*6777b538SAndroid Build Coastguard Worker 3026*6777b538SAndroid Build Coastguard Worker _build_config = invoker.build_config 3027*6777b538SAndroid Build Coastguard Worker _chromium_code = invoker.chromium_code 3028*6777b538SAndroid Build Coastguard Worker 3029*6777b538SAndroid Build Coastguard Worker _processor_args = [] 3030*6777b538SAndroid Build Coastguard Worker if (defined(invoker.processor_args_javac)) { 3031*6777b538SAndroid Build Coastguard Worker _processor_args = invoker.processor_args_javac 3032*6777b538SAndroid Build Coastguard Worker } 3033*6777b538SAndroid Build Coastguard Worker 3034*6777b538SAndroid Build Coastguard Worker _additional_jar_files = [] 3035*6777b538SAndroid Build Coastguard Worker if (defined(invoker.additional_jar_files)) { 3036*6777b538SAndroid Build Coastguard Worker _additional_jar_files = invoker.additional_jar_files 3037*6777b538SAndroid Build Coastguard Worker } 3038*6777b538SAndroid Build Coastguard Worker 3039*6777b538SAndroid Build Coastguard Worker _srcjar_deps = [] 3040*6777b538SAndroid Build Coastguard Worker if (defined(invoker.srcjar_deps)) { 3041*6777b538SAndroid Build Coastguard Worker _srcjar_deps = invoker.srcjar_deps 3042*6777b538SAndroid Build Coastguard Worker } 3043*6777b538SAndroid Build Coastguard Worker 3044*6777b538SAndroid Build Coastguard Worker _java_srcjars = [] 3045*6777b538SAndroid Build Coastguard Worker foreach(dep, _srcjar_deps) { 3046*6777b538SAndroid Build Coastguard Worker _dep_gen_dir = get_label_info(dep, "target_gen_dir") 3047*6777b538SAndroid Build Coastguard Worker _dep_name = get_label_info(dep, "name") 3048*6777b538SAndroid Build Coastguard Worker _java_srcjars += [ "$_dep_gen_dir/$_dep_name.srcjar" ] 3049*6777b538SAndroid Build Coastguard Worker } 3050*6777b538SAndroid Build Coastguard Worker if (defined(invoker.srcjars)) { 3051*6777b538SAndroid Build Coastguard Worker _java_srcjars += invoker.srcjars 3052*6777b538SAndroid Build Coastguard Worker } 3053*6777b538SAndroid Build Coastguard Worker 3054*6777b538SAndroid Build Coastguard Worker # generated_jar_path is an output when use_turbine and an input otherwise. 3055*6777b538SAndroid Build Coastguard Worker if (!invoker.use_turbine && defined(invoker.generated_jar_path)) { 3056*6777b538SAndroid Build Coastguard Worker _java_srcjars += [ invoker.generated_jar_path ] 3057*6777b538SAndroid Build Coastguard Worker } 3058*6777b538SAndroid Build Coastguard Worker 3059*6777b538SAndroid Build Coastguard Worker _javac_args = [] 3060*6777b538SAndroid Build Coastguard Worker if (defined(invoker.javac_args)) { 3061*6777b538SAndroid Build Coastguard Worker _javac_args = invoker.javac_args 3062*6777b538SAndroid Build Coastguard Worker } 3063*6777b538SAndroid Build Coastguard Worker 3064*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 3065*6777b538SAndroid Build Coastguard Worker if (invoker.use_turbine) { 3066*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/turbine.py" 3067*6777b538SAndroid Build Coastguard Worker inputs = [ 3068*6777b538SAndroid Build Coastguard Worker "//third_party/jdk/current/bin/java", 3069*6777b538SAndroid Build Coastguard Worker android_sdk_jar, 3070*6777b538SAndroid Build Coastguard Worker ] 3071*6777b538SAndroid Build Coastguard Worker } else { 3072*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/compile_java.py" 3073*6777b538SAndroid Build Coastguard Worker inputs = javac_paths_for_inputs 3074*6777b538SAndroid Build Coastguard Worker } 3075*6777b538SAndroid Build Coastguard Worker 3076*6777b538SAndroid Build Coastguard Worker if (target_name == "chrome_java__header") { 3077*6777b538SAndroid Build Coastguard Worker # Regression test for: https://crbug.com/1154302 3078*6777b538SAndroid Build Coastguard Worker # Ensures that header jars never depend on non-header jars. 3079*6777b538SAndroid Build Coastguard Worker assert_no_deps = [ "//base:base_java__compile_java" ] 3080*6777b538SAndroid Build Coastguard Worker } 3081*6777b538SAndroid Build Coastguard Worker 3082*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 3083*6777b538SAndroid Build Coastguard Worker deps = _srcjar_deps 3084*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 3085*6777b538SAndroid Build Coastguard Worker deps += invoker.deps 3086*6777b538SAndroid Build Coastguard Worker } 3087*6777b538SAndroid Build Coastguard Worker 3088*6777b538SAndroid Build Coastguard Worker outputs = [ invoker.output_jar_path ] 3089*6777b538SAndroid Build Coastguard Worker if (!invoker.enable_errorprone && !invoker.use_turbine) { 3090*6777b538SAndroid Build Coastguard Worker outputs += [ invoker.output_jar_path + ".info" ] 3091*6777b538SAndroid Build Coastguard Worker } 3092*6777b538SAndroid Build Coastguard Worker inputs += invoker.source_files + _java_srcjars + [ 3093*6777b538SAndroid Build Coastguard Worker "$android_sdk/optional/android.test.base.jar", 3094*6777b538SAndroid Build Coastguard Worker "$android_sdk/optional/org.apache.http.legacy.jar", 3095*6777b538SAndroid Build Coastguard Worker _build_config, 3096*6777b538SAndroid Build Coastguard Worker ] + java_paths_for_inputs 3097*6777b538SAndroid Build Coastguard Worker 3098*6777b538SAndroid Build Coastguard Worker if (invoker.source_files != []) { 3099*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.target_sources_file ] 3100*6777b538SAndroid Build Coastguard Worker } 3101*6777b538SAndroid Build Coastguard Worker 3102*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(_build_config, root_build_dir) 3103*6777b538SAndroid Build Coastguard Worker _rebased_output_jar_path = 3104*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output_jar_path, root_build_dir) 3105*6777b538SAndroid Build Coastguard Worker _rebased_java_srcjars = rebase_path(_java_srcjars, root_build_dir) 3106*6777b538SAndroid Build Coastguard Worker _rebased_depfile = rebase_path(depfile, root_build_dir) 3107*6777b538SAndroid Build Coastguard Worker _rebased_generated_dir = rebase_path( 3108*6777b538SAndroid Build Coastguard Worker "$target_gen_dir/${invoker.main_target_name}/generated_java", 3109*6777b538SAndroid Build Coastguard Worker root_build_dir) 3110*6777b538SAndroid Build Coastguard Worker args = [ 3111*6777b538SAndroid Build Coastguard Worker "--depfile=$_rebased_depfile", 3112*6777b538SAndroid Build Coastguard Worker "--generated-dir=$_rebased_generated_dir", 3113*6777b538SAndroid Build Coastguard Worker "--jar-path=$_rebased_output_jar_path", 3114*6777b538SAndroid Build Coastguard Worker "--java-srcjars=$_rebased_java_srcjars", 3115*6777b538SAndroid Build Coastguard Worker "--target-name", 3116*6777b538SAndroid Build Coastguard Worker get_label_info(":${target_name}", "label_no_toolchain"), 3117*6777b538SAndroid Build Coastguard Worker ] 3118*6777b538SAndroid Build Coastguard Worker 3119*6777b538SAndroid Build Coastguard Worker # SDK jar must be first on classpath. 3120*6777b538SAndroid Build Coastguard Worker if (invoker.include_android_sdk) { 3121*6777b538SAndroid Build Coastguard Worker args += [ "--classpath=@FileArg($_rebased_build_config:android:sdk_interface_jars)" ] 3122*6777b538SAndroid Build Coastguard Worker } 3123*6777b538SAndroid Build Coastguard Worker 3124*6777b538SAndroid Build Coastguard Worker if (defined(invoker.header_jar_path)) { 3125*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.header_jar_path ] 3126*6777b538SAndroid Build Coastguard Worker args += [ 3127*6777b538SAndroid Build Coastguard Worker "--header-jar", 3128*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.header_jar_path, root_build_dir), 3129*6777b538SAndroid Build Coastguard Worker ] 3130*6777b538SAndroid Build Coastguard Worker _header_jar_classpath = 3131*6777b538SAndroid Build Coastguard Worker [ rebase_path(invoker.header_jar_path, root_build_dir) ] 3132*6777b538SAndroid Build Coastguard Worker args += [ "--classpath=$_header_jar_classpath" ] 3133*6777b538SAndroid Build Coastguard Worker } 3134*6777b538SAndroid Build Coastguard Worker 3135*6777b538SAndroid Build Coastguard Worker if (defined(invoker.kotlin_jar_path)) { 3136*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.kotlin_jar_path ] 3137*6777b538SAndroid Build Coastguard Worker _rebased_kotlin_jar_path = 3138*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.kotlin_jar_path, root_build_dir) 3139*6777b538SAndroid Build Coastguard Worker args += [ 3140*6777b538SAndroid Build Coastguard Worker "--kotlin-jar-path=$_rebased_kotlin_jar_path", 3141*6777b538SAndroid Build Coastguard Worker "--classpath=$_rebased_kotlin_jar_path", 3142*6777b538SAndroid Build Coastguard Worker ] 3143*6777b538SAndroid Build Coastguard Worker } 3144*6777b538SAndroid Build Coastguard Worker 3145*6777b538SAndroid Build Coastguard Worker if (invoker.use_turbine) { 3146*6777b538SAndroid Build Coastguard Worker # Prefer direct deps for turbine as much as possible. 3147*6777b538SAndroid Build Coastguard Worker args += [ "--classpath=@FileArg($_rebased_build_config:javac:interface_classpath)" ] 3148*6777b538SAndroid Build Coastguard Worker } else { 3149*6777b538SAndroid Build Coastguard Worker args += [ "--classpath=@FileArg($_rebased_build_config:deps_info:javac_full_interface_classpath)" ] 3150*6777b538SAndroid Build Coastguard Worker } 3151*6777b538SAndroid Build Coastguard Worker 3152*6777b538SAndroid Build Coastguard Worker if (invoker.use_turbine) { 3153*6777b538SAndroid Build Coastguard Worker args += [ 3154*6777b538SAndroid Build Coastguard Worker "--processorpath=@FileArg($_rebased_build_config:javac:processor_classpath)", 3155*6777b538SAndroid Build Coastguard Worker "--processors=@FileArg($_rebased_build_config:javac:processor_classes)", 3156*6777b538SAndroid Build Coastguard Worker ] 3157*6777b538SAndroid Build Coastguard Worker } 3158*6777b538SAndroid Build Coastguard Worker 3159*6777b538SAndroid Build Coastguard Worker if (invoker.use_turbine) { 3160*6777b538SAndroid Build Coastguard Worker _turbine_jar_path = "//third_party/turbine/turbine.jar" 3161*6777b538SAndroid Build Coastguard Worker inputs += [ _turbine_jar_path ] 3162*6777b538SAndroid Build Coastguard Worker outputs += [ invoker.generated_jar_path ] 3163*6777b538SAndroid Build Coastguard Worker args += [ 3164*6777b538SAndroid Build Coastguard Worker "--turbine-jar-path", 3165*6777b538SAndroid Build Coastguard Worker rebase_path(_turbine_jar_path, root_build_dir), 3166*6777b538SAndroid Build Coastguard Worker "--generated-jar-path", 3167*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.generated_jar_path, root_build_dir), 3168*6777b538SAndroid Build Coastguard Worker ] 3169*6777b538SAndroid Build Coastguard Worker } 3170*6777b538SAndroid Build Coastguard Worker 3171*6777b538SAndroid Build Coastguard Worker # Flag enable_kythe_annotations requires 3172*6777b538SAndroid Build Coastguard Worker # checkout_android_prebuilts_build_tools=True in .gclient. 3173*6777b538SAndroid Build Coastguard Worker if (enable_kythe_annotations && !invoker.enable_errorprone) { 3174*6777b538SAndroid Build Coastguard Worker args += [ "--enable-kythe-annotations" ] 3175*6777b538SAndroid Build Coastguard Worker } 3176*6777b538SAndroid Build Coastguard Worker if (_chromium_code) { 3177*6777b538SAndroid Build Coastguard Worker args += [ "--chromium-code=1" ] 3178*6777b538SAndroid Build Coastguard Worker if (treat_warnings_as_errors) { 3179*6777b538SAndroid Build Coastguard Worker args += [ "--warnings-as-errors" ] 3180*6777b538SAndroid Build Coastguard Worker } 3181*6777b538SAndroid Build Coastguard Worker } 3182*6777b538SAndroid Build Coastguard Worker if (defined(invoker.jar_excluded_patterns)) { 3183*6777b538SAndroid Build Coastguard Worker args += [ "--jar-info-exclude-globs=${invoker.jar_excluded_patterns}" ] 3184*6777b538SAndroid Build Coastguard Worker } 3185*6777b538SAndroid Build Coastguard Worker 3186*6777b538SAndroid Build Coastguard Worker if (invoker.enable_errorprone) { 3187*6777b538SAndroid Build Coastguard Worker # Our custom plugin pulls in the main errorprone dep transitively. 3188*6777b538SAndroid Build Coastguard Worker _errorprone_dep = "//tools/android/errorprone_plugin:errorprone_plugin" 3189*6777b538SAndroid Build Coastguard Worker deps += [ _errorprone_dep ] 3190*6777b538SAndroid Build Coastguard Worker _dep_gen_dir = get_label_info(_errorprone_dep, "target_gen_dir") 3191*6777b538SAndroid Build Coastguard Worker _dep_name = get_label_info(_errorprone_dep, "name") 3192*6777b538SAndroid Build Coastguard Worker _rebased_errorprone_buildconfig = 3193*6777b538SAndroid Build Coastguard Worker rebase_path("$_dep_gen_dir/$_dep_name.build_config.json", 3194*6777b538SAndroid Build Coastguard Worker root_build_dir) 3195*6777b538SAndroid Build Coastguard Worker args += [ 3196*6777b538SAndroid Build Coastguard Worker "--processorpath=@FileArg($_rebased_errorprone_buildconfig:deps_info:host_classpath)", 3197*6777b538SAndroid Build Coastguard Worker "--enable-errorprone", 3198*6777b538SAndroid Build Coastguard Worker ] 3199*6777b538SAndroid Build Coastguard Worker inputs += [ 3200*6777b538SAndroid Build Coastguard Worker # errorprone requires the plugin directory to detect src dir. 3201*6777b538SAndroid Build Coastguard Worker # https://source.chromium.org/chromium/chromium/src/+/main:tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/UseNetworkAnnotations.java;l=84;drc=dfd88085261b662a5c0a1abea1a3b120b08e8e48 3202*6777b538SAndroid Build Coastguard Worker "//tools/android/errorprone_plugin/OWNERS", 3203*6777b538SAndroid Build Coastguard Worker ] 3204*6777b538SAndroid Build Coastguard Worker } 3205*6777b538SAndroid Build Coastguard Worker if (defined(invoker.skip_build_server) && invoker.skip_build_server) { 3206*6777b538SAndroid Build Coastguard Worker # Nocompile tests need lint to fail through ninja. 3207*6777b538SAndroid Build Coastguard Worker args += [ "--skip-build-server" ] 3208*6777b538SAndroid Build Coastguard Worker } else if (android_static_analysis == "build_server") { 3209*6777b538SAndroid Build Coastguard Worker args += [ "--use-build-server" ] 3210*6777b538SAndroid Build Coastguard Worker } 3211*6777b538SAndroid Build Coastguard Worker 3212*6777b538SAndroid Build Coastguard Worker foreach(e, _processor_args) { 3213*6777b538SAndroid Build Coastguard Worker args += [ "--processor-arg=" + e ] 3214*6777b538SAndroid Build Coastguard Worker } 3215*6777b538SAndroid Build Coastguard Worker 3216*6777b538SAndroid Build Coastguard Worker foreach(file_tuple, _additional_jar_files) { 3217*6777b538SAndroid Build Coastguard Worker # Each element is of length two, [ path_to_file, path_to_put_in_jar ] 3218*6777b538SAndroid Build Coastguard Worker inputs += [ file_tuple[0] ] 3219*6777b538SAndroid Build Coastguard Worker args += 3220*6777b538SAndroid Build Coastguard Worker [ "--additional-jar-file=" + 3221*6777b538SAndroid Build Coastguard Worker rebase_path(file_tuple[0], root_build_dir) + ":" + file_tuple[1] ] 3222*6777b538SAndroid Build Coastguard Worker } 3223*6777b538SAndroid Build Coastguard Worker if (invoker.source_files != []) { 3224*6777b538SAndroid Build Coastguard Worker args += 3225*6777b538SAndroid Build Coastguard Worker [ "@" + rebase_path(invoker.target_sources_file, root_build_dir) ] 3226*6777b538SAndroid Build Coastguard Worker } 3227*6777b538SAndroid Build Coastguard Worker foreach(e, _javac_args) { 3228*6777b538SAndroid Build Coastguard Worker args += [ "--javac-arg=" + e ] 3229*6777b538SAndroid Build Coastguard Worker } 3230*6777b538SAndroid Build Coastguard Worker } 3231*6777b538SAndroid Build Coastguard Worker } 3232*6777b538SAndroid Build Coastguard Worker 3233*6777b538SAndroid Build Coastguard Worker # Compile Kotlin source files into .class files and store them in a .jar. 3234*6777b538SAndroid Build Coastguard Worker # This explicitly does not run annotation processing on the Kotlin files. 3235*6777b538SAndroid Build Coastguard Worker # Java files and srcjars are also passed to kotlinc for reference, although 3236*6777b538SAndroid Build Coastguard Worker # no .class files will be generated for any Java files. A subsequent call to 3237*6777b538SAndroid Build Coastguard Worker # javac will be required to actually compile Java files into .class files. 3238*6777b538SAndroid Build Coastguard Worker # 3239*6777b538SAndroid Build Coastguard Worker # This action also creates a "header" .jar file for the Kotlin source files. 3240*6777b538SAndroid Build Coastguard Worker # It is similar to using turbine to create headers for Java files, but since 3241*6777b538SAndroid Build Coastguard Worker # turbine does not support Kotlin files, this is done via a plugin for 3242*6777b538SAndroid Build Coastguard Worker # kotlinc instead, at the same time as compilation (whereas turbine is run as 3243*6777b538SAndroid Build Coastguard Worker # a separate action before javac compilation). 3244*6777b538SAndroid Build Coastguard Worker template("compile_kt") { 3245*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 3246*6777b538SAndroid Build Coastguard Worker 3247*6777b538SAndroid Build Coastguard Worker _build_config = invoker.build_config 3248*6777b538SAndroid Build Coastguard Worker _chromium_code = invoker.chromium_code 3249*6777b538SAndroid Build Coastguard Worker 3250*6777b538SAndroid Build Coastguard Worker _srcjar_deps = [] 3251*6777b538SAndroid Build Coastguard Worker if (defined(invoker.srcjar_deps)) { 3252*6777b538SAndroid Build Coastguard Worker _srcjar_deps = invoker.srcjar_deps 3253*6777b538SAndroid Build Coastguard Worker } 3254*6777b538SAndroid Build Coastguard Worker 3255*6777b538SAndroid Build Coastguard Worker _java_srcjars = [] 3256*6777b538SAndroid Build Coastguard Worker foreach(dep, _srcjar_deps) { 3257*6777b538SAndroid Build Coastguard Worker _dep_gen_dir = get_label_info(dep, "target_gen_dir") 3258*6777b538SAndroid Build Coastguard Worker _dep_name = get_label_info(dep, "name") 3259*6777b538SAndroid Build Coastguard Worker _java_srcjars += [ "$_dep_gen_dir/$_dep_name.srcjar" ] 3260*6777b538SAndroid Build Coastguard Worker } 3261*6777b538SAndroid Build Coastguard Worker 3262*6777b538SAndroid Build Coastguard Worker if (defined(invoker.srcjars)) { 3263*6777b538SAndroid Build Coastguard Worker _java_srcjars += invoker.srcjars 3264*6777b538SAndroid Build Coastguard Worker } 3265*6777b538SAndroid Build Coastguard Worker 3266*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 3267*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/compile_kt.py" 3268*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 3269*6777b538SAndroid Build Coastguard Worker deps = _srcjar_deps 3270*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 3271*6777b538SAndroid Build Coastguard Worker deps += invoker.deps 3272*6777b538SAndroid Build Coastguard Worker } 3273*6777b538SAndroid Build Coastguard Worker 3274*6777b538SAndroid Build Coastguard Worker outputs = [ 3275*6777b538SAndroid Build Coastguard Worker invoker.output_jar_path, 3276*6777b538SAndroid Build Coastguard Worker invoker.output_interface_jar_path, 3277*6777b538SAndroid Build Coastguard Worker ] 3278*6777b538SAndroid Build Coastguard Worker inputs = invoker.source_files + _java_srcjars + [ 3279*6777b538SAndroid Build Coastguard Worker _build_config, 3280*6777b538SAndroid Build Coastguard Worker invoker.target_sources_file, 3281*6777b538SAndroid Build Coastguard Worker ] 3282*6777b538SAndroid Build Coastguard Worker 3283*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(_build_config, root_build_dir) 3284*6777b538SAndroid Build Coastguard Worker _rebased_output_jar_path = 3285*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output_jar_path, root_build_dir) 3286*6777b538SAndroid Build Coastguard Worker _rebased_output_interface_jar_path = 3287*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output_interface_jar_path, root_build_dir) 3288*6777b538SAndroid Build Coastguard Worker _rebased_java_srcjars = rebase_path(_java_srcjars, root_build_dir) 3289*6777b538SAndroid Build Coastguard Worker _rebased_depfile = rebase_path(depfile, root_build_dir) 3290*6777b538SAndroid Build Coastguard Worker _rebased_generated_dir = rebase_path( 3291*6777b538SAndroid Build Coastguard Worker "$target_gen_dir/${invoker.main_target_name}/generated_java", 3292*6777b538SAndroid Build Coastguard Worker root_build_dir) 3293*6777b538SAndroid Build Coastguard Worker args = [ 3294*6777b538SAndroid Build Coastguard Worker "--depfile=$_rebased_depfile", 3295*6777b538SAndroid Build Coastguard Worker "--generated-dir=$_rebased_generated_dir", 3296*6777b538SAndroid Build Coastguard Worker "--jar-path=$_rebased_output_jar_path", 3297*6777b538SAndroid Build Coastguard Worker "--interface-jar-path=$_rebased_output_interface_jar_path", 3298*6777b538SAndroid Build Coastguard Worker "--java-srcjars=$_rebased_java_srcjars", 3299*6777b538SAndroid Build Coastguard Worker ] 3300*6777b538SAndroid Build Coastguard Worker 3301*6777b538SAndroid Build Coastguard Worker # SDK jar must be first on classpath. 3302*6777b538SAndroid Build Coastguard Worker if (invoker.include_android_sdk) { 3303*6777b538SAndroid Build Coastguard Worker args += [ "--classpath=@FileArg($_rebased_build_config:android:sdk_interface_jars)" ] 3304*6777b538SAndroid Build Coastguard Worker } 3305*6777b538SAndroid Build Coastguard Worker 3306*6777b538SAndroid Build Coastguard Worker args += [ "--classpath=@FileArg($_rebased_build_config:deps_info:javac_full_interface_classpath)" ] 3307*6777b538SAndroid Build Coastguard Worker 3308*6777b538SAndroid Build Coastguard Worker if (_chromium_code) { 3309*6777b538SAndroid Build Coastguard Worker args += [ "--chromium-code" ] 3310*6777b538SAndroid Build Coastguard Worker if (treat_warnings_as_errors) { 3311*6777b538SAndroid Build Coastguard Worker args += [ "--warnings-as-errors" ] 3312*6777b538SAndroid Build Coastguard Worker } 3313*6777b538SAndroid Build Coastguard Worker } 3314*6777b538SAndroid Build Coastguard Worker 3315*6777b538SAndroid Build Coastguard Worker args += [ "@" + rebase_path(invoker.target_sources_file, root_build_dir) ] 3316*6777b538SAndroid Build Coastguard Worker } 3317*6777b538SAndroid Build Coastguard Worker } 3318*6777b538SAndroid Build Coastguard Worker 3319*6777b538SAndroid Build Coastguard Worker # Create an interface jar from a normal jar. 3320*6777b538SAndroid Build Coastguard Worker # 3321*6777b538SAndroid Build Coastguard Worker # Variables 3322*6777b538SAndroid Build Coastguard Worker # input_jar: Path to input .jar. 3323*6777b538SAndroid Build Coastguard Worker # output_jar: Path to output .ijar. 3324*6777b538SAndroid Build Coastguard Worker # 3325*6777b538SAndroid Build Coastguard Worker template("generate_interface_jar") { 3326*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 3327*6777b538SAndroid Build Coastguard Worker _ijar_target = "//third_party/ijar:ijar($host_toolchain)" 3328*6777b538SAndroid Build Coastguard Worker _ijar_executable = get_label_info(_ijar_target, "root_out_dir") + "/ijar" 3329*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 3330*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 3331*6777b538SAndroid Build Coastguard Worker "data", 3332*6777b538SAndroid Build Coastguard Worker "data_deps", 3333*6777b538SAndroid Build Coastguard Worker "public_deps", 3334*6777b538SAndroid Build Coastguard Worker ]) 3335*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/ijar.py" 3336*6777b538SAndroid Build Coastguard Worker deps = [ _ijar_target ] 3337*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 3338*6777b538SAndroid Build Coastguard Worker deps += invoker.deps 3339*6777b538SAndroid Build Coastguard Worker } 3340*6777b538SAndroid Build Coastguard Worker inputs = [ 3341*6777b538SAndroid Build Coastguard Worker invoker.input_jar, 3342*6777b538SAndroid Build Coastguard Worker _ijar_executable, 3343*6777b538SAndroid Build Coastguard Worker ] 3344*6777b538SAndroid Build Coastguard Worker if (defined(invoker.inputs)) { 3345*6777b538SAndroid Build Coastguard Worker inputs += invoker.inputs 3346*6777b538SAndroid Build Coastguard Worker } 3347*6777b538SAndroid Build Coastguard Worker outputs = [ invoker.output_jar ] 3348*6777b538SAndroid Build Coastguard Worker args = [ 3349*6777b538SAndroid Build Coastguard Worker rebase_path(_ijar_executable, root_build_dir), 3350*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.input_jar, root_build_dir), 3351*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output_jar, root_build_dir), 3352*6777b538SAndroid Build Coastguard Worker ] 3353*6777b538SAndroid Build Coastguard Worker } 3354*6777b538SAndroid Build Coastguard Worker } 3355*6777b538SAndroid Build Coastguard Worker 3356*6777b538SAndroid Build Coastguard Worker # A rule that will handle multiple Java-related targets. 3357*6777b538SAndroid Build Coastguard Worker # 3358*6777b538SAndroid Build Coastguard Worker # The caller can provide a list of source files with 'java_files' 3359*6777b538SAndroid Build Coastguard Worker # and 'srcjar_deps', or a prebuilt .jar file through 'jar_path'. 3360*6777b538SAndroid Build Coastguard Worker # 3361*6777b538SAndroid Build Coastguard Worker # In the case of a 'java_binary' target type, it can even provide none of 3362*6777b538SAndroid Build Coastguard Worker # that (and the rule will just generate its wrapper script). 3363*6777b538SAndroid Build Coastguard Worker # 3364*6777b538SAndroid Build Coastguard Worker # The template will process the input .jar file (either the prebuilt one, 3365*6777b538SAndroid Build Coastguard Worker # or the result of compiling the sources), for example to apply Proguard, 3366*6777b538SAndroid Build Coastguard Worker # but also other ranges of bytecode-level rewriting schemes. 3367*6777b538SAndroid Build Coastguard Worker # 3368*6777b538SAndroid Build Coastguard Worker # Variables: 3369*6777b538SAndroid Build Coastguard Worker # type: type of Java target, valid values: 'java_library', 'java_binary', 3370*6777b538SAndroid Build Coastguard Worker # 'robolectric_binary', 'java_annotation_processor', and 'android_apk' 3371*6777b538SAndroid Build Coastguard Worker # main_target_name: optional. If provided, overrides target_name when 3372*6777b538SAndroid Build Coastguard Worker # creating sub-targets (e.g. "${main_target_name}__dex") and 3373*6777b538SAndroid Build Coastguard Worker # some output files (e.g. "${main_target_name}.sources"). Only used 3374*6777b538SAndroid Build Coastguard Worker # for 'android_apk' types at the moment, where main_target_name will 3375*6777b538SAndroid Build Coastguard Worker # be the name of the main APK target. 3376*6777b538SAndroid Build Coastguard Worker # supports_android: Optional. True if target can run on Android. 3377*6777b538SAndroid Build Coastguard Worker # requires_android: Optional. True if target can only run on Android. 3378*6777b538SAndroid Build Coastguard Worker # source_files: Optional list of Java source file paths for this target. 3379*6777b538SAndroid Build Coastguard Worker # javac_args: Optional list of extra arguments to pass to javac. 3380*6777b538SAndroid Build Coastguard Worker # errorprone_args: Optional list of extra arguments to pass to. 3381*6777b538SAndroid Build Coastguard Worker # srcjar_deps: Optional list of .srcjar targets (not file paths). The Java 3382*6777b538SAndroid Build Coastguard Worker # source files they contain will also be compiled for this target. 3383*6777b538SAndroid Build Coastguard Worker # target_sources_file: Optional path to a file which will be written with 3384*6777b538SAndroid Build Coastguard Worker # the content of source_files. If not provided, the file will be written 3385*6777b538SAndroid Build Coastguard Worker # under $target_gen_dir/$main_target_name.sources. Ignored if 3386*6777b538SAndroid Build Coastguard Worker # sources_files is empty. If not 3387*6777b538SAndroid Build Coastguard Worker # jar_path: Optional path to a prebuilt .jar file for this target. 3388*6777b538SAndroid Build Coastguard Worker # Mutually exclusive with java_files and srcjar_deps. 3389*6777b538SAndroid Build Coastguard Worker # output_name: Optional output name for the final jar path. Used to 3390*6777b538SAndroid Build Coastguard Worker # determine the name of the final jar. Default is to use the same 3391*6777b538SAndroid Build Coastguard Worker # name as jar_path, if provided, or main_target_name. 3392*6777b538SAndroid Build Coastguard Worker # main_class: Main Java class name for 'java_binary', 'robolectric_binary' and 3393*6777b538SAndroid Build Coastguard Worker # 'java_annotation_processor' target types. Should not be set for other 3394*6777b538SAndroid Build Coastguard Worker # ones. 3395*6777b538SAndroid Build Coastguard Worker # deps: Dependencies for this target. 3396*6777b538SAndroid Build Coastguard Worker # public_deps: Dependencies that this target exposes as part of its public API. 3397*6777b538SAndroid Build Coastguard Worker # public_deps do not need to be listed in both the 'deps' and 'public_deps' lists. 3398*6777b538SAndroid Build Coastguard Worker # testonly: True iff target should only be used for tests. 3399*6777b538SAndroid Build Coastguard Worker # chromium_code: Optional. Whether this is Chromium-specific code. If not 3400*6777b538SAndroid Build Coastguard Worker # provided, this is determined automatically, based on the location of 3401*6777b538SAndroid Build Coastguard Worker # the source files (i.e. anything under third_party/ is not 3402*6777b538SAndroid Build Coastguard Worker # Chromium-specific unless it is in a 'chromium' sub-directory). 3403*6777b538SAndroid Build Coastguard Worker # jacoco_never_instrument: Optional. If provided, whether to forbid 3404*6777b538SAndroid Build Coastguard Worker # instrumentation with the Jacoco coverage processor. If not provided, 3405*6777b538SAndroid Build Coastguard Worker # this is controlled by the global use_jacoco_coverage build arg variable 3406*6777b538SAndroid Build Coastguard Worker # and only used for non-test Chromium code. 3407*6777b538SAndroid Build Coastguard Worker # include_android_sdk: Optional. Whether or not the android SDK dep 3408*6777b538SAndroid Build Coastguard Worker # should be added to deps. Defaults to true for non-system libraries 3409*6777b538SAndroid Build Coastguard Worker # that support android. 3410*6777b538SAndroid Build Coastguard Worker # alternative_android_sdk_dep: Optional. Alternative Android system 3411*6777b538SAndroid Build Coastguard Worker # android java target to use. 3412*6777b538SAndroid Build Coastguard Worker # annotation_processor_deps: Optional list of dependencies corresponding 3413*6777b538SAndroid Build Coastguard Worker # to annotation processors used to compile these sources. 3414*6777b538SAndroid Build Coastguard Worker # input_jars_paths: Optional list of additional .jar file paths, which will 3415*6777b538SAndroid Build Coastguard Worker # be added to the compile-time classpath when building this target (but 3416*6777b538SAndroid Build Coastguard Worker # not to the runtime classpath). 3417*6777b538SAndroid Build Coastguard Worker # gradle_treat_as_prebuilt: Cause generate_gradle.py to reference this 3418*6777b538SAndroid Build Coastguard Worker # library via its built .jar rather than including its .java sources. 3419*6777b538SAndroid Build Coastguard Worker # proguard_enabled: Optional. True to enable ProGuard obfuscation. 3420*6777b538SAndroid Build Coastguard Worker # proguard_configs: Optional list of additional proguard config file paths. 3421*6777b538SAndroid Build Coastguard Worker # is_robolectric: Optional. If True, this is a host side android test binary 3422*6777b538SAndroid Build Coastguard Worker # which is allowed to depend on other android targets. 3423*6777b538SAndroid Build Coastguard Worker # include_java_resources: Optional. If True, include Java (not Android) 3424*6777b538SAndroid Build Coastguard Worker # resources into final .jar file. 3425*6777b538SAndroid Build Coastguard Worker # jar_excluded_patterns: Optional list of .class file patterns to exclude 3426*6777b538SAndroid Build Coastguard Worker # from the final .jar file. 3427*6777b538SAndroid Build Coastguard Worker # jar_included_patterns: Optional list of .class file patterns to include 3428*6777b538SAndroid Build Coastguard Worker # in the final .jar file. jar_excluded_patterns take precedence over this. 3429*6777b538SAndroid Build Coastguard Worker # low_classpath_priority: Indicates that the library should be placed at the 3430*6777b538SAndroid Build Coastguard Worker # end of the classpath. The default classpath order has libraries ordered 3431*6777b538SAndroid Build Coastguard Worker # before the libraries that they depend on. 'low_classpath_priority' is 3432*6777b538SAndroid Build Coastguard Worker # useful when one java_library() overrides another via 3433*6777b538SAndroid Build Coastguard Worker # 'jar_excluded_patterns' and the overriding library does not depend on the 3434*6777b538SAndroid Build Coastguard Worker # overridee. 3435*6777b538SAndroid Build Coastguard Worker # 3436*6777b538SAndroid Build Coastguard Worker # For 'android_apk' and 'android_app_bundle_module' targets only: 3437*6777b538SAndroid Build Coastguard Worker # 3438*6777b538SAndroid Build Coastguard Worker # apk_path: Path to the final APK file. 3439*6777b538SAndroid Build Coastguard Worker # android_manifest: Path to AndroidManifest.xml file for the APK. 3440*6777b538SAndroid Build Coastguard Worker # android_manifest_dep: Optional. Dependency target that generates 3441*6777b538SAndroid Build Coastguard Worker # android_manifest. 3442*6777b538SAndroid Build Coastguard Worker # apk_under_test: For 'android_apk' targets used to test other APKs, 3443*6777b538SAndroid Build Coastguard Worker # this is the target name of APK being tested. 3444*6777b538SAndroid Build Coastguard Worker # incremental_apk_path: Path to the incremental APK. 3445*6777b538SAndroid Build Coastguard Worker # incremental_install_json_path: Path to the incremental install json. 3446*6777b538SAndroid Build Coastguard Worker # native_lib_placeholders: Optional. List of placeholder filenames to add to 3447*6777b538SAndroid Build Coastguard Worker # the APK. 3448*6777b538SAndroid Build Coastguard Worker # proguard_mapping_path: Path to .mapping file produced from ProGuard step. 3449*6777b538SAndroid Build Coastguard Worker # shared_libraries_runtime_deps_file: Optional. Path to a file listing the 3450*6777b538SAndroid Build Coastguard Worker # native shared libraries required at runtime by the APK. 3451*6777b538SAndroid Build Coastguard Worker # secondary_abi_shared_libraries_runtime_deps_file: 3452*6777b538SAndroid Build Coastguard Worker # secondary_native_lib_placeholders: Optional. List of placeholder filenames 3453*6777b538SAndroid Build Coastguard Worker # to add to the APK for the secondary ABI. 3454*6777b538SAndroid Build Coastguard Worker # loadable_modules: Optional list of extra native libraries to 3455*6777b538SAndroid Build Coastguard Worker # be stored in the APK. 3456*6777b538SAndroid Build Coastguard Worker # secondary_abi_loadable_modules: Optional list of native libraries for 3457*6777b538SAndroid Build Coastguard Worker # secondary ABI. 3458*6777b538SAndroid Build Coastguard Worker # proto_resources_path: The path of an zip archive containing the APK's 3459*6777b538SAndroid Build Coastguard Worker # resources compiled to the protocol buffer format (instead of regular 3460*6777b538SAndroid Build Coastguard Worker # binary xml + resources.arsc). 3461*6777b538SAndroid Build Coastguard Worker # r_text_path: The path of the R.txt file generated when compiling the 3462*6777b538SAndroid Build Coastguard Worker # resources for this target. 3463*6777b538SAndroid Build Coastguard Worker # module_pathmap_path: The path of the pathmap file generated when compiling 3464*6777b538SAndroid Build Coastguard Worker # the resources for the bundle module, if path shortening is enabled. 3465*6777b538SAndroid Build Coastguard Worker # base_allowlist_rtxt_path: The path of the R.txt file containing the 3466*6777b538SAndroid Build Coastguard Worker # list of string resources to keep in the base split APK for any bundle 3467*6777b538SAndroid Build Coastguard Worker # that uses this target. 3468*6777b538SAndroid Build Coastguard Worker # 3469*6777b538SAndroid Build Coastguard Worker # For 'java_binary' and 'robolectric_binary' targets only. Ignored by others: 3470*6777b538SAndroid Build Coastguard Worker # 3471*6777b538SAndroid Build Coastguard Worker # wrapper_script_name: Optional name for the generated wrapper script. 3472*6777b538SAndroid Build Coastguard Worker # Default is main target name. 3473*6777b538SAndroid Build Coastguard Worker # wrapper_script_args: Optional list of extra arguments used by the 3474*6777b538SAndroid Build Coastguard Worker # generated wrapper script. 3475*6777b538SAndroid Build Coastguard Worker # 3476*6777b538SAndroid Build Coastguard Worker template("java_library_impl") { 3477*6777b538SAndroid Build Coastguard Worker # TODO(crbug.com/1042017): Remove. 3478*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "no_build_hooks" ]) 3479*6777b538SAndroid Build Coastguard Worker 3480*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "testonly" ]) 3481*6777b538SAndroid Build Coastguard Worker _is_prebuilt = defined(invoker.jar_path) 3482*6777b538SAndroid Build Coastguard Worker _type = invoker.type 3483*6777b538SAndroid Build Coastguard Worker _is_annotation_processor = _type == "java_annotation_processor" 3484*6777b538SAndroid Build Coastguard Worker _is_java_binary = _type == "java_binary" || _type == "robolectric_binary" 3485*6777b538SAndroid Build Coastguard Worker _is_library = _type == "java_library" 3486*6777b538SAndroid Build Coastguard Worker _supports_android = 3487*6777b538SAndroid Build Coastguard Worker defined(invoker.supports_android) && invoker.supports_android 3488*6777b538SAndroid Build Coastguard Worker _requires_android = 3489*6777b538SAndroid Build Coastguard Worker defined(invoker.requires_android) && invoker.requires_android 3490*6777b538SAndroid Build Coastguard Worker _supports_host = !_requires_android 3491*6777b538SAndroid Build Coastguard Worker if (_is_java_binary || _is_annotation_processor) { 3492*6777b538SAndroid Build Coastguard Worker assert(!_requires_android && !_supports_android) 3493*6777b538SAndroid Build Coastguard Worker } 3494*6777b538SAndroid Build Coastguard Worker 3495*6777b538SAndroid Build Coastguard Worker _bypass_platform_checks = defined(invoker.bypass_platform_checks) && 3496*6777b538SAndroid Build Coastguard Worker invoker.bypass_platform_checks 3497*6777b538SAndroid Build Coastguard Worker _is_robolectric = defined(invoker.is_robolectric) && invoker.is_robolectric 3498*6777b538SAndroid Build Coastguard Worker 3499*6777b538SAndroid Build Coastguard Worker _invoker_deps = [] 3500*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 3501*6777b538SAndroid Build Coastguard Worker _invoker_deps += invoker.deps 3502*6777b538SAndroid Build Coastguard Worker } 3503*6777b538SAndroid Build Coastguard Worker if (defined(invoker.public_deps)) { 3504*6777b538SAndroid Build Coastguard Worker _invoker_deps += invoker.public_deps 3505*6777b538SAndroid Build Coastguard Worker } 3506*6777b538SAndroid Build Coastguard Worker 3507*6777b538SAndroid Build Coastguard Worker _main_target_name = target_name 3508*6777b538SAndroid Build Coastguard Worker if (defined(invoker.main_target_name)) { 3509*6777b538SAndroid Build Coastguard Worker _main_target_name = invoker.main_target_name 3510*6777b538SAndroid Build Coastguard Worker } 3511*6777b538SAndroid Build Coastguard Worker 3512*6777b538SAndroid Build Coastguard Worker _source_files = [] 3513*6777b538SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 3514*6777b538SAndroid Build Coastguard Worker _source_files = invoker.sources 3515*6777b538SAndroid Build Coastguard Worker } 3516*6777b538SAndroid Build Coastguard Worker 3517*6777b538SAndroid Build Coastguard Worker _srcjar_deps = [] 3518*6777b538SAndroid Build Coastguard Worker if (defined(invoker.srcjar_deps)) { 3519*6777b538SAndroid Build Coastguard Worker _srcjar_deps = invoker.srcjar_deps 3520*6777b538SAndroid Build Coastguard Worker } 3521*6777b538SAndroid Build Coastguard Worker _srcjars = [] 3522*6777b538SAndroid Build Coastguard Worker if (defined(invoker.srcjars)) { 3523*6777b538SAndroid Build Coastguard Worker _srcjars = invoker.srcjars 3524*6777b538SAndroid Build Coastguard Worker } 3525*6777b538SAndroid Build Coastguard Worker _has_sources = _source_files != [] || _srcjar_deps != [] || _srcjars != [] 3526*6777b538SAndroid Build Coastguard Worker if (_is_prebuilt || _has_sources) { 3527*6777b538SAndroid Build Coastguard Worker # This allows us to use jar_excluded_patterns and prevent even the 3528*6777b538SAndroid Build Coastguard Worker # interface jars from having these classes. This means that, with this 3529*6777b538SAndroid Build Coastguard Worker # flag, nobody depending on this java library will be able to see these 3530*6777b538SAndroid Build Coastguard Worker # classes. These excluded classes are only used for the exact target they 3531*6777b538SAndroid Build Coastguard Worker # are compiled in. We do this by not making a header jar, and replacing 3532*6777b538SAndroid Build Coastguard Worker # all usages of the header jar with the processed (post-exclusion) jar. 3533*6777b538SAndroid Build Coastguard Worker _skip_header_jar = 3534*6777b538SAndroid Build Coastguard Worker defined(invoker.prevent_excluded_classes_from_classpath) && 3535*6777b538SAndroid Build Coastguard Worker invoker.prevent_excluded_classes_from_classpath 3536*6777b538SAndroid Build Coastguard Worker } 3537*6777b538SAndroid Build Coastguard Worker 3538*6777b538SAndroid Build Coastguard Worker if (_is_prebuilt) { 3539*6777b538SAndroid Build Coastguard Worker assert(!_has_sources) 3540*6777b538SAndroid Build Coastguard Worker } else { 3541*6777b538SAndroid Build Coastguard Worker # Allow java_binary to not specify any sources. This is needed when a prebuilt 3542*6777b538SAndroid Build Coastguard Worker # is needed as a library as well as a binary. 3543*6777b538SAndroid Build Coastguard Worker assert(_is_annotation_processor || _is_java_binary || _has_sources) 3544*6777b538SAndroid Build Coastguard Worker } 3545*6777b538SAndroid Build Coastguard Worker 3546*6777b538SAndroid Build Coastguard Worker if (_is_java_binary) { 3547*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.main_class), "${_type}() must set main_class") 3548*6777b538SAndroid Build Coastguard Worker } else if (_is_annotation_processor) { 3549*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.main_class), 3550*6777b538SAndroid Build Coastguard Worker "java_annotation_processor() must set main_class") 3551*6777b538SAndroid Build Coastguard Worker } else { 3552*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.main_class), 3553*6777b538SAndroid Build Coastguard Worker "main_class cannot be used for target of type ${_type}") 3554*6777b538SAndroid Build Coastguard Worker } 3555*6777b538SAndroid Build Coastguard Worker 3556*6777b538SAndroid Build Coastguard Worker if (defined(invoker.chromium_code)) { 3557*6777b538SAndroid Build Coastguard Worker _chromium_code = invoker.chromium_code 3558*6777b538SAndroid Build Coastguard Worker } else { 3559*6777b538SAndroid Build Coastguard Worker # Default based on whether target is in third_party. 3560*6777b538SAndroid Build Coastguard Worker _chromium_code = 3561*6777b538SAndroid Build Coastguard Worker filter_exclude([ get_label_info(":$_main_target_name", "dir") ], 3562*6777b538SAndroid Build Coastguard Worker [ "*\bthird_party\b*" ]) != [] 3563*6777b538SAndroid Build Coastguard Worker if (!_chromium_code && !_is_prebuilt && _source_files != []) { 3564*6777b538SAndroid Build Coastguard Worker # Unless third_party code has an org.chromium file in it. 3565*6777b538SAndroid Build Coastguard Worker _chromium_code = 3566*6777b538SAndroid Build Coastguard Worker filter_exclude(_source_files, [ "*\bchromium\b*" ]) != _source_files 3567*6777b538SAndroid Build Coastguard Worker } 3568*6777b538SAndroid Build Coastguard Worker } 3569*6777b538SAndroid Build Coastguard Worker 3570*6777b538SAndroid Build Coastguard Worker # Define build_config_deps which will be a list of targets required to 3571*6777b538SAndroid Build Coastguard Worker # build the _build_config. 3572*6777b538SAndroid Build Coastguard Worker _build_config = "$target_gen_dir/$_main_target_name.build_config.json" 3573*6777b538SAndroid Build Coastguard Worker _build_config_target_name = 3574*6777b538SAndroid Build Coastguard Worker "${_main_target_name}$build_config_target_suffix" 3575*6777b538SAndroid Build Coastguard Worker 3576*6777b538SAndroid Build Coastguard Worker # The only target that might have no prebuilt and no sources is a java_binary. 3577*6777b538SAndroid Build Coastguard Worker _build_host_jar = false 3578*6777b538SAndroid Build Coastguard Worker _build_device_jar = false 3579*6777b538SAndroid Build Coastguard Worker if (_is_prebuilt || _has_sources) { 3580*6777b538SAndroid Build Coastguard Worker if (defined(invoker.output_name)) { 3581*6777b538SAndroid Build Coastguard Worker _output_name = invoker.output_name 3582*6777b538SAndroid Build Coastguard Worker } else { 3583*6777b538SAndroid Build Coastguard Worker _output_name = _main_target_name 3584*6777b538SAndroid Build Coastguard Worker } 3585*6777b538SAndroid Build Coastguard Worker 3586*6777b538SAndroid Build Coastguard Worker _build_host_jar = 3587*6777b538SAndroid Build Coastguard Worker _is_java_binary || _is_annotation_processor || _type == "java_library" 3588*6777b538SAndroid Build Coastguard Worker _build_device_jar = _type != "system_java_library" && _supports_android 3589*6777b538SAndroid Build Coastguard Worker 3590*6777b538SAndroid Build Coastguard Worker _jacoco_instrument = 3591*6777b538SAndroid Build Coastguard Worker use_jacoco_coverage && _chromium_code && _source_files != [] && 3592*6777b538SAndroid Build Coastguard Worker _build_device_jar && (!defined(invoker.testonly) || !invoker.testonly) 3593*6777b538SAndroid Build Coastguard Worker if (defined(invoker.jacoco_never_instrument)) { 3594*6777b538SAndroid Build Coastguard Worker _jacoco_instrument = 3595*6777b538SAndroid Build Coastguard Worker !invoker.jacoco_never_instrument && _jacoco_instrument 3596*6777b538SAndroid Build Coastguard Worker } 3597*6777b538SAndroid Build Coastguard Worker if (_jacoco_instrument) { 3598*6777b538SAndroid Build Coastguard Worker _invoker_deps += [ _jacoco_dep ] 3599*6777b538SAndroid Build Coastguard Worker } 3600*6777b538SAndroid Build Coastguard Worker 3601*6777b538SAndroid Build Coastguard Worker if (_build_host_jar) { 3602*6777b538SAndroid Build Coastguard Worker # Jar files can be needed at runtime (by Robolectric tests or java binaries), 3603*6777b538SAndroid Build Coastguard Worker # so do not put them under obj/. 3604*6777b538SAndroid Build Coastguard Worker # TODO(agrieve): I suspect it would be better to use dist_jar for java_binary 3605*6777b538SAndroid Build Coastguard Worker # rather than archiving unnecessary .jar files within lib.java. 3606*6777b538SAndroid Build Coastguard Worker _target_dir_name = get_label_info(":$_main_target_name", "dir") 3607*6777b538SAndroid Build Coastguard Worker _host_processed_jar_path = 3608*6777b538SAndroid Build Coastguard Worker "$root_out_dir/lib.java$_target_dir_name/$_output_name.jar" 3609*6777b538SAndroid Build Coastguard Worker } 3610*6777b538SAndroid Build Coastguard Worker if (_build_device_jar) { 3611*6777b538SAndroid Build Coastguard Worker _dex_path = "$target_out_dir/$_main_target_name.dex.jar" 3612*6777b538SAndroid Build Coastguard Worker _enable_desugar = 3613*6777b538SAndroid Build Coastguard Worker !defined(invoker.enable_desugar) || invoker.enable_desugar 3614*6777b538SAndroid Build Coastguard Worker 3615*6777b538SAndroid Build Coastguard Worker # Build speed optimization: Skip "process device" step if the step 3616*6777b538SAndroid Build Coastguard Worker # would be just a copy and avoid the copy. 3617*6777b538SAndroid Build Coastguard Worker _process_device_jar = 3618*6777b538SAndroid Build Coastguard Worker defined(invoker.bytecode_rewriter_target) || _jacoco_instrument || 3619*6777b538SAndroid Build Coastguard Worker defined(invoker.jar_excluded_patterns) || 3620*6777b538SAndroid Build Coastguard Worker defined(invoker.jar_included_patterns) 3621*6777b538SAndroid Build Coastguard Worker if (!_process_device_jar && _is_prebuilt) { 3622*6777b538SAndroid Build Coastguard Worker _device_processed_jar_path = invoker.jar_path 3623*6777b538SAndroid Build Coastguard Worker } else { 3624*6777b538SAndroid Build Coastguard Worker _device_processed_jar_path = 3625*6777b538SAndroid Build Coastguard Worker "$target_out_dir/$_output_name.processed.jar" 3626*6777b538SAndroid Build Coastguard Worker } 3627*6777b538SAndroid Build Coastguard Worker } 3628*6777b538SAndroid Build Coastguard Worker 3629*6777b538SAndroid Build Coastguard Worker # For static libraries, the javac jar output is created at the intermediate 3630*6777b538SAndroid Build Coastguard Worker # path so that it can be processed by another target and moved to the final 3631*6777b538SAndroid Build Coastguard Worker # spot that the .build_config.json knows about. Technically this should be done 3632*6777b538SAndroid Build Coastguard Worker # for the ijar as well, but this is only used for APK targets where 3633*6777b538SAndroid Build Coastguard Worker # the ijar path isn't actually used. 3634*6777b538SAndroid Build Coastguard Worker if (_has_sources) { 3635*6777b538SAndroid Build Coastguard Worker _final_ijar_path = "$target_out_dir/$_output_name.turbine.jar" 3636*6777b538SAndroid Build Coastguard Worker } else { 3637*6777b538SAndroid Build Coastguard Worker _final_ijar_path = "$target_out_dir/$_output_name.ijar.jar" 3638*6777b538SAndroid Build Coastguard Worker } 3639*6777b538SAndroid Build Coastguard Worker 3640*6777b538SAndroid Build Coastguard Worker if (_has_sources) { 3641*6777b538SAndroid Build Coastguard Worker if (_build_device_jar && !_process_device_jar) { 3642*6777b538SAndroid Build Coastguard Worker _javac_jar_path = _device_processed_jar_path 3643*6777b538SAndroid Build Coastguard Worker } else { 3644*6777b538SAndroid Build Coastguard Worker _javac_jar_path = "$target_out_dir/$_main_target_name.javac.jar" 3645*6777b538SAndroid Build Coastguard Worker } 3646*6777b538SAndroid Build Coastguard Worker _generated_jar_path = 3647*6777b538SAndroid Build Coastguard Worker "$target_gen_dir/$_main_target_name.generated.srcjar" 3648*6777b538SAndroid Build Coastguard Worker } 3649*6777b538SAndroid Build Coastguard Worker 3650*6777b538SAndroid Build Coastguard Worker if (_is_prebuilt) { 3651*6777b538SAndroid Build Coastguard Worker _unprocessed_jar_path = invoker.jar_path 3652*6777b538SAndroid Build Coastguard Worker } else { 3653*6777b538SAndroid Build Coastguard Worker _unprocessed_jar_path = _javac_jar_path 3654*6777b538SAndroid Build Coastguard Worker } 3655*6777b538SAndroid Build Coastguard Worker } 3656*6777b538SAndroid Build Coastguard Worker 3657*6777b538SAndroid Build Coastguard Worker _java_assetres_deps = filter_include(_invoker_deps, java_resource_patterns) 3658*6777b538SAndroid Build Coastguard Worker 3659*6777b538SAndroid Build Coastguard Worker # Cannot use minus operator because it does not work when the operand has 3660*6777b538SAndroid Build Coastguard Worker # repeated entries. 3661*6777b538SAndroid Build Coastguard Worker _invoker_deps_minus_assetres = 3662*6777b538SAndroid Build Coastguard Worker filter_exclude(_invoker_deps, _java_assetres_deps) 3663*6777b538SAndroid Build Coastguard Worker _lib_deps = 3664*6777b538SAndroid Build Coastguard Worker filter_include(_invoker_deps_minus_assetres, java_library_patterns) 3665*6777b538SAndroid Build Coastguard Worker _non_java_deps = filter_exclude(_invoker_deps_minus_assetres, _lib_deps) 3666*6777b538SAndroid Build Coastguard Worker 3667*6777b538SAndroid Build Coastguard Worker _java_header_deps = [] # Turbine / ijar 3668*6777b538SAndroid Build Coastguard Worker 3669*6777b538SAndroid Build Coastguard Worker # It would be more ideal to split this into __host and __javac, but we 3670*6777b538SAndroid Build Coastguard Worker # combine the two concepts to save on a group() target. 3671*6777b538SAndroid Build Coastguard Worker _java_host_deps = [] # Processed host .jar + javac .jar. 3672*6777b538SAndroid Build Coastguard Worker _java_validate_deps = [] # Bytecode checker & errorprone. 3673*6777b538SAndroid Build Coastguard Worker 3674*6777b538SAndroid Build Coastguard Worker foreach(_lib_dep, _lib_deps) { 3675*6777b538SAndroid Build Coastguard Worker # Expand //foo/java -> //foo/java:java 3676*6777b538SAndroid Build Coastguard Worker _lib_dep = get_label_info(_lib_dep, "label_no_toolchain") 3677*6777b538SAndroid Build Coastguard Worker _java_assetres_deps += [ "${_lib_dep}__assetres" ] 3678*6777b538SAndroid Build Coastguard Worker _java_header_deps += [ "${_lib_dep}__header" ] 3679*6777b538SAndroid Build Coastguard Worker _java_host_deps += [ "${_lib_dep}__host" ] 3680*6777b538SAndroid Build Coastguard Worker _java_validate_deps += [ "${_lib_dep}__validate" ] 3681*6777b538SAndroid Build Coastguard Worker } 3682*6777b538SAndroid Build Coastguard Worker 3683*6777b538SAndroid Build Coastguard Worker # APK and base module targets are special because: 3684*6777b538SAndroid Build Coastguard Worker # 1) They do not follow java target naming scheme (since they are not 3685*6777b538SAndroid Build Coastguard Worker # generally deps, there is no need for them to). 3686*6777b538SAndroid Build Coastguard Worker # 2) They do not bother to define a __host target. 3687*6777b538SAndroid Build Coastguard Worker # Since __host is used as an indirect dep for the compile_java artifacts, 3688*6777b538SAndroid Build Coastguard Worker # add the __compile_java target directly for them. 3689*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apk_under_test)) { 3690*6777b538SAndroid Build Coastguard Worker _java_assetres_deps += [ "${invoker.apk_under_test}__java__assetres" ] 3691*6777b538SAndroid Build Coastguard Worker _java_header_deps += [ "${invoker.apk_under_test}__java__header" ] 3692*6777b538SAndroid Build Coastguard Worker _java_validate_deps += [ "${invoker.apk_under_test}__java__validate" ] 3693*6777b538SAndroid Build Coastguard Worker _java_host_deps += [ "${invoker.apk_under_test}__compile_java" ] 3694*6777b538SAndroid Build Coastguard Worker } 3695*6777b538SAndroid Build Coastguard Worker if (defined(invoker.base_module_target)) { 3696*6777b538SAndroid Build Coastguard Worker _java_assetres_deps += [ "${invoker.base_module_target}__java__assetres" ] 3697*6777b538SAndroid Build Coastguard Worker _java_header_deps += [ "${invoker.base_module_target}__java__header" ] 3698*6777b538SAndroid Build Coastguard Worker _java_validate_deps += [ "${invoker.base_module_target}__java__validate" ] 3699*6777b538SAndroid Build Coastguard Worker _java_host_deps += [ "${invoker.base_module_target}__compile_java" ] 3700*6777b538SAndroid Build Coastguard Worker } 3701*6777b538SAndroid Build Coastguard Worker 3702*6777b538SAndroid Build Coastguard Worker not_needed([ "_non_java_deps" ]) 3703*6777b538SAndroid Build Coastguard Worker 3704*6777b538SAndroid Build Coastguard Worker if (_is_prebuilt || _has_sources) { 3705*6777b538SAndroid Build Coastguard Worker # Classpath deps are used for header and dex targets, they do not need 3706*6777b538SAndroid Build Coastguard Worker # __assetres deps. 3707*6777b538SAndroid Build Coastguard Worker # _non_java_deps are needed for input_jars_paths that are generated. 3708*6777b538SAndroid Build Coastguard Worker _header_classpath_deps = 3709*6777b538SAndroid Build Coastguard Worker _java_header_deps + _non_java_deps + [ ":$_build_config_target_name" ] 3710*6777b538SAndroid Build Coastguard Worker 3711*6777b538SAndroid Build Coastguard Worker _javac_classpath_deps = 3712*6777b538SAndroid Build Coastguard Worker _java_host_deps + _non_java_deps + [ ":$_build_config_target_name" ] 3713*6777b538SAndroid Build Coastguard Worker 3714*6777b538SAndroid Build Coastguard Worker _include_android_sdk = _build_device_jar 3715*6777b538SAndroid Build Coastguard Worker if (defined(invoker.include_android_sdk)) { 3716*6777b538SAndroid Build Coastguard Worker _include_android_sdk = invoker.include_android_sdk 3717*6777b538SAndroid Build Coastguard Worker } 3718*6777b538SAndroid Build Coastguard Worker if (_include_android_sdk) { 3719*6777b538SAndroid Build Coastguard Worker if (defined(invoker.alternative_android_sdk_dep)) { 3720*6777b538SAndroid Build Coastguard Worker _android_sdk_dep = invoker.alternative_android_sdk_dep 3721*6777b538SAndroid Build Coastguard Worker } else { 3722*6777b538SAndroid Build Coastguard Worker _android_sdk_dep = default_android_sdk_dep 3723*6777b538SAndroid Build Coastguard Worker } 3724*6777b538SAndroid Build Coastguard Worker 3725*6777b538SAndroid Build Coastguard Worker _header_classpath_deps += [ "${_android_sdk_dep}__header" ] 3726*6777b538SAndroid Build Coastguard Worker _javac_classpath_deps += [ "${_android_sdk_dep}" ] 3727*6777b538SAndroid Build Coastguard Worker } 3728*6777b538SAndroid Build Coastguard Worker } 3729*6777b538SAndroid Build Coastguard Worker 3730*6777b538SAndroid Build Coastguard Worker # Often needed, but too hard to figure out when ahead of time. 3731*6777b538SAndroid Build Coastguard Worker not_needed([ 3732*6777b538SAndroid Build Coastguard Worker "_header_classpath_deps", 3733*6777b538SAndroid Build Coastguard Worker "_javac_classpath_deps", 3734*6777b538SAndroid Build Coastguard Worker ]) 3735*6777b538SAndroid Build Coastguard Worker 3736*6777b538SAndroid Build Coastguard Worker if (_source_files != []) { 3737*6777b538SAndroid Build Coastguard Worker _target_sources_file = "$target_gen_dir/$_main_target_name.sources" 3738*6777b538SAndroid Build Coastguard Worker write_file(_target_sources_file, 3739*6777b538SAndroid Build Coastguard Worker rebase_path(_source_files, root_build_dir)) 3740*6777b538SAndroid Build Coastguard Worker } 3741*6777b538SAndroid Build Coastguard Worker 3742*6777b538SAndroid Build Coastguard Worker write_build_config(_build_config_target_name) { 3743*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 3744*6777b538SAndroid Build Coastguard Worker [ 3745*6777b538SAndroid Build Coastguard Worker "aar_path", 3746*6777b538SAndroid Build Coastguard Worker "annotation_processor_deps", 3747*6777b538SAndroid Build Coastguard Worker "base_allowlist_rtxt_path", 3748*6777b538SAndroid Build Coastguard Worker "gradle_treat_as_prebuilt", 3749*6777b538SAndroid Build Coastguard Worker "input_jars_paths", 3750*6777b538SAndroid Build Coastguard Worker "preferred_dep", 3751*6777b538SAndroid Build Coastguard Worker "low_classpath_priority", 3752*6777b538SAndroid Build Coastguard Worker "main_class", 3753*6777b538SAndroid Build Coastguard Worker "mergeable_android_manifests", 3754*6777b538SAndroid Build Coastguard Worker "module_name", 3755*6777b538SAndroid Build Coastguard Worker "parent_module_target", 3756*6777b538SAndroid Build Coastguard Worker "proguard_configs", 3757*6777b538SAndroid Build Coastguard Worker "proguard_enabled", 3758*6777b538SAndroid Build Coastguard Worker "proguard_mapping_path", 3759*6777b538SAndroid Build Coastguard Worker "public_target_label", 3760*6777b538SAndroid Build Coastguard Worker "r_text_path", 3761*6777b538SAndroid Build Coastguard Worker "type", 3762*6777b538SAndroid Build Coastguard Worker "version_code", 3763*6777b538SAndroid Build Coastguard Worker "version_name", 3764*6777b538SAndroid Build Coastguard Worker ]) 3765*6777b538SAndroid Build Coastguard Worker if (_type == "android_apk" || _type == "android_app_bundle_module") { 3766*6777b538SAndroid Build Coastguard Worker forward_variables_from( 3767*6777b538SAndroid Build Coastguard Worker invoker, 3768*6777b538SAndroid Build Coastguard Worker [ 3769*6777b538SAndroid Build Coastguard Worker "android_manifest", 3770*6777b538SAndroid Build Coastguard Worker "android_manifest_dep", 3771*6777b538SAndroid Build Coastguard Worker "merged_android_manifest", 3772*6777b538SAndroid Build Coastguard Worker "final_dex_path", 3773*6777b538SAndroid Build Coastguard Worker "loadable_modules", 3774*6777b538SAndroid Build Coastguard Worker "native_lib_placeholders", 3775*6777b538SAndroid Build Coastguard Worker "res_size_info_path", 3776*6777b538SAndroid Build Coastguard Worker "secondary_abi_loadable_modules", 3777*6777b538SAndroid Build Coastguard Worker "secondary_abi_shared_libraries_runtime_deps_file", 3778*6777b538SAndroid Build Coastguard Worker "secondary_native_lib_placeholders", 3779*6777b538SAndroid Build Coastguard Worker "shared_libraries_runtime_deps_file", 3780*6777b538SAndroid Build Coastguard Worker "library_always_compress", 3781*6777b538SAndroid Build Coastguard Worker ]) 3782*6777b538SAndroid Build Coastguard Worker } 3783*6777b538SAndroid Build Coastguard Worker if (_type == "android_apk") { 3784*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 3785*6777b538SAndroid Build Coastguard Worker [ 3786*6777b538SAndroid Build Coastguard Worker "apk_path", 3787*6777b538SAndroid Build Coastguard Worker "apk_under_test", 3788*6777b538SAndroid Build Coastguard Worker "incremental_apk_path", 3789*6777b538SAndroid Build Coastguard Worker "incremental_install_json_path", 3790*6777b538SAndroid Build Coastguard Worker ]) 3791*6777b538SAndroid Build Coastguard Worker } 3792*6777b538SAndroid Build Coastguard Worker if (_type == "android_app_bundle_module") { 3793*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 3794*6777b538SAndroid Build Coastguard Worker [ 3795*6777b538SAndroid Build Coastguard Worker "add_view_trace_events", 3796*6777b538SAndroid Build Coastguard Worker "base_module_target", 3797*6777b538SAndroid Build Coastguard Worker "module_pathmap_path", 3798*6777b538SAndroid Build Coastguard Worker "proto_resources_path", 3799*6777b538SAndroid Build Coastguard Worker ]) 3800*6777b538SAndroid Build Coastguard Worker } 3801*6777b538SAndroid Build Coastguard Worker chromium_code = _chromium_code 3802*6777b538SAndroid Build Coastguard Worker build_config = _build_config 3803*6777b538SAndroid Build Coastguard Worker is_prebuilt = _is_prebuilt 3804*6777b538SAndroid Build Coastguard Worker 3805*6777b538SAndroid Build Coastguard Worker # Specifically avoid passing in invoker.base_module_target as one of the 3806*6777b538SAndroid Build Coastguard Worker # possible_config_deps. 3807*6777b538SAndroid Build Coastguard Worker possible_config_deps = [] 3808*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 3809*6777b538SAndroid Build Coastguard Worker possible_config_deps = invoker.deps 3810*6777b538SAndroid Build Coastguard Worker } 3811*6777b538SAndroid Build Coastguard Worker if (defined(invoker.public_deps)) { 3812*6777b538SAndroid Build Coastguard Worker possible_config_public_deps = invoker.public_deps 3813*6777b538SAndroid Build Coastguard Worker } 3814*6777b538SAndroid Build Coastguard Worker if (defined(invoker.asset_deps)) { 3815*6777b538SAndroid Build Coastguard Worker possible_config_deps += invoker.asset_deps 3816*6777b538SAndroid Build Coastguard Worker } 3817*6777b538SAndroid Build Coastguard Worker if (defined(apk_under_test)) { 3818*6777b538SAndroid Build Coastguard Worker possible_config_deps += [ apk_under_test ] 3819*6777b538SAndroid Build Coastguard Worker } 3820*6777b538SAndroid Build Coastguard Worker if (defined(_jacoco_instrument) && _jacoco_instrument) { 3821*6777b538SAndroid Build Coastguard Worker possible_config_deps += [ _jacoco_dep ] 3822*6777b538SAndroid Build Coastguard Worker } 3823*6777b538SAndroid Build Coastguard Worker if (defined(_android_sdk_dep)) { 3824*6777b538SAndroid Build Coastguard Worker possible_config_deps += [ _android_sdk_dep ] 3825*6777b538SAndroid Build Coastguard Worker } 3826*6777b538SAndroid Build Coastguard Worker 3827*6777b538SAndroid Build Coastguard Worker supports_android = _supports_android 3828*6777b538SAndroid Build Coastguard Worker requires_android = _requires_android 3829*6777b538SAndroid Build Coastguard Worker is_robolectric = _is_robolectric 3830*6777b538SAndroid Build Coastguard Worker bypass_platform_checks = _bypass_platform_checks 3831*6777b538SAndroid Build Coastguard Worker 3832*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resources_package)) { 3833*6777b538SAndroid Build Coastguard Worker custom_package = invoker.resources_package 3834*6777b538SAndroid Build Coastguard Worker } 3835*6777b538SAndroid Build Coastguard Worker if (_is_prebuilt || _has_sources) { 3836*6777b538SAndroid Build Coastguard Worker if (_skip_header_jar) { 3837*6777b538SAndroid Build Coastguard Worker # We are tricking everything that is looking for an ijar into looking 3838*6777b538SAndroid Build Coastguard Worker # at the processed jar path, which is has the excluded classes 3839*6777b538SAndroid Build Coastguard Worker # removed. 3840*6777b538SAndroid Build Coastguard Worker ijar_path = _device_processed_jar_path 3841*6777b538SAndroid Build Coastguard Worker } else { 3842*6777b538SAndroid Build Coastguard Worker ijar_path = _final_ijar_path 3843*6777b538SAndroid Build Coastguard Worker } 3844*6777b538SAndroid Build Coastguard Worker unprocessed_jar_path = _unprocessed_jar_path 3845*6777b538SAndroid Build Coastguard Worker } 3846*6777b538SAndroid Build Coastguard Worker if (_build_host_jar) { 3847*6777b538SAndroid Build Coastguard Worker host_jar_path = _host_processed_jar_path 3848*6777b538SAndroid Build Coastguard Worker } 3849*6777b538SAndroid Build Coastguard Worker if (_build_device_jar) { 3850*6777b538SAndroid Build Coastguard Worker device_jar_path = _device_processed_jar_path 3851*6777b538SAndroid Build Coastguard Worker dex_path = _dex_path 3852*6777b538SAndroid Build Coastguard Worker } 3853*6777b538SAndroid Build Coastguard Worker if (_source_files != []) { 3854*6777b538SAndroid Build Coastguard Worker target_sources_file = _target_sources_file 3855*6777b538SAndroid Build Coastguard Worker } 3856*6777b538SAndroid Build Coastguard Worker 3857*6777b538SAndroid Build Coastguard Worker bundled_srcjars = [] 3858*6777b538SAndroid Build Coastguard Worker foreach(d, _srcjar_deps) { 3859*6777b538SAndroid Build Coastguard Worker _dep_gen_dir = get_label_info(d, "target_gen_dir") 3860*6777b538SAndroid Build Coastguard Worker _dep_name = get_label_info(d, "name") 3861*6777b538SAndroid Build Coastguard Worker bundled_srcjars += [ "$_dep_gen_dir/$_dep_name.srcjar" ] 3862*6777b538SAndroid Build Coastguard Worker } 3863*6777b538SAndroid Build Coastguard Worker bundled_srcjars += _srcjars 3864*6777b538SAndroid Build Coastguard Worker if (defined(invoker.include_java_resources) && 3865*6777b538SAndroid Build Coastguard Worker invoker.include_java_resources) { 3866*6777b538SAndroid Build Coastguard Worker java_resources_jar = _unprocessed_jar_path 3867*6777b538SAndroid Build Coastguard Worker if (defined(invoker.jar_path)) { 3868*6777b538SAndroid Build Coastguard Worker # Use original jar_path because _jar_path points to a library without 3869*6777b538SAndroid Build Coastguard Worker # resources. 3870*6777b538SAndroid Build Coastguard Worker } else { 3871*6777b538SAndroid Build Coastguard Worker java_resources_jar = _device_processed_jar_path 3872*6777b538SAndroid Build Coastguard Worker } 3873*6777b538SAndroid Build Coastguard Worker } 3874*6777b538SAndroid Build Coastguard Worker } 3875*6777b538SAndroid Build Coastguard Worker 3876*6777b538SAndroid Build Coastguard Worker if (_is_prebuilt || _has_sources) { 3877*6777b538SAndroid Build Coastguard Worker _header_target_name = "${target_name}__header" 3878*6777b538SAndroid Build Coastguard Worker } 3879*6777b538SAndroid Build Coastguard Worker 3880*6777b538SAndroid Build Coastguard Worker if (_has_sources) { 3881*6777b538SAndroid Build Coastguard Worker _kt_files = filter_include(_source_files, [ "*.kt" ]) 3882*6777b538SAndroid Build Coastguard Worker _java_files = filter_exclude(_source_files, [ "*.kt" ]) 3883*6777b538SAndroid Build Coastguard Worker 3884*6777b538SAndroid Build Coastguard Worker if (defined(invoker.enable_errorprone)) { 3885*6777b538SAndroid Build Coastguard Worker _enable_errorprone = invoker.enable_errorprone 3886*6777b538SAndroid Build Coastguard Worker } else { 3887*6777b538SAndroid Build Coastguard Worker _enable_errorprone = 3888*6777b538SAndroid Build Coastguard Worker _java_files != [] && _chromium_code && use_errorprone_java_compiler 3889*6777b538SAndroid Build Coastguard Worker } 3890*6777b538SAndroid Build Coastguard Worker 3891*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resources_package) && _type == "java_library") { 3892*6777b538SAndroid Build Coastguard Worker # TODO(crbug.com/1296632): remove _bypass_platform_checks from the list 3893*6777b538SAndroid Build Coastguard Worker # once all robolectric targets have migrated to robolectric_library. 3894*6777b538SAndroid Build Coastguard Worker assert(_requires_android || _bypass_platform_checks || _is_robolectric, 3895*6777b538SAndroid Build Coastguard Worker "Setting resources_package applicable only for " + 3896*6777b538SAndroid Build Coastguard Worker "android_library(), or robolectric_library(). " + 3897*6777b538SAndroid Build Coastguard Worker "Target=$target_name") 3898*6777b538SAndroid Build Coastguard Worker 3899*6777b538SAndroid Build Coastguard Worker # Serves double purpose: Generating R.java, as well as being the 3900*6777b538SAndroid Build Coastguard Worker #__assetres target (instead of using a separate group). 3901*6777b538SAndroid Build Coastguard Worker _fake_rjava_target = "${target_name}__assetres" 3902*6777b538SAndroid Build Coastguard Worker generate_r_java(_fake_rjava_target) { 3903*6777b538SAndroid Build Coastguard Worker deps = [ ":$_build_config_target_name" ] + _java_assetres_deps + 3904*6777b538SAndroid Build Coastguard Worker _non_java_deps 3905*6777b538SAndroid Build Coastguard Worker build_config = _build_config 3906*6777b538SAndroid Build Coastguard Worker 3907*6777b538SAndroid Build Coastguard Worker # Filepath has to be exactly this because compile_java looks for the 3908*6777b538SAndroid Build Coastguard Worker # srcjar of srcjar_deps at this location $gen_dir/$target_name.srcjar 3909*6777b538SAndroid Build Coastguard Worker srcjar_path = "$target_gen_dir/$target_name.srcjar" 3910*6777b538SAndroid Build Coastguard Worker package = invoker.resources_package 3911*6777b538SAndroid Build Coastguard Worker } 3912*6777b538SAndroid Build Coastguard Worker _srcjar_deps += [ ":$_fake_rjava_target" ] 3913*6777b538SAndroid Build Coastguard Worker } 3914*6777b538SAndroid Build Coastguard Worker 3915*6777b538SAndroid Build Coastguard Worker if (_kt_files != []) { 3916*6777b538SAndroid Build Coastguard Worker _kt_allowlist = [ 3917*6777b538SAndroid Build Coastguard Worker "android/java/src/org/chromium/chrome/browser/tabmodel/AsyncTabParamsManagerImpl.kt", 3918*6777b538SAndroid Build Coastguard Worker "java/androidx/core/os/BuildCompat.kt", 3919*6777b538SAndroid Build Coastguard Worker "webengine_shell_apk/src/org/chromium/webengine/shell/*.kt", 3920*6777b538SAndroid Build Coastguard Worker ] 3921*6777b538SAndroid Build Coastguard Worker _found_kt = filter_exclude(_kt_files, _kt_allowlist) 3922*6777b538SAndroid Build Coastguard Worker assert( 3923*6777b538SAndroid Build Coastguard Worker _found_kt == [], 3924*6777b538SAndroid Build Coastguard Worker "Only a files in the allowlist can be included for now. Feel " + "free to remove this assert when experimenting locally. Found: $_found_kt") 3925*6777b538SAndroid Build Coastguard Worker _compile_kt_target_name = "${_main_target_name}__compile_kt" 3926*6777b538SAndroid Build Coastguard Worker _kotlinc_jar_path = "$target_out_dir/$_output_name.kotlinc.jar" 3927*6777b538SAndroid Build Coastguard Worker _kotlin_interface_jar_path = 3928*6777b538SAndroid Build Coastguard Worker "$target_out_dir/$_output_name.kt-jvm-abi.jar" 3929*6777b538SAndroid Build Coastguard Worker assert(filter_include(_lib_deps, [ _kotlin_stdlib_dep ]) != [], 3930*6777b538SAndroid Build Coastguard Worker "${_main_target_name} is missing dep: $_kotlin_stdlib_dep") 3931*6777b538SAndroid Build Coastguard Worker compile_kt(_compile_kt_target_name) { 3932*6777b538SAndroid Build Coastguard Worker deps = _header_classpath_deps 3933*6777b538SAndroid Build Coastguard Worker output_jar_path = _kotlinc_jar_path 3934*6777b538SAndroid Build Coastguard Worker output_interface_jar_path = _kotlin_interface_jar_path 3935*6777b538SAndroid Build Coastguard Worker main_target_name = _main_target_name 3936*6777b538SAndroid Build Coastguard Worker build_config = _build_config 3937*6777b538SAndroid Build Coastguard Worker srcjar_deps = _srcjar_deps 3938*6777b538SAndroid Build Coastguard Worker source_files = _source_files 3939*6777b538SAndroid Build Coastguard Worker target_sources_file = _target_sources_file 3940*6777b538SAndroid Build Coastguard Worker chromium_code = _chromium_code 3941*6777b538SAndroid Build Coastguard Worker include_android_sdk = _is_robolectric || _requires_android 3942*6777b538SAndroid Build Coastguard Worker } 3943*6777b538SAndroid Build Coastguard Worker } 3944*6777b538SAndroid Build Coastguard Worker 3945*6777b538SAndroid Build Coastguard Worker template("compile_java_helper") { 3946*6777b538SAndroid Build Coastguard Worker _enable_errorprone = 3947*6777b538SAndroid Build Coastguard Worker defined(invoker.enable_errorprone) && invoker.enable_errorprone 3948*6777b538SAndroid Build Coastguard Worker if (_enable_errorprone) { 3949*6777b538SAndroid Build Coastguard Worker # Rely on the header jar to provide all .class files so that it is 3950*6777b538SAndroid Build Coastguard Worker # safe to omit generated files entirely for errorprone. 3951*6777b538SAndroid Build Coastguard Worker _filtered_source_files = 3952*6777b538SAndroid Build Coastguard Worker filter_exclude(_source_files, [ "$root_gen_dir*" ]) 3953*6777b538SAndroid Build Coastguard Worker } 3954*6777b538SAndroid Build Coastguard Worker if (_enable_errorprone && _filtered_source_files == []) { 3955*6777b538SAndroid Build Coastguard Worker # Filtering out generated files resulted in no files left. 3956*6777b538SAndroid Build Coastguard Worker group(target_name) { 3957*6777b538SAndroid Build Coastguard Worker not_needed(invoker, "*") 3958*6777b538SAndroid Build Coastguard Worker deps = _header_classpath_deps 3959*6777b538SAndroid Build Coastguard Worker } 3960*6777b538SAndroid Build Coastguard Worker } else { 3961*6777b538SAndroid Build Coastguard Worker compile_java(target_name) { 3962*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 3963*6777b538SAndroid Build Coastguard Worker "*", 3964*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ "deps" ]) 3965*6777b538SAndroid Build Coastguard Worker deps = _header_classpath_deps 3966*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 3967*6777b538SAndroid Build Coastguard Worker deps += invoker.deps 3968*6777b538SAndroid Build Coastguard Worker } 3969*6777b538SAndroid Build Coastguard Worker output_jar_path = invoker.output_jar_path 3970*6777b538SAndroid Build Coastguard Worker if (defined(invoker.kotlin_jar_path)) { 3971*6777b538SAndroid Build Coastguard Worker deps += [ ":$_compile_kt_target_name" ] 3972*6777b538SAndroid Build Coastguard Worker kotlin_jar_path = invoker.kotlin_jar_path 3973*6777b538SAndroid Build Coastguard Worker } 3974*6777b538SAndroid Build Coastguard Worker enable_errorprone = _enable_errorprone 3975*6777b538SAndroid Build Coastguard Worker use_turbine = defined(invoker.use_turbine) && invoker.use_turbine 3976*6777b538SAndroid Build Coastguard Worker 3977*6777b538SAndroid Build Coastguard Worker main_target_name = _main_target_name 3978*6777b538SAndroid Build Coastguard Worker build_config = _build_config 3979*6777b538SAndroid Build Coastguard Worker 3980*6777b538SAndroid Build Coastguard Worker if (_enable_errorprone) { 3981*6777b538SAndroid Build Coastguard Worker source_files = _filtered_source_files 3982*6777b538SAndroid Build Coastguard Worker } else { 3983*6777b538SAndroid Build Coastguard Worker source_files = _source_files 3984*6777b538SAndroid Build Coastguard Worker srcjar_deps = _srcjar_deps 3985*6777b538SAndroid Build Coastguard Worker } 3986*6777b538SAndroid Build Coastguard Worker 3987*6777b538SAndroid Build Coastguard Worker if (source_files != []) { 3988*6777b538SAndroid Build Coastguard Worker target_sources_file = _target_sources_file 3989*6777b538SAndroid Build Coastguard Worker } 3990*6777b538SAndroid Build Coastguard Worker chromium_code = _chromium_code 3991*6777b538SAndroid Build Coastguard Worker include_android_sdk = _is_robolectric || _requires_android 3992*6777b538SAndroid Build Coastguard Worker } 3993*6777b538SAndroid Build Coastguard Worker } 3994*6777b538SAndroid Build Coastguard Worker } 3995*6777b538SAndroid Build Coastguard Worker _compile_java_forward_variables = [ 3996*6777b538SAndroid Build Coastguard Worker "additional_jar_files", 3997*6777b538SAndroid Build Coastguard Worker "apk_name", 3998*6777b538SAndroid Build Coastguard Worker "jar_excluded_patterns", 3999*6777b538SAndroid Build Coastguard Worker "javac_args", 4000*6777b538SAndroid Build Coastguard Worker "processor_args_javac", 4001*6777b538SAndroid Build Coastguard Worker "skip_build_server", 4002*6777b538SAndroid Build Coastguard Worker "srcjars", 4003*6777b538SAndroid Build Coastguard Worker ] 4004*6777b538SAndroid Build Coastguard Worker 4005*6777b538SAndroid Build Coastguard Worker if (!_skip_header_jar) { 4006*6777b538SAndroid Build Coastguard Worker _annotation_processor_deps = [] 4007*6777b538SAndroid Build Coastguard Worker if (defined(invoker.annotation_processor_deps)) { 4008*6777b538SAndroid Build Coastguard Worker _annotation_processor_deps = invoker.annotation_processor_deps 4009*6777b538SAndroid Build Coastguard Worker } 4010*6777b538SAndroid Build Coastguard Worker 4011*6777b538SAndroid Build Coastguard Worker compile_java_helper(_header_target_name) { 4012*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, _compile_java_forward_variables) 4013*6777b538SAndroid Build Coastguard Worker use_turbine = true 4014*6777b538SAndroid Build Coastguard Worker output_jar_path = _final_ijar_path 4015*6777b538SAndroid Build Coastguard Worker generated_jar_path = _generated_jar_path 4016*6777b538SAndroid Build Coastguard Worker deps = _annotation_processor_deps 4017*6777b538SAndroid Build Coastguard Worker if (_kt_files != []) { 4018*6777b538SAndroid Build Coastguard Worker kotlin_jar_path = _kotlin_interface_jar_path 4019*6777b538SAndroid Build Coastguard Worker } 4020*6777b538SAndroid Build Coastguard Worker } 4021*6777b538SAndroid Build Coastguard Worker } 4022*6777b538SAndroid Build Coastguard Worker 4023*6777b538SAndroid Build Coastguard Worker _compile_java_target = "${_main_target_name}__compile_java" 4024*6777b538SAndroid Build Coastguard Worker compile_java_helper(_compile_java_target) { 4025*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, _compile_java_forward_variables) 4026*6777b538SAndroid Build Coastguard Worker output_jar_path = _javac_jar_path 4027*6777b538SAndroid Build Coastguard Worker if (!_skip_header_jar) { 4028*6777b538SAndroid Build Coastguard Worker deps = [ ":$_header_target_name" ] 4029*6777b538SAndroid Build Coastguard Worker header_jar_path = _final_ijar_path 4030*6777b538SAndroid Build Coastguard Worker generated_jar_path = _generated_jar_path 4031*6777b538SAndroid Build Coastguard Worker } 4032*6777b538SAndroid Build Coastguard Worker if (_kt_files != []) { 4033*6777b538SAndroid Build Coastguard Worker kotlin_jar_path = _kotlinc_jar_path 4034*6777b538SAndroid Build Coastguard Worker } 4035*6777b538SAndroid Build Coastguard Worker } 4036*6777b538SAndroid Build Coastguard Worker 4037*6777b538SAndroid Build Coastguard Worker if (_skip_header_jar) { 4038*6777b538SAndroid Build Coastguard Worker group(_header_target_name) { 4039*6777b538SAndroid Build Coastguard Worker public_deps = [ ":$_compile_java_target" ] 4040*6777b538SAndroid Build Coastguard Worker } 4041*6777b538SAndroid Build Coastguard Worker } 4042*6777b538SAndroid Build Coastguard Worker 4043*6777b538SAndroid Build Coastguard Worker if (_enable_errorprone) { 4044*6777b538SAndroid Build Coastguard Worker _compile_java_errorprone_target = "${_main_target_name}__errorprone" 4045*6777b538SAndroid Build Coastguard Worker compile_java_helper(_compile_java_errorprone_target) { 4046*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, _compile_java_forward_variables) 4047*6777b538SAndroid Build Coastguard Worker enable_errorprone = true 4048*6777b538SAndroid Build Coastguard Worker if (defined(invoker.errorprone_args)) { 4049*6777b538SAndroid Build Coastguard Worker if (!defined(javac_args)) { 4050*6777b538SAndroid Build Coastguard Worker javac_args = [] 4051*6777b538SAndroid Build Coastguard Worker } 4052*6777b538SAndroid Build Coastguard Worker javac_args += invoker.errorprone_args 4053*6777b538SAndroid Build Coastguard Worker } 4054*6777b538SAndroid Build Coastguard Worker if (_kt_files != []) { 4055*6777b538SAndroid Build Coastguard Worker kotlin_jar_path = _kotlinc_jar_path 4056*6777b538SAndroid Build Coastguard Worker } 4057*6777b538SAndroid Build Coastguard Worker if (!_skip_header_jar) { 4058*6777b538SAndroid Build Coastguard Worker deps = [ ":$_header_target_name" ] 4059*6777b538SAndroid Build Coastguard Worker header_jar_path = _final_ijar_path 4060*6777b538SAndroid Build Coastguard Worker generated_jar_path = _generated_jar_path 4061*6777b538SAndroid Build Coastguard Worker } 4062*6777b538SAndroid Build Coastguard Worker output_jar_path = "$target_out_dir/$target_name.errorprone.stamp" 4063*6777b538SAndroid Build Coastguard Worker } 4064*6777b538SAndroid Build Coastguard Worker _java_validate_deps += [ ":$_compile_java_errorprone_target" ] 4065*6777b538SAndroid Build Coastguard Worker } 4066*6777b538SAndroid Build Coastguard Worker } # _has_sources 4067*6777b538SAndroid Build Coastguard Worker 4068*6777b538SAndroid Build Coastguard Worker if (_is_prebuilt || _build_device_jar || _build_host_jar) { 4069*6777b538SAndroid Build Coastguard Worker if (_has_sources) { 4070*6777b538SAndroid Build Coastguard Worker _unprocessed_jar_deps = [ ":$_compile_java_target" ] 4071*6777b538SAndroid Build Coastguard Worker } else { 4072*6777b538SAndroid Build Coastguard Worker # jars might be generated by a dep. 4073*6777b538SAndroid Build Coastguard Worker _unprocessed_jar_deps = _non_java_deps 4074*6777b538SAndroid Build Coastguard Worker } 4075*6777b538SAndroid Build Coastguard Worker } 4076*6777b538SAndroid Build Coastguard Worker 4077*6777b538SAndroid Build Coastguard Worker if (defined(invoker.bytecode_rewriter_target)) { 4078*6777b538SAndroid Build Coastguard Worker assert(_build_host_jar || _build_device_jar, 4079*6777b538SAndroid Build Coastguard Worker "A host or device jar must be created to use bytecode rewriting") 4080*6777b538SAndroid Build Coastguard Worker 4081*6777b538SAndroid Build Coastguard Worker _rewritten_jar = "$target_out_dir/${target_name}_rewritten.jar" 4082*6777b538SAndroid Build Coastguard Worker _rewritten_jar_target_name = "${target_name}__rewritten" 4083*6777b538SAndroid Build Coastguard Worker _rewriter_path = root_build_dir + "/bin/helper/" + 4084*6777b538SAndroid Build Coastguard Worker get_label_info(invoker.bytecode_rewriter_target, "name") 4085*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(_build_config, root_build_dir) 4086*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_rewritten_jar_target_name) { 4087*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/bytecode_rewriter.py" 4088*6777b538SAndroid Build Coastguard Worker inputs = java_paths_for_inputs + [ 4089*6777b538SAndroid Build Coastguard Worker _rewriter_path, 4090*6777b538SAndroid Build Coastguard Worker _build_config, 4091*6777b538SAndroid Build Coastguard Worker _unprocessed_jar_path, 4092*6777b538SAndroid Build Coastguard Worker ] 4093*6777b538SAndroid Build Coastguard Worker outputs = [ _rewritten_jar ] 4094*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 4095*6777b538SAndroid Build Coastguard Worker args = [ 4096*6777b538SAndroid Build Coastguard Worker "--depfile", 4097*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 4098*6777b538SAndroid Build Coastguard Worker "--script", 4099*6777b538SAndroid Build Coastguard Worker rebase_path(_rewriter_path, root_build_dir), 4100*6777b538SAndroid Build Coastguard Worker "--classpath", 4101*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_build_config:deps_info:javac_full_classpath)", 4102*6777b538SAndroid Build Coastguard Worker "--classpath", 4103*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_build_config:android:sdk_jars)", 4104*6777b538SAndroid Build Coastguard Worker "--input-jar", 4105*6777b538SAndroid Build Coastguard Worker rebase_path(_unprocessed_jar_path, root_build_dir), 4106*6777b538SAndroid Build Coastguard Worker "--output-jar", 4107*6777b538SAndroid Build Coastguard Worker rebase_path(_rewritten_jar, root_build_dir), 4108*6777b538SAndroid Build Coastguard Worker ] 4109*6777b538SAndroid Build Coastguard Worker deps = _unprocessed_jar_deps + _javac_classpath_deps + 4110*6777b538SAndroid Build Coastguard Worker [ invoker.bytecode_rewriter_target ] 4111*6777b538SAndroid Build Coastguard Worker } 4112*6777b538SAndroid Build Coastguard Worker 4113*6777b538SAndroid Build Coastguard Worker _unprocessed_jar_deps = [] 4114*6777b538SAndroid Build Coastguard Worker _unprocessed_jar_deps = [ ":$_rewritten_jar_target_name" ] 4115*6777b538SAndroid Build Coastguard Worker _unprocessed_jar_path = _rewritten_jar 4116*6777b538SAndroid Build Coastguard Worker } 4117*6777b538SAndroid Build Coastguard Worker 4118*6777b538SAndroid Build Coastguard Worker if (_is_prebuilt) { 4119*6777b538SAndroid Build Coastguard Worker generate_interface_jar(_header_target_name) { 4120*6777b538SAndroid Build Coastguard Worker # Always used the unfiltered .jar to create the interface jar so that 4121*6777b538SAndroid Build Coastguard Worker # other targets will resolve filtered classes when depending on 4122*6777b538SAndroid Build Coastguard Worker # BuildConfig, NativeLibraries, etc. 4123*6777b538SAndroid Build Coastguard Worker input_jar = _unprocessed_jar_path 4124*6777b538SAndroid Build Coastguard Worker output_jar = _final_ijar_path 4125*6777b538SAndroid Build Coastguard Worker 4126*6777b538SAndroid Build Coastguard Worker # ijar needs only _unprocessed_jar_deps, but this also needs to export 4127*6777b538SAndroid Build Coastguard Worker # __header target from deps. 4128*6777b538SAndroid Build Coastguard Worker deps = _unprocessed_jar_deps + _java_header_deps 4129*6777b538SAndroid Build Coastguard Worker } 4130*6777b538SAndroid Build Coastguard Worker } 4131*6777b538SAndroid Build Coastguard Worker 4132*6777b538SAndroid Build Coastguard Worker if (_build_host_jar || _build_device_jar) { 4133*6777b538SAndroid Build Coastguard Worker _enable_bytecode_checks = 4134*6777b538SAndroid Build Coastguard Worker (!defined(invoker.enable_bytecode_checks) || 4135*6777b538SAndroid Build Coastguard Worker invoker.enable_bytecode_checks) && !_is_prebuilt && 4136*6777b538SAndroid Build Coastguard Worker android_static_analysis != "off" 4137*6777b538SAndroid Build Coastguard Worker if (_enable_bytecode_checks) { 4138*6777b538SAndroid Build Coastguard Worker _validate_target_name = "${target_name}__validate" 4139*6777b538SAndroid Build Coastguard Worker bytecode_processor(_validate_target_name) { 4140*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "missing_classes_allowlist" ]) 4141*6777b538SAndroid Build Coastguard Worker deps = _unprocessed_jar_deps + _javac_classpath_deps + 4142*6777b538SAndroid Build Coastguard Worker [ ":$_build_config_target_name" ] 4143*6777b538SAndroid Build Coastguard Worker data_deps = _java_validate_deps 4144*6777b538SAndroid Build Coastguard Worker if (defined(_compile_java_errorprone_target)) { 4145*6777b538SAndroid Build Coastguard Worker data_deps += [ ":$_compile_java_errorprone_target" ] 4146*6777b538SAndroid Build Coastguard Worker } 4147*6777b538SAndroid Build Coastguard Worker 4148*6777b538SAndroid Build Coastguard Worker include_android_sdk = _requires_android || _is_robolectric 4149*6777b538SAndroid Build Coastguard Worker target_label = 4150*6777b538SAndroid Build Coastguard Worker get_label_info(":${invoker.target_name}", "label_no_toolchain") 4151*6777b538SAndroid Build Coastguard Worker input_jar = _unprocessed_jar_path 4152*6777b538SAndroid Build Coastguard Worker build_config = _build_config 4153*6777b538SAndroid Build Coastguard Worker } 4154*6777b538SAndroid Build Coastguard Worker } else { 4155*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "missing_classes_allowlist" ]) 4156*6777b538SAndroid Build Coastguard Worker } 4157*6777b538SAndroid Build Coastguard Worker 4158*6777b538SAndroid Build Coastguard Worker if (_build_host_jar) { 4159*6777b538SAndroid Build Coastguard Worker _process_host_jar_target_name = "${target_name}__host" 4160*6777b538SAndroid Build Coastguard Worker process_java_library(_process_host_jar_target_name) { 4161*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 4162*6777b538SAndroid Build Coastguard Worker [ 4163*6777b538SAndroid Build Coastguard Worker "jar_excluded_patterns", 4164*6777b538SAndroid Build Coastguard Worker "jar_included_patterns", 4165*6777b538SAndroid Build Coastguard Worker ]) 4166*6777b538SAndroid Build Coastguard Worker 4167*6777b538SAndroid Build Coastguard Worker # Robolectric tests require these to be on swarming. 4168*6777b538SAndroid Build Coastguard Worker data = [ _host_processed_jar_path ] 4169*6777b538SAndroid Build Coastguard Worker input_jar_path = _unprocessed_jar_path 4170*6777b538SAndroid Build Coastguard Worker deps = _unprocessed_jar_deps + _javac_classpath_deps 4171*6777b538SAndroid Build Coastguard Worker output_jar_path = _host_processed_jar_path 4172*6777b538SAndroid Build Coastguard Worker jacoco_instrument = _jacoco_instrument 4173*6777b538SAndroid Build Coastguard Worker if (_jacoco_instrument) { 4174*6777b538SAndroid Build Coastguard Worker source_files = _source_files 4175*6777b538SAndroid Build Coastguard Worker target_sources_file = _target_sources_file 4176*6777b538SAndroid Build Coastguard Worker } 4177*6777b538SAndroid Build Coastguard Worker 4178*6777b538SAndroid Build Coastguard Worker # _java_host_deps isn't necessary for process_java_library(), but is 4179*6777b538SAndroid Build Coastguard Worker # necessary so that this target can be used to depend on transitive 4180*6777b538SAndroid Build Coastguard Worker # __device targets without the need to create a separate group() 4181*6777b538SAndroid Build Coastguard Worker # target. This trade-off works because process_java_library is fast. 4182*6777b538SAndroid Build Coastguard Worker deps += _java_host_deps 4183*6777b538SAndroid Build Coastguard Worker 4184*6777b538SAndroid Build Coastguard Worker # Add runtime_deps here since robolectric_binary does not depend on top-level group. 4185*6777b538SAndroid Build Coastguard Worker if (defined(invoker.data)) { 4186*6777b538SAndroid Build Coastguard Worker data += invoker.data 4187*6777b538SAndroid Build Coastguard Worker } 4188*6777b538SAndroid Build Coastguard Worker if (defined(invoker.data_deps)) { 4189*6777b538SAndroid Build Coastguard Worker data_deps = invoker.data_deps 4190*6777b538SAndroid Build Coastguard Worker } 4191*6777b538SAndroid Build Coastguard Worker } 4192*6777b538SAndroid Build Coastguard Worker } 4193*6777b538SAndroid Build Coastguard Worker 4194*6777b538SAndroid Build Coastguard Worker if (_build_device_jar) { 4195*6777b538SAndroid Build Coastguard Worker if (_process_device_jar) { 4196*6777b538SAndroid Build Coastguard Worker _process_device_jar_target_name = "${target_name}__process_device" 4197*6777b538SAndroid Build Coastguard Worker process_java_library(_process_device_jar_target_name) { 4198*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 4199*6777b538SAndroid Build Coastguard Worker [ 4200*6777b538SAndroid Build Coastguard Worker "jar_excluded_patterns", 4201*6777b538SAndroid Build Coastguard Worker "jar_included_patterns", 4202*6777b538SAndroid Build Coastguard Worker ]) 4203*6777b538SAndroid Build Coastguard Worker input_jar_path = _unprocessed_jar_path 4204*6777b538SAndroid Build Coastguard Worker 4205*6777b538SAndroid Build Coastguard Worker deps = _unprocessed_jar_deps + _javac_classpath_deps 4206*6777b538SAndroid Build Coastguard Worker output_jar_path = _device_processed_jar_path 4207*6777b538SAndroid Build Coastguard Worker jacoco_instrument = _jacoco_instrument 4208*6777b538SAndroid Build Coastguard Worker if (_jacoco_instrument) { 4209*6777b538SAndroid Build Coastguard Worker source_files = _source_files 4210*6777b538SAndroid Build Coastguard Worker target_sources_file = _target_sources_file 4211*6777b538SAndroid Build Coastguard Worker } 4212*6777b538SAndroid Build Coastguard Worker } 4213*6777b538SAndroid Build Coastguard Worker _process_device_jar_deps = [ ":${_process_device_jar_target_name}" ] 4214*6777b538SAndroid Build Coastguard Worker } else { 4215*6777b538SAndroid Build Coastguard Worker assert(_unprocessed_jar_path == _device_processed_jar_path) 4216*6777b538SAndroid Build Coastguard Worker _process_device_jar_deps = _unprocessed_jar_deps 4217*6777b538SAndroid Build Coastguard Worker } 4218*6777b538SAndroid Build Coastguard Worker 4219*6777b538SAndroid Build Coastguard Worker _dex_target_name = "${target_name}__dex" 4220*6777b538SAndroid Build Coastguard Worker dex(_dex_target_name) { 4221*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 4222*6777b538SAndroid Build Coastguard Worker [ 4223*6777b538SAndroid Build Coastguard Worker "proguard_enable_obfuscation", 4224*6777b538SAndroid Build Coastguard Worker "repackage_classes", 4225*6777b538SAndroid Build Coastguard Worker ]) 4226*6777b538SAndroid Build Coastguard Worker input_class_jars = [ _device_processed_jar_path ] 4227*6777b538SAndroid Build Coastguard Worker enable_desugar = _enable_desugar 4228*6777b538SAndroid Build Coastguard Worker ignore_desugar_missing_deps = !_enable_bytecode_checks 4229*6777b538SAndroid Build Coastguard Worker 4230*6777b538SAndroid Build Coastguard Worker # There's no value in per-class dexing prebuilts since they never 4231*6777b538SAndroid Build Coastguard Worker # change just one class at a time. 4232*6777b538SAndroid Build Coastguard Worker disable_incremental = _is_prebuilt 4233*6777b538SAndroid Build Coastguard Worker output = _dex_path 4234*6777b538SAndroid Build Coastguard Worker deps = _process_device_jar_deps 4235*6777b538SAndroid Build Coastguard Worker 4236*6777b538SAndroid Build Coastguard Worker if (enable_desugar) { 4237*6777b538SAndroid Build Coastguard Worker # Desugaring with D8 requires full classpath. 4238*6777b538SAndroid Build Coastguard Worker build_config = _build_config 4239*6777b538SAndroid Build Coastguard Worker unprocessed_jar_path = _unprocessed_jar_path 4240*6777b538SAndroid Build Coastguard Worker deps += _header_classpath_deps + _unprocessed_jar_deps 4241*6777b538SAndroid Build Coastguard Worker } 4242*6777b538SAndroid Build Coastguard Worker 4243*6777b538SAndroid Build Coastguard Worker is_library = true 4244*6777b538SAndroid Build Coastguard Worker 4245*6777b538SAndroid Build Coastguard Worker # proguard_configs listed on java_library targets need to be marked 4246*6777b538SAndroid Build Coastguard Worker # as inputs to at least one target so that "gn analyze" will know 4247*6777b538SAndroid Build Coastguard Worker # about them. Although this target doesn't use them, it's a convenient spot 4248*6777b538SAndroid Build Coastguard Worker # to list them. 4249*6777b538SAndroid Build Coastguard Worker # https://crbug.com/827197 4250*6777b538SAndroid Build Coastguard Worker if (compute_inputs_for_analyze && defined(invoker.proguard_configs)) { 4251*6777b538SAndroid Build Coastguard Worker inputs = invoker.proguard_configs 4252*6777b538SAndroid Build Coastguard Worker 4253*6777b538SAndroid Build Coastguard Worker # For the aapt-generated proguard rules. 4254*6777b538SAndroid Build Coastguard Worker deps += _non_java_deps + _srcjar_deps 4255*6777b538SAndroid Build Coastguard Worker } 4256*6777b538SAndroid Build Coastguard Worker } 4257*6777b538SAndroid Build Coastguard Worker } 4258*6777b538SAndroid Build Coastguard Worker } 4259*6777b538SAndroid Build Coastguard Worker 4260*6777b538SAndroid Build Coastguard Worker if (_is_java_binary) { 4261*6777b538SAndroid Build Coastguard Worker # Targets might use the generated script while building, so make it a dep 4262*6777b538SAndroid Build Coastguard Worker # rather than a data_dep. 4263*6777b538SAndroid Build Coastguard Worker _java_binary_script_target_name = "${target_name}__java_binary_script" 4264*6777b538SAndroid Build Coastguard Worker java_binary_script(_java_binary_script_target_name) { 4265*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 4266*6777b538SAndroid Build Coastguard Worker [ 4267*6777b538SAndroid Build Coastguard Worker "tiered_stop_at_level_one", 4268*6777b538SAndroid Build Coastguard Worker "main_class", 4269*6777b538SAndroid Build Coastguard Worker "max_heap_size", 4270*6777b538SAndroid Build Coastguard Worker "wrapper_script_args", 4271*6777b538SAndroid Build Coastguard Worker ]) 4272*6777b538SAndroid Build Coastguard Worker build_config = _build_config 4273*6777b538SAndroid Build Coastguard Worker script_name = _main_target_name 4274*6777b538SAndroid Build Coastguard Worker if (defined(invoker.wrapper_script_name)) { 4275*6777b538SAndroid Build Coastguard Worker script_name = invoker.wrapper_script_name 4276*6777b538SAndroid Build Coastguard Worker } 4277*6777b538SAndroid Build Coastguard Worker deps = [ ":$_build_config_target_name" ] 4278*6777b538SAndroid Build Coastguard Worker if (_is_robolectric) { 4279*6777b538SAndroid Build Coastguard Worker # For robolectric tests, we add the sdk stub jars so that classes 4280*6777b538SAndroid Build Coastguard Worker # that reference Android types can be loaded without throwing 4281*6777b538SAndroid Build Coastguard Worker # NoClassDefFoundErrors. The Robolectric sandbox makes these types 4282*6777b538SAndroid Build Coastguard Worker # available in non-stub form, but not until test classes are loaded 4283*6777b538SAndroid Build Coastguard Worker # into it. Before being loaded into the sandbox, they must be loaded 4284*6777b538SAndroid Build Coastguard Worker # outside of it in order to read their annotations (which configure 4285*6777b538SAndroid Build Coastguard Worker # the sandbox), and to enumerate test methods. 4286*6777b538SAndroid Build Coastguard Worker extra_classpath_jars = [ 4287*6777b538SAndroid Build Coastguard Worker android_sdk_jar, 4288*6777b538SAndroid Build Coastguard Worker "$android_sdk/optional/android.test.base.jar", 4289*6777b538SAndroid Build Coastguard Worker "$android_sdk/optional/android.test.runner.jar", 4290*6777b538SAndroid Build Coastguard Worker ] 4291*6777b538SAndroid Build Coastguard Worker } 4292*6777b538SAndroid Build Coastguard Worker } 4293*6777b538SAndroid Build Coastguard Worker } 4294*6777b538SAndroid Build Coastguard Worker 4295*6777b538SAndroid Build Coastguard Worker if (!defined(_validate_target_name)) { 4296*6777b538SAndroid Build Coastguard Worker _validate_target_name = "${target_name}__validate" 4297*6777b538SAndroid Build Coastguard Worker 4298*6777b538SAndroid Build Coastguard Worker # Allow other targets to depend on this __validate one. 4299*6777b538SAndroid Build Coastguard Worker group(_validate_target_name) { 4300*6777b538SAndroid Build Coastguard Worker deps = _java_validate_deps 4301*6777b538SAndroid Build Coastguard Worker } 4302*6777b538SAndroid Build Coastguard Worker } 4303*6777b538SAndroid Build Coastguard Worker 4304*6777b538SAndroid Build Coastguard Worker if (_supports_host && !defined(_process_host_jar_target_name)) { 4305*6777b538SAndroid Build Coastguard Worker group("${target_name}__host") { 4306*6777b538SAndroid Build Coastguard Worker deps = _java_host_deps 4307*6777b538SAndroid Build Coastguard Worker } 4308*6777b538SAndroid Build Coastguard Worker } 4309*6777b538SAndroid Build Coastguard Worker 4310*6777b538SAndroid Build Coastguard Worker # robolectric_library can depend on java_library, so java_library must 4311*6777b538SAndroid Build Coastguard Worker # define __assetres. 4312*6777b538SAndroid Build Coastguard Worker if ((_is_library || _supports_android || _is_robolectric) && 4313*6777b538SAndroid Build Coastguard Worker !defined(_fake_rjava_target)) { 4314*6777b538SAndroid Build Coastguard Worker group("${target_name}__assetres") { 4315*6777b538SAndroid Build Coastguard Worker if (_supports_android || _is_robolectric) { 4316*6777b538SAndroid Build Coastguard Worker deps = _java_assetres_deps 4317*6777b538SAndroid Build Coastguard Worker } 4318*6777b538SAndroid Build Coastguard Worker } 4319*6777b538SAndroid Build Coastguard Worker } 4320*6777b538SAndroid Build Coastguard Worker 4321*6777b538SAndroid Build Coastguard Worker # The top-level group is used: 4322*6777b538SAndroid Build Coastguard Worker # 1) To allow building the target explicitly via ninja, 4323*6777b538SAndroid Build Coastguard Worker # 2) To trigger all analysis deps, 4324*6777b538SAndroid Build Coastguard Worker # 3) By custom action() targets that want to use artifacts as inputs. 4325*6777b538SAndroid Build Coastguard Worker group(target_name) { 4326*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 4327*6777b538SAndroid Build Coastguard Worker [ 4328*6777b538SAndroid Build Coastguard Worker "assert_no_deps", 4329*6777b538SAndroid Build Coastguard Worker "data", 4330*6777b538SAndroid Build Coastguard Worker "data_deps", 4331*6777b538SAndroid Build Coastguard Worker "visibility", 4332*6777b538SAndroid Build Coastguard Worker ]) 4333*6777b538SAndroid Build Coastguard Worker if (_requires_android || (_supports_android && _is_library)) { 4334*6777b538SAndroid Build Coastguard Worker # For non-robolectric targets, depend on other java target's top-level 4335*6777b538SAndroid Build Coastguard Worker # groups so that the __dex step gets depended on. 4336*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 4337*6777b538SAndroid Build Coastguard Worker [ 4338*6777b538SAndroid Build Coastguard Worker "deps", 4339*6777b538SAndroid Build Coastguard Worker "public_deps", 4340*6777b538SAndroid Build Coastguard Worker ]) 4341*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 4342*6777b538SAndroid Build Coastguard Worker deps = [] 4343*6777b538SAndroid Build Coastguard Worker } 4344*6777b538SAndroid Build Coastguard Worker if (is_cronet_build) { 4345*6777b538SAndroid Build Coastguard Worker _abs_deps = [] 4346*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 4347*6777b538SAndroid Build Coastguard Worker foreach(dep, invoker.deps) { 4348*6777b538SAndroid Build Coastguard Worker _abs_deps += [ get_label_info(dep, "label_no_toolchain") ] 4349*6777b538SAndroid Build Coastguard Worker } 4350*6777b538SAndroid Build Coastguard Worker } 4351*6777b538SAndroid Build Coastguard Worker if (defined(invoker.public_deps)) { 4352*6777b538SAndroid Build Coastguard Worker foreach(dep, invoker.public_deps) { 4353*6777b538SAndroid Build Coastguard Worker _abs_deps += [ get_label_info(dep, "label_no_toolchain") ] 4354*6777b538SAndroid Build Coastguard Worker } 4355*6777b538SAndroid Build Coastguard Worker } 4356*6777b538SAndroid Build Coastguard Worker if (defined(invoker.srcjar_deps)) { 4357*6777b538SAndroid Build Coastguard Worker foreach(dep, invoker.srcjar_deps) { 4358*6777b538SAndroid Build Coastguard Worker _abs_deps += [ get_label_info(dep, "label_no_toolchain") ] 4359*6777b538SAndroid Build Coastguard Worker } 4360*6777b538SAndroid Build Coastguard Worker } 4361*6777b538SAndroid Build Coastguard Worker _abs_path_source_files = [] 4362*6777b538SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 4363*6777b538SAndroid Build Coastguard Worker foreach(source_file, invoker.sources) { 4364*6777b538SAndroid Build Coastguard Worker _abs_path_source_files += 4365*6777b538SAndroid Build Coastguard Worker [ get_path_info(source_file, "abspath") ] 4366*6777b538SAndroid Build Coastguard Worker } 4367*6777b538SAndroid Build Coastguard Worker } 4368*6777b538SAndroid Build Coastguard Worker _abs_jar_path = "" 4369*6777b538SAndroid Build Coastguard Worker if (defined(invoker.jar_path)) { 4370*6777b538SAndroid Build Coastguard Worker _abs_jar_path = get_path_info(invoker.jar_path, "abspath") 4371*6777b538SAndroid Build Coastguard Worker } 4372*6777b538SAndroid Build Coastguard Worker _sdk_version = "current" 4373*6777b538SAndroid Build Coastguard Worker if (defined(invoker.alternative_android_sdk_dep)) { 4374*6777b538SAndroid Build Coastguard Worker _sdk_version = "system_current" 4375*6777b538SAndroid Build Coastguard Worker } 4376*6777b538SAndroid Build Coastguard Worker 4377*6777b538SAndroid Build Coastguard Worker # See crbug/1449896 for more details about the metadata fields 4378*6777b538SAndroid Build Coastguard Worker # and why they are added. 4379*6777b538SAndroid Build Coastguard Worker metadata = { 4380*6777b538SAndroid Build Coastguard Worker jar_path = [ _abs_jar_path ] 4381*6777b538SAndroid Build Coastguard Worker source_files = _abs_path_source_files 4382*6777b538SAndroid Build Coastguard Worker all_deps = _abs_deps 4383*6777b538SAndroid Build Coastguard Worker target_type = [ _type ] 4384*6777b538SAndroid Build Coastguard Worker sdk_version = [ _sdk_version ] 4385*6777b538SAndroid Build Coastguard Worker } 4386*6777b538SAndroid Build Coastguard Worker } 4387*6777b538SAndroid Build Coastguard Worker if (!defined(public_deps)) { 4388*6777b538SAndroid Build Coastguard Worker public_deps = [] 4389*6777b538SAndroid Build Coastguard Worker } 4390*6777b538SAndroid Build Coastguard Worker } else { 4391*6777b538SAndroid Build Coastguard Worker # For robolectric targets, depend only on non-java deps and the specific 4392*6777b538SAndroid Build Coastguard Worker # subtargets below, which will not include __dex. 4393*6777b538SAndroid Build Coastguard Worker deps = _non_java_deps 4394*6777b538SAndroid Build Coastguard Worker public_deps = [] 4395*6777b538SAndroid Build Coastguard Worker if (defined(invoker.public_deps)) { 4396*6777b538SAndroid Build Coastguard Worker public_deps += 4397*6777b538SAndroid Build Coastguard Worker filter_exclude(invoker.public_deps, java_target_patterns) 4398*6777b538SAndroid Build Coastguard Worker } 4399*6777b538SAndroid Build Coastguard Worker } 4400*6777b538SAndroid Build Coastguard Worker if (defined(_jacoco_instrument) && _jacoco_instrument) { 4401*6777b538SAndroid Build Coastguard Worker deps += [ _jacoco_dep ] 4402*6777b538SAndroid Build Coastguard Worker } 4403*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apk_under_test)) { 4404*6777b538SAndroid Build Coastguard Worker deps += [ invoker.apk_under_test ] 4405*6777b538SAndroid Build Coastguard Worker } 4406*6777b538SAndroid Build Coastguard Worker if (defined(_process_device_jar_target_name)) { 4407*6777b538SAndroid Build Coastguard Worker public_deps += [ ":$_process_device_jar_target_name" ] 4408*6777b538SAndroid Build Coastguard Worker } 4409*6777b538SAndroid Build Coastguard Worker if (defined(_dex_target_name)) { 4410*6777b538SAndroid Build Coastguard Worker public_deps += [ ":$_dex_target_name" ] 4411*6777b538SAndroid Build Coastguard Worker } 4412*6777b538SAndroid Build Coastguard Worker if (_supports_android && _is_library) { 4413*6777b538SAndroid Build Coastguard Worker # Robolectric targets define __assetres, but there's no need to build it 4414*6777b538SAndroid Build Coastguard Worker # by default. 4415*6777b538SAndroid Build Coastguard Worker public_deps += [ ":${target_name}__assetres" ] 4416*6777b538SAndroid Build Coastguard Worker } 4417*6777b538SAndroid Build Coastguard Worker if (_supports_host) { 4418*6777b538SAndroid Build Coastguard Worker # android_* targets define __host, but there's no need to build it by 4419*6777b538SAndroid Build Coastguard Worker # default. 4420*6777b538SAndroid Build Coastguard Worker public_deps += [ ":${target_name}__host" ] 4421*6777b538SAndroid Build Coastguard Worker } 4422*6777b538SAndroid Build Coastguard Worker if (_is_java_binary) { 4423*6777b538SAndroid Build Coastguard Worker public_deps += [ ":$_java_binary_script_target_name" ] 4424*6777b538SAndroid Build Coastguard Worker } 4425*6777b538SAndroid Build Coastguard Worker if (!defined(data_deps)) { 4426*6777b538SAndroid Build Coastguard Worker data_deps = [] 4427*6777b538SAndroid Build Coastguard Worker } 4428*6777b538SAndroid Build Coastguard Worker if (defined(_validate_target_name)) { 4429*6777b538SAndroid Build Coastguard Worker data_deps += [ ":$_validate_target_name" ] 4430*6777b538SAndroid Build Coastguard Worker } else { 4431*6777b538SAndroid Build Coastguard Worker data_deps += _java_validate_deps 4432*6777b538SAndroid Build Coastguard Worker } 4433*6777b538SAndroid Build Coastguard Worker } 4434*6777b538SAndroid Build Coastguard Worker } 4435*6777b538SAndroid Build Coastguard Worker} 4436*6777b538SAndroid Build Coastguard Worker 4437*6777b538SAndroid Build Coastguard Worker# Create a zip archive corresponding to an application bundle module. 4438*6777b538SAndroid Build Coastguard Worker# 4439*6777b538SAndroid Build Coastguard Worker# Compile all the components of a given android_apk_or_module() target into a 4440*6777b538SAndroid Build Coastguard Worker# zip archive suitable to later create an android_app_bundle() target. This 4441*6777b538SAndroid Build Coastguard Worker# archive's format is very similar to that on an APK, except for a few 4442*6777b538SAndroid Build Coastguard Worker# differences in internal directory layouts, and the fact that resources, as 4443*6777b538SAndroid Build Coastguard Worker# well as xml files, are compiled using a protocol-buffer based format (instead 4444*6777b538SAndroid Build Coastguard Worker# of the regular binary xml + resources.arsc). 4445*6777b538SAndroid Build Coastguard Worker# 4446*6777b538SAndroid Build Coastguard Worker# A final application bundle is built from one or more module bundle modules, 4447*6777b538SAndroid Build Coastguard Worker# plus some configuration file. 4448*6777b538SAndroid Build Coastguard Worker# 4449*6777b538SAndroid Build Coastguard Worker# Variables: 4450*6777b538SAndroid Build Coastguard Worker# module_zip_path: Output module path. 4451*6777b538SAndroid Build Coastguard Worker# build_config: Path to build_config of the android_apk_or_module() target. 4452*6777b538SAndroid Build Coastguard Worker# dex_path: If module is proguarded separately from the base module, dex_path 4453*6777b538SAndroid Build Coastguard Worker# is the path to its dex file and is passed directly to the creation script. 4454*6777b538SAndroid Build Coastguard Worker# Otherwise, dex_path is undefined and we retrieve the module's dex file 4455*6777b538SAndroid Build Coastguard Worker# using its build_config. 4456*6777b538SAndroid Build Coastguard Worker# expected_libs_and_assets: Verify the list of included native libraries 4457*6777b538SAndroid Build Coastguard Worker# and assets is consistent with the given expectation file. 4458*6777b538SAndroid Build Coastguard Worker# expected_libs_and_assets_base: Treat expected_libs_and_assets as a diff 4459*6777b538SAndroid Build Coastguard Worker# with this file as the base. 4460*6777b538SAndroid Build Coastguard Worker# is_multi_abi: If true will add a library placeholder for the missing ABI if 4461*6777b538SAndroid Build Coastguard Worker# either the primary or the secondary ABI has no native libraries set. 4462*6777b538SAndroid Build Coastguard Worker# module_name: The module's name. 4463*6777b538SAndroid Build Coastguard Worker# native_libraries_config: Path to file listing native libraries to be 4464*6777b538SAndroid Build Coastguard Worker# packaged into each module. 4465*6777b538SAndroid Build Coastguard Worker# proguard_enabled: Optional. True if proguarding is enabled for this 4466*6777b538SAndroid Build Coastguard Worker# bundle. Default is to enable this only for release builds. Note that 4467*6777b538SAndroid Build Coastguard Worker# this will always perform synchronized proguarding. 4468*6777b538SAndroid Build Coastguard Workertemplate("create_android_app_bundle_module") { 4469*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) 4470*6777b538SAndroid Build Coastguard Worker 4471*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 4472*6777b538SAndroid Build Coastguard Worker _deps = invoker.deps 4473*6777b538SAndroid Build Coastguard Worker _script = "//build/android/gyp/apkbuilder.py" 4474*6777b538SAndroid Build Coastguard Worker 4475*6777b538SAndroid Build Coastguard Worker # NOTE: Compared to the inputs of the "package_apk" template action, 4476*6777b538SAndroid Build Coastguard Worker # this list is much smaller, since finalize_apk is never called 4477*6777b538SAndroid Build Coastguard Worker # by apkbuild.py --format=bundle-module. This means not using 4478*6777b538SAndroid Build Coastguard Worker # apksigner and zipalign as well, nor the keystore. Other 4479*6777b538SAndroid Build Coastguard Worker # dependencies like extra native libraries are all pulled from the 4480*6777b538SAndroid Build Coastguard Worker # .build_config.json through @FileArg() references (see below) and 4481*6777b538SAndroid Build Coastguard Worker # will be listed in the generated depfile instead. 4482*6777b538SAndroid Build Coastguard Worker _inputs = [ invoker.build_config ] 4483*6777b538SAndroid Build Coastguard Worker _outputs = [ invoker.module_zip_path ] 4484*6777b538SAndroid Build Coastguard Worker _args = [ 4485*6777b538SAndroid Build Coastguard Worker "--format=bundle-module", 4486*6777b538SAndroid Build Coastguard Worker "--output-apk", 4487*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.module_zip_path, root_build_dir), 4488*6777b538SAndroid Build Coastguard Worker "--resource-apk=@FileArg(" + 4489*6777b538SAndroid Build Coastguard Worker "$_rebased_build_config:deps_info:proto_resources_path)", 4490*6777b538SAndroid Build Coastguard Worker "--assets=@FileArg($_rebased_build_config:assets)", 4491*6777b538SAndroid Build Coastguard Worker "--uncompressed-assets=@FileArg(" + 4492*6777b538SAndroid Build Coastguard Worker "$_rebased_build_config:uncompressed_assets)", 4493*6777b538SAndroid Build Coastguard Worker "--native-libs=@FileArg($_rebased_build_config:native:libraries)", 4494*6777b538SAndroid Build Coastguard Worker "--native-libs=@FileArg($_rebased_build_config:native:loadable_modules)", 4495*6777b538SAndroid Build Coastguard Worker "--native-lib-placeholders=@FileArg($_rebased_build_config" + 4496*6777b538SAndroid Build Coastguard Worker ":native:native_library_placeholders)", 4497*6777b538SAndroid Build Coastguard Worker "--secondary-native-lib-placeholders=@FileArg($_rebased_build_config" + 4498*6777b538SAndroid Build Coastguard Worker ":native:secondary_native_library_placeholders)", 4499*6777b538SAndroid Build Coastguard Worker "--android-abi=$android_app_abi", 4500*6777b538SAndroid Build Coastguard Worker "--min-sdk-version=${invoker.min_sdk_version}", 4501*6777b538SAndroid Build Coastguard Worker "--library-always-compress=@FileArg($_rebased_build_config:native:library_always_compress)", 4502*6777b538SAndroid Build Coastguard Worker ] 4503*6777b538SAndroid Build Coastguard Worker if (defined(android_app_secondary_abi)) { 4504*6777b538SAndroid Build Coastguard Worker _args += [ 4505*6777b538SAndroid Build Coastguard Worker "--secondary-native-libs=@FileArg(" + 4506*6777b538SAndroid Build Coastguard Worker "$_rebased_build_config:native:secondary_abi_libraries)", 4507*6777b538SAndroid Build Coastguard Worker "--secondary-native-libs=@FileArg(" + 4508*6777b538SAndroid Build Coastguard Worker "$_rebased_build_config:native:secondary_abi_loadable_modules)", 4509*6777b538SAndroid Build Coastguard Worker "--secondary-android-abi=$android_app_secondary_abi", 4510*6777b538SAndroid Build Coastguard Worker ] 4511*6777b538SAndroid Build Coastguard Worker } 4512*6777b538SAndroid Build Coastguard Worker if (defined(invoker.is_multi_abi) && invoker.is_multi_abi) { 4513*6777b538SAndroid Build Coastguard Worker _args += [ "--is-multi-abi" ] 4514*6777b538SAndroid Build Coastguard Worker } 4515*6777b538SAndroid Build Coastguard Worker if (defined(invoker.uncompress_dex) && invoker.uncompress_dex) { 4516*6777b538SAndroid Build Coastguard Worker _args += [ "--uncompress-dex" ] 4517*6777b538SAndroid Build Coastguard Worker } 4518*6777b538SAndroid Build Coastguard Worker if (defined(invoker.extra_assets)) { 4519*6777b538SAndroid Build Coastguard Worker _args += [ "--assets=${invoker.extra_assets}" ] 4520*6777b538SAndroid Build Coastguard Worker } 4521*6777b538SAndroid Build Coastguard Worker 4522*6777b538SAndroid Build Coastguard Worker # Use either provided dex path or build config path based on type of module. 4523*6777b538SAndroid Build Coastguard Worker if (defined(invoker.dex_path)) { 4524*6777b538SAndroid Build Coastguard Worker _inputs += [ invoker.dex_path ] 4525*6777b538SAndroid Build Coastguard Worker _rebased_dex_path = rebase_path(invoker.dex_path, root_build_dir) 4526*6777b538SAndroid Build Coastguard Worker _args += [ "--dex-file=$_rebased_dex_path" ] 4527*6777b538SAndroid Build Coastguard Worker } else { 4528*6777b538SAndroid Build Coastguard Worker _args += [ "--dex-file=@FileArg($_rebased_build_config:final_dex:path)" ] 4529*6777b538SAndroid Build Coastguard Worker } 4530*6777b538SAndroid Build Coastguard Worker 4531*6777b538SAndroid Build Coastguard Worker if (treat_warnings_as_errors) { 4532*6777b538SAndroid Build Coastguard Worker _args += [ "--warnings-as-errors" ] 4533*6777b538SAndroid Build Coastguard Worker } 4534*6777b538SAndroid Build Coastguard Worker 4535*6777b538SAndroid Build Coastguard Worker if (defined(invoker.expected_libs_and_assets)) { 4536*6777b538SAndroid Build Coastguard Worker _expectations_target = "${invoker.top_target_name}_validate_libs_and_assets" 4537*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_expectations_target) { 4538*6777b538SAndroid Build Coastguard Worker _actual_file = "$target_gen_dir/$target_name.libs_and_assets" 4539*6777b538SAndroid Build Coastguard Worker _failure_file = "$expectations_failure_dir/" + 4540*6777b538SAndroid Build Coastguard Worker string_replace(invoker.expected_libs_and_assets, "/", "_") 4541*6777b538SAndroid Build Coastguard Worker inputs = [ 4542*6777b538SAndroid Build Coastguard Worker invoker.expected_libs_and_assets, 4543*6777b538SAndroid Build Coastguard Worker invoker.build_config, 4544*6777b538SAndroid Build Coastguard Worker ] 4545*6777b538SAndroid Build Coastguard Worker deps = [ invoker.build_config_target ] 4546*6777b538SAndroid Build Coastguard Worker outputs = [ 4547*6777b538SAndroid Build Coastguard Worker _actual_file, 4548*6777b538SAndroid Build Coastguard Worker _failure_file, 4549*6777b538SAndroid Build Coastguard Worker ] 4550*6777b538SAndroid Build Coastguard Worker script = _script 4551*6777b538SAndroid Build Coastguard Worker args = _args + [ 4552*6777b538SAndroid Build Coastguard Worker "--expected-file", 4553*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.expected_libs_and_assets, root_build_dir), 4554*6777b538SAndroid Build Coastguard Worker "--actual-file", 4555*6777b538SAndroid Build Coastguard Worker rebase_path(_actual_file, root_build_dir), 4556*6777b538SAndroid Build Coastguard Worker "--failure-file", 4557*6777b538SAndroid Build Coastguard Worker rebase_path(_failure_file, root_build_dir), 4558*6777b538SAndroid Build Coastguard Worker "--only-verify-expectations", 4559*6777b538SAndroid Build Coastguard Worker ] 4560*6777b538SAndroid Build Coastguard Worker if (defined(invoker.expected_libs_and_assets_base)) { 4561*6777b538SAndroid Build Coastguard Worker inputs += [ invoker.expected_libs_and_assets_base ] 4562*6777b538SAndroid Build Coastguard Worker args += [ 4563*6777b538SAndroid Build Coastguard Worker "--expected-file-base", 4564*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.expected_libs_and_assets_base, root_build_dir), 4565*6777b538SAndroid Build Coastguard Worker ] 4566*6777b538SAndroid Build Coastguard Worker } 4567*6777b538SAndroid Build Coastguard Worker if (fail_on_android_expectations) { 4568*6777b538SAndroid Build Coastguard Worker args += [ "--fail-on-expectations" ] 4569*6777b538SAndroid Build Coastguard Worker } 4570*6777b538SAndroid Build Coastguard Worker } 4571*6777b538SAndroid Build Coastguard Worker _deps += [ ":$_expectations_target" ] 4572*6777b538SAndroid Build Coastguard Worker } 4573*6777b538SAndroid Build Coastguard Worker 4574*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 4575*6777b538SAndroid Build Coastguard Worker deps = _deps 4576*6777b538SAndroid Build Coastguard Worker inputs = _inputs 4577*6777b538SAndroid Build Coastguard Worker outputs = _outputs 4578*6777b538SAndroid Build Coastguard Worker script = _script 4579*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 4580*6777b538SAndroid Build Coastguard Worker args = _args + [ 4581*6777b538SAndroid Build Coastguard Worker "--depfile", 4582*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 4583*6777b538SAndroid Build Coastguard Worker ] 4584*6777b538SAndroid Build Coastguard Worker } 4585*6777b538SAndroid Build Coastguard Worker} 4586