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 Workerimport("//build_overrides/build.gni") 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Workerassert( 8*6777b538SAndroid Build Coastguard Worker is_android || is_robolectric, 9*6777b538SAndroid Build Coastguard Worker "current_toolchain=$current_toolchain default_toolchain=$default_toolchain") 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Workerif (is_robolectric) { 12*6777b538SAndroid Build Coastguard Worker template("create_native_executable_dist") { 13*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "*" ]) 14*6777b538SAndroid Build Coastguard Worker } 15*6777b538SAndroid Build Coastguard Worker} else if (enable_java_templates) { 16*6777b538SAndroid Build Coastguard Worker import("//build/config/android/abi.gni") 17*6777b538SAndroid Build Coastguard Worker import("//build/config/android/config.gni") 18*6777b538SAndroid Build Coastguard Worker import("//build/config/android/copy_ex.gni") 19*6777b538SAndroid Build Coastguard Worker import("//build/config/android/internal_rules.gni") 20*6777b538SAndroid Build Coastguard Worker import("//build/config/clang/clang.gni") 21*6777b538SAndroid Build Coastguard Worker import("//build/config/compiler/compiler.gni") 22*6777b538SAndroid Build Coastguard Worker import("//build/config/coverage/coverage.gni") 23*6777b538SAndroid Build Coastguard Worker import("//build/config/profiling/profiling.gni") 24*6777b538SAndroid Build Coastguard Worker import("//build/config/python.gni") 25*6777b538SAndroid Build Coastguard Worker import("//build/config/sanitizers/sanitizers.gni") 26*6777b538SAndroid Build Coastguard Worker import("//build/config/zip.gni") 27*6777b538SAndroid Build Coastguard Worker import("//build/toolchain/toolchain.gni") 28*6777b538SAndroid Build Coastguard Worker 29*6777b538SAndroid Build Coastguard Worker _BUNDLETOOL_JAR_PATH = 30*6777b538SAndroid Build Coastguard Worker "//third_party/android_build_tools/bundletool/bundletool.jar" 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker _sanitizer_runtimes = [] 33*6777b538SAndroid Build Coastguard Worker if (use_cfi_diag || is_ubsan || is_ubsan_security || is_ubsan_vptr) { 34*6777b538SAndroid Build Coastguard Worker _sanitizer_runtimes += [ "$clang_base_path/lib/clang/$clang_version/lib/linux/libclang_rt.ubsan_standalone-$sanitizer_arch-android.so" ] 35*6777b538SAndroid Build Coastguard Worker } 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker # Creates a dist directory for a native executable. 38*6777b538SAndroid Build Coastguard Worker # 39*6777b538SAndroid Build Coastguard Worker # Running a native executable on a device requires all the shared library 40*6777b538SAndroid Build Coastguard Worker # dependencies of that executable. To make it easier to install and run such an 41*6777b538SAndroid Build Coastguard Worker # executable, this will create a directory containing the native exe and all 42*6777b538SAndroid Build Coastguard Worker # it's library dependencies. 43*6777b538SAndroid Build Coastguard Worker # 44*6777b538SAndroid Build Coastguard Worker # Note: It's usually better to package things as an APK than as a native 45*6777b538SAndroid Build Coastguard Worker # executable. 46*6777b538SAndroid Build Coastguard Worker # 47*6777b538SAndroid Build Coastguard Worker # Variables 48*6777b538SAndroid Build Coastguard Worker # dist_dir: Directory for the exe and libraries. Everything in this directory 49*6777b538SAndroid Build Coastguard Worker # will be deleted before copying in the exe and libraries. 50*6777b538SAndroid Build Coastguard Worker # binary: Path to (stripped) executable. 51*6777b538SAndroid Build Coastguard Worker # extra_files: List of extra files to copy in (optional). 52*6777b538SAndroid Build Coastguard Worker # 53*6777b538SAndroid Build Coastguard Worker # Example 54*6777b538SAndroid Build Coastguard Worker # create_native_executable_dist("foo_dist") { 55*6777b538SAndroid Build Coastguard Worker # dist_dir = "$root_build_dir/foo_dist" 56*6777b538SAndroid Build Coastguard Worker # binary = "$root_build_dir/foo" 57*6777b538SAndroid Build Coastguard Worker # deps = [ ":the_thing_that_makes_foo" ] 58*6777b538SAndroid Build Coastguard Worker # } 59*6777b538SAndroid Build Coastguard Worker template("create_native_executable_dist") { 60*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Worker _libraries_list = 63*6777b538SAndroid Build Coastguard Worker "${target_gen_dir}/${target_name}_library_dependencies.list" 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Worker _sanitizer_runtimes_target_name = "${target_name}__sanitizer_runtimes" 66*6777b538SAndroid Build Coastguard Worker group(_sanitizer_runtimes_target_name) { 67*6777b538SAndroid Build Coastguard Worker metadata = { 68*6777b538SAndroid Build Coastguard Worker shared_libraries = _sanitizer_runtimes 69*6777b538SAndroid Build Coastguard Worker } 70*6777b538SAndroid Build Coastguard Worker } 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Worker generated_file("${target_name}__library_list") { 73*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "deps" ]) 74*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 75*6777b538SAndroid Build Coastguard Worker deps = [] 76*6777b538SAndroid Build Coastguard Worker } 77*6777b538SAndroid Build Coastguard Worker deps += [ ":${_sanitizer_runtimes_target_name}" ] 78*6777b538SAndroid Build Coastguard Worker output_conversion = "json" 79*6777b538SAndroid Build Coastguard Worker outputs = [ _libraries_list ] 80*6777b538SAndroid Build Coastguard Worker data_keys = [ "shared_libraries" ] 81*6777b538SAndroid Build Coastguard Worker walk_keys = [ "shared_libraries_barrier" ] 82*6777b538SAndroid Build Coastguard Worker rebase = root_build_dir 83*6777b538SAndroid Build Coastguard Worker } 84*6777b538SAndroid Build Coastguard Worker 85*6777b538SAndroid Build Coastguard Worker copy_ex(target_name) { 86*6777b538SAndroid Build Coastguard Worker inputs = [ 87*6777b538SAndroid Build Coastguard Worker _libraries_list, 88*6777b538SAndroid Build Coastguard Worker invoker.binary, 89*6777b538SAndroid Build Coastguard Worker ] 90*6777b538SAndroid Build Coastguard Worker 91*6777b538SAndroid Build Coastguard Worker dest = invoker.dist_dir 92*6777b538SAndroid Build Coastguard Worker data = [ "${invoker.dist_dir}/" ] 93*6777b538SAndroid Build Coastguard Worker 94*6777b538SAndroid Build Coastguard Worker _rebased_libraries_list = rebase_path(_libraries_list, root_build_dir) 95*6777b538SAndroid Build Coastguard Worker _rebased_binaries_list = rebase_path([ invoker.binary ], root_build_dir) 96*6777b538SAndroid Build Coastguard Worker args = [ 97*6777b538SAndroid Build Coastguard Worker "--clear", 98*6777b538SAndroid Build Coastguard Worker "--files=@FileArg($_rebased_libraries_list)", 99*6777b538SAndroid Build Coastguard Worker "--files=$_rebased_binaries_list", 100*6777b538SAndroid Build Coastguard Worker ] 101*6777b538SAndroid Build Coastguard Worker if (defined(invoker.extra_files)) { 102*6777b538SAndroid Build Coastguard Worker _rebased_extra_files = rebase_path(invoker.extra_files, root_build_dir) 103*6777b538SAndroid Build Coastguard Worker args += [ "--files=$_rebased_extra_files" ] 104*6777b538SAndroid Build Coastguard Worker } 105*6777b538SAndroid Build Coastguard Worker 106*6777b538SAndroid Build Coastguard Worker _depfile = "$target_gen_dir/$target_name.d" 107*6777b538SAndroid Build Coastguard Worker _stamp_file = "$target_gen_dir/$target_name.stamp" 108*6777b538SAndroid Build Coastguard Worker outputs = [ _stamp_file ] 109*6777b538SAndroid Build Coastguard Worker args += [ 110*6777b538SAndroid Build Coastguard Worker "--depfile", 111*6777b538SAndroid Build Coastguard Worker rebase_path(_depfile, root_build_dir), 112*6777b538SAndroid Build Coastguard Worker "--stamp", 113*6777b538SAndroid Build Coastguard Worker rebase_path(_stamp_file, root_build_dir), 114*6777b538SAndroid Build Coastguard Worker ] 115*6777b538SAndroid Build Coastguard Worker 116*6777b538SAndroid Build Coastguard Worker deps = [ ":${target_name}__library_list" ] 117*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 118*6777b538SAndroid Build Coastguard Worker deps += invoker.deps 119*6777b538SAndroid Build Coastguard Worker } 120*6777b538SAndroid Build Coastguard Worker } 121*6777b538SAndroid Build Coastguard Worker } 122*6777b538SAndroid Build Coastguard Worker 123*6777b538SAndroid Build Coastguard Worker # Declare a target for c-preprocessor-generated java files 124*6777b538SAndroid Build Coastguard Worker # 125*6777b538SAndroid Build Coastguard Worker # NOTE: For generating Java conterparts to enums prefer using the java_cpp_enum 126*6777b538SAndroid Build Coastguard Worker # rule instead. 127*6777b538SAndroid Build Coastguard Worker # 128*6777b538SAndroid Build Coastguard Worker # This target generates java files using the host C pre-processor. Each file in 129*6777b538SAndroid Build Coastguard Worker # sources will be compiled using the C pre-processor. If include_path is 130*6777b538SAndroid Build Coastguard Worker # specified, it will be passed (with --I) to the pre-processor. 131*6777b538SAndroid Build Coastguard Worker # 132*6777b538SAndroid Build Coastguard Worker # This target will create a single .srcjar. Adding this target to an 133*6777b538SAndroid Build Coastguard Worker # android_library target's srcjar_deps will make the generated java files be 134*6777b538SAndroid Build Coastguard Worker # included in that library's final outputs. 135*6777b538SAndroid Build Coastguard Worker # 136*6777b538SAndroid Build Coastguard Worker # Variables 137*6777b538SAndroid Build Coastguard Worker # sources: list of files to be processed by the C pre-processor. For each 138*6777b538SAndroid Build Coastguard Worker # file in sources, there will be one .java file in the final .srcjar. For a 139*6777b538SAndroid Build Coastguard Worker # file named FooBar.template, a java file will be created with name 140*6777b538SAndroid Build Coastguard Worker # FooBar.java. 141*6777b538SAndroid Build Coastguard Worker # inputs: additional compile-time dependencies. Any files 142*6777b538SAndroid Build Coastguard Worker # `#include`-ed in the templates should be listed here. 143*6777b538SAndroid Build Coastguard Worker # defines: List of -D arguments for the preprocessor. 144*6777b538SAndroid Build Coastguard Worker # 145*6777b538SAndroid Build Coastguard Worker # Example 146*6777b538SAndroid Build Coastguard Worker # java_cpp_template("foo_generated_enum") { 147*6777b538SAndroid Build Coastguard Worker # sources = [ 148*6777b538SAndroid Build Coastguard Worker # "android/java/templates/Foo.template", 149*6777b538SAndroid Build Coastguard Worker # ] 150*6777b538SAndroid Build Coastguard Worker # inputs = [ 151*6777b538SAndroid Build Coastguard Worker # "android/java/templates/native_foo_header.h", 152*6777b538SAndroid Build Coastguard Worker # ] 153*6777b538SAndroid Build Coastguard Worker # } 154*6777b538SAndroid Build Coastguard Worker template("java_cpp_template") { 155*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 156*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 157*6777b538SAndroid Build Coastguard Worker [ 158*6777b538SAndroid Build Coastguard Worker "data_deps", 159*6777b538SAndroid Build Coastguard Worker "deps", 160*6777b538SAndroid Build Coastguard Worker "inputs", 161*6777b538SAndroid Build Coastguard Worker "public_deps", 162*6777b538SAndroid Build Coastguard Worker "sources", 163*6777b538SAndroid Build Coastguard Worker "testonly", 164*6777b538SAndroid Build Coastguard Worker "visibility", 165*6777b538SAndroid Build Coastguard Worker ]) 166*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/gcc_preprocess.py" 167*6777b538SAndroid Build Coastguard Worker outputs = [ "$target_gen_dir/$target_name.srcjar" ] 168*6777b538SAndroid Build Coastguard Worker 169*6777b538SAndroid Build Coastguard Worker _include_dirs = [ 170*6777b538SAndroid Build Coastguard Worker "//", 171*6777b538SAndroid Build Coastguard Worker root_gen_dir, 172*6777b538SAndroid Build Coastguard Worker ] 173*6777b538SAndroid Build Coastguard Worker _rebased_include_dirs = rebase_path(_include_dirs, root_build_dir) 174*6777b538SAndroid Build Coastguard Worker args = [ 175*6777b538SAndroid Build Coastguard Worker "--include-dirs=$_rebased_include_dirs", 176*6777b538SAndroid Build Coastguard Worker "--output", 177*6777b538SAndroid Build Coastguard Worker rebase_path(outputs[0], root_build_dir), 178*6777b538SAndroid Build Coastguard Worker ] 179*6777b538SAndroid Build Coastguard Worker if (defined(invoker.defines)) { 180*6777b538SAndroid Build Coastguard Worker foreach(_define, invoker.defines) { 181*6777b538SAndroid Build Coastguard Worker args += [ 182*6777b538SAndroid Build Coastguard Worker "--define", 183*6777b538SAndroid Build Coastguard Worker _define, 184*6777b538SAndroid Build Coastguard Worker ] 185*6777b538SAndroid Build Coastguard Worker } 186*6777b538SAndroid Build Coastguard Worker } 187*6777b538SAndroid Build Coastguard Worker args += rebase_path(sources, root_build_dir) 188*6777b538SAndroid Build Coastguard Worker } 189*6777b538SAndroid Build Coastguard Worker } 190*6777b538SAndroid Build Coastguard Worker 191*6777b538SAndroid Build Coastguard Worker # Declare a target for generating Java classes from C++ enums. 192*6777b538SAndroid Build Coastguard Worker # 193*6777b538SAndroid Build Coastguard Worker # This target generates Java files from C++ enums using a script. 194*6777b538SAndroid Build Coastguard Worker # 195*6777b538SAndroid Build Coastguard Worker # This target will create a single .srcjar. Adding this target to an 196*6777b538SAndroid Build Coastguard Worker # android_library target's srcjar_deps will make the generated java files be 197*6777b538SAndroid Build Coastguard Worker # included in that library's final outputs. 198*6777b538SAndroid Build Coastguard Worker # 199*6777b538SAndroid Build Coastguard Worker # Variables 200*6777b538SAndroid Build Coastguard Worker # sources: list of files to be processed by the script. For each annotated 201*6777b538SAndroid Build Coastguard Worker # enum contained in the sources files the script will generate a .java 202*6777b538SAndroid Build Coastguard Worker # file with the same name as the name of the enum. 203*6777b538SAndroid Build Coastguard Worker # 204*6777b538SAndroid Build Coastguard Worker # Example 205*6777b538SAndroid Build Coastguard Worker # java_cpp_enum("foo_generated_enum") { 206*6777b538SAndroid Build Coastguard Worker # sources = [ 207*6777b538SAndroid Build Coastguard Worker # "src/native_foo_header.h", 208*6777b538SAndroid Build Coastguard Worker # ] 209*6777b538SAndroid Build Coastguard Worker # } 210*6777b538SAndroid Build Coastguard Worker template("java_cpp_enum") { 211*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 212*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "sources" ]) 213*6777b538SAndroid Build Coastguard Worker 214*6777b538SAndroid Build Coastguard Worker # The sources aren't compiled so don't check their dependencies. 215*6777b538SAndroid Build Coastguard Worker check_includes = false 216*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/java_cpp_enum.py" 217*6777b538SAndroid Build Coastguard Worker 218*6777b538SAndroid Build Coastguard Worker _srcjar_path = "${target_gen_dir}/${target_name}.srcjar" 219*6777b538SAndroid Build Coastguard Worker _rebased_srcjar_path = rebase_path(_srcjar_path, root_build_dir) 220*6777b538SAndroid Build Coastguard Worker _rebased_sources = rebase_path(invoker.sources, root_build_dir) 221*6777b538SAndroid Build Coastguard Worker 222*6777b538SAndroid Build Coastguard Worker args = [ "--srcjar=$_rebased_srcjar_path" ] + _rebased_sources 223*6777b538SAndroid Build Coastguard Worker outputs = [ _srcjar_path ] 224*6777b538SAndroid Build Coastguard Worker } 225*6777b538SAndroid Build Coastguard Worker } 226*6777b538SAndroid Build Coastguard Worker 227*6777b538SAndroid Build Coastguard Worker # Declare a target for generating Java classes with string constants matching 228*6777b538SAndroid Build Coastguard Worker # those found in C++ files using a python script. 229*6777b538SAndroid Build Coastguard Worker # 230*6777b538SAndroid Build Coastguard Worker # This target will create a single .srcjar. Adding this target to an 231*6777b538SAndroid Build Coastguard Worker # android_library target's srcjar_deps will make the generated java files be 232*6777b538SAndroid Build Coastguard Worker # included in that library's final outputs. 233*6777b538SAndroid Build Coastguard Worker # 234*6777b538SAndroid Build Coastguard Worker # Variables 235*6777b538SAndroid Build Coastguard Worker # sources: list of files to be processed by the script. For each string 236*6777b538SAndroid Build Coastguard Worker # constant in the source files, the script will add a corresponding 237*6777b538SAndroid Build Coastguard Worker # Java string to the specified template file. 238*6777b538SAndroid Build Coastguard Worker # Example 239*6777b538SAndroid Build Coastguard Worker # java_cpp_strings("foo_switches") { 240*6777b538SAndroid Build Coastguard Worker # sources = [ 241*6777b538SAndroid Build Coastguard Worker # "src/foo_switches.cc", 242*6777b538SAndroid Build Coastguard Worker # ] 243*6777b538SAndroid Build Coastguard Worker # template = "src/templates/FooSwitches.java.tmpl 244*6777b538SAndroid Build Coastguard Worker # } 245*6777b538SAndroid Build Coastguard Worker # 246*6777b538SAndroid Build Coastguard Worker # foo_switches.cc: 247*6777b538SAndroid Build Coastguard Worker # 248*6777b538SAndroid Build Coastguard Worker # // A switch. 249*6777b538SAndroid Build Coastguard Worker # const char kASwitch = "a-switch"; 250*6777b538SAndroid Build Coastguard Worker # 251*6777b538SAndroid Build Coastguard Worker # FooSwitches.java.tmpl 252*6777b538SAndroid Build Coastguard Worker # 253*6777b538SAndroid Build Coastguard Worker # // Copyright {YEAR} The Chromium Authors 254*6777b538SAndroid Build Coastguard Worker # // Use of this source code is governed by a BSD-style license that can be 255*6777b538SAndroid Build Coastguard Worker # // found in the LICENSE file. 256*6777b538SAndroid Build Coastguard Worker # 257*6777b538SAndroid Build Coastguard Worker # // This file is autogenerated by 258*6777b538SAndroid Build Coastguard Worker # // {SCRIPT_NAME} 259*6777b538SAndroid Build Coastguard Worker # // From 260*6777b538SAndroid Build Coastguard Worker # // {SOURCE_PATH}, and 261*6777b538SAndroid Build Coastguard Worker # // {TEMPLATE_PATH} 262*6777b538SAndroid Build Coastguard Worker # 263*6777b538SAndroid Build Coastguard Worker # package my.java.package; 264*6777b538SAndroid Build Coastguard Worker # 265*6777b538SAndroid Build Coastguard Worker # public abstract class FooSwitches {{ 266*6777b538SAndroid Build Coastguard Worker # // ...snip... 267*6777b538SAndroid Build Coastguard Worker # {NATIVE_STRINGS} 268*6777b538SAndroid Build Coastguard Worker # // ...snip... 269*6777b538SAndroid Build Coastguard Worker # }} 270*6777b538SAndroid Build Coastguard Worker # 271*6777b538SAndroid Build Coastguard Worker # result: 272*6777b538SAndroid Build Coastguard Worker # A FooSwitches.java file, defining a class named FooSwitches in the package 273*6777b538SAndroid Build Coastguard Worker # my.java.package. 274*6777b538SAndroid Build Coastguard Worker template("java_cpp_strings") { 275*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 276*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "sources" ]) 277*6777b538SAndroid Build Coastguard Worker 278*6777b538SAndroid Build Coastguard Worker # The sources aren't compiled so don't check their dependencies. 279*6777b538SAndroid Build Coastguard Worker check_includes = false 280*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/java_cpp_strings.py" 281*6777b538SAndroid Build Coastguard Worker 282*6777b538SAndroid Build Coastguard Worker _srcjar_path = "${target_gen_dir}/${target_name}.srcjar" 283*6777b538SAndroid Build Coastguard Worker _rebased_srcjar_path = rebase_path(_srcjar_path, root_build_dir) 284*6777b538SAndroid Build Coastguard Worker _rebased_sources = rebase_path(invoker.sources, root_build_dir) 285*6777b538SAndroid Build Coastguard Worker _rebased_template = rebase_path(invoker.template, root_build_dir) 286*6777b538SAndroid Build Coastguard Worker 287*6777b538SAndroid Build Coastguard Worker args = [ 288*6777b538SAndroid Build Coastguard Worker "--srcjar=$_rebased_srcjar_path", 289*6777b538SAndroid Build Coastguard Worker "--template=$_rebased_template", 290*6777b538SAndroid Build Coastguard Worker ] 291*6777b538SAndroid Build Coastguard Worker args += _rebased_sources 292*6777b538SAndroid Build Coastguard Worker sources += [ invoker.template ] 293*6777b538SAndroid Build Coastguard Worker 294*6777b538SAndroid Build Coastguard Worker outputs = [ _srcjar_path ] 295*6777b538SAndroid Build Coastguard Worker } 296*6777b538SAndroid Build Coastguard Worker } 297*6777b538SAndroid Build Coastguard Worker 298*6777b538SAndroid Build Coastguard Worker # Declare a target for generating Java classes with string constants matching 299*6777b538SAndroid Build Coastguard Worker # those found in C++ base::Feature declarations, using a python script. 300*6777b538SAndroid Build Coastguard Worker # 301*6777b538SAndroid Build Coastguard Worker # This target will create a single .srcjar. Adding this target to an 302*6777b538SAndroid Build Coastguard Worker # android_library target's srcjar_deps will make the generated java files be 303*6777b538SAndroid Build Coastguard Worker # included in that library's final outputs. 304*6777b538SAndroid Build Coastguard Worker # 305*6777b538SAndroid Build Coastguard Worker # Variables 306*6777b538SAndroid Build Coastguard Worker # sources: list of files to be processed by the script. For each 307*6777b538SAndroid Build Coastguard Worker # base::Feature in the source files, the script will add a 308*6777b538SAndroid Build Coastguard Worker # corresponding Java string for that feature's name to the 309*6777b538SAndroid Build Coastguard Worker # specified template file. 310*6777b538SAndroid Build Coastguard Worker # Example 311*6777b538SAndroid Build Coastguard Worker # java_cpp_features("foo_features") { 312*6777b538SAndroid Build Coastguard Worker # sources = [ 313*6777b538SAndroid Build Coastguard Worker # "src/foo_features.cc", 314*6777b538SAndroid Build Coastguard Worker # ] 315*6777b538SAndroid Build Coastguard Worker # template = "src/templates/FooFeatures.java.tmpl 316*6777b538SAndroid Build Coastguard Worker # } 317*6777b538SAndroid Build Coastguard Worker # 318*6777b538SAndroid Build Coastguard Worker # foo_features.cc: 319*6777b538SAndroid Build Coastguard Worker # 320*6777b538SAndroid Build Coastguard Worker # // A feature. 321*6777b538SAndroid Build Coastguard Worker # BASE_FEATURE(kSomeFeature, "SomeFeature", 322*6777b538SAndroid Build Coastguard Worker # base::FEATURE_DISABLED_BY_DEFAULT); 323*6777b538SAndroid Build Coastguard Worker # 324*6777b538SAndroid Build Coastguard Worker # FooFeatures.java.tmpl 325*6777b538SAndroid Build Coastguard Worker # 326*6777b538SAndroid Build Coastguard Worker # // Copyright $YEAR The Chromium Authors 327*6777b538SAndroid Build Coastguard Worker # // Use of this source code is governed by a BSD-style license that can be 328*6777b538SAndroid Build Coastguard Worker # // found in the LICENSE file. 329*6777b538SAndroid Build Coastguard Worker # 330*6777b538SAndroid Build Coastguard Worker # package my.java.package; 331*6777b538SAndroid Build Coastguard Worker # 332*6777b538SAndroid Build Coastguard Worker # public final class FooFeatures {{ 333*6777b538SAndroid Build Coastguard Worker # // ...snip... 334*6777b538SAndroid Build Coastguard Worker # {NATIVE_STRINGS} 335*6777b538SAndroid Build Coastguard Worker # // ...snip... 336*6777b538SAndroid Build Coastguard Worker # // Do not instantiate this class. 337*6777b538SAndroid Build Coastguard Worker # private FooFeatures() {{}} 338*6777b538SAndroid Build Coastguard Worker # }} 339*6777b538SAndroid Build Coastguard Worker # 340*6777b538SAndroid Build Coastguard Worker # result: 341*6777b538SAndroid Build Coastguard Worker # A FooFeatures.java file, defining a class named FooFeatures in the package 342*6777b538SAndroid Build Coastguard Worker # my.java.package. 343*6777b538SAndroid Build Coastguard Worker template("java_cpp_features") { 344*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 345*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 346*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 347*6777b538SAndroid Build Coastguard Worker "deps", 348*6777b538SAndroid Build Coastguard Worker "sources", 349*6777b538SAndroid Build Coastguard Worker ]) 350*6777b538SAndroid Build Coastguard Worker 351*6777b538SAndroid Build Coastguard Worker # The sources aren't compiled so don't check their dependencies. 352*6777b538SAndroid Build Coastguard Worker check_includes = false 353*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/java_cpp_features.py" 354*6777b538SAndroid Build Coastguard Worker 355*6777b538SAndroid Build Coastguard Worker _srcjar_path = "${target_gen_dir}/${target_name}.srcjar" 356*6777b538SAndroid Build Coastguard Worker _rebased_srcjar_path = rebase_path(_srcjar_path, root_build_dir) 357*6777b538SAndroid Build Coastguard Worker _rebased_sources = rebase_path(invoker.sources, root_build_dir) 358*6777b538SAndroid Build Coastguard Worker _rebased_template = rebase_path(invoker.template, root_build_dir) 359*6777b538SAndroid Build Coastguard Worker 360*6777b538SAndroid Build Coastguard Worker args = [ 361*6777b538SAndroid Build Coastguard Worker "--srcjar=$_rebased_srcjar_path", 362*6777b538SAndroid Build Coastguard Worker "--template=$_rebased_template", 363*6777b538SAndroid Build Coastguard Worker ] 364*6777b538SAndroid Build Coastguard Worker args += _rebased_sources 365*6777b538SAndroid Build Coastguard Worker sources += [ invoker.template ] 366*6777b538SAndroid Build Coastguard Worker 367*6777b538SAndroid Build Coastguard Worker outputs = [ _srcjar_path ] 368*6777b538SAndroid Build Coastguard Worker } 369*6777b538SAndroid Build Coastguard Worker } 370*6777b538SAndroid Build Coastguard Worker 371*6777b538SAndroid Build Coastguard Worker # Declare a target for processing a Jinja template. 372*6777b538SAndroid Build Coastguard Worker # 373*6777b538SAndroid Build Coastguard Worker # Variables 374*6777b538SAndroid Build Coastguard Worker # input: The template file to be processed. 375*6777b538SAndroid Build Coastguard Worker # includes: List of files {% include %}'ed by input. 376*6777b538SAndroid Build Coastguard Worker # output: Where to save the result. 377*6777b538SAndroid Build Coastguard Worker # variables: (Optional) A list of variables to make available to the template 378*6777b538SAndroid Build Coastguard Worker # processing environment, e.g. ["name=foo", "color=red"]. 379*6777b538SAndroid Build Coastguard Worker # 380*6777b538SAndroid Build Coastguard Worker # Example 381*6777b538SAndroid Build Coastguard Worker # jinja_template("chrome_public_manifest") { 382*6777b538SAndroid Build Coastguard Worker # input = "java/AndroidManifest.xml" 383*6777b538SAndroid Build Coastguard Worker # output = "$target_gen_dir/AndroidManifest.xml" 384*6777b538SAndroid Build Coastguard Worker # } 385*6777b538SAndroid Build Coastguard Worker template("jinja_template") { 386*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 387*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "deps" ]) 388*6777b538SAndroid Build Coastguard Worker inputs = [ invoker.input ] 389*6777b538SAndroid Build Coastguard Worker if (defined(invoker.includes)) { 390*6777b538SAndroid Build Coastguard Worker inputs += invoker.includes 391*6777b538SAndroid Build Coastguard Worker } 392*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/jinja_template.py" 393*6777b538SAndroid Build Coastguard Worker 394*6777b538SAndroid Build Coastguard Worker outputs = [ invoker.output ] 395*6777b538SAndroid Build Coastguard Worker 396*6777b538SAndroid Build Coastguard Worker args = [ 397*6777b538SAndroid Build Coastguard Worker "--loader-base-dir", 398*6777b538SAndroid Build Coastguard Worker rebase_path("//", root_build_dir), 399*6777b538SAndroid Build Coastguard Worker "--inputs", 400*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.input, root_build_dir), 401*6777b538SAndroid Build Coastguard Worker "--output", 402*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output, root_build_dir), 403*6777b538SAndroid Build Coastguard Worker "--check-includes", 404*6777b538SAndroid Build Coastguard Worker ] 405*6777b538SAndroid Build Coastguard Worker if (defined(invoker.includes)) { 406*6777b538SAndroid Build Coastguard Worker _rebased_includes = rebase_path(invoker.includes, root_build_dir) 407*6777b538SAndroid Build Coastguard Worker args += [ "--includes=$_rebased_includes" ] 408*6777b538SAndroid Build Coastguard Worker } 409*6777b538SAndroid Build Coastguard Worker if (defined(invoker.variables)) { 410*6777b538SAndroid Build Coastguard Worker args += [ "--variables=${invoker.variables}" ] 411*6777b538SAndroid Build Coastguard Worker } 412*6777b538SAndroid Build Coastguard Worker } 413*6777b538SAndroid Build Coastguard Worker } 414*6777b538SAndroid Build Coastguard Worker 415*6777b538SAndroid Build Coastguard Worker # Writes native libraries to a NativeLibaries.java file. 416*6777b538SAndroid Build Coastguard Worker # 417*6777b538SAndroid Build Coastguard Worker # This target will create a single .srcjar. Adding this target to an 418*6777b538SAndroid Build Coastguard Worker # android_library target's srcjar_deps will make the generated java files be 419*6777b538SAndroid Build Coastguard Worker # included in that library's final outputs. 420*6777b538SAndroid Build Coastguard Worker # 421*6777b538SAndroid Build Coastguard Worker # Variables: 422*6777b538SAndroid Build Coastguard Worker # native_libraries_list_file: (Optional) Path to file listing all native 423*6777b538SAndroid Build Coastguard Worker # libraries to write. 424*6777b538SAndroid Build Coastguard Worker # version_number: (Optional) String of expected version of 'main' native 425*6777b538SAndroid Build Coastguard Worker # library. 426*6777b538SAndroid Build Coastguard Worker # enable_chromium_linker: (Optional) Whether to use the Chromium linker. 427*6777b538SAndroid Build Coastguard Worker # use_final_fields: True to use final fields. When false, all other 428*6777b538SAndroid Build Coastguard Worker # variables must not be set. 429*6777b538SAndroid Build Coastguard Worker template("write_native_libraries_java") { 430*6777b538SAndroid Build Coastguard Worker _native_libraries_file = "$target_gen_dir/$target_name.srcjar" 431*6777b538SAndroid Build Coastguard Worker if (current_cpu == "arm" || current_cpu == "arm64") { 432*6777b538SAndroid Build Coastguard Worker _cpu_family = "CPU_FAMILY_ARM" 433*6777b538SAndroid Build Coastguard Worker } else if (current_cpu == "x86" || current_cpu == "x64") { 434*6777b538SAndroid Build Coastguard Worker _cpu_family = "CPU_FAMILY_X86" 435*6777b538SAndroid Build Coastguard Worker } else if (current_cpu == "mipsel" || current_cpu == "mips64el") { 436*6777b538SAndroid Build Coastguard Worker _cpu_family = "CPU_FAMILY_MIPS" 437*6777b538SAndroid Build Coastguard Worker } else if (current_cpu == "riscv64") { 438*6777b538SAndroid Build Coastguard Worker _cpu_family = "CPU_FAMILY_RISCV" 439*6777b538SAndroid Build Coastguard Worker } else { 440*6777b538SAndroid Build Coastguard Worker assert(false, "Unsupported CPU family") 441*6777b538SAndroid Build Coastguard Worker } 442*6777b538SAndroid Build Coastguard Worker 443*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 444*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "deps" ]) 445*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/write_native_libraries_java.py" 446*6777b538SAndroid Build Coastguard Worker outputs = [ _native_libraries_file ] 447*6777b538SAndroid Build Coastguard Worker args = [ 448*6777b538SAndroid Build Coastguard Worker "--output", 449*6777b538SAndroid Build Coastguard Worker rebase_path(_native_libraries_file, root_build_dir), 450*6777b538SAndroid Build Coastguard Worker "--cpu-family", 451*6777b538SAndroid Build Coastguard Worker _cpu_family, 452*6777b538SAndroid Build Coastguard Worker ] 453*6777b538SAndroid Build Coastguard Worker if (invoker.use_final_fields) { 454*6777b538SAndroid Build Coastguard Worker # Write native_libraries_list_file via depfile rather than specifyin it 455*6777b538SAndroid Build Coastguard Worker # as a dep in order allow R8 to run in parallel with native compilation. 456*6777b538SAndroid Build Coastguard Worker args += [ "--final" ] 457*6777b538SAndroid Build Coastguard Worker if (defined(invoker.native_libraries_list_file)) { 458*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 459*6777b538SAndroid Build Coastguard Worker args += [ 460*6777b538SAndroid Build Coastguard Worker "--native-libraries-list", 461*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.native_libraries_list_file, root_build_dir), 462*6777b538SAndroid Build Coastguard Worker "--depfile", 463*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 464*6777b538SAndroid Build Coastguard Worker ] 465*6777b538SAndroid Build Coastguard Worker } 466*6777b538SAndroid Build Coastguard Worker if (defined(invoker.enable_chromium_linker) && 467*6777b538SAndroid Build Coastguard Worker invoker.enable_chromium_linker) { 468*6777b538SAndroid Build Coastguard Worker args += [ "--enable-chromium-linker" ] 469*6777b538SAndroid Build Coastguard Worker } 470*6777b538SAndroid Build Coastguard Worker if (defined(invoker.native_lib_32_bit) && invoker.native_lib_32_bit) { 471*6777b538SAndroid Build Coastguard Worker args += [ "--native-lib-32-bit" ] 472*6777b538SAndroid Build Coastguard Worker } 473*6777b538SAndroid Build Coastguard Worker if (defined(invoker.native_lib_64_bit) && invoker.native_lib_64_bit) { 474*6777b538SAndroid Build Coastguard Worker args += [ "--native-lib-64-bit" ] 475*6777b538SAndroid Build Coastguard Worker } 476*6777b538SAndroid Build Coastguard Worker } 477*6777b538SAndroid Build Coastguard Worker } 478*6777b538SAndroid Build Coastguard Worker } 479*6777b538SAndroid Build Coastguard Worker 480*6777b538SAndroid Build Coastguard Worker # Declare a target for a set of Android resources generated at build 481*6777b538SAndroid Build Coastguard Worker # time and stored in a single zip archive. The content of the archive 482*6777b538SAndroid Build Coastguard Worker # should match the layout of a regular Android res/ folder (but the 483*6777b538SAndroid Build Coastguard Worker # archive should not include a top-level res/ directory). 484*6777b538SAndroid Build Coastguard Worker # 485*6777b538SAndroid Build Coastguard Worker # Note that there is no associated .srcjar, R.txt or package name 486*6777b538SAndroid Build Coastguard Worker # associated with this target. 487*6777b538SAndroid Build Coastguard Worker # 488*6777b538SAndroid Build Coastguard Worker # Variables: 489*6777b538SAndroid Build Coastguard Worker # generated_resources_zip: Generated zip archive path. 490*6777b538SAndroid Build Coastguard Worker # generating_target: Name of the target generating 491*6777b538SAndroid Build Coastguard Worker # generated_resources_zip. This rule will check that it is part 492*6777b538SAndroid Build Coastguard Worker # of its outputs. 493*6777b538SAndroid Build Coastguard Worker # deps: Specifies the dependencies of this target. Any Android resources 494*6777b538SAndroid Build Coastguard Worker # listed here will be also be included *after* this one when compiling 495*6777b538SAndroid Build Coastguard Worker # all resources for a final apk or junit binary. This is useful to 496*6777b538SAndroid Build Coastguard Worker # ensure that the resources of the current target override those of the 497*6777b538SAndroid Build Coastguard Worker # dependency as well (and would not work if you have these deps to the 498*6777b538SAndroid Build Coastguard Worker # generating target's dependencies). 499*6777b538SAndroid Build Coastguard Worker # 500*6777b538SAndroid Build Coastguard Worker # Example 501*6777b538SAndroid Build Coastguard Worker # _zip_archive = "$target_gen_dir/${target_name}.resources_zip" 502*6777b538SAndroid Build Coastguard Worker # 503*6777b538SAndroid Build Coastguard Worker # action("my_resources__create_zip") { 504*6777b538SAndroid Build Coastguard Worker # _depfile = "$target_gen_dir/${target_name}.d" 505*6777b538SAndroid Build Coastguard Worker # script = "//build/path/to/create_my_resources_zip.py" 506*6777b538SAndroid Build Coastguard Worker # args = [ 507*6777b538SAndroid Build Coastguard Worker # "--depfile", rebase_path(_depfile, root_build_dir), 508*6777b538SAndroid Build Coastguard Worker # "--output-zip", rebase_path(_zip_archive, root_build_dir), 509*6777b538SAndroid Build Coastguard Worker # ] 510*6777b538SAndroid Build Coastguard Worker # inputs = [] 511*6777b538SAndroid Build Coastguard Worker # outputs = _zip_archive 512*6777b538SAndroid Build Coastguard Worker # depfile = _depfile 513*6777b538SAndroid Build Coastguard Worker # } 514*6777b538SAndroid Build Coastguard Worker # 515*6777b538SAndroid Build Coastguard Worker # android_generated_resources("my_resources") { 516*6777b538SAndroid Build Coastguard Worker # generated_resources_zip = _zip_archive 517*6777b538SAndroid Build Coastguard Worker # generating_target = ":my_resources__create_zip" 518*6777b538SAndroid Build Coastguard Worker # } 519*6777b538SAndroid Build Coastguard Worker # 520*6777b538SAndroid Build Coastguard Worker template("android_generated_resources") { 521*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "testonly" ]) 522*6777b538SAndroid Build Coastguard Worker _build_config = "$target_gen_dir/${target_name}.build_config.json" 523*6777b538SAndroid Build Coastguard Worker _rtxt_out_path = "$target_gen_dir/${target_name}.R.txt" 524*6777b538SAndroid Build Coastguard Worker write_build_config("$target_name$build_config_target_suffix") { 525*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "resource_overlay" ]) 526*6777b538SAndroid Build Coastguard Worker 527*6777b538SAndroid Build Coastguard Worker build_config = _build_config 528*6777b538SAndroid Build Coastguard Worker resources_zip = invoker.generated_resources_zip 529*6777b538SAndroid Build Coastguard Worker type = "android_resources" 530*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 531*6777b538SAndroid Build Coastguard Worker possible_config_deps = invoker.deps 532*6777b538SAndroid Build Coastguard Worker } 533*6777b538SAndroid Build Coastguard Worker r_text = _rtxt_out_path 534*6777b538SAndroid Build Coastguard Worker } 535*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 536*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "visibility" ]) 537*6777b538SAndroid Build Coastguard Worker public_deps = [ 538*6777b538SAndroid Build Coastguard Worker ":$target_name$build_config_target_suffix", 539*6777b538SAndroid Build Coastguard Worker invoker.generating_target, 540*6777b538SAndroid Build Coastguard Worker ] 541*6777b538SAndroid Build Coastguard Worker inputs = [ invoker.generated_resources_zip ] 542*6777b538SAndroid Build Coastguard Worker outputs = [ _rtxt_out_path ] 543*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/create_r_txt.py" 544*6777b538SAndroid Build Coastguard Worker args = [ 545*6777b538SAndroid Build Coastguard Worker "--resources-zip-path", 546*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.generated_resources_zip, root_build_dir), 547*6777b538SAndroid Build Coastguard Worker "--rtxt-path", 548*6777b538SAndroid Build Coastguard Worker rebase_path(_rtxt_out_path, root_build_dir), 549*6777b538SAndroid Build Coastguard Worker ] 550*6777b538SAndroid Build Coastguard Worker } 551*6777b538SAndroid Build Coastguard Worker } 552*6777b538SAndroid Build Coastguard Worker 553*6777b538SAndroid Build Coastguard Worker # Declare a target for processing Android resources as Jinja templates. 554*6777b538SAndroid Build Coastguard Worker # 555*6777b538SAndroid Build Coastguard Worker # This takes an Android resource directory where each resource is a Jinja 556*6777b538SAndroid Build Coastguard Worker # template, processes each template, then packages the results in a zip file 557*6777b538SAndroid Build Coastguard Worker # which can be consumed by an android resources, library, or apk target. 558*6777b538SAndroid Build Coastguard Worker # 559*6777b538SAndroid Build Coastguard Worker # If this target is included in the deps of an android resources/library/apk, 560*6777b538SAndroid Build Coastguard Worker # the resources will be included with that target. 561*6777b538SAndroid Build Coastguard Worker # 562*6777b538SAndroid Build Coastguard Worker # Variables 563*6777b538SAndroid Build Coastguard Worker # resources: The list of resources files to process. 564*6777b538SAndroid Build Coastguard Worker # res_dir: The resource directory containing the resources. 565*6777b538SAndroid Build Coastguard Worker # variables: (Optional) A list of variables to make available to the template 566*6777b538SAndroid Build Coastguard Worker # processing environment, e.g. ["name=foo", "color=red"]. 567*6777b538SAndroid Build Coastguard Worker # 568*6777b538SAndroid Build Coastguard Worker # Example 569*6777b538SAndroid Build Coastguard Worker # jinja_template_resources("chrome_public_template_resources") { 570*6777b538SAndroid Build Coastguard Worker # res_dir = "res_template" 571*6777b538SAndroid Build Coastguard Worker # resources = ["res_template/xml/syncable.xml"] 572*6777b538SAndroid Build Coastguard Worker # variables = ["color=red"] 573*6777b538SAndroid Build Coastguard Worker # } 574*6777b538SAndroid Build Coastguard Worker template("jinja_template_resources") { 575*6777b538SAndroid Build Coastguard Worker _resources_zip = "$target_out_dir/${target_name}.resources.zip" 576*6777b538SAndroid Build Coastguard Worker _generating_target_name = "${target_name}__template" 577*6777b538SAndroid Build Coastguard Worker 578*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_generating_target_name) { 579*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "deps" ]) 580*6777b538SAndroid Build Coastguard Worker inputs = invoker.resources 581*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/jinja_template.py" 582*6777b538SAndroid Build Coastguard Worker 583*6777b538SAndroid Build Coastguard Worker outputs = [ _resources_zip ] 584*6777b538SAndroid Build Coastguard Worker 585*6777b538SAndroid Build Coastguard Worker _rebased_resources = rebase_path(invoker.resources, root_build_dir) 586*6777b538SAndroid Build Coastguard Worker args = [ 587*6777b538SAndroid Build Coastguard Worker "--inputs=${_rebased_resources}", 588*6777b538SAndroid Build Coastguard Worker "--inputs-base-dir", 589*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.res_dir, root_build_dir), 590*6777b538SAndroid Build Coastguard Worker "--outputs-zip", 591*6777b538SAndroid Build Coastguard Worker rebase_path(_resources_zip, root_build_dir), 592*6777b538SAndroid Build Coastguard Worker "--check-includes", 593*6777b538SAndroid Build Coastguard Worker ] 594*6777b538SAndroid Build Coastguard Worker if (defined(invoker.variables)) { 595*6777b538SAndroid Build Coastguard Worker variables = invoker.variables 596*6777b538SAndroid Build Coastguard Worker args += [ "--variables=${variables}" ] 597*6777b538SAndroid Build Coastguard Worker } 598*6777b538SAndroid Build Coastguard Worker } 599*6777b538SAndroid Build Coastguard Worker 600*6777b538SAndroid Build Coastguard Worker android_generated_resources(target_name) { 601*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 602*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 603*6777b538SAndroid Build Coastguard Worker "deps", 604*6777b538SAndroid Build Coastguard Worker "resource_overlay", 605*6777b538SAndroid Build Coastguard Worker ]) 606*6777b538SAndroid Build Coastguard Worker generating_target = ":$_generating_target_name" 607*6777b538SAndroid Build Coastguard Worker generated_resources_zip = _resources_zip 608*6777b538SAndroid Build Coastguard Worker } 609*6777b538SAndroid Build Coastguard Worker } 610*6777b538SAndroid Build Coastguard Worker 611*6777b538SAndroid Build Coastguard Worker # Declare a prebuilt android native library. 612*6777b538SAndroid Build Coastguard Worker # 613*6777b538SAndroid Build Coastguard Worker # This takes a base directory and library name and then looks for the library 614*6777b538SAndroid Build Coastguard Worker # in <base dir>/$android_app_abi/<library name>. 615*6777b538SAndroid Build Coastguard Worker # 616*6777b538SAndroid Build Coastguard Worker # If you depend on this target, the library is stripped and output to the 617*6777b538SAndroid Build Coastguard Worker # same locations non-prebuilt libraries are output. 618*6777b538SAndroid Build Coastguard Worker # 619*6777b538SAndroid Build Coastguard Worker # Variables 620*6777b538SAndroid Build Coastguard Worker # base_dir: Directory where all ABIs of the library live. 621*6777b538SAndroid Build Coastguard Worker # library_name: Name of the library .so file. 622*6777b538SAndroid Build Coastguard Worker # 623*6777b538SAndroid Build Coastguard Worker # Example 624*6777b538SAndroid Build Coastguard Worker # android_native_prebuilt("elements_native") { 625*6777b538SAndroid Build Coastguard Worker # base_dir = "//third_party/elements" 626*6777b538SAndroid Build Coastguard Worker # lib_name = "elements.so" 627*6777b538SAndroid Build Coastguard Worker # } 628*6777b538SAndroid Build Coastguard Worker template("android_native_prebuilt") { 629*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 630*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 631*6777b538SAndroid Build Coastguard Worker [ 632*6777b538SAndroid Build Coastguard Worker "deps", 633*6777b538SAndroid Build Coastguard Worker "testonly", 634*6777b538SAndroid Build Coastguard Worker ]) 635*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/process_native_prebuilt.py" 636*6777b538SAndroid Build Coastguard Worker _lib_path = "${invoker.base_dir}/$android_app_abi/${invoker.lib_name}" 637*6777b538SAndroid Build Coastguard Worker _stripped_output_path = "$root_out_dir/${invoker.lib_name}" 638*6777b538SAndroid Build Coastguard Worker _unstripped_output_path = 639*6777b538SAndroid Build Coastguard Worker "$root_out_dir/lib.unstripped/${invoker.lib_name}" 640*6777b538SAndroid Build Coastguard Worker inputs = [ _lib_path ] 641*6777b538SAndroid Build Coastguard Worker outputs = [ 642*6777b538SAndroid Build Coastguard Worker _stripped_output_path, 643*6777b538SAndroid Build Coastguard Worker _unstripped_output_path, 644*6777b538SAndroid Build Coastguard Worker ] 645*6777b538SAndroid Build Coastguard Worker 646*6777b538SAndroid Build Coastguard Worker # Add unstripped output to runtime deps for use by bots during stacktrace 647*6777b538SAndroid Build Coastguard Worker # symbolization. 648*6777b538SAndroid Build Coastguard Worker data = [ _unstripped_output_path ] 649*6777b538SAndroid Build Coastguard Worker 650*6777b538SAndroid Build Coastguard Worker _rebased_lib_path = rebase_path(_lib_path, root_build_dir) 651*6777b538SAndroid Build Coastguard Worker _rebased_stripped_ouput_path = 652*6777b538SAndroid Build Coastguard Worker rebase_path(_stripped_output_path, root_build_dir) 653*6777b538SAndroid Build Coastguard Worker _rebased_unstripped_ouput_path = 654*6777b538SAndroid Build Coastguard Worker rebase_path(_unstripped_output_path, root_build_dir) 655*6777b538SAndroid Build Coastguard Worker _strip_tool_path = 656*6777b538SAndroid Build Coastguard Worker rebase_path("//buildtools/third_party/eu-strip/bin/eu-strip", 657*6777b538SAndroid Build Coastguard Worker root_build_dir) 658*6777b538SAndroid Build Coastguard Worker 659*6777b538SAndroid Build Coastguard Worker args = [ 660*6777b538SAndroid Build Coastguard Worker "--strip-path=$_strip_tool_path", 661*6777b538SAndroid Build Coastguard Worker "--input-path=$_rebased_lib_path", 662*6777b538SAndroid Build Coastguard Worker "--stripped-output-path=$_rebased_stripped_ouput_path", 663*6777b538SAndroid Build Coastguard Worker "--unstripped-output-path=$_rebased_unstripped_ouput_path", 664*6777b538SAndroid Build Coastguard Worker ] 665*6777b538SAndroid Build Coastguard Worker } 666*6777b538SAndroid Build Coastguard Worker } 667*6777b538SAndroid Build Coastguard Worker 668*6777b538SAndroid Build Coastguard Worker # Declare an Android resources target 669*6777b538SAndroid Build Coastguard Worker # 670*6777b538SAndroid Build Coastguard Worker # This creates a resources zip file that will be used when building an Android 671*6777b538SAndroid Build Coastguard Worker # library or apk and included into a final apk. 672*6777b538SAndroid Build Coastguard Worker # 673*6777b538SAndroid Build Coastguard Worker # To include these resources in a library/apk, this target should be listed in 674*6777b538SAndroid Build Coastguard Worker # the library's deps. A library/apk will also include any resources used by its 675*6777b538SAndroid Build Coastguard Worker # own dependencies. 676*6777b538SAndroid Build Coastguard Worker # 677*6777b538SAndroid Build Coastguard Worker # Variables 678*6777b538SAndroid Build Coastguard Worker # sources: List of resource files for this target. 679*6777b538SAndroid Build Coastguard Worker # deps: Specifies the dependencies of this target. Any Android resources 680*6777b538SAndroid Build Coastguard Worker # listed in deps will be included by libraries/apks that depend on this 681*6777b538SAndroid Build Coastguard Worker # target. 682*6777b538SAndroid Build Coastguard Worker # alternative_android_sdk_dep: Optional. Alternative Android system 683*6777b538SAndroid Build Coastguard Worker # android java target to use. 684*6777b538SAndroid Build Coastguard Worker # android_manifest: AndroidManifest.xml for this target (optional). Will be 685*6777b538SAndroid Build Coastguard Worker # merged into apks that directly or indirectly depend on this target. 686*6777b538SAndroid Build Coastguard Worker # android_manifest_dep: Target that generates AndroidManifest (if applicable) 687*6777b538SAndroid Build Coastguard Worker # custom_package: java package for generated .java files. 688*6777b538SAndroid Build Coastguard Worker # allow_missing_resources: Do not fail if a resource exists in a directory 689*6777b538SAndroid Build Coastguard Worker # but is not listed in sources. 690*6777b538SAndroid Build Coastguard Worker # shared_resources: If true make a resource package that can be loaded by a 691*6777b538SAndroid Build Coastguard Worker # different application at runtime to access the package's resources. 692*6777b538SAndroid Build Coastguard Worker # resource_overlay: Whether the resources in 'sources' should override 693*6777b538SAndroid Build Coastguard Worker # resources with the same name. Does not affect the behaviour of any 694*6777b538SAndroid Build Coastguard Worker # android_resources() deps of this target. If a target with 695*6777b538SAndroid Build Coastguard Worker # resource_overlay=true depends on another target with 696*6777b538SAndroid Build Coastguard Worker # resource_overlay=true the target with the dependency overrides the 697*6777b538SAndroid Build Coastguard Worker # other. 698*6777b538SAndroid Build Coastguard Worker # r_text_file: (optional) path to pre-generated R.txt to be used when 699*6777b538SAndroid Build Coastguard Worker # generating R.java instead of resource-based aapt-generated one. 700*6777b538SAndroid Build Coastguard Worker # recursive_resource_deps: (optional) whether deps should be walked 701*6777b538SAndroid Build Coastguard Worker # recursively to find resource deps. 702*6777b538SAndroid Build Coastguard Worker # 703*6777b538SAndroid Build Coastguard Worker # Example: 704*6777b538SAndroid Build Coastguard Worker # android_resources("foo_resources") { 705*6777b538SAndroid Build Coastguard Worker # deps = [":foo_strings_grd"] 706*6777b538SAndroid Build Coastguard Worker # sources = [ 707*6777b538SAndroid Build Coastguard Worker # "res/drawable/foo1.xml", 708*6777b538SAndroid Build Coastguard Worker # "res/drawable/foo2.xml", 709*6777b538SAndroid Build Coastguard Worker # ] 710*6777b538SAndroid Build Coastguard Worker # custom_package = "org.chromium.foo" 711*6777b538SAndroid Build Coastguard Worker # } 712*6777b538SAndroid Build Coastguard Worker # 713*6777b538SAndroid Build Coastguard Worker # android_resources("foo_resources_overrides") { 714*6777b538SAndroid Build Coastguard Worker # deps = [":foo_resources"] 715*6777b538SAndroid Build Coastguard Worker # sources = [ 716*6777b538SAndroid Build Coastguard Worker # "res_overrides/drawable/foo1.xml", 717*6777b538SAndroid Build Coastguard Worker # "res_overrides/drawable/foo2.xml", 718*6777b538SAndroid Build Coastguard Worker # ] 719*6777b538SAndroid Build Coastguard Worker # } 720*6777b538SAndroid Build Coastguard Worker template("android_resources") { 721*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 722*6777b538SAndroid Build Coastguard Worker 723*6777b538SAndroid Build Coastguard Worker _base_path = "$target_gen_dir/$target_name" 724*6777b538SAndroid Build Coastguard Worker if (defined(invoker.v14_skip)) { 725*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "v14_skip" ]) 726*6777b538SAndroid Build Coastguard Worker } 727*6777b538SAndroid Build Coastguard Worker 728*6777b538SAndroid Build Coastguard Worker _res_sources_path = "$target_gen_dir/${invoker.target_name}.res.sources" 729*6777b538SAndroid Build Coastguard Worker 730*6777b538SAndroid Build Coastguard Worker _resources_zip = "$target_out_dir/$target_name.resources.zip" 731*6777b538SAndroid Build Coastguard Worker _r_text_out_path = _base_path + "_R.txt" 732*6777b538SAndroid Build Coastguard Worker _build_config = _base_path + ".build_config.json" 733*6777b538SAndroid Build Coastguard Worker _build_config_target_name = "$target_name$build_config_target_suffix" 734*6777b538SAndroid Build Coastguard Worker 735*6777b538SAndroid Build Coastguard Worker _deps = [] 736*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 737*6777b538SAndroid Build Coastguard Worker _deps += invoker.deps 738*6777b538SAndroid Build Coastguard Worker } 739*6777b538SAndroid Build Coastguard Worker 740*6777b538SAndroid Build Coastguard Worker if (defined(invoker.alternative_android_sdk_dep)) { 741*6777b538SAndroid Build Coastguard Worker _android_sdk_dep = invoker.alternative_android_sdk_dep 742*6777b538SAndroid Build Coastguard Worker } else { 743*6777b538SAndroid Build Coastguard Worker _android_sdk_dep = default_android_sdk_dep 744*6777b538SAndroid Build Coastguard Worker } 745*6777b538SAndroid Build Coastguard Worker 746*6777b538SAndroid Build Coastguard Worker _resource_files = [] 747*6777b538SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 748*6777b538SAndroid Build Coastguard Worker _resource_files += invoker.sources 749*6777b538SAndroid Build Coastguard Worker } 750*6777b538SAndroid Build Coastguard Worker 751*6777b538SAndroid Build Coastguard Worker _rebased_resource_files = rebase_path(_resource_files, root_build_dir) 752*6777b538SAndroid Build Coastguard Worker write_file(_res_sources_path, _rebased_resource_files) 753*6777b538SAndroid Build Coastguard Worker 754*6777b538SAndroid Build Coastguard Worker # This is necessary so we only lint chromium resources. 755*6777b538SAndroid Build Coastguard Worker if (defined(invoker.chromium_code)) { 756*6777b538SAndroid Build Coastguard Worker _chromium_code = invoker.chromium_code 757*6777b538SAndroid Build Coastguard Worker } else { 758*6777b538SAndroid Build Coastguard Worker # Default based on whether target is in third_party. 759*6777b538SAndroid Build Coastguard Worker _chromium_code = 760*6777b538SAndroid Build Coastguard Worker filter_exclude([ get_label_info(":$target_name", "dir") ], 761*6777b538SAndroid Build Coastguard Worker [ "*\bthird_party\b*" ]) != [] 762*6777b538SAndroid Build Coastguard Worker } 763*6777b538SAndroid Build Coastguard Worker 764*6777b538SAndroid Build Coastguard Worker write_build_config(_build_config_target_name) { 765*6777b538SAndroid Build Coastguard Worker type = "android_resources" 766*6777b538SAndroid Build Coastguard Worker build_config = _build_config 767*6777b538SAndroid Build Coastguard Worker resources_zip = _resources_zip 768*6777b538SAndroid Build Coastguard Worker res_sources_path = _res_sources_path 769*6777b538SAndroid Build Coastguard Worker chromium_code = _chromium_code 770*6777b538SAndroid Build Coastguard Worker 771*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 772*6777b538SAndroid Build Coastguard Worker [ 773*6777b538SAndroid Build Coastguard Worker "android_manifest", 774*6777b538SAndroid Build Coastguard Worker "android_manifest_dep", 775*6777b538SAndroid Build Coastguard Worker "custom_package", 776*6777b538SAndroid Build Coastguard Worker "mergeable_android_manifests", 777*6777b538SAndroid Build Coastguard Worker "resource_overlay", 778*6777b538SAndroid Build Coastguard Worker "recursive_resource_deps", 779*6777b538SAndroid Build Coastguard Worker ]) 780*6777b538SAndroid Build Coastguard Worker 781*6777b538SAndroid Build Coastguard Worker r_text = _r_text_out_path 782*6777b538SAndroid Build Coastguard Worker possible_config_deps = _deps + [ _android_sdk_dep ] 783*6777b538SAndroid Build Coastguard Worker 784*6777b538SAndroid Build Coastguard Worker # Always merge manifests from resources. 785*6777b538SAndroid Build Coastguard Worker # * Might want to change this at some point for consistency and clarity, 786*6777b538SAndroid Build Coastguard Worker # but keeping for backwards-compatibility. 787*6777b538SAndroid Build Coastguard Worker if (!defined(mergeable_android_manifests) && defined(android_manifest)) { 788*6777b538SAndroid Build Coastguard Worker mergeable_android_manifests = [ android_manifest ] 789*6777b538SAndroid Build Coastguard Worker } 790*6777b538SAndroid Build Coastguard Worker } 791*6777b538SAndroid Build Coastguard Worker 792*6777b538SAndroid Build Coastguard Worker prepare_resources(target_name) { 793*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 794*6777b538SAndroid Build Coastguard Worker [ 795*6777b538SAndroid Build Coastguard Worker "allow_missing_resources", 796*6777b538SAndroid Build Coastguard Worker "public_deps", 797*6777b538SAndroid Build Coastguard Worker "strip_drawables", 798*6777b538SAndroid Build Coastguard Worker "visibility", 799*6777b538SAndroid Build Coastguard Worker ]) 800*6777b538SAndroid Build Coastguard Worker _lib_deps = filter_exclude(filter_include(_deps, java_library_patterns), 801*6777b538SAndroid Build Coastguard Worker java_resource_patterns) 802*6777b538SAndroid Build Coastguard Worker if (defined(public_deps)) { 803*6777b538SAndroid Build Coastguard Worker # Since java library targets depend directly on sub-targets rather than 804*6777b538SAndroid Build Coastguard Worker # top-level targets, public_deps are not properly propagated, at least 805*6777b538SAndroid Build Coastguard Worker # in terms of the "did you depend on the target that generates your 806*6777b538SAndroid Build Coastguard Worker # inputs" GN check. 807*6777b538SAndroid Build Coastguard Worker assert(filter_include(public_deps, java_target_patterns) == [], 808*6777b538SAndroid Build Coastguard Worker "Java targets should use deps, not public_deps. " + 809*6777b538SAndroid Build Coastguard Worker "target=${target_name}, public_deps=${public_deps}") 810*6777b538SAndroid Build Coastguard Worker } 811*6777b538SAndroid Build Coastguard Worker 812*6777b538SAndroid Build Coastguard Worker # Depend on non-library deps and on __assetres subtargets of library deps. 813*6777b538SAndroid Build Coastguard Worker deps = filter_exclude(_deps, _lib_deps) + [ _android_sdk_dep ] 814*6777b538SAndroid Build Coastguard Worker foreach(_lib_dep, _lib_deps) { 815*6777b538SAndroid Build Coastguard Worker # Expand //foo/java -> //foo/java:java 816*6777b538SAndroid Build Coastguard Worker _lib_dep = get_label_info(_lib_dep, "label_no_toolchain") 817*6777b538SAndroid Build Coastguard Worker deps += [ "${_lib_dep}__assetres" ] 818*6777b538SAndroid Build Coastguard Worker } 819*6777b538SAndroid Build Coastguard Worker 820*6777b538SAndroid Build Coastguard Worker res_sources_path = _res_sources_path 821*6777b538SAndroid Build Coastguard Worker sources = _resource_files 822*6777b538SAndroid Build Coastguard Worker 823*6777b538SAndroid Build Coastguard Worker resources_zip = _resources_zip 824*6777b538SAndroid Build Coastguard Worker r_text_out_path = _r_text_out_path 825*6777b538SAndroid Build Coastguard Worker 826*6777b538SAndroid Build Coastguard Worker if (defined(invoker.r_text_file)) { 827*6777b538SAndroid Build Coastguard Worker r_text_in_path = invoker.r_text_file 828*6777b538SAndroid Build Coastguard Worker } 829*6777b538SAndroid Build Coastguard Worker } 830*6777b538SAndroid Build Coastguard Worker } 831*6777b538SAndroid Build Coastguard Worker 832*6777b538SAndroid Build Coastguard Worker # Declare an Android assets target. 833*6777b538SAndroid Build Coastguard Worker # 834*6777b538SAndroid Build Coastguard Worker # Defines a set of files to include as assets in a dependent apk. 835*6777b538SAndroid Build Coastguard Worker # 836*6777b538SAndroid Build Coastguard Worker # To include these assets in an apk, this target should be listed in 837*6777b538SAndroid Build Coastguard Worker # the apk's deps, or in the deps of a library target used by an apk. 838*6777b538SAndroid Build Coastguard Worker # 839*6777b538SAndroid Build Coastguard Worker # Variables 840*6777b538SAndroid Build Coastguard Worker # deps: Specifies the dependencies of this target. Any Android assets 841*6777b538SAndroid Build Coastguard Worker # listed in deps will be included by libraries/apks that depend on this 842*6777b538SAndroid Build Coastguard Worker # target. 843*6777b538SAndroid Build Coastguard Worker # sources: List of files to include as assets. 844*6777b538SAndroid Build Coastguard Worker # renaming_sources: List of files to include as assets and be renamed. 845*6777b538SAndroid Build Coastguard Worker # renaming_destinations: List of asset paths for files in renaming_sources. 846*6777b538SAndroid Build Coastguard Worker # disable_compression: Whether to disable compression for files that are 847*6777b538SAndroid Build Coastguard Worker # known to be compressable (default: false). 848*6777b538SAndroid Build Coastguard Worker # treat_as_locale_paks: Causes base's BuildConfig.java to consider these 849*6777b538SAndroid Build Coastguard Worker # assets to be locale paks. 850*6777b538SAndroid Build Coastguard Worker # 851*6777b538SAndroid Build Coastguard Worker # Example: 852*6777b538SAndroid Build Coastguard Worker # android_assets("content_shell_assets") { 853*6777b538SAndroid Build Coastguard Worker # deps = [ 854*6777b538SAndroid Build Coastguard Worker # ":generates_foo", 855*6777b538SAndroid Build Coastguard Worker # ":other_assets", 856*6777b538SAndroid Build Coastguard Worker # ] 857*6777b538SAndroid Build Coastguard Worker # sources = [ 858*6777b538SAndroid Build Coastguard Worker # "//path/asset1.png", 859*6777b538SAndroid Build Coastguard Worker # "//path/asset2.png", 860*6777b538SAndroid Build Coastguard Worker # "$target_gen_dir/foo.dat", 861*6777b538SAndroid Build Coastguard Worker # ] 862*6777b538SAndroid Build Coastguard Worker # } 863*6777b538SAndroid Build Coastguard Worker # 864*6777b538SAndroid Build Coastguard Worker # android_assets("overriding_content_shell_assets") { 865*6777b538SAndroid Build Coastguard Worker # deps = [ ":content_shell_assets" ] 866*6777b538SAndroid Build Coastguard Worker # # Override foo.dat from content_shell_assets. 867*6777b538SAndroid Build Coastguard Worker # sources = [ "//custom/foo.dat" ] 868*6777b538SAndroid Build Coastguard Worker # renaming_sources = [ "//path/asset2.png" ] 869*6777b538SAndroid Build Coastguard Worker # renaming_destinations = [ "renamed/asset2.png" ] 870*6777b538SAndroid Build Coastguard Worker # } 871*6777b538SAndroid Build Coastguard Worker template("android_assets") { 872*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 873*6777b538SAndroid Build Coastguard Worker 874*6777b538SAndroid Build Coastguard Worker _build_config = "$target_gen_dir/$target_name.build_config.json" 875*6777b538SAndroid Build Coastguard Worker _build_config_target_name = "$target_name$build_config_target_suffix" 876*6777b538SAndroid Build Coastguard Worker 877*6777b538SAndroid Build Coastguard Worker _sources = [] 878*6777b538SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 879*6777b538SAndroid Build Coastguard Worker _sources = invoker.sources 880*6777b538SAndroid Build Coastguard Worker } 881*6777b538SAndroid Build Coastguard Worker _renaming_sources = [] 882*6777b538SAndroid Build Coastguard Worker if (defined(invoker.renaming_sources)) { 883*6777b538SAndroid Build Coastguard Worker _renaming_sources = invoker.renaming_sources 884*6777b538SAndroid Build Coastguard Worker } 885*6777b538SAndroid Build Coastguard Worker write_build_config(_build_config_target_name) { 886*6777b538SAndroid Build Coastguard Worker type = "android_assets" 887*6777b538SAndroid Build Coastguard Worker build_config = _build_config 888*6777b538SAndroid Build Coastguard Worker 889*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 890*6777b538SAndroid Build Coastguard Worker [ 891*6777b538SAndroid Build Coastguard Worker "disable_compression", 892*6777b538SAndroid Build Coastguard Worker "treat_as_locale_paks", 893*6777b538SAndroid Build Coastguard Worker ]) 894*6777b538SAndroid Build Coastguard Worker 895*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 896*6777b538SAndroid Build Coastguard Worker possible_config_deps = invoker.deps 897*6777b538SAndroid Build Coastguard Worker } 898*6777b538SAndroid Build Coastguard Worker 899*6777b538SAndroid Build Coastguard Worker if (_sources != []) { 900*6777b538SAndroid Build Coastguard Worker asset_sources = _sources 901*6777b538SAndroid Build Coastguard Worker } 902*6777b538SAndroid Build Coastguard Worker if (_renaming_sources != []) { 903*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.renaming_destinations)) 904*6777b538SAndroid Build Coastguard Worker _source_count = 0 905*6777b538SAndroid Build Coastguard Worker foreach(_, _renaming_sources) { 906*6777b538SAndroid Build Coastguard Worker _source_count += 1 907*6777b538SAndroid Build Coastguard Worker } 908*6777b538SAndroid Build Coastguard Worker _dest_count = 0 909*6777b538SAndroid Build Coastguard Worker foreach(_, invoker.renaming_destinations) { 910*6777b538SAndroid Build Coastguard Worker _dest_count += 1 911*6777b538SAndroid Build Coastguard Worker } 912*6777b538SAndroid Build Coastguard Worker assert( 913*6777b538SAndroid Build Coastguard Worker _source_count == _dest_count, 914*6777b538SAndroid Build Coastguard Worker "android_assets() renaming_sources.length != renaming_destinations.length") 915*6777b538SAndroid Build Coastguard Worker asset_renaming_sources = _renaming_sources 916*6777b538SAndroid Build Coastguard Worker asset_renaming_destinations = invoker.renaming_destinations 917*6777b538SAndroid Build Coastguard Worker } 918*6777b538SAndroid Build Coastguard Worker } 919*6777b538SAndroid Build Coastguard Worker 920*6777b538SAndroid Build Coastguard Worker # Use an action in order to mark sources as "inputs" to a GN target so that 921*6777b538SAndroid Build Coastguard Worker # GN will fail if the appropriate deps do not exist, and so that "gn refs" 922*6777b538SAndroid Build Coastguard Worker # will know about the sources. We do not add these inputs & deps to the 923*6777b538SAndroid Build Coastguard Worker # __build_config target because we want building .build_config.json files 924*6777b538SAndroid Build Coastguard Worker # to be fast (and because write_build_config.py does not need the files to 925*6777b538SAndroid Build Coastguard Worker # exist). 926*6777b538SAndroid Build Coastguard Worker _all_sources = _sources + _renaming_sources 927*6777b538SAndroid Build Coastguard Worker if (_all_sources != []) { 928*6777b538SAndroid Build Coastguard Worker action(target_name) { 929*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "deps" ]) 930*6777b538SAndroid Build Coastguard Worker public_deps = [ ":$_build_config_target_name" ] 931*6777b538SAndroid Build Coastguard Worker 932*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/validate_inputs.py" 933*6777b538SAndroid Build Coastguard Worker inputs = _all_sources 934*6777b538SAndroid Build Coastguard Worker outputs = [ "$target_gen_dir/$target_name.stamp" ] 935*6777b538SAndroid Build Coastguard Worker args = [ 936*6777b538SAndroid Build Coastguard Worker "--stamp", 937*6777b538SAndroid Build Coastguard Worker rebase_path(outputs[0], root_build_dir), 938*6777b538SAndroid Build Coastguard Worker ] + rebase_path(_all_sources, root_build_dir) 939*6777b538SAndroid Build Coastguard Worker } 940*6777b538SAndroid Build Coastguard Worker } else { 941*6777b538SAndroid Build Coastguard Worker group(target_name) { 942*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "deps" ]) 943*6777b538SAndroid Build Coastguard Worker public_deps = [ ":$_build_config_target_name" ] 944*6777b538SAndroid Build Coastguard Worker } 945*6777b538SAndroid Build Coastguard Worker } 946*6777b538SAndroid Build Coastguard Worker } 947*6777b538SAndroid Build Coastguard Worker 948*6777b538SAndroid Build Coastguard Worker # Declare a group() that supports forwarding java dependency information. 949*6777b538SAndroid Build Coastguard Worker # 950*6777b538SAndroid Build Coastguard Worker # Example 951*6777b538SAndroid Build Coastguard Worker # java_group("conditional_deps") { 952*6777b538SAndroid Build Coastguard Worker # if (enable_foo) { 953*6777b538SAndroid Build Coastguard Worker # deps = [":foo_java"] 954*6777b538SAndroid Build Coastguard Worker # } 955*6777b538SAndroid Build Coastguard Worker # } 956*6777b538SAndroid Build Coastguard Worker template("java_group") { 957*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 958*6777b538SAndroid Build Coastguard Worker _build_config_vars = [ 959*6777b538SAndroid Build Coastguard Worker "input_jars_paths", 960*6777b538SAndroid Build Coastguard Worker "preferred_dep", 961*6777b538SAndroid Build Coastguard Worker "mergeable_android_manifests", 962*6777b538SAndroid Build Coastguard Worker "proguard_configs", 963*6777b538SAndroid Build Coastguard Worker "requires_android", 964*6777b538SAndroid Build Coastguard Worker ] 965*6777b538SAndroid Build Coastguard Worker _invoker_deps = [] 966*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 967*6777b538SAndroid Build Coastguard Worker _invoker_deps += invoker.deps 968*6777b538SAndroid Build Coastguard Worker } 969*6777b538SAndroid Build Coastguard Worker if (defined(invoker.public_deps)) { 970*6777b538SAndroid Build Coastguard Worker _invoker_deps += invoker.public_deps 971*6777b538SAndroid Build Coastguard Worker } 972*6777b538SAndroid Build Coastguard Worker write_build_config("$target_name$build_config_target_suffix") { 973*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, _build_config_vars) 974*6777b538SAndroid Build Coastguard Worker type = "group" 975*6777b538SAndroid Build Coastguard Worker build_config = "$target_gen_dir/${invoker.target_name}.build_config.json" 976*6777b538SAndroid Build Coastguard Worker supports_android = true 977*6777b538SAndroid Build Coastguard Worker possible_config_deps = _invoker_deps 978*6777b538SAndroid Build Coastguard Worker } 979*6777b538SAndroid Build Coastguard Worker 980*6777b538SAndroid Build Coastguard Worker _assetres_deps = filter_include(_invoker_deps, java_resource_patterns) 981*6777b538SAndroid Build Coastguard Worker _invoker_deps_minus_assetres = filter_exclude(_invoker_deps, _assetres_deps) 982*6777b538SAndroid Build Coastguard Worker _lib_deps = 983*6777b538SAndroid Build Coastguard Worker filter_include(_invoker_deps_minus_assetres, java_library_patterns) 984*6777b538SAndroid Build Coastguard Worker _other_deps = _invoker_deps_minus_assetres - _lib_deps 985*6777b538SAndroid Build Coastguard Worker 986*6777b538SAndroid Build Coastguard Worker _expanded_lib_deps = [] 987*6777b538SAndroid Build Coastguard Worker foreach(_lib_dep, _lib_deps) { 988*6777b538SAndroid Build Coastguard Worker _expanded_lib_deps += [ get_label_info(_lib_dep, "label_no_toolchain") ] 989*6777b538SAndroid Build Coastguard Worker } 990*6777b538SAndroid Build Coastguard Worker foreach(_group_name, 991*6777b538SAndroid Build Coastguard Worker [ 992*6777b538SAndroid Build Coastguard Worker "assetres", 993*6777b538SAndroid Build Coastguard Worker "header", 994*6777b538SAndroid Build Coastguard Worker "host", 995*6777b538SAndroid Build Coastguard Worker "validate", 996*6777b538SAndroid Build Coastguard Worker ]) { 997*6777b538SAndroid Build Coastguard Worker group("${target_name}__$_group_name") { 998*6777b538SAndroid Build Coastguard Worker deps = [] 999*6777b538SAndroid Build Coastguard Worker foreach(_lib_dep, _expanded_lib_deps) { 1000*6777b538SAndroid Build Coastguard Worker deps += [ "${_lib_dep}__${_group_name}" ] 1001*6777b538SAndroid Build Coastguard Worker } 1002*6777b538SAndroid Build Coastguard Worker if (_group_name == "assetres") { 1003*6777b538SAndroid Build Coastguard Worker # _other_deps are necessary when generating mergeable_android_manifests. 1004*6777b538SAndroid Build Coastguard Worker deps += _assetres_deps + _other_deps 1005*6777b538SAndroid Build Coastguard Worker } else if (_group_name == "header" && defined(invoker.jar_deps)) { 1006*6777b538SAndroid Build Coastguard Worker deps += invoker.jar_deps 1007*6777b538SAndroid Build Coastguard Worker } 1008*6777b538SAndroid Build Coastguard Worker } 1009*6777b538SAndroid Build Coastguard Worker } 1010*6777b538SAndroid Build Coastguard Worker 1011*6777b538SAndroid Build Coastguard Worker group(target_name) { 1012*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1013*6777b538SAndroid Build Coastguard Worker "*", 1014*6777b538SAndroid Build Coastguard Worker _build_config_vars + TESTONLY_AND_VISIBILITY) 1015*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 1016*6777b538SAndroid Build Coastguard Worker deps = [] 1017*6777b538SAndroid Build Coastguard Worker } 1018*6777b538SAndroid Build Coastguard Worker deps += [ ":$target_name$build_config_target_suffix" ] 1019*6777b538SAndroid Build Coastguard Worker if (is_cronet_build) { 1020*6777b538SAndroid Build Coastguard Worker _abs_deps = [] 1021*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 1022*6777b538SAndroid Build Coastguard Worker foreach(dep, invoker.deps) { 1023*6777b538SAndroid Build Coastguard Worker _abs_deps += [ get_label_info(dep, "label_no_toolchain") ] 1024*6777b538SAndroid Build Coastguard Worker } 1025*6777b538SAndroid Build Coastguard Worker } 1026*6777b538SAndroid Build Coastguard Worker metadata = { 1027*6777b538SAndroid Build Coastguard Worker all_deps = _abs_deps 1028*6777b538SAndroid Build Coastguard Worker target_type = [ "java_library" ] 1029*6777b538SAndroid Build Coastguard Worker } 1030*6777b538SAndroid Build Coastguard Worker } 1031*6777b538SAndroid Build Coastguard Worker } 1032*6777b538SAndroid Build Coastguard Worker } 1033*6777b538SAndroid Build Coastguard Worker 1034*6777b538SAndroid Build Coastguard Worker # Declare a Java executable target 1035*6777b538SAndroid Build Coastguard Worker # 1036*6777b538SAndroid Build Coastguard Worker # Same as java_library, but also creates a wrapper script within 1037*6777b538SAndroid Build Coastguard Worker # $root_out_dir/bin. 1038*6777b538SAndroid Build Coastguard Worker # 1039*6777b538SAndroid Build Coastguard Worker # Supports all variables of java_library(), plus: 1040*6777b538SAndroid Build Coastguard Worker # main_class: When specified, a wrapper script is created within 1041*6777b538SAndroid Build Coastguard Worker # $root_build_dir/bin to launch the binary with the given class as the 1042*6777b538SAndroid Build Coastguard Worker # entrypoint. 1043*6777b538SAndroid Build Coastguard Worker # wrapper_script_name: Filename for the wrapper script (default=target_name) 1044*6777b538SAndroid Build Coastguard Worker # wrapper_script_args: List of additional arguments for the wrapper script. 1045*6777b538SAndroid Build Coastguard Worker # 1046*6777b538SAndroid Build Coastguard Worker # Example 1047*6777b538SAndroid Build Coastguard Worker # java_binary("foo") { 1048*6777b538SAndroid Build Coastguard Worker # sources = [ "org/chromium/foo/FooMain.java" ] 1049*6777b538SAndroid Build Coastguard Worker # deps = [ ":bar_java" ] 1050*6777b538SAndroid Build Coastguard Worker # main_class = "org.chromium.foo.FooMain" 1051*6777b538SAndroid Build Coastguard Worker # } 1052*6777b538SAndroid Build Coastguard Worker # 1053*6777b538SAndroid Build Coastguard Worker # java_binary("foo") { 1054*6777b538SAndroid Build Coastguard Worker # jar_path = "lib/prebuilt.jar" 1055*6777b538SAndroid Build Coastguard Worker # deps = [ ":bar_java" ] 1056*6777b538SAndroid Build Coastguard Worker # main_class = "org.chromium.foo.FooMain" 1057*6777b538SAndroid Build Coastguard Worker # } 1058*6777b538SAndroid Build Coastguard Worker template("java_binary") { 1059*6777b538SAndroid Build Coastguard Worker java_library_impl(target_name) { 1060*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 1061*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1062*6777b538SAndroid Build Coastguard Worker type = "java_binary" 1063*6777b538SAndroid Build Coastguard Worker } 1064*6777b538SAndroid Build Coastguard Worker } 1065*6777b538SAndroid Build Coastguard Worker 1066*6777b538SAndroid Build Coastguard Worker # Declare a Java Annotation Processor. 1067*6777b538SAndroid Build Coastguard Worker # 1068*6777b538SAndroid Build Coastguard Worker # Supports all variables of java_library(), plus: 1069*6777b538SAndroid Build Coastguard Worker # jar_path: Path to a prebuilt jar. Mutually exclusive with sources & 1070*6777b538SAndroid Build Coastguard Worker # srcjar_deps. 1071*6777b538SAndroid Build Coastguard Worker # main_class: The fully-quallified class name of the processor's entry 1072*6777b538SAndroid Build Coastguard Worker # point. 1073*6777b538SAndroid Build Coastguard Worker # 1074*6777b538SAndroid Build Coastguard Worker # Example 1075*6777b538SAndroid Build Coastguard Worker # java_annotation_processor("foo_processor") { 1076*6777b538SAndroid Build Coastguard Worker # sources = [ "org/chromium/foo/FooProcessor.java" ] 1077*6777b538SAndroid Build Coastguard Worker # deps = [ ":bar_java" ] 1078*6777b538SAndroid Build Coastguard Worker # main_class = "org.chromium.foo.FooProcessor" 1079*6777b538SAndroid Build Coastguard Worker # } 1080*6777b538SAndroid Build Coastguard Worker # 1081*6777b538SAndroid Build Coastguard Worker # java_annotation_processor("foo_processor") { 1082*6777b538SAndroid Build Coastguard Worker # jar_path = "lib/prebuilt.jar" 1083*6777b538SAndroid Build Coastguard Worker # main_class = "org.chromium.foo.FooMain" 1084*6777b538SAndroid Build Coastguard Worker # } 1085*6777b538SAndroid Build Coastguard Worker # 1086*6777b538SAndroid Build Coastguard Worker # java_library("...") { 1087*6777b538SAndroid Build Coastguard Worker # annotation_processor_deps = [":foo_processor"] 1088*6777b538SAndroid Build Coastguard Worker # } 1089*6777b538SAndroid Build Coastguard Worker # 1090*6777b538SAndroid Build Coastguard Worker template("java_annotation_processor") { 1091*6777b538SAndroid Build Coastguard Worker java_library_impl(target_name) { 1092*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 1093*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1094*6777b538SAndroid Build Coastguard Worker type = "java_annotation_processor" 1095*6777b538SAndroid Build Coastguard Worker } 1096*6777b538SAndroid Build Coastguard Worker } 1097*6777b538SAndroid Build Coastguard Worker 1098*6777b538SAndroid Build Coastguard Worker # Declare a Robolectric host side test binary. 1099*6777b538SAndroid Build Coastguard Worker # 1100*6777b538SAndroid Build Coastguard Worker # This target creates an executable from java code for running as a 1101*6777b538SAndroid Build Coastguard Worker # Robolectric test suite. The executable will be in the output folder's /bin/ 1102*6777b538SAndroid Build Coastguard Worker # directory. 1103*6777b538SAndroid Build Coastguard Worker # 1104*6777b538SAndroid Build Coastguard Worker # Supports all variables of java_binary(). 1105*6777b538SAndroid Build Coastguard Worker # 1106*6777b538SAndroid Build Coastguard Worker # Example 1107*6777b538SAndroid Build Coastguard Worker # robolectric_binary("foo") { 1108*6777b538SAndroid Build Coastguard Worker # sources = [ "org/chromium/foo/FooTest.java" ] 1109*6777b538SAndroid Build Coastguard Worker # deps = [ ":bar_java" ] 1110*6777b538SAndroid Build Coastguard Worker # } 1111*6777b538SAndroid Build Coastguard Worker template("robolectric_binary") { 1112*6777b538SAndroid Build Coastguard Worker testonly = true 1113*6777b538SAndroid Build Coastguard Worker 1114*6777b538SAndroid Build Coastguard Worker _main_class = "org.chromium.testing.local.JunitTestMain" 1115*6777b538SAndroid Build Coastguard Worker _build_config = "$target_gen_dir/$target_name.build_config.json" 1116*6777b538SAndroid Build Coastguard Worker _build_config_target_name = "$target_name$build_config_target_suffix" 1117*6777b538SAndroid Build Coastguard Worker _java_binary_target_name = "${target_name}__java_binary" 1118*6777b538SAndroid Build Coastguard Worker 1119*6777b538SAndroid Build Coastguard Worker _invoker_deps = [ 1120*6777b538SAndroid Build Coastguard Worker "//testing/android/junit:junit_test_support", 1121*6777b538SAndroid Build Coastguard Worker "//third_party/android_deps:robolectric_all_java", 1122*6777b538SAndroid Build Coastguard Worker "//third_party/junit", 1123*6777b538SAndroid Build Coastguard Worker "//third_party/mockito:mockito_jvm_java", 1124*6777b538SAndroid Build Coastguard Worker ] 1125*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 1126*6777b538SAndroid Build Coastguard Worker _invoker_deps += invoker.deps 1127*6777b538SAndroid Build Coastguard Worker } 1128*6777b538SAndroid Build Coastguard Worker _non_java_deps = filter_exclude(_invoker_deps, java_target_patterns) 1129*6777b538SAndroid Build Coastguard Worker _java_assetres_deps = [ ":${_java_binary_target_name}__assetres" ] 1130*6777b538SAndroid Build Coastguard Worker 1131*6777b538SAndroid Build Coastguard Worker # A package name or a manifest is required to have resources. This is 1132*6777b538SAndroid Build Coastguard Worker # added so that junit tests that do not care about the package name can 1133*6777b538SAndroid Build Coastguard Worker # still use resources without having to explicitly set one. 1134*6777b538SAndroid Build Coastguard Worker if (defined(invoker.package_name)) { 1135*6777b538SAndroid Build Coastguard Worker _package_name = invoker.package_name 1136*6777b538SAndroid Build Coastguard Worker } else if (!defined(invoker.android_manifest)) { 1137*6777b538SAndroid Build Coastguard Worker _package_name = "no.manifest.configured" 1138*6777b538SAndroid Build Coastguard Worker } 1139*6777b538SAndroid Build Coastguard Worker 1140*6777b538SAndroid Build Coastguard Worker _merge_manifest_target_name = "${target_name}__merge_manifests" 1141*6777b538SAndroid Build Coastguard Worker _android_manifest = 1142*6777b538SAndroid Build Coastguard Worker "$target_gen_dir/$target_name.AndroidManifest.merged.xml" 1143*6777b538SAndroid Build Coastguard Worker 1144*6777b538SAndroid Build Coastguard Worker merge_manifests(_merge_manifest_target_name) { 1145*6777b538SAndroid Build Coastguard Worker if (defined(invoker.android_manifest)) { 1146*6777b538SAndroid Build Coastguard Worker input_manifest = invoker.android_manifest 1147*6777b538SAndroid Build Coastguard Worker } else { 1148*6777b538SAndroid Build Coastguard Worker input_manifest = "//build/android/AndroidManifest.xml" 1149*6777b538SAndroid Build Coastguard Worker } 1150*6777b538SAndroid Build Coastguard Worker 1151*6777b538SAndroid Build Coastguard Worker if (defined(_package_name)) { 1152*6777b538SAndroid Build Coastguard Worker manifest_package = _package_name 1153*6777b538SAndroid Build Coastguard Worker } 1154*6777b538SAndroid Build Coastguard Worker output_manifest = _android_manifest 1155*6777b538SAndroid Build Coastguard Worker build_config = _build_config 1156*6777b538SAndroid Build Coastguard Worker min_sdk_version = default_min_sdk_version 1157*6777b538SAndroid Build Coastguard Worker target_sdk_version = android_sdk_version 1158*6777b538SAndroid Build Coastguard Worker deps = _non_java_deps + _java_assetres_deps + 1159*6777b538SAndroid Build Coastguard Worker [ ":$_build_config_target_name" ] 1160*6777b538SAndroid Build Coastguard Worker if (defined(invoker.android_manifest_dep)) { 1161*6777b538SAndroid Build Coastguard Worker deps += [ invoker.android_manifest_dep ] 1162*6777b538SAndroid Build Coastguard Worker } 1163*6777b538SAndroid Build Coastguard Worker } 1164*6777b538SAndroid Build Coastguard Worker 1165*6777b538SAndroid Build Coastguard Worker _resource_arsc_output = "${target_out_dir}/${target_name}.ap_" 1166*6777b538SAndroid Build Coastguard Worker _compile_resources_target_name = "${target_name}__compile_resources" 1167*6777b538SAndroid Build Coastguard Worker compile_resources(_compile_resources_target_name) { 1168*6777b538SAndroid Build Coastguard Worker deps = _non_java_deps + _java_assetres_deps + 1169*6777b538SAndroid Build Coastguard Worker [ ":$_merge_manifest_target_name" ] 1170*6777b538SAndroid Build Coastguard Worker build_config_dep = ":$_build_config_target_name" 1171*6777b538SAndroid Build Coastguard Worker build_config = _build_config 1172*6777b538SAndroid Build Coastguard Worker if (defined(_package_name)) { 1173*6777b538SAndroid Build Coastguard Worker rename_manifest_package = _package_name 1174*6777b538SAndroid Build Coastguard Worker } 1175*6777b538SAndroid Build Coastguard Worker android_manifest = _android_manifest 1176*6777b538SAndroid Build Coastguard Worker arsc_output = _resource_arsc_output 1177*6777b538SAndroid Build Coastguard Worker min_sdk_version = default_min_sdk_version 1178*6777b538SAndroid Build Coastguard Worker target_sdk_version = android_sdk_version 1179*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "override_target_sdk" ]) 1180*6777b538SAndroid Build Coastguard Worker } 1181*6777b538SAndroid Build Coastguard Worker 1182*6777b538SAndroid Build Coastguard Worker # apkbuilder step needed only to add android assets to the .ap_ file. 1183*6777b538SAndroid Build Coastguard Worker _apkbuilder_output = "${target_out_dir}/${target_name}.robo.ap_" 1184*6777b538SAndroid Build Coastguard Worker _apkbuilder_target_name = "${target_name}__apkbuilder" 1185*6777b538SAndroid Build Coastguard Worker package_apk("$_apkbuilder_target_name") { 1186*6777b538SAndroid Build Coastguard Worker build_config = _build_config 1187*6777b538SAndroid Build Coastguard Worker min_sdk_version = default_min_sdk_version 1188*6777b538SAndroid Build Coastguard Worker deps = _java_assetres_deps + [ 1189*6777b538SAndroid Build Coastguard Worker ":$_build_config_target_name", 1190*6777b538SAndroid Build Coastguard Worker ":$_compile_resources_target_name", 1191*6777b538SAndroid Build Coastguard Worker ] 1192*6777b538SAndroid Build Coastguard Worker 1193*6777b538SAndroid Build Coastguard Worker is_robolectric_apk = true 1194*6777b538SAndroid Build Coastguard Worker packaged_resources_path = _resource_arsc_output 1195*6777b538SAndroid Build Coastguard Worker output_apk_path = _apkbuilder_output 1196*6777b538SAndroid Build Coastguard Worker } 1197*6777b538SAndroid Build Coastguard Worker 1198*6777b538SAndroid Build Coastguard Worker # Some may want to disable this to remove dependency on //base 1199*6777b538SAndroid Build Coastguard Worker # (JNI generator is in //base). 1200*6777b538SAndroid Build Coastguard Worker _generate_final_jni = 1201*6777b538SAndroid Build Coastguard Worker !defined(invoker.generate_final_jni) || invoker.generate_final_jni 1202*6777b538SAndroid Build Coastguard Worker if (_generate_final_jni) { 1203*6777b538SAndroid Build Coastguard Worker _jni_srcjar_deps = [] 1204*6777b538SAndroid Build Coastguard Worker if (defined(invoker.shared_libraries)) { 1205*6777b538SAndroid Build Coastguard Worker foreach(_dep, invoker.shared_libraries) { 1206*6777b538SAndroid Build Coastguard Worker _dep_no_toolchain = get_label_info(_dep, "label_no_toolchain") 1207*6777b538SAndroid Build Coastguard Worker _dep_toolchain = get_label_info(_dep, "toolchain") 1208*6777b538SAndroid Build Coastguard Worker assert( 1209*6777b538SAndroid Build Coastguard Worker _dep_toolchain == robolectric_toolchain, 1210*6777b538SAndroid Build Coastguard Worker "$target_name has shared_libraries with incorrect toolchain. " + 1211*6777b538SAndroid Build Coastguard Worker "Should contain (\$robolectric_toolchain) suffix: $_dep") 1212*6777b538SAndroid Build Coastguard Worker _jni_srcjar_deps += 1213*6777b538SAndroid Build Coastguard Worker [ "${_dep_no_toolchain}__jni_registration($default_toolchain)" ] 1214*6777b538SAndroid Build Coastguard Worker } 1215*6777b538SAndroid Build Coastguard Worker 1216*6777b538SAndroid Build Coastguard Worker # Write shared library output files of all dependencies to a file. Those 1217*6777b538SAndroid Build Coastguard Worker # will be the shared libraries packaged into the APK. 1218*6777b538SAndroid Build Coastguard Worker _shared_library_list_file = "$target_gen_dir/$target_name.native_libs" 1219*6777b538SAndroid Build Coastguard Worker generated_file("${target_name}__shared_library_list") { 1220*6777b538SAndroid Build Coastguard Worker deps = invoker.shared_libraries 1221*6777b538SAndroid Build Coastguard Worker outputs = [ _shared_library_list_file ] 1222*6777b538SAndroid Build Coastguard Worker data_keys = [ "shared_libraries" ] 1223*6777b538SAndroid Build Coastguard Worker walk_keys = [ "shared_libraries_barrier" ] 1224*6777b538SAndroid Build Coastguard Worker rebase = root_build_dir 1225*6777b538SAndroid Build Coastguard Worker } 1226*6777b538SAndroid Build Coastguard Worker } else { 1227*6777b538SAndroid Build Coastguard Worker # Needed for generate_jni_registration. Keeping this import guarded so 1228*6777b538SAndroid Build Coastguard Worker # that projects who import //build but not //third_party/jni_zero don't 1229*6777b538SAndroid Build Coastguard Worker # have issues. 1230*6777b538SAndroid Build Coastguard Worker import("//third_party/jni_zero/jni_zero.gni") 1231*6777b538SAndroid Build Coastguard Worker _jni_srcjar_target_name = "${target_name}__final_jni" 1232*6777b538SAndroid Build Coastguard Worker generate_jni_registration(_jni_srcjar_target_name) { 1233*6777b538SAndroid Build Coastguard Worker enable_native_mocks = true 1234*6777b538SAndroid Build Coastguard Worker require_native_mocks = true 1235*6777b538SAndroid Build Coastguard Worker java_targets = [ ":$_java_binary_target_name" ] 1236*6777b538SAndroid Build Coastguard Worker add_stubs_for_missing_jni = true 1237*6777b538SAndroid Build Coastguard Worker } 1238*6777b538SAndroid Build Coastguard Worker _jni_srcjar_deps = [ ":$_jni_srcjar_target_name" ] 1239*6777b538SAndroid Build Coastguard Worker } 1240*6777b538SAndroid Build Coastguard Worker _native_libraries_target_name = "${target_name}__native_libraries" 1241*6777b538SAndroid Build Coastguard Worker write_native_libraries_java(_native_libraries_target_name) { 1242*6777b538SAndroid Build Coastguard Worker enable_chromium_linker = false 1243*6777b538SAndroid Build Coastguard Worker use_final_fields = true 1244*6777b538SAndroid Build Coastguard Worker if (defined(_shared_library_list_file)) { 1245*6777b538SAndroid Build Coastguard Worker native_libraries_list_file = _shared_library_list_file 1246*6777b538SAndroid Build Coastguard Worker } 1247*6777b538SAndroid Build Coastguard Worker } 1248*6777b538SAndroid Build Coastguard Worker } 1249*6777b538SAndroid Build Coastguard Worker 1250*6777b538SAndroid Build Coastguard Worker java_library_impl(_java_binary_target_name) { 1251*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1252*6777b538SAndroid Build Coastguard Worker "*", 1253*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 1254*6777b538SAndroid Build Coastguard Worker "deps", 1255*6777b538SAndroid Build Coastguard Worker "extra_args", 1256*6777b538SAndroid Build Coastguard Worker "shared_libraries", 1257*6777b538SAndroid Build Coastguard Worker ]) 1258*6777b538SAndroid Build Coastguard Worker type = "robolectric_binary" 1259*6777b538SAndroid Build Coastguard Worker main_target_name = invoker.target_name 1260*6777b538SAndroid Build Coastguard Worker 1261*6777b538SAndroid Build Coastguard Worker deps = _invoker_deps 1262*6777b538SAndroid Build Coastguard Worker testonly = true 1263*6777b538SAndroid Build Coastguard Worker main_class = _main_class 1264*6777b538SAndroid Build Coastguard Worker wrapper_script_name = "helper/$main_target_name" 1265*6777b538SAndroid Build Coastguard Worker 1266*6777b538SAndroid Build Coastguard Worker # As of April 2021, adding -XX:TieredStopAtLevel=1 does not affect the 1267*6777b538SAndroid Build Coastguard Worker # wall time of a single robolectric shard, but does reduce the CPU time by 1268*6777b538SAndroid Build Coastguard Worker # 66%, which makes sharding more effective. 1269*6777b538SAndroid Build Coastguard Worker tiered_stop_at_level_one = true 1270*6777b538SAndroid Build Coastguard Worker 1271*6777b538SAndroid Build Coastguard Worker is_robolectric = true 1272*6777b538SAndroid Build Coastguard Worker include_android_sdk = true 1273*6777b538SAndroid Build Coastguard Worker alternative_android_sdk_dep = 1274*6777b538SAndroid Build Coastguard Worker "//third_party/robolectric:robolectric_test_sdk_java" 1275*6777b538SAndroid Build Coastguard Worker 1276*6777b538SAndroid Build Coastguard Worker if (!defined(srcjar_deps)) { 1277*6777b538SAndroid Build Coastguard Worker srcjar_deps = [] 1278*6777b538SAndroid Build Coastguard Worker } 1279*6777b538SAndroid Build Coastguard Worker srcjar_deps += [ 1280*6777b538SAndroid Build Coastguard Worker ":$_compile_resources_target_name", 1281*6777b538SAndroid Build Coastguard Worker "//build/android:build_config_for_testing_gen", 1282*6777b538SAndroid Build Coastguard Worker ] 1283*6777b538SAndroid Build Coastguard Worker if (_generate_final_jni) { 1284*6777b538SAndroid Build Coastguard Worker srcjar_deps += [ ":$_native_libraries_target_name" ] + _jni_srcjar_deps 1285*6777b538SAndroid Build Coastguard Worker } 1286*6777b538SAndroid Build Coastguard Worker } 1287*6777b538SAndroid Build Coastguard Worker 1288*6777b538SAndroid Build Coastguard Worker test_runner_script(target_name) { 1289*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1290*6777b538SAndroid Build Coastguard Worker [ 1291*6777b538SAndroid Build Coastguard Worker "assert_no_deps", 1292*6777b538SAndroid Build Coastguard Worker "extra_args", 1293*6777b538SAndroid Build Coastguard Worker "visibility", 1294*6777b538SAndroid Build Coastguard Worker ]) 1295*6777b538SAndroid Build Coastguard Worker test_name = invoker.target_name 1296*6777b538SAndroid Build Coastguard Worker test_suite = invoker.target_name 1297*6777b538SAndroid Build Coastguard Worker test_type = "junit" 1298*6777b538SAndroid Build Coastguard Worker ignore_all_data_deps = true 1299*6777b538SAndroid Build Coastguard Worker resource_apk = _apkbuilder_output 1300*6777b538SAndroid Build Coastguard Worker deps = [ 1301*6777b538SAndroid Build Coastguard Worker ":$_apkbuilder_target_name", 1302*6777b538SAndroid Build Coastguard Worker ":$_build_config_target_name", 1303*6777b538SAndroid Build Coastguard Worker ":${_java_binary_target_name}__host", 1304*6777b538SAndroid Build Coastguard Worker ":${_java_binary_target_name}__java_binary_script", 1305*6777b538SAndroid Build Coastguard Worker ":${_java_binary_target_name}__validate", 1306*6777b538SAndroid Build Coastguard Worker "//third_party/robolectric:robolectric_runtime_jars", 1307*6777b538SAndroid Build Coastguard Worker ] 1308*6777b538SAndroid Build Coastguard Worker if (defined(invoker.shared_libraries)) { 1309*6777b538SAndroid Build Coastguard Worker data_deps = invoker.shared_libraries 1310*6777b538SAndroid Build Coastguard Worker } 1311*6777b538SAndroid Build Coastguard Worker 1312*6777b538SAndroid Build Coastguard Worker # Add non-libary deps, since the __host target does not depend on them. 1313*6777b538SAndroid Build Coastguard Worker deps += filter_exclude(_invoker_deps, java_library_patterns) 1314*6777b538SAndroid Build Coastguard Worker 1315*6777b538SAndroid Build Coastguard Worker metadata = { 1316*6777b538SAndroid Build Coastguard Worker # Allows metadata collection via apk targets that traverse only java deps. 1317*6777b538SAndroid Build Coastguard Worker java_walk_keys = [ ":${_java_binary_target_name}__host" ] 1318*6777b538SAndroid Build Coastguard Worker } 1319*6777b538SAndroid Build Coastguard Worker } 1320*6777b538SAndroid Build Coastguard Worker } 1321*6777b538SAndroid Build Coastguard Worker 1322*6777b538SAndroid Build Coastguard Worker # Declare a java library target 1323*6777b538SAndroid Build Coastguard Worker # 1324*6777b538SAndroid Build Coastguard Worker # Variables 1325*6777b538SAndroid Build Coastguard Worker # deps: Specifies the dependencies of this target. Java targets in this list 1326*6777b538SAndroid Build Coastguard Worker # will be added to the javac classpath. 1327*6777b538SAndroid Build Coastguard Worker # public_deps: Dependencies that this target exposes as part of its public API. 1328*6777b538SAndroid Build Coastguard Worker # public_deps do not need to be listed in both the 'deps' and 'public_deps' lists. 1329*6777b538SAndroid Build Coastguard Worker # annotation_processor_deps: List of java_annotation_processor targets to 1330*6777b538SAndroid Build Coastguard Worker # use when compiling. 1331*6777b538SAndroid Build Coastguard Worker # 1332*6777b538SAndroid Build Coastguard Worker # jar_path: Path to a prebuilt jar. Mutually exclusive with sources & 1333*6777b538SAndroid Build Coastguard Worker # srcjar_deps. 1334*6777b538SAndroid Build Coastguard Worker # sources: List of .java files included in this library. 1335*6777b538SAndroid Build Coastguard Worker # srcjar_deps: List of srcjar dependencies. The .java files in the srcjars 1336*6777b538SAndroid Build Coastguard Worker # will be added to sources and be included in this library. 1337*6777b538SAndroid Build Coastguard Worker # 1338*6777b538SAndroid Build Coastguard Worker # input_jars_paths: A list of paths to the jars that should be included 1339*6777b538SAndroid Build Coastguard Worker # in the compile-time classpath. These are in addition to library .jars 1340*6777b538SAndroid Build Coastguard Worker # that appear in deps. 1341*6777b538SAndroid Build Coastguard Worker # 1342*6777b538SAndroid Build Coastguard Worker # chromium_code: If true, extra analysis warning/errors will be enabled. 1343*6777b538SAndroid Build Coastguard Worker # enable_errorprone: If true, enables the errorprone compiler. 1344*6777b538SAndroid Build Coastguard Worker # skip_build_server: If true, avoids sending tasks to the build server. 1345*6777b538SAndroid Build Coastguard Worker # 1346*6777b538SAndroid Build Coastguard Worker # jar_excluded_patterns: List of patterns of .class files to exclude. 1347*6777b538SAndroid Build Coastguard Worker # jar_included_patterns: List of patterns of .class files to include. 1348*6777b538SAndroid Build Coastguard Worker # When omitted, all classes not matched by jar_excluded_patterns are 1349*6777b538SAndroid Build Coastguard Worker # included. When specified, all non-matching .class files are stripped. 1350*6777b538SAndroid Build Coastguard Worker # 1351*6777b538SAndroid Build Coastguard Worker # low_classpath_priority: Indicates that the library should be placed at the 1352*6777b538SAndroid Build Coastguard Worker # end of the classpath. The default classpath order has libraries ordered 1353*6777b538SAndroid Build Coastguard Worker # before the libraries that they depend on. 'low_classpath_priority' is 1354*6777b538SAndroid Build Coastguard Worker # useful when one java_library() overrides another via 1355*6777b538SAndroid Build Coastguard Worker # 'jar_excluded_patterns' and the overriding library does not depend on 1356*6777b538SAndroid Build Coastguard Worker # the overridee. 1357*6777b538SAndroid Build Coastguard Worker # 1358*6777b538SAndroid Build Coastguard Worker # output_name: File name for the output .jar (not including extension). 1359*6777b538SAndroid Build Coastguard Worker # Defaults to the input .jar file name. 1360*6777b538SAndroid Build Coastguard Worker # 1361*6777b538SAndroid Build Coastguard Worker # proguard_configs: List of proguard configs to use in final apk step for 1362*6777b538SAndroid Build Coastguard Worker # any apk that depends on this library. 1363*6777b538SAndroid Build Coastguard Worker # 1364*6777b538SAndroid Build Coastguard Worker # supports_android: If true, Android targets (android_library, android_apk) 1365*6777b538SAndroid Build Coastguard Worker # may depend on this target. Note: if true, this target must only use the 1366*6777b538SAndroid Build Coastguard Worker # subset of Java available on Android. 1367*6777b538SAndroid Build Coastguard Worker # bypass_platform_checks: Disables checks about cross-platform (Java/Android) 1368*6777b538SAndroid Build Coastguard Worker # dependencies for this target. This will allow depending on an 1369*6777b538SAndroid Build Coastguard Worker # android_library target, for example. 1370*6777b538SAndroid Build Coastguard Worker # enable_desugar: If false, disables desugaring of lambdas, etc. Use this 1371*6777b538SAndroid Build Coastguard Worker # only when you are sure the library does not require desugaring. E.g. 1372*6777b538SAndroid Build Coastguard Worker # to hide warnings shown from desugaring. 1373*6777b538SAndroid Build Coastguard Worker # 1374*6777b538SAndroid Build Coastguard Worker # additional_jar_files: Use to package additional files (Java resources) 1375*6777b538SAndroid Build Coastguard Worker # into the output jar. Pass a list of length-2 lists with format: 1376*6777b538SAndroid Build Coastguard Worker # [ [ path_to_file, path_to_put_in_jar ] ] 1377*6777b538SAndroid Build Coastguard Worker # 1378*6777b538SAndroid Build Coastguard Worker # javac_args: Additional arguments to pass to javac. 1379*6777b538SAndroid Build Coastguard Worker # errorprone_args: Additional arguments to pass to errorprone. 1380*6777b538SAndroid Build Coastguard Worker # 1381*6777b538SAndroid Build Coastguard Worker # data_deps, testonly 1382*6777b538SAndroid Build Coastguard Worker # 1383*6777b538SAndroid Build Coastguard Worker # Example 1384*6777b538SAndroid Build Coastguard Worker # java_library("foo_java") { 1385*6777b538SAndroid Build Coastguard Worker # sources = [ 1386*6777b538SAndroid Build Coastguard Worker # "org/chromium/foo/Foo.java", 1387*6777b538SAndroid Build Coastguard Worker # "org/chromium/foo/FooInterface.java", 1388*6777b538SAndroid Build Coastguard Worker # "org/chromium/foo/FooService.java", 1389*6777b538SAndroid Build Coastguard Worker # ] 1390*6777b538SAndroid Build Coastguard Worker # deps = [ 1391*6777b538SAndroid Build Coastguard Worker # ":bar_java" 1392*6777b538SAndroid Build Coastguard Worker # ] 1393*6777b538SAndroid Build Coastguard Worker # srcjar_deps = [ 1394*6777b538SAndroid Build Coastguard Worker # ":foo_generated_enum" 1395*6777b538SAndroid Build Coastguard Worker # ] 1396*6777b538SAndroid Build Coastguard Worker # jar_excluded_patterns = [ 1397*6777b538SAndroid Build Coastguard Worker # "*/FooService.class", "org/chromium/FooService\$*.class" 1398*6777b538SAndroid Build Coastguard Worker # ] 1399*6777b538SAndroid Build Coastguard Worker # } 1400*6777b538SAndroid Build Coastguard Worker template("java_library") { 1401*6777b538SAndroid Build Coastguard Worker java_library_impl(target_name) { 1402*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 1403*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1404*6777b538SAndroid Build Coastguard Worker type = "java_library" 1405*6777b538SAndroid Build Coastguard Worker } 1406*6777b538SAndroid Build Coastguard Worker } 1407*6777b538SAndroid Build Coastguard Worker 1408*6777b538SAndroid Build Coastguard Worker # Declare a java library target for a prebuilt jar 1409*6777b538SAndroid Build Coastguard Worker # 1410*6777b538SAndroid Build Coastguard Worker # Supports all variables of java_library(). 1411*6777b538SAndroid Build Coastguard Worker # 1412*6777b538SAndroid Build Coastguard Worker # Example 1413*6777b538SAndroid Build Coastguard Worker # java_prebuilt("foo_java") { 1414*6777b538SAndroid Build Coastguard Worker # jar_path = "foo.jar" 1415*6777b538SAndroid Build Coastguard Worker # deps = [ 1416*6777b538SAndroid Build Coastguard Worker # ":foo_resources", 1417*6777b538SAndroid Build Coastguard Worker # ":bar_java" 1418*6777b538SAndroid Build Coastguard Worker # ] 1419*6777b538SAndroid Build Coastguard Worker # } 1420*6777b538SAndroid Build Coastguard Worker template("java_prebuilt") { 1421*6777b538SAndroid Build Coastguard Worker java_library_impl(target_name) { 1422*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 1423*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1424*6777b538SAndroid Build Coastguard Worker type = "java_library" 1425*6777b538SAndroid Build Coastguard Worker } 1426*6777b538SAndroid Build Coastguard Worker } 1427*6777b538SAndroid Build Coastguard Worker 1428*6777b538SAndroid Build Coastguard Worker # Combines all dependent .jar files into a single .jar file. 1429*6777b538SAndroid Build Coastguard Worker # 1430*6777b538SAndroid Build Coastguard Worker # Variables: 1431*6777b538SAndroid Build Coastguard Worker # output: Path to the output jar. 1432*6777b538SAndroid Build Coastguard Worker # use_interface_jars: Use all dependent interface .jars rather than 1433*6777b538SAndroid Build Coastguard Worker # implementation .jars. 1434*6777b538SAndroid Build Coastguard Worker # use_unprocessed_jars: Use unprocessed / undesugared .jars. 1435*6777b538SAndroid Build Coastguard Worker # direct_deps_only: Do not recurse on deps. 1436*6777b538SAndroid Build Coastguard Worker # jar_excluded_patterns (optional) 1437*6777b538SAndroid Build Coastguard Worker # List of globs for paths to exclude. 1438*6777b538SAndroid Build Coastguard Worker # 1439*6777b538SAndroid Build Coastguard Worker # Example 1440*6777b538SAndroid Build Coastguard Worker # dist_jar("lib_fatjar") { 1441*6777b538SAndroid Build Coastguard Worker # deps = [ ":my_java_lib" ] 1442*6777b538SAndroid Build Coastguard Worker # output = "$root_build_dir/MyLibrary.jar" 1443*6777b538SAndroid Build Coastguard Worker # } 1444*6777b538SAndroid Build Coastguard Worker template("dist_jar") { 1445*6777b538SAndroid Build Coastguard Worker # TODO(crbug.com/1042017): Remove. 1446*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "no_build_hooks" ]) 1447*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1448*6777b538SAndroid Build Coastguard Worker _use_interface_jars = 1449*6777b538SAndroid Build Coastguard Worker defined(invoker.use_interface_jars) && invoker.use_interface_jars 1450*6777b538SAndroid Build Coastguard Worker _use_unprocessed_jars = 1451*6777b538SAndroid Build Coastguard Worker defined(invoker.use_unprocessed_jars) && invoker.use_unprocessed_jars 1452*6777b538SAndroid Build Coastguard Worker _direct_deps_only = 1453*6777b538SAndroid Build Coastguard Worker defined(invoker.direct_deps_only) && invoker.direct_deps_only 1454*6777b538SAndroid Build Coastguard Worker assert(!(_use_unprocessed_jars && _use_interface_jars), 1455*6777b538SAndroid Build Coastguard Worker "Cannot set both use_interface_jars and use_unprocessed_jars") 1456*6777b538SAndroid Build Coastguard Worker 1457*6777b538SAndroid Build Coastguard Worker _jar_target_name = target_name 1458*6777b538SAndroid Build Coastguard Worker 1459*6777b538SAndroid Build Coastguard Worker if (defined(invoker.build_config)) { 1460*6777b538SAndroid Build Coastguard Worker _build_config = invoker.build_config 1461*6777b538SAndroid Build Coastguard Worker _build_config_dep = invoker.build_config_dep 1462*6777b538SAndroid Build Coastguard Worker } else { 1463*6777b538SAndroid Build Coastguard Worker _build_config = "$target_gen_dir/$target_name.build_config.json" 1464*6777b538SAndroid Build Coastguard Worker _build_config_target_name = "$target_name$build_config_target_suffix" 1465*6777b538SAndroid Build Coastguard Worker _build_config_dep = ":$_build_config_target_name" 1466*6777b538SAndroid Build Coastguard Worker 1467*6777b538SAndroid Build Coastguard Worker write_build_config(_build_config_target_name) { 1468*6777b538SAndroid Build Coastguard Worker type = "dist_jar" 1469*6777b538SAndroid Build Coastguard Worker supports_android = 1470*6777b538SAndroid Build Coastguard Worker !defined(invoker.supports_android) || invoker.supports_android 1471*6777b538SAndroid Build Coastguard Worker requires_android = 1472*6777b538SAndroid Build Coastguard Worker defined(invoker.requires_android) && invoker.requires_android 1473*6777b538SAndroid Build Coastguard Worker possible_config_deps = invoker.deps 1474*6777b538SAndroid Build Coastguard Worker build_config = _build_config 1475*6777b538SAndroid Build Coastguard Worker } 1476*6777b538SAndroid Build Coastguard Worker } 1477*6777b538SAndroid Build Coastguard Worker 1478*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(_build_config, root_build_dir) 1479*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_jar_target_name) { 1480*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "data" ]) 1481*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/zip.py" 1482*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 1483*6777b538SAndroid Build Coastguard Worker deps = [ _build_config_dep ] 1484*6777b538SAndroid Build Coastguard Worker 1485*6777b538SAndroid Build Coastguard Worker if (_use_interface_jars) { 1486*6777b538SAndroid Build Coastguard Worker _lib_deps = 1487*6777b538SAndroid Build Coastguard Worker filter_exclude(filter_include(invoker.deps, java_library_patterns), 1488*6777b538SAndroid Build Coastguard Worker java_resource_patterns) 1489*6777b538SAndroid Build Coastguard Worker _other_deps = filter_exclude(invoker.deps, _lib_deps) 1490*6777b538SAndroid Build Coastguard Worker foreach(_lib_dep, _lib_deps) { 1491*6777b538SAndroid Build Coastguard Worker # Expand //foo/java -> //foo/java:java 1492*6777b538SAndroid Build Coastguard Worker _lib_dep = get_label_info(_lib_dep, "label_no_toolchain") 1493*6777b538SAndroid Build Coastguard Worker deps += [ "${_lib_dep}__header" ] 1494*6777b538SAndroid Build Coastguard Worker } 1495*6777b538SAndroid Build Coastguard Worker deps += _other_deps 1496*6777b538SAndroid Build Coastguard Worker } else { 1497*6777b538SAndroid Build Coastguard Worker deps += invoker.deps 1498*6777b538SAndroid Build Coastguard Worker } 1499*6777b538SAndroid Build Coastguard Worker 1500*6777b538SAndroid Build Coastguard Worker inputs = [ _build_config ] 1501*6777b538SAndroid Build Coastguard Worker 1502*6777b538SAndroid Build Coastguard Worker outputs = [ invoker.output ] 1503*6777b538SAndroid Build Coastguard Worker 1504*6777b538SAndroid Build Coastguard Worker args = [ 1505*6777b538SAndroid Build Coastguard Worker "--depfile", 1506*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 1507*6777b538SAndroid Build Coastguard Worker "--output", 1508*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output, root_build_dir), 1509*6777b538SAndroid Build Coastguard Worker "--no-compress", 1510*6777b538SAndroid Build Coastguard Worker ] 1511*6777b538SAndroid Build Coastguard Worker 1512*6777b538SAndroid Build Coastguard Worker if (_direct_deps_only) { 1513*6777b538SAndroid Build Coastguard Worker if (_use_interface_jars) { 1514*6777b538SAndroid Build Coastguard Worker args += [ "--input-zips=@FileArg($_rebased_build_config:javac:interface_classpath)" ] 1515*6777b538SAndroid Build Coastguard Worker } else if (_use_unprocessed_jars) { 1516*6777b538SAndroid Build Coastguard Worker args += [ 1517*6777b538SAndroid Build Coastguard Worker "--input-zips=@FileArg($_rebased_build_config:javac:classpath)", 1518*6777b538SAndroid Build Coastguard Worker ] 1519*6777b538SAndroid Build Coastguard Worker } else { 1520*6777b538SAndroid Build Coastguard Worker assert( 1521*6777b538SAndroid Build Coastguard Worker false, 1522*6777b538SAndroid Build Coastguard Worker "direct_deps_only does not work without use_interface_jars or use_unprocessed_jars") 1523*6777b538SAndroid Build Coastguard Worker } 1524*6777b538SAndroid Build Coastguard Worker } else { 1525*6777b538SAndroid Build Coastguard Worker if (_use_interface_jars) { 1526*6777b538SAndroid Build Coastguard Worker args += [ "--input-zips=@FileArg($_rebased_build_config:dist_jar:all_interface_jars)" ] 1527*6777b538SAndroid Build Coastguard Worker } else if (_use_unprocessed_jars) { 1528*6777b538SAndroid Build Coastguard Worker args += [ "--input-zips=@FileArg($_rebased_build_config:deps_info:javac_full_classpath)" ] 1529*6777b538SAndroid Build Coastguard Worker } else { 1530*6777b538SAndroid Build Coastguard Worker args += [ "--input-zips=@FileArg($_rebased_build_config:deps_info:device_classpath)" ] 1531*6777b538SAndroid Build Coastguard Worker } 1532*6777b538SAndroid Build Coastguard Worker } 1533*6777b538SAndroid Build Coastguard Worker 1534*6777b538SAndroid Build Coastguard Worker _excludes = [] 1535*6777b538SAndroid Build Coastguard Worker if (defined(invoker.jar_excluded_patterns)) { 1536*6777b538SAndroid Build Coastguard Worker _excludes += invoker.jar_excluded_patterns 1537*6777b538SAndroid Build Coastguard Worker } 1538*6777b538SAndroid Build Coastguard Worker if (_use_interface_jars) { 1539*6777b538SAndroid Build Coastguard Worker # Turbine adds files like: META-INF/TRANSITIVE/.../Foo.class 1540*6777b538SAndroid Build Coastguard Worker # These confuse proguard: https://crbug.com/1081443 1541*6777b538SAndroid Build Coastguard Worker _excludes += [ "META-INF/*" ] 1542*6777b538SAndroid Build Coastguard Worker } else { 1543*6777b538SAndroid Build Coastguard Worker # Manifest files will never be correct when merging jars. 1544*6777b538SAndroid Build Coastguard Worker _excludes += [ "META-INF/*.MF" ] 1545*6777b538SAndroid Build Coastguard Worker } 1546*6777b538SAndroid Build Coastguard Worker if (_excludes != []) { 1547*6777b538SAndroid Build Coastguard Worker args += [ "--input-zips-excluded-globs=$_excludes" ] 1548*6777b538SAndroid Build Coastguard Worker } 1549*6777b538SAndroid Build Coastguard Worker } 1550*6777b538SAndroid Build Coastguard Worker } 1551*6777b538SAndroid Build Coastguard Worker 1552*6777b538SAndroid Build Coastguard Worker # Combines all dependent .jar files into a single proguarded .dex file. 1553*6777b538SAndroid Build Coastguard Worker # 1554*6777b538SAndroid Build Coastguard Worker # Variables: 1555*6777b538SAndroid Build Coastguard Worker # output: Path to the output .dex or .dex.jar. 1556*6777b538SAndroid Build Coastguard Worker # proguard_enabled: Whether to enable R8. 1557*6777b538SAndroid Build Coastguard Worker # proguard_configs: List of proguard configs. 1558*6777b538SAndroid Build Coastguard Worker # proguard_enable_obfuscation: Whether to enable obfuscation (default=true). 1559*6777b538SAndroid Build Coastguard Worker # package_name: Used in the Proguard map ID. 1560*6777b538SAndroid Build Coastguard Worker # version_code: Used in the Proguard map ID. 1561*6777b538SAndroid Build Coastguard Worker # 1562*6777b538SAndroid Build Coastguard Worker # Example 1563*6777b538SAndroid Build Coastguard Worker # dist_dex("lib_fatjar") { 1564*6777b538SAndroid Build Coastguard Worker # deps = [ ":my_java_lib" ] 1565*6777b538SAndroid Build Coastguard Worker # output = "$root_build_dir/MyLibrary.jar" 1566*6777b538SAndroid Build Coastguard Worker # } 1567*6777b538SAndroid Build Coastguard Worker template("dist_dex") { 1568*6777b538SAndroid Build Coastguard Worker _deps = [ default_android_sdk_dep ] 1569*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 1570*6777b538SAndroid Build Coastguard Worker _deps += invoker.deps 1571*6777b538SAndroid Build Coastguard Worker } 1572*6777b538SAndroid Build Coastguard Worker 1573*6777b538SAndroid Build Coastguard Worker _build_config = "$target_gen_dir/$target_name.build_config.json" 1574*6777b538SAndroid Build Coastguard Worker _build_config_target_name = "$target_name$build_config_target_suffix" 1575*6777b538SAndroid Build Coastguard Worker 1576*6777b538SAndroid Build Coastguard Worker write_build_config(_build_config_target_name) { 1577*6777b538SAndroid Build Coastguard Worker type = "dist_jar" 1578*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1579*6777b538SAndroid Build Coastguard Worker [ 1580*6777b538SAndroid Build Coastguard Worker "proguard_configs", 1581*6777b538SAndroid Build Coastguard Worker "proguard_enabled", 1582*6777b538SAndroid Build Coastguard Worker ]) 1583*6777b538SAndroid Build Coastguard Worker supports_android = true 1584*6777b538SAndroid Build Coastguard Worker requires_android = true 1585*6777b538SAndroid Build Coastguard Worker possible_config_deps = _deps 1586*6777b538SAndroid Build Coastguard Worker build_config = _build_config 1587*6777b538SAndroid Build Coastguard Worker } 1588*6777b538SAndroid Build Coastguard Worker 1589*6777b538SAndroid Build Coastguard Worker dex(target_name) { 1590*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1591*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 1592*6777b538SAndroid Build Coastguard Worker "data", 1593*6777b538SAndroid Build Coastguard Worker "data_deps", 1594*6777b538SAndroid Build Coastguard Worker "package_name", 1595*6777b538SAndroid Build Coastguard Worker "proguard_configs", 1596*6777b538SAndroid Build Coastguard Worker "proguard_enabled", 1597*6777b538SAndroid Build Coastguard Worker "proguard_enable_obfuscation", 1598*6777b538SAndroid Build Coastguard Worker "min_sdk_version", 1599*6777b538SAndroid Build Coastguard Worker "repackage_classes", 1600*6777b538SAndroid Build Coastguard Worker "version_code", 1601*6777b538SAndroid Build Coastguard Worker ]) 1602*6777b538SAndroid Build Coastguard Worker deps = [ ":$_build_config_target_name" ] + _deps 1603*6777b538SAndroid Build Coastguard Worker build_config = _build_config 1604*6777b538SAndroid Build Coastguard Worker output = invoker.output 1605*6777b538SAndroid Build Coastguard Worker if (defined(proguard_enabled) && proguard_enabled) { 1606*6777b538SAndroid Build Coastguard Worker # The individual dependencies would have caught real missing deps in 1607*6777b538SAndroid Build Coastguard Worker # their respective dex steps. False positives that were suppressed at 1608*6777b538SAndroid Build Coastguard Worker # per-target dex steps are emitted here since this is using jar files 1609*6777b538SAndroid Build Coastguard Worker # rather than dex files. 1610*6777b538SAndroid Build Coastguard Worker ignore_desugar_missing_deps = true 1611*6777b538SAndroid Build Coastguard Worker } else { 1612*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(_build_config, root_build_dir) 1613*6777b538SAndroid Build Coastguard Worker input_dex_filearg = 1614*6777b538SAndroid Build Coastguard Worker "@FileArg(${_rebased_build_config}:deps_info:all_dex_files)" 1615*6777b538SAndroid Build Coastguard Worker } 1616*6777b538SAndroid Build Coastguard Worker } 1617*6777b538SAndroid Build Coastguard Worker } 1618*6777b538SAndroid Build Coastguard Worker 1619*6777b538SAndroid Build Coastguard Worker # Creates an Android .aar library. 1620*6777b538SAndroid Build Coastguard Worker # 1621*6777b538SAndroid Build Coastguard Worker # Currently supports: 1622*6777b538SAndroid Build Coastguard Worker # * AndroidManifest.xml 1623*6777b538SAndroid Build Coastguard Worker # * classes.jar 1624*6777b538SAndroid Build Coastguard Worker # * jni/ 1625*6777b538SAndroid Build Coastguard Worker # * res/ 1626*6777b538SAndroid Build Coastguard Worker # * R.txt 1627*6777b538SAndroid Build Coastguard Worker # * proguard.txt 1628*6777b538SAndroid Build Coastguard Worker # Does not yet support: 1629*6777b538SAndroid Build Coastguard Worker # * public.txt 1630*6777b538SAndroid Build Coastguard Worker # * annotations.zip 1631*6777b538SAndroid Build Coastguard Worker # * assets/ 1632*6777b538SAndroid Build Coastguard Worker # See: https://developer.android.com/studio/projects/android-library.html#aar-contents 1633*6777b538SAndroid Build Coastguard Worker # 1634*6777b538SAndroid Build Coastguard Worker # Variables: 1635*6777b538SAndroid Build Coastguard Worker # output: Path to the output .aar. 1636*6777b538SAndroid Build Coastguard Worker # proguard_configs: List of proguard configs (optional). 1637*6777b538SAndroid Build Coastguard Worker # android_manifest: Path to AndroidManifest.xml (optional). 1638*6777b538SAndroid Build Coastguard Worker # native_libraries: list of native libraries (optional). 1639*6777b538SAndroid Build Coastguard Worker # direct_deps_only: Do not recurse on deps (optional, defaults false). 1640*6777b538SAndroid Build Coastguard Worker # jar_excluded_patterns: List of globs for paths to exclude (optional). 1641*6777b538SAndroid Build Coastguard Worker # jar_included_patterns: List of globs for paths to include (optional). 1642*6777b538SAndroid Build Coastguard Worker # 1643*6777b538SAndroid Build Coastguard Worker # Example 1644*6777b538SAndroid Build Coastguard Worker # dist_aar("my_aar") { 1645*6777b538SAndroid Build Coastguard Worker # deps = [ ":my_java_lib" ] 1646*6777b538SAndroid Build Coastguard Worker # output = "$root_build_dir/MyLibrary.aar" 1647*6777b538SAndroid Build Coastguard Worker # } 1648*6777b538SAndroid Build Coastguard Worker template("dist_aar") { 1649*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1650*6777b538SAndroid Build Coastguard Worker 1651*6777b538SAndroid Build Coastguard Worker _direct_deps_only = 1652*6777b538SAndroid Build Coastguard Worker defined(invoker.direct_deps_only) && invoker.direct_deps_only 1653*6777b538SAndroid Build Coastguard Worker 1654*6777b538SAndroid Build Coastguard Worker _deps = [] 1655*6777b538SAndroid Build Coastguard Worker 1656*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 1657*6777b538SAndroid Build Coastguard Worker _deps += invoker.deps 1658*6777b538SAndroid Build Coastguard Worker } 1659*6777b538SAndroid Build Coastguard Worker 1660*6777b538SAndroid Build Coastguard Worker _build_config = "$target_gen_dir/$target_name.build_config.json" 1661*6777b538SAndroid Build Coastguard Worker _build_config_target_name = "$target_name$build_config_target_suffix" 1662*6777b538SAndroid Build Coastguard Worker 1663*6777b538SAndroid Build Coastguard Worker write_build_config(_build_config_target_name) { 1664*6777b538SAndroid Build Coastguard Worker type = "dist_aar" 1665*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "proguard_configs" ]) 1666*6777b538SAndroid Build Coastguard Worker possible_config_deps = _deps 1667*6777b538SAndroid Build Coastguard Worker supports_android = true 1668*6777b538SAndroid Build Coastguard Worker requires_android = true 1669*6777b538SAndroid Build Coastguard Worker build_config = _build_config 1670*6777b538SAndroid Build Coastguard Worker } 1671*6777b538SAndroid Build Coastguard Worker 1672*6777b538SAndroid Build Coastguard Worker _deps += [ ":$_build_config_target_name" ] 1673*6777b538SAndroid Build Coastguard Worker 1674*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(_build_config, root_build_dir) 1675*6777b538SAndroid Build Coastguard Worker 1676*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 1677*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1678*6777b538SAndroid Build Coastguard Worker [ 1679*6777b538SAndroid Build Coastguard Worker "data", 1680*6777b538SAndroid Build Coastguard Worker "assert_no_deps", 1681*6777b538SAndroid Build Coastguard Worker ]) 1682*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 1683*6777b538SAndroid Build Coastguard Worker deps = _deps 1684*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/dist_aar.py" 1685*6777b538SAndroid Build Coastguard Worker 1686*6777b538SAndroid Build Coastguard Worker inputs = [ _build_config ] 1687*6777b538SAndroid Build Coastguard Worker 1688*6777b538SAndroid Build Coastguard Worker # Although these will be listed as deps in the depfile, they must also 1689*6777b538SAndroid Build Coastguard Worker # appear here so that "gn analyze" knows about them. 1690*6777b538SAndroid Build Coastguard Worker # https://crbug.com/827197 1691*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_configs)) { 1692*6777b538SAndroid Build Coastguard Worker inputs += invoker.proguard_configs 1693*6777b538SAndroid Build Coastguard Worker } 1694*6777b538SAndroid Build Coastguard Worker 1695*6777b538SAndroid Build Coastguard Worker outputs = [ invoker.output ] 1696*6777b538SAndroid Build Coastguard Worker 1697*6777b538SAndroid Build Coastguard Worker args = [ 1698*6777b538SAndroid Build Coastguard Worker "--depfile", 1699*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 1700*6777b538SAndroid Build Coastguard Worker "--output", 1701*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.output, root_build_dir), 1702*6777b538SAndroid Build Coastguard Worker "--dependencies-res-zips=@FileArg($_rebased_build_config:deps_info:dependency_zips)", 1703*6777b538SAndroid Build Coastguard Worker "--r-text-files=@FileArg($_rebased_build_config:deps_info:dependency_r_txt_files)", 1704*6777b538SAndroid Build Coastguard Worker "--proguard-configs=@FileArg($_rebased_build_config:deps_info:proguard_all_configs)", 1705*6777b538SAndroid Build Coastguard Worker ] 1706*6777b538SAndroid Build Coastguard Worker if (_direct_deps_only) { 1707*6777b538SAndroid Build Coastguard Worker args += [ "--jars=@FileArg($_rebased_build_config:javac:classpath)" ] 1708*6777b538SAndroid Build Coastguard Worker } else { 1709*6777b538SAndroid Build Coastguard Worker args += [ 1710*6777b538SAndroid Build Coastguard Worker "--jars=@FileArg($_rebased_build_config:deps_info:device_classpath)", 1711*6777b538SAndroid Build Coastguard Worker ] 1712*6777b538SAndroid Build Coastguard Worker } 1713*6777b538SAndroid Build Coastguard Worker 1714*6777b538SAndroid Build Coastguard Worker if (defined(invoker.android_manifest)) { 1715*6777b538SAndroid Build Coastguard Worker args += [ 1716*6777b538SAndroid Build Coastguard Worker "--android-manifest", 1717*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.android_manifest, root_build_dir), 1718*6777b538SAndroid Build Coastguard Worker ] 1719*6777b538SAndroid Build Coastguard Worker } 1720*6777b538SAndroid Build Coastguard Worker if (defined(invoker.native_libraries) && invoker.native_libraries != []) { 1721*6777b538SAndroid Build Coastguard Worker inputs += invoker.native_libraries 1722*6777b538SAndroid Build Coastguard Worker _rebased_native_libraries = 1723*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.native_libraries, root_build_dir) 1724*6777b538SAndroid Build Coastguard Worker 1725*6777b538SAndroid Build Coastguard Worker args += [ 1726*6777b538SAndroid Build Coastguard Worker "--native-libraries=$_rebased_native_libraries", 1727*6777b538SAndroid Build Coastguard Worker "--abi=$android_app_abi", 1728*6777b538SAndroid Build Coastguard Worker ] 1729*6777b538SAndroid Build Coastguard Worker } 1730*6777b538SAndroid Build Coastguard Worker if (defined(invoker.jar_excluded_patterns)) { 1731*6777b538SAndroid Build Coastguard Worker args += [ "--jar-excluded-globs=${invoker.jar_excluded_patterns}" ] 1732*6777b538SAndroid Build Coastguard Worker } 1733*6777b538SAndroid Build Coastguard Worker if (defined(invoker.jar_included_patterns)) { 1734*6777b538SAndroid Build Coastguard Worker args += [ "--jar-included-globs=${invoker.jar_included_patterns}" ] 1735*6777b538SAndroid Build Coastguard Worker } 1736*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resource_included_patterns)) { 1737*6777b538SAndroid Build Coastguard Worker args += [ 1738*6777b538SAndroid Build Coastguard Worker "--resource-included-globs=${invoker.resource_included_patterns}", 1739*6777b538SAndroid Build Coastguard Worker ] 1740*6777b538SAndroid Build Coastguard Worker } 1741*6777b538SAndroid Build Coastguard Worker } 1742*6777b538SAndroid Build Coastguard Worker } 1743*6777b538SAndroid Build Coastguard Worker 1744*6777b538SAndroid Build Coastguard Worker # Declare an Android library target 1745*6777b538SAndroid Build Coastguard Worker # 1746*6777b538SAndroid Build Coastguard Worker # This target creates an Android library containing java code and Android 1747*6777b538SAndroid Build Coastguard Worker # resources. 1748*6777b538SAndroid Build Coastguard Worker # 1749*6777b538SAndroid Build Coastguard Worker # Supports all variables of java_library(), plus: 1750*6777b538SAndroid Build Coastguard Worker # deps: In addition to defining java deps, this can also include 1751*6777b538SAndroid Build Coastguard Worker # android_assets() and android_resources() targets. 1752*6777b538SAndroid Build Coastguard Worker # alternative_android_sdk_dep: android_system_java_prebuilt target to use 1753*6777b538SAndroid Build Coastguard Worker # in place of the default android.jar. 1754*6777b538SAndroid Build Coastguard Worker # 1755*6777b538SAndroid Build Coastguard Worker # Example 1756*6777b538SAndroid Build Coastguard Worker # android_library("foo_java") { 1757*6777b538SAndroid Build Coastguard Worker # sources = [ 1758*6777b538SAndroid Build Coastguard Worker # "android/org/chromium/foo/Foo.java", 1759*6777b538SAndroid Build Coastguard Worker # "android/org/chromium/foo/FooInterface.java", 1760*6777b538SAndroid Build Coastguard Worker # "android/org/chromium/foo/FooService.java", 1761*6777b538SAndroid Build Coastguard Worker # ] 1762*6777b538SAndroid Build Coastguard Worker # deps = [ 1763*6777b538SAndroid Build Coastguard Worker # ":bar_java" 1764*6777b538SAndroid Build Coastguard Worker # ] 1765*6777b538SAndroid Build Coastguard Worker # srcjar_deps = [ 1766*6777b538SAndroid Build Coastguard Worker # ":foo_generated_enum" 1767*6777b538SAndroid Build Coastguard Worker # ] 1768*6777b538SAndroid Build Coastguard Worker # jar_excluded_patterns = [ 1769*6777b538SAndroid Build Coastguard Worker # "*/FooService.class", "org/chromium/FooService\$*.class" 1770*6777b538SAndroid Build Coastguard Worker # ] 1771*6777b538SAndroid Build Coastguard Worker # } 1772*6777b538SAndroid Build Coastguard Worker template("android_library") { 1773*6777b538SAndroid Build Coastguard Worker java_library(target_name) { 1774*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 1775*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1776*6777b538SAndroid Build Coastguard Worker 1777*6777b538SAndroid Build Coastguard Worker supports_android = true 1778*6777b538SAndroid Build Coastguard Worker requires_android = true 1779*6777b538SAndroid Build Coastguard Worker 1780*6777b538SAndroid Build Coastguard Worker if (!defined(jar_excluded_patterns)) { 1781*6777b538SAndroid Build Coastguard Worker jar_excluded_patterns = [] 1782*6777b538SAndroid Build Coastguard Worker } 1783*6777b538SAndroid Build Coastguard Worker jar_excluded_patterns += [ 1784*6777b538SAndroid Build Coastguard Worker "*/R.class", 1785*6777b538SAndroid Build Coastguard Worker "*/R\$*.class", 1786*6777b538SAndroid Build Coastguard Worker "*/Manifest.class", 1787*6777b538SAndroid Build Coastguard Worker "*/Manifest\$*.class", 1788*6777b538SAndroid Build Coastguard Worker "*/*GEN_JNI.class", 1789*6777b538SAndroid Build Coastguard Worker ] 1790*6777b538SAndroid Build Coastguard Worker } 1791*6777b538SAndroid Build Coastguard Worker } 1792*6777b538SAndroid Build Coastguard Worker 1793*6777b538SAndroid Build Coastguard Worker # Declare an Android robolectric library target 1794*6777b538SAndroid Build Coastguard Worker # 1795*6777b538SAndroid Build Coastguard Worker # This target creates an Android library containing java code and Android 1796*6777b538SAndroid Build Coastguard Worker # resources. 1797*6777b538SAndroid Build Coastguard Worker # 1798*6777b538SAndroid Build Coastguard Worker # Supports all variables of java_library(), plus: 1799*6777b538SAndroid Build Coastguard Worker # deps: In addition to defining java deps, this can also include 1800*6777b538SAndroid Build Coastguard Worker # android_assets() and android_resources() targets. 1801*6777b538SAndroid Build Coastguard Worker # 1802*6777b538SAndroid Build Coastguard Worker # Example 1803*6777b538SAndroid Build Coastguard Worker # robolectric_library("foo_junit") { 1804*6777b538SAndroid Build Coastguard Worker # sources = [ 1805*6777b538SAndroid Build Coastguard Worker # "android/org/chromium/foo/FooTest.java", 1806*6777b538SAndroid Build Coastguard Worker # "android/org/chromium/foo/FooTestUtils.java", 1807*6777b538SAndroid Build Coastguard Worker # "android/org/chromium/foo/FooMock.java", 1808*6777b538SAndroid Build Coastguard Worker # ] 1809*6777b538SAndroid Build Coastguard Worker # deps = [ 1810*6777b538SAndroid Build Coastguard Worker # "//base:base_junit_test_support" 1811*6777b538SAndroid Build Coastguard Worker # ] 1812*6777b538SAndroid Build Coastguard Worker # srcjar_deps = [ 1813*6777b538SAndroid Build Coastguard Worker # ":foo_generated_enum" 1814*6777b538SAndroid Build Coastguard Worker # ] 1815*6777b538SAndroid Build Coastguard Worker # jar_excluded_patterns = [ 1816*6777b538SAndroid Build Coastguard Worker # "*/FooService.class", "org/chromium/FooService\$*.class" 1817*6777b538SAndroid Build Coastguard Worker # ] 1818*6777b538SAndroid Build Coastguard Worker # } 1819*6777b538SAndroid Build Coastguard Worker template("robolectric_library") { 1820*6777b538SAndroid Build Coastguard Worker java_library(target_name) { 1821*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 1822*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1823*6777b538SAndroid Build Coastguard Worker 1824*6777b538SAndroid Build Coastguard Worker testonly = true 1825*6777b538SAndroid Build Coastguard Worker 1826*6777b538SAndroid Build Coastguard Worker is_robolectric = true 1827*6777b538SAndroid Build Coastguard Worker include_android_sdk = true 1828*6777b538SAndroid Build Coastguard Worker alternative_android_sdk_dep = 1829*6777b538SAndroid Build Coastguard Worker "//third_party/robolectric:robolectric_test_sdk_java" 1830*6777b538SAndroid Build Coastguard Worker 1831*6777b538SAndroid Build Coastguard Worker if (!defined(jar_excluded_patterns)) { 1832*6777b538SAndroid Build Coastguard Worker jar_excluded_patterns = [] 1833*6777b538SAndroid Build Coastguard Worker } 1834*6777b538SAndroid Build Coastguard Worker jar_excluded_patterns += [ 1835*6777b538SAndroid Build Coastguard Worker "*/R.class", 1836*6777b538SAndroid Build Coastguard Worker "*/R\$*.class", 1837*6777b538SAndroid Build Coastguard Worker "*/Manifest.class", 1838*6777b538SAndroid Build Coastguard Worker "*/Manifest\$*.class", 1839*6777b538SAndroid Build Coastguard Worker "*/*GEN_JNI.class", 1840*6777b538SAndroid Build Coastguard Worker ] 1841*6777b538SAndroid Build Coastguard Worker 1842*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 1843*6777b538SAndroid Build Coastguard Worker deps = [] 1844*6777b538SAndroid Build Coastguard Worker } 1845*6777b538SAndroid Build Coastguard Worker deps += [ "//third_party/android_deps:robolectric_all_java" ] 1846*6777b538SAndroid Build Coastguard Worker } 1847*6777b538SAndroid Build Coastguard Worker } 1848*6777b538SAndroid Build Coastguard Worker 1849*6777b538SAndroid Build Coastguard Worker # Declare an Android library target for a prebuilt jar 1850*6777b538SAndroid Build Coastguard Worker # 1851*6777b538SAndroid Build Coastguard Worker # This target creates an Android library containing java code and Android 1852*6777b538SAndroid Build Coastguard Worker # resources. 1853*6777b538SAndroid Build Coastguard Worker # 1854*6777b538SAndroid Build Coastguard Worker # Supports all variables of android_library(). 1855*6777b538SAndroid Build Coastguard Worker # 1856*6777b538SAndroid Build Coastguard Worker # Example 1857*6777b538SAndroid Build Coastguard Worker # android_java_prebuilt("foo_java") { 1858*6777b538SAndroid Build Coastguard Worker # jar_path = "foo.jar" 1859*6777b538SAndroid Build Coastguard Worker # deps = [ 1860*6777b538SAndroid Build Coastguard Worker # ":foo_resources", 1861*6777b538SAndroid Build Coastguard Worker # ":bar_java" 1862*6777b538SAndroid Build Coastguard Worker # ] 1863*6777b538SAndroid Build Coastguard Worker # } 1864*6777b538SAndroid Build Coastguard Worker template("android_java_prebuilt") { 1865*6777b538SAndroid Build Coastguard Worker android_library(target_name) { 1866*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 1867*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1868*6777b538SAndroid Build Coastguard Worker } 1869*6777b538SAndroid Build Coastguard Worker } 1870*6777b538SAndroid Build Coastguard Worker 1871*6777b538SAndroid Build Coastguard Worker template("android_system_java_prebuilt") { 1872*6777b538SAndroid Build Coastguard Worker java_library_impl(target_name) { 1873*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 1874*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1875*6777b538SAndroid Build Coastguard Worker supports_android = true 1876*6777b538SAndroid Build Coastguard Worker type = "system_java_library" 1877*6777b538SAndroid Build Coastguard Worker } 1878*6777b538SAndroid Build Coastguard Worker } 1879*6777b538SAndroid Build Coastguard Worker 1880*6777b538SAndroid Build Coastguard Worker # Creates org/chromium/build/BuildConfig.java 1881*6777b538SAndroid Build Coastguard Worker # This doesn't really belong in //build since it genates a file for //base. 1882*6777b538SAndroid Build Coastguard Worker # However, we don't currently have a better way to include this file in all 1883*6777b538SAndroid Build Coastguard Worker # apks that depend on //base:base_java. 1884*6777b538SAndroid Build Coastguard Worker # 1885*6777b538SAndroid Build Coastguard Worker # Variables: 1886*6777b538SAndroid Build Coastguard Worker # use_final_fields: True to use final fields. When false, all other 1887*6777b538SAndroid Build Coastguard Worker # variables must not be set. 1888*6777b538SAndroid Build Coastguard Worker # min_sdk_version: Value for MIN_SDK_VERSION. 1889*6777b538SAndroid Build Coastguard Worker # version_code: Value for VERSION_CODE. 1890*6777b538SAndroid Build Coastguard Worker # bundles_supported: Whether or not this target can be treated as a bundle. 1891*6777b538SAndroid Build Coastguard Worker # resources_version_variable: 1892*6777b538SAndroid Build Coastguard Worker # is_incremental_install: 1893*6777b538SAndroid Build Coastguard Worker # isolated_splits_enabled: Value for ISOLATED_SPLITS_ENABLED. 1894*6777b538SAndroid Build Coastguard Worker template("generate_build_config_srcjar") { 1895*6777b538SAndroid Build Coastguard Worker java_cpp_template(target_name) { 1896*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 1897*6777b538SAndroid Build Coastguard Worker sources = [ "//build/android/java/templates/BuildConfig.template" ] 1898*6777b538SAndroid Build Coastguard Worker defines = [] 1899*6777b538SAndroid Build Coastguard Worker 1900*6777b538SAndroid Build Coastguard Worker # Set these even when !use_final_fields so that they have correct default 1901*6777b538SAndroid Build Coastguard Worker # values within robolectric_binary(), which ignores jar_excluded_patterns. 1902*6777b538SAndroid Build Coastguard Worker if ((defined(invoker.assertions_implicitly_enabled) && 1903*6777b538SAndroid Build Coastguard Worker invoker.assertions_implicitly_enabled) || enable_java_asserts) { 1904*6777b538SAndroid Build Coastguard Worker defines += [ "_ENABLE_ASSERTS" ] 1905*6777b538SAndroid Build Coastguard Worker } 1906*6777b538SAndroid Build Coastguard Worker if (use_cfi_diag || is_ubsan || is_ubsan_security || is_ubsan_vptr) { 1907*6777b538SAndroid Build Coastguard Worker defines += [ "_IS_UBSAN" ] 1908*6777b538SAndroid Build Coastguard Worker } 1909*6777b538SAndroid Build Coastguard Worker 1910*6777b538SAndroid Build Coastguard Worker if (is_chrome_branded) { 1911*6777b538SAndroid Build Coastguard Worker defines += [ "_IS_CHROME_BRANDED" ] 1912*6777b538SAndroid Build Coastguard Worker } 1913*6777b538SAndroid Build Coastguard Worker 1914*6777b538SAndroid Build Coastguard Worker if (defined(invoker.bundles_supported) && invoker.bundles_supported) { 1915*6777b538SAndroid Build Coastguard Worker defines += [ "_BUNDLES_SUPPORTED" ] 1916*6777b538SAndroid Build Coastguard Worker } 1917*6777b538SAndroid Build Coastguard Worker 1918*6777b538SAndroid Build Coastguard Worker if (defined(invoker.isolated_splits_enabled) && 1919*6777b538SAndroid Build Coastguard Worker invoker.isolated_splits_enabled) { 1920*6777b538SAndroid Build Coastguard Worker defines += [ "_ISOLATED_SPLITS_ENABLED" ] 1921*6777b538SAndroid Build Coastguard Worker } 1922*6777b538SAndroid Build Coastguard Worker 1923*6777b538SAndroid Build Coastguard Worker if (defined(invoker.is_incremental_install) && 1924*6777b538SAndroid Build Coastguard Worker invoker.is_incremental_install) { 1925*6777b538SAndroid Build Coastguard Worker defines += [ "_IS_INCREMENTAL_INSTALL" ] 1926*6777b538SAndroid Build Coastguard Worker } 1927*6777b538SAndroid Build Coastguard Worker 1928*6777b538SAndroid Build Coastguard Worker if (invoker.use_final_fields) { 1929*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "deps" ]) 1930*6777b538SAndroid Build Coastguard Worker defines += [ "USE_FINAL" ] 1931*6777b538SAndroid Build Coastguard Worker defines += [ "_MIN_SDK_VERSION=${invoker.min_sdk_version}" ] 1932*6777b538SAndroid Build Coastguard Worker defines += [ "_VERSION_CODE=${invoker.version_code}" ] 1933*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resources_version_variable)) { 1934*6777b538SAndroid Build Coastguard Worker defines += [ 1935*6777b538SAndroid Build Coastguard Worker "_RESOURCES_VERSION_VARIABLE=${invoker.resources_version_variable}", 1936*6777b538SAndroid Build Coastguard Worker ] 1937*6777b538SAndroid Build Coastguard Worker } 1938*6777b538SAndroid Build Coastguard Worker } 1939*6777b538SAndroid Build Coastguard Worker 1940*6777b538SAndroid Build Coastguard Worker if (defined(testonly) && testonly) { 1941*6777b538SAndroid Build Coastguard Worker defines += [ "_IS_FOR_TEST" ] 1942*6777b538SAndroid Build Coastguard Worker } 1943*6777b538SAndroid Build Coastguard Worker 1944*6777b538SAndroid Build Coastguard Worker if (defined(invoker.write_clang_profiling_data) && 1945*6777b538SAndroid Build Coastguard Worker invoker.write_clang_profiling_data) { 1946*6777b538SAndroid Build Coastguard Worker defines += [ "_WRITE_CLANG_PROFILING_DATA" ] 1947*6777b538SAndroid Build Coastguard Worker } 1948*6777b538SAndroid Build Coastguard Worker } 1949*6777b538SAndroid Build Coastguard Worker } 1950*6777b538SAndroid Build Coastguard Worker 1951*6777b538SAndroid Build Coastguard Worker # Creates ProductConfig.java, a file containing product-specific configuration. 1952*6777b538SAndroid Build Coastguard Worker # 1953*6777b538SAndroid Build Coastguard Worker # Currently, this includes the list of locales, both in their compressed and 1954*6777b538SAndroid Build Coastguard Worker # uncompressed format, as well as library loading 1955*6777b538SAndroid Build Coastguard Worker # 1956*6777b538SAndroid Build Coastguard Worker # Variables: 1957*6777b538SAndroid Build Coastguard Worker # build_config: Path to build_config used for locale lists. 1958*6777b538SAndroid Build Coastguard Worker # is_bundle_module: Whether or not this target is part of a bundle build. 1959*6777b538SAndroid Build Coastguard Worker # java_package: Java package for the generated class. 1960*6777b538SAndroid Build Coastguard Worker # use_chromium_linker: 1961*6777b538SAndroid Build Coastguard Worker template("generate_product_config_srcjar") { 1962*6777b538SAndroid Build Coastguard Worker java_cpp_template(target_name) { 1963*6777b538SAndroid Build Coastguard Worker defines = [] 1964*6777b538SAndroid Build Coastguard Worker _use_final = 1965*6777b538SAndroid Build Coastguard Worker defined(invoker.build_config) || 1966*6777b538SAndroid Build Coastguard Worker defined(invoker.use_chromium_linker) || defined(invoker.is_bundle) 1967*6777b538SAndroid Build Coastguard Worker if (_use_final) { 1968*6777b538SAndroid Build Coastguard Worker defines += [ "USE_FINAL" ] 1969*6777b538SAndroid Build Coastguard Worker } 1970*6777b538SAndroid Build Coastguard Worker 1971*6777b538SAndroid Build Coastguard Worker sources = [ "//build/android/java/templates/ProductConfig.template" ] 1972*6777b538SAndroid Build Coastguard Worker defines += [ "PACKAGE=${invoker.java_package}" ] 1973*6777b538SAndroid Build Coastguard Worker 1974*6777b538SAndroid Build Coastguard Worker _use_chromium_linker = 1975*6777b538SAndroid Build Coastguard Worker defined(invoker.use_chromium_linker) && invoker.use_chromium_linker 1976*6777b538SAndroid Build Coastguard Worker _is_bundle = defined(invoker.is_bundle_module) && invoker.is_bundle_module 1977*6777b538SAndroid Build Coastguard Worker defines += [ 1978*6777b538SAndroid Build Coastguard Worker "USE_CHROMIUM_LINKER_VALUE=$_use_chromium_linker", 1979*6777b538SAndroid Build Coastguard Worker "IS_BUNDLE_VALUE=$_is_bundle", 1980*6777b538SAndroid Build Coastguard Worker ] 1981*6777b538SAndroid Build Coastguard Worker if (defined(invoker.build_config)) { 1982*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "deps" ]) 1983*6777b538SAndroid Build Coastguard Worker _rebased_build_config = 1984*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.build_config, root_build_dir) 1985*6777b538SAndroid Build Coastguard Worker defines += [ "LOCALE_LIST=@FileArg($_rebased_build_config:deps_info:locales_java_list)" ] 1986*6777b538SAndroid Build Coastguard Worker } 1987*6777b538SAndroid Build Coastguard Worker } 1988*6777b538SAndroid Build Coastguard Worker } 1989*6777b538SAndroid Build Coastguard Worker 1990*6777b538SAndroid Build Coastguard Worker # Declare an Android app module target, which is used as the basis for an 1991*6777b538SAndroid Build Coastguard Worker # Android APK or an Android app bundle module. 1992*6777b538SAndroid Build Coastguard Worker # 1993*6777b538SAndroid Build Coastguard Worker # Supports all variables of android_library(), plus: 1994*6777b538SAndroid Build Coastguard Worker # android_manifest: Path to AndroidManifest.xml. NOTE: This manifest must 1995*6777b538SAndroid Build Coastguard Worker # not contain a <uses-sdk> element. Use [min|target|max]_sdk_version 1996*6777b538SAndroid Build Coastguard Worker # instead. 1997*6777b538SAndroid Build Coastguard Worker # android_manifest_dep: Target that generates AndroidManifest (if applicable) 1998*6777b538SAndroid Build Coastguard Worker # png_to_webp: If true, pngs (with the exception of 9-patch) are 1999*6777b538SAndroid Build Coastguard Worker # converted to webp during resource packaging. 2000*6777b538SAndroid Build Coastguard Worker # loadable_modules: List of paths to native libraries to include. Different 2001*6777b538SAndroid Build Coastguard Worker # from |shared_libraries| in that: 2002*6777b538SAndroid Build Coastguard Worker # * dependencies of this .so are not automatically included 2003*6777b538SAndroid Build Coastguard Worker # * they are not side-loaded when incremental_install=true. 2004*6777b538SAndroid Build Coastguard Worker # * they are not included in NativeLibraries.java 2005*6777b538SAndroid Build Coastguard Worker # Use this instead of shared_libraries when you are going to load the library 2006*6777b538SAndroid Build Coastguard Worker # conditionally, and only when shared_libraries doesn't work for you. 2007*6777b538SAndroid Build Coastguard Worker # secondary_abi_loadable_modules: This is the loadable_modules analog to 2008*6777b538SAndroid Build Coastguard Worker # secondary_abi_shared_libraries. 2009*6777b538SAndroid Build Coastguard Worker # shared_libraries: List shared_library targets to bundle. If these 2010*6777b538SAndroid Build Coastguard Worker # libraries depend on other shared_library targets, those dependencies will 2011*6777b538SAndroid Build Coastguard Worker # also be included in the apk (e.g. for is_component_build). 2012*6777b538SAndroid Build Coastguard Worker # secondary_abi_shared_libraries: secondary abi shared_library targets to 2013*6777b538SAndroid Build Coastguard Worker # bundle. If these libraries depend on other shared_library targets, those 2014*6777b538SAndroid Build Coastguard Worker # dependencies will also be included in the apk (e.g. for is_component_build). 2015*6777b538SAndroid Build Coastguard Worker # native_lib_placeholders: List of placeholder filenames to add to the apk 2016*6777b538SAndroid Build Coastguard Worker # (optional). 2017*6777b538SAndroid Build Coastguard Worker # secondary_native_lib_placeholders: List of placeholder filenames to add to 2018*6777b538SAndroid Build Coastguard Worker # the apk for the secondary ABI (optional). 2019*6777b538SAndroid Build Coastguard Worker # generate_buildconfig_java: If defined and false, skip generating the 2020*6777b538SAndroid Build Coastguard Worker # BuildConfig java class describing the build configuration. The default 2021*6777b538SAndroid Build Coastguard Worker # is true when building with Chromium for non-test APKs. 2022*6777b538SAndroid Build Coastguard Worker # generate_native_libraries_java: If defined, whether NativeLibraries.java is 2023*6777b538SAndroid Build Coastguard Worker # generated is solely controlled by this flag. Otherwise, the default behavior 2024*6777b538SAndroid Build Coastguard Worker # is NativeLibraries.java will only be generated for the base module/apk when 2025*6777b538SAndroid Build Coastguard Worker # its `shared_libraries` is not empty. 2026*6777b538SAndroid Build Coastguard Worker # aapt_locale_allowlist: If set, all locales not in this list will be 2027*6777b538SAndroid Build Coastguard Worker # stripped from resources.arsc. 2028*6777b538SAndroid Build Coastguard Worker # resource_exclusion_regex: Causes all drawable images matching the regex to 2029*6777b538SAndroid Build Coastguard Worker # be excluded (mipmaps are still included). 2030*6777b538SAndroid Build Coastguard Worker # resource_exclusion_exceptions: A list of globs used when 2031*6777b538SAndroid Build Coastguard Worker # resource_exclusion_regex is set. Files that match this list will 2032*6777b538SAndroid Build Coastguard Worker # still be included. 2033*6777b538SAndroid Build Coastguard Worker # resource_values_filter_rules: List of "source_path:name_regex" used to 2034*6777b538SAndroid Build Coastguard Worker # filter out unwanted values/ resources. 2035*6777b538SAndroid Build Coastguard Worker # shared_resources: True if this is a runtime shared library APK, like 2036*6777b538SAndroid Build Coastguard Worker # the system_webview_apk target. Ensures that its resources can be 2037*6777b538SAndroid Build Coastguard Worker # used by the loading application process. 2038*6777b538SAndroid Build Coastguard Worker # app_as_shared_lib: True if this is a regular application apk that can 2039*6777b538SAndroid Build Coastguard Worker # also serve as a runtime shared library, like the monochrome_public_apk 2040*6777b538SAndroid Build Coastguard Worker # target. Ensures that the resources are usable both by the APK running 2041*6777b538SAndroid Build Coastguard Worker # as an application, or by another process that loads it at runtime. 2042*6777b538SAndroid Build Coastguard Worker # shared_resources_allowlist_target: Optional name of a target specifying 2043*6777b538SAndroid Build Coastguard Worker # an input R.txt file that lists the resources that can be exported 2044*6777b538SAndroid Build Coastguard Worker # by the APK when shared_resources or app_as_shared_lib is defined. 2045*6777b538SAndroid Build Coastguard Worker # uncompress_dex: Store final .dex files uncompressed in the apk. 2046*6777b538SAndroid Build Coastguard Worker # omit_dex: If true, do not build or include classes.dex. 2047*6777b538SAndroid Build Coastguard Worker # strip_resource_names: True if resource names should be stripped from the 2048*6777b538SAndroid Build Coastguard Worker # resources.arsc file in the apk or module. 2049*6777b538SAndroid Build Coastguard Worker # strip_unused_resources: True if unused resources should be stripped from 2050*6777b538SAndroid Build Coastguard Worker # the apk or module. 2051*6777b538SAndroid Build Coastguard Worker # short_resource_paths: True if resource paths should be shortened in the 2052*6777b538SAndroid Build Coastguard Worker # apk or module. 2053*6777b538SAndroid Build Coastguard Worker # resources_config_paths: List of paths to the aapt2 optimize config files 2054*6777b538SAndroid Build Coastguard Worker # that tags resources with acceptable/non-acceptable optimizations. 2055*6777b538SAndroid Build Coastguard Worker # expected_android_manifest: Enables verification of expected merged 2056*6777b538SAndroid Build Coastguard Worker # manifest based on a golden file. 2057*6777b538SAndroid Build Coastguard Worker # resource_ids_provider_dep: If passed, this target will use the resource 2058*6777b538SAndroid Build Coastguard Worker # IDs generated by {resource_ids_provider_dep}__compile_res during 2059*6777b538SAndroid Build Coastguard Worker # resource compilation. 2060*6777b538SAndroid Build Coastguard Worker # enforce_resource_overlays_in_tests: Enables check for testonly targets that 2061*6777b538SAndroid Build Coastguard Worker # dependent resource targets which override another target set 2062*6777b538SAndroid Build Coastguard Worker # overlay_resources=true. This check is on for non-test targets and 2063*6777b538SAndroid Build Coastguard Worker # cannot be disabled. 2064*6777b538SAndroid Build Coastguard Worker # static_library_provider: Specifies a single target that this target will 2065*6777b538SAndroid Build Coastguard Worker # use as a static library APK. 2066*6777b538SAndroid Build Coastguard Worker # min_sdk_version: The minimum Android SDK version this target supports. 2067*6777b538SAndroid Build Coastguard Worker # Optional, default $default_min_sdk_version. 2068*6777b538SAndroid Build Coastguard Worker # target_sdk_version: The target Android SDK version for this target. 2069*6777b538SAndroid Build Coastguard Worker # Optional, default to android_sdk_version. 2070*6777b538SAndroid Build Coastguard Worker # max_sdk_version: The maximum Android SDK version this target supports. 2071*6777b538SAndroid Build Coastguard Worker # Optional, default not set. 2072*6777b538SAndroid Build Coastguard Worker # require_native_mocks: Enforce that any native calls using 2073*6777b538SAndroid Build Coastguard Worker # org.chromium.base.annotations.NativeMethods must have a mock set 2074*6777b538SAndroid Build Coastguard Worker # (optional). 2075*6777b538SAndroid Build Coastguard Worker # product_config_java_packages: Optional list of java packages. If given, a 2076*6777b538SAndroid Build Coastguard Worker # ProductConfig.java file will be generated for each package. 2077*6777b538SAndroid Build Coastguard Worker # enable_proguard_checks: Turns on -checkdiscard directives and missing 2078*6777b538SAndroid Build Coastguard Worker # symbols check in the proguard step (default=true). 2079*6777b538SAndroid Build Coastguard Worker # annotation_processor_deps: List of java_annotation_processor targets to 2080*6777b538SAndroid Build Coastguard Worker # use when compiling the sources given to this target (optional). 2081*6777b538SAndroid Build Coastguard Worker # processor_args_javac: List of args to pass to annotation processors when 2082*6777b538SAndroid Build Coastguard Worker # compiling sources given to this target (optional). 2083*6777b538SAndroid Build Coastguard Worker # bundles_supported: Enable Java code to treat this target as a bundle 2084*6777b538SAndroid Build Coastguard Worker # whether (by default determined by the target type). 2085*6777b538SAndroid Build Coastguard Worker # expected_libs_and_assets: Verify the list of included native libraries 2086*6777b538SAndroid Build Coastguard Worker # and assets is consistent with the given expectation file. 2087*6777b538SAndroid Build Coastguard Worker # expected_libs_and_assets_base: Treat expected_libs_and_assets as a diff 2088*6777b538SAndroid Build Coastguard Worker # with this file as the base. 2089*6777b538SAndroid Build Coastguard Worker # expected_proguard_config: Checks that the merged set of proguard flags 2090*6777b538SAndroid Build Coastguard Worker # matches the given config. 2091*6777b538SAndroid Build Coastguard Worker # expected_proguard_config_base: Treat expected_proguard_config as a diff 2092*6777b538SAndroid Build Coastguard Worker # with this file as the base. 2093*6777b538SAndroid Build Coastguard Worker template("android_apk_or_module") { 2094*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 2095*6777b538SAndroid Build Coastguard Worker _template_name = target_name 2096*6777b538SAndroid Build Coastguard Worker _base_path = "$target_out_dir/$target_name/$target_name" 2097*6777b538SAndroid Build Coastguard Worker _build_config = "$target_gen_dir/$target_name.build_config.json" 2098*6777b538SAndroid Build Coastguard Worker _build_config_target = "$target_name$build_config_target_suffix" 2099*6777b538SAndroid Build Coastguard Worker _java_target_name = "${_template_name}__java" 2100*6777b538SAndroid Build Coastguard Worker 2101*6777b538SAndroid Build Coastguard Worker _min_sdk_version = default_min_sdk_version 2102*6777b538SAndroid Build Coastguard Worker _target_sdk_version = android_sdk_version 2103*6777b538SAndroid Build Coastguard Worker if (defined(invoker.min_sdk_version)) { 2104*6777b538SAndroid Build Coastguard Worker _min_sdk_version = invoker.min_sdk_version 2105*6777b538SAndroid Build Coastguard Worker } 2106*6777b538SAndroid Build Coastguard Worker if (defined(invoker.target_sdk_version)) { 2107*6777b538SAndroid Build Coastguard Worker _target_sdk_version = invoker.target_sdk_version 2108*6777b538SAndroid Build Coastguard Worker } 2109*6777b538SAndroid Build Coastguard Worker 2110*6777b538SAndroid Build Coastguard Worker _is_bundle_module = 2111*6777b538SAndroid Build Coastguard Worker defined(invoker.is_bundle_module) && invoker.is_bundle_module 2112*6777b538SAndroid Build Coastguard Worker _is_base_module = !_is_bundle_module || (defined(invoker.is_base_module) && 2113*6777b538SAndroid Build Coastguard Worker invoker.is_base_module) 2114*6777b538SAndroid Build Coastguard Worker 2115*6777b538SAndroid Build Coastguard Worker _omit_dex = defined(invoker.omit_dex) && invoker.omit_dex 2116*6777b538SAndroid Build Coastguard Worker 2117*6777b538SAndroid Build Coastguard Worker if (!_is_bundle_module) { 2118*6777b538SAndroid Build Coastguard Worker _final_apk_path = invoker.final_apk_path 2119*6777b538SAndroid Build Coastguard Worker _final_rtxt_path = "${_final_apk_path}.R.txt" 2120*6777b538SAndroid Build Coastguard Worker } 2121*6777b538SAndroid Build Coastguard Worker 2122*6777b538SAndroid Build Coastguard Worker _res_size_info_path = "$target_out_dir/$target_name.ap_.info" 2123*6777b538SAndroid Build Coastguard Worker if (!_is_bundle_module) { 2124*6777b538SAndroid Build Coastguard Worker _final_apk_path_no_ext_list = 2125*6777b538SAndroid Build Coastguard Worker process_file_template([ _final_apk_path ], 2126*6777b538SAndroid Build Coastguard Worker "{{source_dir}}/{{source_name_part}}") 2127*6777b538SAndroid Build Coastguard Worker _final_apk_path_no_ext = _final_apk_path_no_ext_list[0] 2128*6777b538SAndroid Build Coastguard Worker not_needed([ "_final_apk_path_no_ext" ]) 2129*6777b538SAndroid Build Coastguard Worker } 2130*6777b538SAndroid Build Coastguard Worker 2131*6777b538SAndroid Build Coastguard Worker # Non-base bundle modules create only proto resources. 2132*6777b538SAndroid Build Coastguard Worker if (_is_base_module) { 2133*6777b538SAndroid Build Coastguard Worker _arsc_resources_path = "$target_out_dir/$target_name.ap_" 2134*6777b538SAndroid Build Coastguard Worker } 2135*6777b538SAndroid Build Coastguard Worker if (_is_bundle_module) { 2136*6777b538SAndroid Build Coastguard Worker # Path to the intermediate proto-format resources zip file. 2137*6777b538SAndroid Build Coastguard Worker _proto_resources_path = "$target_out_dir/$target_name.proto.ap_" 2138*6777b538SAndroid Build Coastguard Worker } else { 2139*6777b538SAndroid Build Coastguard Worker # resource_sizes.py needs to be able to find the unpacked resources.arsc 2140*6777b538SAndroid Build Coastguard Worker # file based on apk name to compute normatlized size. 2141*6777b538SAndroid Build Coastguard Worker _resource_sizes_arsc_path = 2142*6777b538SAndroid Build Coastguard Worker "$root_out_dir/arsc/" + 2143*6777b538SAndroid Build Coastguard Worker rebase_path(_final_apk_path_no_ext, root_build_dir) + ".ap_" 2144*6777b538SAndroid Build Coastguard Worker } 2145*6777b538SAndroid Build Coastguard Worker 2146*6777b538SAndroid Build Coastguard Worker if (defined(invoker.version_code)) { 2147*6777b538SAndroid Build Coastguard Worker _version_code = invoker.version_code 2148*6777b538SAndroid Build Coastguard Worker } else { 2149*6777b538SAndroid Build Coastguard Worker _version_code = android_default_version_code 2150*6777b538SAndroid Build Coastguard Worker } 2151*6777b538SAndroid Build Coastguard Worker 2152*6777b538SAndroid Build Coastguard Worker if (android_override_version_code != "") { 2153*6777b538SAndroid Build Coastguard Worker _version_code = android_override_version_code 2154*6777b538SAndroid Build Coastguard Worker } 2155*6777b538SAndroid Build Coastguard Worker 2156*6777b538SAndroid Build Coastguard Worker if (defined(invoker.version_name)) { 2157*6777b538SAndroid Build Coastguard Worker _version_name = invoker.version_name 2158*6777b538SAndroid Build Coastguard Worker } else { 2159*6777b538SAndroid Build Coastguard Worker _version_name = android_default_version_name 2160*6777b538SAndroid Build Coastguard Worker } 2161*6777b538SAndroid Build Coastguard Worker 2162*6777b538SAndroid Build Coastguard Worker if (android_override_version_name != "") { 2163*6777b538SAndroid Build Coastguard Worker _version_name = android_override_version_name 2164*6777b538SAndroid Build Coastguard Worker } 2165*6777b538SAndroid Build Coastguard Worker 2166*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 2167*6777b538SAndroid Build Coastguard Worker _invoker_deps = invoker.deps 2168*6777b538SAndroid Build Coastguard Worker } else { 2169*6777b538SAndroid Build Coastguard Worker _invoker_deps = [] 2170*6777b538SAndroid Build Coastguard Worker } 2171*6777b538SAndroid Build Coastguard Worker _non_java_deps = filter_exclude(_invoker_deps, java_target_patterns) 2172*6777b538SAndroid Build Coastguard Worker _java_assetres_deps = [ ":${_java_target_name}__assetres" ] 2173*6777b538SAndroid Build Coastguard Worker 2174*6777b538SAndroid Build Coastguard Worker _srcjar_deps = [] 2175*6777b538SAndroid Build Coastguard Worker if (defined(invoker.srcjar_deps)) { 2176*6777b538SAndroid Build Coastguard Worker _srcjar_deps = invoker.srcjar_deps 2177*6777b538SAndroid Build Coastguard Worker } 2178*6777b538SAndroid Build Coastguard Worker 2179*6777b538SAndroid Build Coastguard Worker _use_chromium_linker = 2180*6777b538SAndroid Build Coastguard Worker defined(invoker.use_chromium_linker) && invoker.use_chromium_linker 2181*6777b538SAndroid Build Coastguard Worker 2182*6777b538SAndroid Build Coastguard Worker not_needed([ "_use_chromium_linker" ]) 2183*6777b538SAndroid Build Coastguard Worker 2184*6777b538SAndroid Build Coastguard Worker # The dependency that makes the chromium linker, if any is needed. 2185*6777b538SAndroid Build Coastguard Worker _native_libs_deps = [] 2186*6777b538SAndroid Build Coastguard Worker _shared_libraries_is_valid = 2187*6777b538SAndroid Build Coastguard Worker defined(invoker.shared_libraries) && invoker.shared_libraries != [] 2188*6777b538SAndroid Build Coastguard Worker 2189*6777b538SAndroid Build Coastguard Worker if (_shared_libraries_is_valid) { 2190*6777b538SAndroid Build Coastguard Worker _native_libs_deps += invoker.shared_libraries 2191*6777b538SAndroid Build Coastguard Worker 2192*6777b538SAndroid Build Coastguard Worker # Write shared library output files of all dependencies to a file. Those 2193*6777b538SAndroid Build Coastguard Worker # will be the shared libraries packaged into the APK. 2194*6777b538SAndroid Build Coastguard Worker _shared_library_list_file = 2195*6777b538SAndroid Build Coastguard Worker "$target_gen_dir/${_template_name}.native_libs" 2196*6777b538SAndroid Build Coastguard Worker generated_file("${_template_name}__shared_library_list") { 2197*6777b538SAndroid Build Coastguard Worker deps = _native_libs_deps 2198*6777b538SAndroid Build Coastguard Worker outputs = [ _shared_library_list_file ] 2199*6777b538SAndroid Build Coastguard Worker data_keys = [ "shared_libraries" ] 2200*6777b538SAndroid Build Coastguard Worker walk_keys = [ "shared_libraries_barrier" ] 2201*6777b538SAndroid Build Coastguard Worker rebase = root_build_dir 2202*6777b538SAndroid Build Coastguard Worker } 2203*6777b538SAndroid Build Coastguard Worker } else { 2204*6777b538SAndroid Build Coastguard Worker # Must exist for instrumentation_test_apk() to depend on. 2205*6777b538SAndroid Build Coastguard Worker group("${_template_name}__shared_library_list") { 2206*6777b538SAndroid Build Coastguard Worker } 2207*6777b538SAndroid Build Coastguard Worker } 2208*6777b538SAndroid Build Coastguard Worker 2209*6777b538SAndroid Build Coastguard Worker _secondary_abi_native_libs_deps = [] 2210*6777b538SAndroid Build Coastguard Worker 2211*6777b538SAndroid Build Coastguard Worker if (defined(invoker.secondary_abi_shared_libraries) && 2212*6777b538SAndroid Build Coastguard Worker invoker.secondary_abi_shared_libraries != []) { 2213*6777b538SAndroid Build Coastguard Worker _secondary_abi_native_libs_deps = invoker.secondary_abi_shared_libraries 2214*6777b538SAndroid Build Coastguard Worker 2215*6777b538SAndroid Build Coastguard Worker # Write shared library output files of all dependencies to a file. Those 2216*6777b538SAndroid Build Coastguard Worker # will be the shared libraries packaged into the APK. 2217*6777b538SAndroid Build Coastguard Worker _secondary_abi_shared_library_list_file = 2218*6777b538SAndroid Build Coastguard Worker "$target_gen_dir/${_template_name}.secondary_abi_native_libs" 2219*6777b538SAndroid Build Coastguard Worker generated_file("${_template_name}__secondary_abi_shared_library_list") { 2220*6777b538SAndroid Build Coastguard Worker deps = _secondary_abi_native_libs_deps 2221*6777b538SAndroid Build Coastguard Worker outputs = [ _secondary_abi_shared_library_list_file ] 2222*6777b538SAndroid Build Coastguard Worker data_keys = [ "shared_libraries" ] 2223*6777b538SAndroid Build Coastguard Worker walk_keys = [ "shared_libraries_barrier" ] 2224*6777b538SAndroid Build Coastguard Worker rebase = root_build_dir 2225*6777b538SAndroid Build Coastguard Worker } 2226*6777b538SAndroid Build Coastguard Worker } else { 2227*6777b538SAndroid Build Coastguard Worker # Must exist for instrumentation_test_apk() to depend on. 2228*6777b538SAndroid Build Coastguard Worker group("${_template_name}__secondary_abi_shared_library_list") { 2229*6777b538SAndroid Build Coastguard Worker } 2230*6777b538SAndroid Build Coastguard Worker } 2231*6777b538SAndroid Build Coastguard Worker 2232*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(_build_config, root_build_dir) 2233*6777b538SAndroid Build Coastguard Worker assert(_rebased_build_config != "") # Mark as used. 2234*6777b538SAndroid Build Coastguard Worker 2235*6777b538SAndroid Build Coastguard Worker _generate_productconfig_java = 2236*6777b538SAndroid Build Coastguard Worker defined(invoker.product_config_java_packages) && !_omit_dex 2237*6777b538SAndroid Build Coastguard Worker 2238*6777b538SAndroid Build Coastguard Worker _proguard_enabled = 2239*6777b538SAndroid Build Coastguard Worker defined(invoker.proguard_enabled) && invoker.proguard_enabled 2240*6777b538SAndroid Build Coastguard Worker 2241*6777b538SAndroid Build Coastguard Worker if (!_is_bundle_module && _proguard_enabled) { 2242*6777b538SAndroid Build Coastguard Worker _proguard_mapping_path = "$_final_apk_path.mapping" 2243*6777b538SAndroid Build Coastguard Worker } 2244*6777b538SAndroid Build Coastguard Worker 2245*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resource_ids_provider_dep)) { 2246*6777b538SAndroid Build Coastguard Worker _resource_ids_provider_dep = invoker.resource_ids_provider_dep 2247*6777b538SAndroid Build Coastguard Worker } 2248*6777b538SAndroid Build Coastguard Worker 2249*6777b538SAndroid Build Coastguard Worker if (defined(invoker.shared_resources_allowlist_target)) { 2250*6777b538SAndroid Build Coastguard Worker _shared_resources_allowlist_target = 2251*6777b538SAndroid Build Coastguard Worker invoker.shared_resources_allowlist_target 2252*6777b538SAndroid Build Coastguard Worker } 2253*6777b538SAndroid Build Coastguard Worker 2254*6777b538SAndroid Build Coastguard Worker _uses_static_library = defined(invoker.static_library_provider) 2255*6777b538SAndroid Build Coastguard Worker 2256*6777b538SAndroid Build Coastguard Worker # TODO(crbug.com/864142): Allow incremental installs of bundle modules. 2257*6777b538SAndroid Build Coastguard Worker _incremental_apk = 2258*6777b538SAndroid Build Coastguard Worker !_is_bundle_module && 2259*6777b538SAndroid Build Coastguard Worker !(defined(invoker.never_incremental) && invoker.never_incremental) && 2260*6777b538SAndroid Build Coastguard Worker incremental_install && _min_sdk_version >= default_min_sdk_version 2261*6777b538SAndroid Build Coastguard Worker if (_incremental_apk) { 2262*6777b538SAndroid Build Coastguard Worker _target_dir_name = get_label_info(target_name, "dir") 2263*6777b538SAndroid Build Coastguard Worker _incremental_install_json_path = "$root_out_dir/gen.runtime/$_target_dir_name/$target_name.incremental.json" 2264*6777b538SAndroid Build Coastguard Worker _incremental_apk_path = "${_final_apk_path_no_ext}_incremental.apk" 2265*6777b538SAndroid Build Coastguard Worker } 2266*6777b538SAndroid Build Coastguard Worker 2267*6777b538SAndroid Build Coastguard Worker if (!_incremental_apk && !_omit_dex) { 2268*6777b538SAndroid Build Coastguard Worker # Bundle modules don't build the dex here, but need to write this path 2269*6777b538SAndroid Build Coastguard Worker # to their .build_config.json file only when proguarding. 2270*6777b538SAndroid Build Coastguard Worker if (_proguard_enabled) { 2271*6777b538SAndroid Build Coastguard Worker _final_dex_path = "$_base_path.r8dex.jar" 2272*6777b538SAndroid Build Coastguard Worker } else if (!_is_bundle_module) { 2273*6777b538SAndroid Build Coastguard Worker _final_dex_path = "$_base_path.mergeddex.jar" 2274*6777b538SAndroid Build Coastguard Worker } 2275*6777b538SAndroid Build Coastguard Worker } 2276*6777b538SAndroid Build Coastguard Worker 2277*6777b538SAndroid Build Coastguard Worker _android_manifest = 2278*6777b538SAndroid Build Coastguard Worker "$target_gen_dir/${_template_name}/AndroidManifest.merged.xml" 2279*6777b538SAndroid Build Coastguard Worker _merge_manifest_target = "${_template_name}__merge_manifests" 2280*6777b538SAndroid Build Coastguard Worker merge_manifests(_merge_manifest_target) { 2281*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 2282*6777b538SAndroid Build Coastguard Worker [ 2283*6777b538SAndroid Build Coastguard Worker "manifest_package", 2284*6777b538SAndroid Build Coastguard Worker "max_sdk_version", 2285*6777b538SAndroid Build Coastguard Worker ]) 2286*6777b538SAndroid Build Coastguard Worker input_manifest = invoker.android_manifest 2287*6777b538SAndroid Build Coastguard Worker output_manifest = _android_manifest 2288*6777b538SAndroid Build Coastguard Worker build_config = _build_config 2289*6777b538SAndroid Build Coastguard Worker min_sdk_version = _min_sdk_version 2290*6777b538SAndroid Build Coastguard Worker target_sdk_version = _target_sdk_version 2291*6777b538SAndroid Build Coastguard Worker 2292*6777b538SAndroid Build Coastguard Worker # Depend on android_resources() targets that use generated files 2293*6777b538SAndroid Build Coastguard Worker # in mergeable_android_manifests (such as android_aar_prebuilt). 2294*6777b538SAndroid Build Coastguard Worker deps = _java_assetres_deps + [ ":$_build_config_target" ] 2295*6777b538SAndroid Build Coastguard Worker if (defined(invoker.android_manifest_dep)) { 2296*6777b538SAndroid Build Coastguard Worker deps += [ invoker.android_manifest_dep ] 2297*6777b538SAndroid Build Coastguard Worker } 2298*6777b538SAndroid Build Coastguard Worker } 2299*6777b538SAndroid Build Coastguard Worker 2300*6777b538SAndroid Build Coastguard Worker _final_deps = [ ":$_java_target_name" ] 2301*6777b538SAndroid Build Coastguard Worker 2302*6777b538SAndroid Build Coastguard Worker _generated_proguard_config = "$_base_path.resources.proguard.txt" 2303*6777b538SAndroid Build Coastguard Worker 2304*6777b538SAndroid Build Coastguard Worker if (defined(_shared_resources_allowlist_target)) { 2305*6777b538SAndroid Build Coastguard Worker _allowlist_gen_dir = 2306*6777b538SAndroid Build Coastguard Worker get_label_info(_shared_resources_allowlist_target, "target_gen_dir") 2307*6777b538SAndroid Build Coastguard Worker _allowlist_target_name = 2308*6777b538SAndroid Build Coastguard Worker get_label_info(_shared_resources_allowlist_target, "name") 2309*6777b538SAndroid Build Coastguard Worker _allowlist_r_txt_path = 2310*6777b538SAndroid Build Coastguard Worker "${_allowlist_gen_dir}/${_allowlist_target_name}" + 2311*6777b538SAndroid Build Coastguard Worker "__compile_resources_R.txt" 2312*6777b538SAndroid Build Coastguard Worker _allowlist_deps = 2313*6777b538SAndroid Build Coastguard Worker "${_shared_resources_allowlist_target}__compile_resources" 2314*6777b538SAndroid Build Coastguard Worker } 2315*6777b538SAndroid Build Coastguard Worker 2316*6777b538SAndroid Build Coastguard Worker if (_incremental_apk) { 2317*6777b538SAndroid Build Coastguard Worker _incremental_android_manifest = 2318*6777b538SAndroid Build Coastguard Worker "$target_gen_dir/${_template_name}/AndroidManifest.incremental.xml" 2319*6777b538SAndroid Build Coastguard Worker _incremental_manifest_target_name = "${target_name}__incremental_manifest" 2320*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_incremental_manifest_target_name) { 2321*6777b538SAndroid Build Coastguard Worker deps = [ ":$_merge_manifest_target" ] 2322*6777b538SAndroid Build Coastguard Worker script = 2323*6777b538SAndroid Build Coastguard Worker "//build/android/incremental_install/generate_android_manifest.py" 2324*6777b538SAndroid Build Coastguard Worker inputs = [ _android_manifest ] 2325*6777b538SAndroid Build Coastguard Worker outputs = [ _incremental_android_manifest ] 2326*6777b538SAndroid Build Coastguard Worker 2327*6777b538SAndroid Build Coastguard Worker args = [ 2328*6777b538SAndroid Build Coastguard Worker "--disable-isolated-processes", 2329*6777b538SAndroid Build Coastguard Worker "--src-manifest", 2330*6777b538SAndroid Build Coastguard Worker rebase_path(_android_manifest, root_build_dir), 2331*6777b538SAndroid Build Coastguard Worker "--dst-manifest", 2332*6777b538SAndroid Build Coastguard Worker rebase_path(_incremental_android_manifest, root_build_dir), 2333*6777b538SAndroid Build Coastguard Worker ] 2334*6777b538SAndroid Build Coastguard Worker } 2335*6777b538SAndroid Build Coastguard Worker } 2336*6777b538SAndroid Build Coastguard Worker 2337*6777b538SAndroid Build Coastguard Worker _compile_resources_target = "${_template_name}__compile_resources" 2338*6777b538SAndroid Build Coastguard Worker _compile_resources_rtxt_out = 2339*6777b538SAndroid Build Coastguard Worker "${target_gen_dir}/${_compile_resources_target}_R.txt" 2340*6777b538SAndroid Build Coastguard Worker _compile_resources_emit_ids_out = 2341*6777b538SAndroid Build Coastguard Worker "${target_gen_dir}/${_compile_resources_target}.resource_ids" 2342*6777b538SAndroid Build Coastguard Worker compile_resources(_compile_resources_target) { 2343*6777b538SAndroid Build Coastguard Worker forward_variables_from( 2344*6777b538SAndroid Build Coastguard Worker invoker, 2345*6777b538SAndroid Build Coastguard Worker [ 2346*6777b538SAndroid Build Coastguard Worker "aapt_locale_allowlist", 2347*6777b538SAndroid Build Coastguard Worker "app_as_shared_lib", 2348*6777b538SAndroid Build Coastguard Worker "enforce_resource_overlays_in_tests", 2349*6777b538SAndroid Build Coastguard Worker "expected_android_manifest", 2350*6777b538SAndroid Build Coastguard Worker "expected_android_manifest_base", 2351*6777b538SAndroid Build Coastguard Worker "expected_android_manifest_library_version_offset", 2352*6777b538SAndroid Build Coastguard Worker "expected_android_manifest_version_code_offset", 2353*6777b538SAndroid Build Coastguard Worker "manifest_package", 2354*6777b538SAndroid Build Coastguard Worker "max_sdk_version", 2355*6777b538SAndroid Build Coastguard Worker "override_target_sdk", 2356*6777b538SAndroid Build Coastguard Worker "package_id", 2357*6777b538SAndroid Build Coastguard Worker "png_to_webp", 2358*6777b538SAndroid Build Coastguard Worker "r_java_root_package_name", 2359*6777b538SAndroid Build Coastguard Worker "resource_exclusion_exceptions", 2360*6777b538SAndroid Build Coastguard Worker "resource_exclusion_regex", 2361*6777b538SAndroid Build Coastguard Worker "resource_values_filter_rules", 2362*6777b538SAndroid Build Coastguard Worker "shared_resources", 2363*6777b538SAndroid Build Coastguard Worker "shared_resources_allowlist_locales", 2364*6777b538SAndroid Build Coastguard Worker "uses_split", 2365*6777b538SAndroid Build Coastguard Worker ]) 2366*6777b538SAndroid Build Coastguard Worker android_manifest = _android_manifest 2367*6777b538SAndroid Build Coastguard Worker android_manifest_dep = ":$_merge_manifest_target" 2368*6777b538SAndroid Build Coastguard Worker version_code = _version_code 2369*6777b538SAndroid Build Coastguard Worker version_name = _version_name 2370*6777b538SAndroid Build Coastguard Worker min_sdk_version = _min_sdk_version 2371*6777b538SAndroid Build Coastguard Worker target_sdk_version = _target_sdk_version 2372*6777b538SAndroid Build Coastguard Worker 2373*6777b538SAndroid Build Coastguard Worker if (defined(expected_android_manifest)) { 2374*6777b538SAndroid Build Coastguard Worker top_target_name = _template_name 2375*6777b538SAndroid Build Coastguard Worker } 2376*6777b538SAndroid Build Coastguard Worker 2377*6777b538SAndroid Build Coastguard Worker if (defined(_resource_ids_provider_dep)) { 2378*6777b538SAndroid Build Coastguard Worker resource_ids_provider_dep = _resource_ids_provider_dep 2379*6777b538SAndroid Build Coastguard Worker } 2380*6777b538SAndroid Build Coastguard Worker 2381*6777b538SAndroid Build Coastguard Worker if (defined(invoker.module_name)) { 2382*6777b538SAndroid Build Coastguard Worker package_name = invoker.module_name 2383*6777b538SAndroid Build Coastguard Worker } 2384*6777b538SAndroid Build Coastguard Worker 2385*6777b538SAndroid Build Coastguard Worker if (defined(invoker.post_process_package_resources_script)) { 2386*6777b538SAndroid Build Coastguard Worker post_process_script = invoker.post_process_package_resources_script 2387*6777b538SAndroid Build Coastguard Worker } 2388*6777b538SAndroid Build Coastguard Worker r_text_out_path = _compile_resources_rtxt_out 2389*6777b538SAndroid Build Coastguard Worker emit_ids_out_path = _compile_resources_emit_ids_out 2390*6777b538SAndroid Build Coastguard Worker size_info_path = _res_size_info_path 2391*6777b538SAndroid Build Coastguard Worker proguard_file = _generated_proguard_config 2392*6777b538SAndroid Build Coastguard Worker 2393*6777b538SAndroid Build Coastguard Worker build_config = _build_config 2394*6777b538SAndroid Build Coastguard Worker build_config_dep = ":$_build_config_target" 2395*6777b538SAndroid Build Coastguard Worker deps = _java_assetres_deps + _non_java_deps 2396*6777b538SAndroid Build Coastguard Worker 2397*6777b538SAndroid Build Coastguard Worker if (_incremental_apk) { 2398*6777b538SAndroid Build Coastguard Worker android_manifest = _incremental_android_manifest 2399*6777b538SAndroid Build Coastguard Worker android_manifest_dep = ":$_incremental_manifest_target_name" 2400*6777b538SAndroid Build Coastguard Worker } 2401*6777b538SAndroid Build Coastguard Worker 2402*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apk_under_test)) { 2403*6777b538SAndroid Build Coastguard Worker # Set the arsc package name to match the apk_under_test package name 2404*6777b538SAndroid Build Coastguard Worker # So that test resources can references under_test resources via 2405*6777b538SAndroid Build Coastguard Worker # @type/name syntax. 2406*6777b538SAndroid Build Coastguard Worker r_java_root_package_name = "test" 2407*6777b538SAndroid Build Coastguard Worker arsc_package_name = 2408*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_build_config:deps_info:arsc_package_name)" 2409*6777b538SAndroid Build Coastguard Worker 2410*6777b538SAndroid Build Coastguard Worker # Passing in the --emit-ids mapping will cause aapt2 to assign resources 2411*6777b538SAndroid Build Coastguard Worker # IDs that do not conflict with those from apk_under_test. 2412*6777b538SAndroid Build Coastguard Worker assert(!defined(resource_ids_provider_dep)) 2413*6777b538SAndroid Build Coastguard Worker resource_ids_provider_dep = invoker.apk_under_test 2414*6777b538SAndroid Build Coastguard Worker 2415*6777b538SAndroid Build Coastguard Worker _link_against = invoker.apk_under_test 2416*6777b538SAndroid Build Coastguard Worker } 2417*6777b538SAndroid Build Coastguard Worker 2418*6777b538SAndroid Build Coastguard Worker if (_is_bundle_module) { 2419*6777b538SAndroid Build Coastguard Worker is_bundle_module = true 2420*6777b538SAndroid Build Coastguard Worker proto_output = _proto_resources_path 2421*6777b538SAndroid Build Coastguard Worker 2422*6777b538SAndroid Build Coastguard Worker if (defined(invoker.base_module_target)) { 2423*6777b538SAndroid Build Coastguard Worker _link_against = invoker.base_module_target 2424*6777b538SAndroid Build Coastguard Worker } 2425*6777b538SAndroid Build Coastguard Worker } 2426*6777b538SAndroid Build Coastguard Worker 2427*6777b538SAndroid Build Coastguard Worker if (defined(_link_against)) { 2428*6777b538SAndroid Build Coastguard Worker deps += [ "${_link_against}__compile_resources" ] 2429*6777b538SAndroid Build Coastguard Worker include_resource = get_label_info(_link_against, "target_out_dir") + 2430*6777b538SAndroid Build Coastguard Worker "/" + get_label_info(_link_against, "name") + ".ap_" 2431*6777b538SAndroid Build Coastguard Worker } 2432*6777b538SAndroid Build Coastguard Worker 2433*6777b538SAndroid Build Coastguard Worker # Bundle modules have to reference resources from the base module. 2434*6777b538SAndroid Build Coastguard Worker if (_is_base_module) { 2435*6777b538SAndroid Build Coastguard Worker arsc_output = _arsc_resources_path 2436*6777b538SAndroid Build Coastguard Worker } 2437*6777b538SAndroid Build Coastguard Worker 2438*6777b538SAndroid Build Coastguard Worker if (defined(_shared_resources_allowlist_target)) { 2439*6777b538SAndroid Build Coastguard Worker # Used to ensure that the WebView resources are properly shared 2440*6777b538SAndroid Build Coastguard Worker # (i.e. are non-final and with package ID 0). 2441*6777b538SAndroid Build Coastguard Worker shared_resources_allowlist = _allowlist_r_txt_path 2442*6777b538SAndroid Build Coastguard Worker deps += [ _allowlist_deps ] 2443*6777b538SAndroid Build Coastguard Worker } 2444*6777b538SAndroid Build Coastguard Worker } 2445*6777b538SAndroid Build Coastguard Worker _srcjar_deps += [ ":$_compile_resources_target" ] 2446*6777b538SAndroid Build Coastguard Worker 2447*6777b538SAndroid Build Coastguard Worker # We don't ship apks anymore, only optimize bundle builds 2448*6777b538SAndroid Build Coastguard Worker if (_is_bundle_module) { 2449*6777b538SAndroid Build Coastguard Worker _short_resource_paths = 2450*6777b538SAndroid Build Coastguard Worker defined(invoker.short_resource_paths) && 2451*6777b538SAndroid Build Coastguard Worker invoker.short_resource_paths && enable_arsc_obfuscation 2452*6777b538SAndroid Build Coastguard Worker _strip_resource_names = 2453*6777b538SAndroid Build Coastguard Worker defined(invoker.strip_resource_names) && 2454*6777b538SAndroid Build Coastguard Worker invoker.strip_resource_names && enable_arsc_obfuscation 2455*6777b538SAndroid Build Coastguard Worker _strip_unused_resources = 2456*6777b538SAndroid Build Coastguard Worker defined(invoker.strip_unused_resources) && 2457*6777b538SAndroid Build Coastguard Worker invoker.strip_unused_resources && enable_unused_resource_stripping 2458*6777b538SAndroid Build Coastguard Worker _optimize_resources = _strip_resource_names || _short_resource_paths || 2459*6777b538SAndroid Build Coastguard Worker _strip_unused_resources 2460*6777b538SAndroid Build Coastguard Worker } 2461*6777b538SAndroid Build Coastguard Worker 2462*6777b538SAndroid Build Coastguard Worker if (_is_bundle_module && _optimize_resources) { 2463*6777b538SAndroid Build Coastguard Worker _optimized_proto_resources_path = 2464*6777b538SAndroid Build Coastguard Worker "$target_out_dir/$target_name.optimized.proto.ap_" 2465*6777b538SAndroid Build Coastguard Worker if (_short_resource_paths) { 2466*6777b538SAndroid Build Coastguard Worker _resources_path_map_out_path = 2467*6777b538SAndroid Build Coastguard Worker "${target_gen_dir}/${_template_name}_resources_path_map.txt" 2468*6777b538SAndroid Build Coastguard Worker } 2469*6777b538SAndroid Build Coastguard Worker _optimize_resources_target = "${_template_name}__optimize_resources" 2470*6777b538SAndroid Build Coastguard Worker optimize_resources(_optimize_resources_target) { 2471*6777b538SAndroid Build Coastguard Worker deps = _non_java_deps + [ ":$_compile_resources_target" ] 2472*6777b538SAndroid Build Coastguard Worker short_resource_paths = _short_resource_paths 2473*6777b538SAndroid Build Coastguard Worker strip_resource_names = _strip_resource_names 2474*6777b538SAndroid Build Coastguard Worker if (_short_resource_paths) { 2475*6777b538SAndroid Build Coastguard Worker resources_path_map_out_path = _resources_path_map_out_path 2476*6777b538SAndroid Build Coastguard Worker } 2477*6777b538SAndroid Build Coastguard Worker r_text_path = _compile_resources_rtxt_out 2478*6777b538SAndroid Build Coastguard Worker proto_input_path = _proto_resources_path 2479*6777b538SAndroid Build Coastguard Worker optimized_proto_output = _optimized_proto_resources_path 2480*6777b538SAndroid Build Coastguard Worker if (_strip_unused_resources) { 2481*6777b538SAndroid Build Coastguard Worker # These need to be kept in sync with the target names + output paths 2482*6777b538SAndroid Build Coastguard Worker # in the android_app_bundle template. 2483*6777b538SAndroid Build Coastguard Worker _unused_resources_target = "${_template_name}__unused_resources" 2484*6777b538SAndroid Build Coastguard Worker _unused_resources_config_path = 2485*6777b538SAndroid Build Coastguard Worker "$target_gen_dir/${_template_name}_unused_resources.config" 2486*6777b538SAndroid Build Coastguard Worker resources_config_paths = [ _unused_resources_config_path ] 2487*6777b538SAndroid Build Coastguard Worker deps += [ ":$_unused_resources_target" ] 2488*6777b538SAndroid Build Coastguard Worker } else { 2489*6777b538SAndroid Build Coastguard Worker resources_config_paths = [] 2490*6777b538SAndroid Build Coastguard Worker } 2491*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resources_config_paths)) { 2492*6777b538SAndroid Build Coastguard Worker resources_config_paths += invoker.resources_config_paths 2493*6777b538SAndroid Build Coastguard Worker } 2494*6777b538SAndroid Build Coastguard Worker } 2495*6777b538SAndroid Build Coastguard Worker 2496*6777b538SAndroid Build Coastguard Worker if (_strip_unused_resources) { 2497*6777b538SAndroid Build Coastguard Worker # Copy the unused resources config to the final bundle output dir. 2498*6777b538SAndroid Build Coastguard Worker _copy_unused_resources_target = 2499*6777b538SAndroid Build Coastguard Worker "${_template_name}__copy_unused_resources" 2500*6777b538SAndroid Build Coastguard Worker _final_deps += [ ":$_copy_unused_resources_target" ] 2501*6777b538SAndroid Build Coastguard Worker } 2502*6777b538SAndroid Build Coastguard Worker } else { 2503*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "resources_config_paths" ]) 2504*6777b538SAndroid Build Coastguard Worker } 2505*6777b538SAndroid Build Coastguard Worker 2506*6777b538SAndroid Build Coastguard Worker if (!_is_bundle_module) { 2507*6777b538SAndroid Build Coastguard Worker # Output the R.txt file to a more easily discoverable location for 2508*6777b538SAndroid Build Coastguard Worker # archiving. This is necessary when stripping resource names so that we 2509*6777b538SAndroid Build Coastguard Worker # have an archive of resource names to ids for shipped apks (for 2510*6777b538SAndroid Build Coastguard Worker # debugging purposes). We copy the file rather than change the location 2511*6777b538SAndroid Build Coastguard Worker # of the original because other targets rely on the location of the R.txt 2512*6777b538SAndroid Build Coastguard Worker # file. 2513*6777b538SAndroid Build Coastguard Worker _copy_rtxt_target = "${_template_name}__copy_rtxt" 2514*6777b538SAndroid Build Coastguard Worker copy(_copy_rtxt_target) { 2515*6777b538SAndroid Build Coastguard Worker deps = [ ":$_compile_resources_target" ] 2516*6777b538SAndroid Build Coastguard Worker sources = [ _compile_resources_rtxt_out ] 2517*6777b538SAndroid Build Coastguard Worker outputs = [ _final_rtxt_path ] 2518*6777b538SAndroid Build Coastguard Worker } 2519*6777b538SAndroid Build Coastguard Worker _final_deps += [ ":$_copy_rtxt_target" ] 2520*6777b538SAndroid Build Coastguard Worker } 2521*6777b538SAndroid Build Coastguard Worker 2522*6777b538SAndroid Build Coastguard Worker if (defined(_resource_sizes_arsc_path)) { 2523*6777b538SAndroid Build Coastguard Worker _copy_arsc_target = "${_template_name}__copy_arsc" 2524*6777b538SAndroid Build Coastguard Worker copy(_copy_arsc_target) { 2525*6777b538SAndroid Build Coastguard Worker deps = [ ":$_compile_resources_target" ] 2526*6777b538SAndroid Build Coastguard Worker 2527*6777b538SAndroid Build Coastguard Worker # resource_sizes.py doesn't care if it gets the optimized .arsc. 2528*6777b538SAndroid Build Coastguard Worker sources = [ _arsc_resources_path ] 2529*6777b538SAndroid Build Coastguard Worker outputs = [ _resource_sizes_arsc_path ] 2530*6777b538SAndroid Build Coastguard Worker } 2531*6777b538SAndroid Build Coastguard Worker _final_deps += [ ":$_copy_arsc_target" ] 2532*6777b538SAndroid Build Coastguard Worker } 2533*6777b538SAndroid Build Coastguard Worker 2534*6777b538SAndroid Build Coastguard Worker if (defined(invoker.generate_native_libraries_java)) { 2535*6777b538SAndroid Build Coastguard Worker _generate_native_libraries_java = invoker.generate_native_libraries_java 2536*6777b538SAndroid Build Coastguard Worker } else { 2537*6777b538SAndroid Build Coastguard Worker _generate_native_libraries_java = 2538*6777b538SAndroid Build Coastguard Worker _is_base_module && !_omit_dex && !defined(invoker.apk_under_test) 2539*6777b538SAndroid Build Coastguard Worker } 2540*6777b538SAndroid Build Coastguard Worker if (_generate_native_libraries_java) { 2541*6777b538SAndroid Build Coastguard Worker write_native_libraries_java("${_template_name}__native_libraries") { 2542*6777b538SAndroid Build Coastguard Worker # Do not add a dep on the generated_file target in order to avoid having 2543*6777b538SAndroid Build Coastguard Worker # to build the native libraries before this target. The dependency is 2544*6777b538SAndroid Build Coastguard Worker # instead captured via a depfile. 2545*6777b538SAndroid Build Coastguard Worker if (_uses_static_library) { 2546*6777b538SAndroid Build Coastguard Worker _prefix = get_label_info(invoker.static_library_provider, 2547*6777b538SAndroid Build Coastguard Worker "target_gen_dir") + "/" + 2548*6777b538SAndroid Build Coastguard Worker get_label_info(invoker.static_library_provider, "name") 2549*6777b538SAndroid Build Coastguard Worker if (defined(invoker.static_library_provider_use_secondary_abi) && 2550*6777b538SAndroid Build Coastguard Worker invoker.static_library_provider_use_secondary_abi) { 2551*6777b538SAndroid Build Coastguard Worker native_libraries_list_file = "${_prefix}.secondary_abi_native_libs" 2552*6777b538SAndroid Build Coastguard Worker _use_secondary_abi = true 2553*6777b538SAndroid Build Coastguard Worker } else { 2554*6777b538SAndroid Build Coastguard Worker native_libraries_list_file = "${_prefix}.native_libs" 2555*6777b538SAndroid Build Coastguard Worker _use_secondary_abi = false 2556*6777b538SAndroid Build Coastguard Worker } 2557*6777b538SAndroid Build Coastguard Worker } else if (_native_libs_deps != []) { 2558*6777b538SAndroid Build Coastguard Worker native_libraries_list_file = _shared_library_list_file 2559*6777b538SAndroid Build Coastguard Worker _use_secondary_abi = false 2560*6777b538SAndroid Build Coastguard Worker } else if (_secondary_abi_native_libs_deps != []) { 2561*6777b538SAndroid Build Coastguard Worker native_libraries_list_file = _secondary_abi_shared_library_list_file 2562*6777b538SAndroid Build Coastguard Worker _use_secondary_abi = true 2563*6777b538SAndroid Build Coastguard Worker } 2564*6777b538SAndroid Build Coastguard Worker 2565*6777b538SAndroid Build Coastguard Worker if (defined(_use_secondary_abi)) { 2566*6777b538SAndroid Build Coastguard Worker if (_use_secondary_abi || !android_64bit_target_cpu) { 2567*6777b538SAndroid Build Coastguard Worker native_lib_32_bit = true 2568*6777b538SAndroid Build Coastguard Worker } else { 2569*6777b538SAndroid Build Coastguard Worker native_lib_64_bit = true 2570*6777b538SAndroid Build Coastguard Worker } 2571*6777b538SAndroid Build Coastguard Worker } 2572*6777b538SAndroid Build Coastguard Worker 2573*6777b538SAndroid Build Coastguard Worker enable_chromium_linker = _use_chromium_linker 2574*6777b538SAndroid Build Coastguard Worker use_final_fields = true 2575*6777b538SAndroid Build Coastguard Worker } 2576*6777b538SAndroid Build Coastguard Worker _srcjar_deps += [ ":${_template_name}__native_libraries" ] 2577*6777b538SAndroid Build Coastguard Worker } 2578*6777b538SAndroid Build Coastguard Worker 2579*6777b538SAndroid Build Coastguard Worker _loadable_modules = [] 2580*6777b538SAndroid Build Coastguard Worker if (defined(invoker.loadable_modules)) { 2581*6777b538SAndroid Build Coastguard Worker _loadable_modules = invoker.loadable_modules 2582*6777b538SAndroid Build Coastguard Worker } 2583*6777b538SAndroid Build Coastguard Worker 2584*6777b538SAndroid Build Coastguard Worker if (_native_libs_deps != []) { 2585*6777b538SAndroid Build Coastguard Worker _loadable_modules += _sanitizer_runtimes 2586*6777b538SAndroid Build Coastguard Worker } 2587*6777b538SAndroid Build Coastguard Worker 2588*6777b538SAndroid Build Coastguard Worker _assertions_implicitly_enabled = defined(invoker.custom_assertion_handler) 2589*6777b538SAndroid Build Coastguard Worker 2590*6777b538SAndroid Build Coastguard Worker # Many possible paths where we wouldn't use this variable. 2591*6777b538SAndroid Build Coastguard Worker not_needed([ "_assertions_implicitly_enabled" ]) 2592*6777b538SAndroid Build Coastguard Worker 2593*6777b538SAndroid Build Coastguard Worker _generate_buildconfig_java = !defined(invoker.apk_under_test) && !_omit_dex 2594*6777b538SAndroid Build Coastguard Worker if (defined(invoker.generate_buildconfig_java)) { 2595*6777b538SAndroid Build Coastguard Worker _generate_buildconfig_java = invoker.generate_buildconfig_java 2596*6777b538SAndroid Build Coastguard Worker } 2597*6777b538SAndroid Build Coastguard Worker if (_generate_buildconfig_java) { 2598*6777b538SAndroid Build Coastguard Worker generate_build_config_srcjar("${_template_name}__build_config_srcjar") { 2599*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "isolated_splits_enabled" ]) 2600*6777b538SAndroid Build Coastguard Worker _bundles_supported = _is_bundle_module 2601*6777b538SAndroid Build Coastguard Worker if (defined(invoker.bundles_supported)) { 2602*6777b538SAndroid Build Coastguard Worker _bundles_supported = invoker.bundles_supported 2603*6777b538SAndroid Build Coastguard Worker } 2604*6777b538SAndroid Build Coastguard Worker bundles_supported = _bundles_supported 2605*6777b538SAndroid Build Coastguard Worker use_final_fields = true 2606*6777b538SAndroid Build Coastguard Worker assertions_implicitly_enabled = _assertions_implicitly_enabled 2607*6777b538SAndroid Build Coastguard Worker is_incremental_install = _incremental_apk 2608*6777b538SAndroid Build Coastguard Worker version_code = _version_code 2609*6777b538SAndroid Build Coastguard Worker min_sdk_version = _min_sdk_version 2610*6777b538SAndroid Build Coastguard Worker write_clang_profiling_data = 2611*6777b538SAndroid Build Coastguard Worker use_clang_coverage && _generate_native_libraries_java 2612*6777b538SAndroid Build Coastguard Worker if (defined(invoker.build_config_include_product_version_resource) && 2613*6777b538SAndroid Build Coastguard Worker invoker.build_config_include_product_version_resource) { 2614*6777b538SAndroid Build Coastguard Worker resources_version_variable = 2615*6777b538SAndroid Build Coastguard Worker "org.chromium.base.R.string.product_version" 2616*6777b538SAndroid Build Coastguard Worker } 2617*6777b538SAndroid Build Coastguard Worker deps = [ ":$_build_config_target" ] 2618*6777b538SAndroid Build Coastguard Worker } 2619*6777b538SAndroid Build Coastguard Worker _srcjar_deps += [ ":${_template_name}__build_config_srcjar" ] 2620*6777b538SAndroid Build Coastguard Worker } 2621*6777b538SAndroid Build Coastguard Worker 2622*6777b538SAndroid Build Coastguard Worker if (_generate_productconfig_java) { 2623*6777b538SAndroid Build Coastguard Worker foreach(_package, invoker.product_config_java_packages) { 2624*6777b538SAndroid Build Coastguard Worker _locale_target_name = 2625*6777b538SAndroid Build Coastguard Worker "${_template_name}_${_package}__product_config_srcjar" 2626*6777b538SAndroid Build Coastguard Worker generate_product_config_srcjar("$_locale_target_name") { 2627*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "is_bundle_module" ]) 2628*6777b538SAndroid Build Coastguard Worker build_config = _build_config 2629*6777b538SAndroid Build Coastguard Worker java_package = _package 2630*6777b538SAndroid Build Coastguard Worker use_chromium_linker = _use_chromium_linker 2631*6777b538SAndroid Build Coastguard Worker deps = [ ":$_build_config_target" ] 2632*6777b538SAndroid Build Coastguard Worker } 2633*6777b538SAndroid Build Coastguard Worker _srcjar_deps += [ ":$_locale_target_name" ] 2634*6777b538SAndroid Build Coastguard Worker } 2635*6777b538SAndroid Build Coastguard Worker } 2636*6777b538SAndroid Build Coastguard Worker 2637*6777b538SAndroid Build Coastguard Worker if (_is_bundle_module) { 2638*6777b538SAndroid Build Coastguard Worker _add_view_trace_events = 2639*6777b538SAndroid Build Coastguard Worker defined(invoker.add_view_trace_events) && 2640*6777b538SAndroid Build Coastguard Worker invoker.add_view_trace_events && enable_trace_event_bytecode_rewriting 2641*6777b538SAndroid Build Coastguard Worker } 2642*6777b538SAndroid Build Coastguard Worker 2643*6777b538SAndroid Build Coastguard Worker # We cannot skip this target when omit_dex = true because it writes the 2644*6777b538SAndroid Build Coastguard Worker # build_config.json. 2645*6777b538SAndroid Build Coastguard Worker java_library_impl(_java_target_name) { 2646*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 2647*6777b538SAndroid Build Coastguard Worker [ 2648*6777b538SAndroid Build Coastguard Worker "alternative_android_sdk_dep", 2649*6777b538SAndroid Build Coastguard Worker "android_manifest", 2650*6777b538SAndroid Build Coastguard Worker "android_manifest_dep", 2651*6777b538SAndroid Build Coastguard Worker "annotation_processor_deps", 2652*6777b538SAndroid Build Coastguard Worker "apk_under_test", 2653*6777b538SAndroid Build Coastguard Worker "asset_deps", 2654*6777b538SAndroid Build Coastguard Worker "base_module_target", 2655*6777b538SAndroid Build Coastguard Worker "chromium_code", 2656*6777b538SAndroid Build Coastguard Worker "deps", 2657*6777b538SAndroid Build Coastguard Worker "jacoco_never_instrument", 2658*6777b538SAndroid Build Coastguard Worker "jar_excluded_patterns", 2659*6777b538SAndroid Build Coastguard Worker "javac_args", 2660*6777b538SAndroid Build Coastguard Worker "mergeable_android_manifests", 2661*6777b538SAndroid Build Coastguard Worker "native_lib_placeholders", 2662*6777b538SAndroid Build Coastguard Worker "parent_module_target", 2663*6777b538SAndroid Build Coastguard Worker "processor_args_javac", 2664*6777b538SAndroid Build Coastguard Worker "secondary_abi_loadable_modules", 2665*6777b538SAndroid Build Coastguard Worker "secondary_native_lib_placeholders", 2666*6777b538SAndroid Build Coastguard Worker "sources", 2667*6777b538SAndroid Build Coastguard Worker "library_always_compress", 2668*6777b538SAndroid Build Coastguard Worker ]) 2669*6777b538SAndroid Build Coastguard Worker version_code = _version_code 2670*6777b538SAndroid Build Coastguard Worker version_name = _version_name 2671*6777b538SAndroid Build Coastguard Worker if (_is_bundle_module) { 2672*6777b538SAndroid Build Coastguard Worker type = "android_app_bundle_module" 2673*6777b538SAndroid Build Coastguard Worker res_size_info_path = _res_size_info_path 2674*6777b538SAndroid Build Coastguard Worker if (defined(invoker.module_name)) { 2675*6777b538SAndroid Build Coastguard Worker module_name = invoker.module_name 2676*6777b538SAndroid Build Coastguard Worker } else { 2677*6777b538SAndroid Build Coastguard Worker module_name = "base" 2678*6777b538SAndroid Build Coastguard Worker } 2679*6777b538SAndroid Build Coastguard Worker add_view_trace_events = _add_view_trace_events 2680*6777b538SAndroid Build Coastguard Worker } else { 2681*6777b538SAndroid Build Coastguard Worker type = "android_apk" 2682*6777b538SAndroid Build Coastguard Worker } 2683*6777b538SAndroid Build Coastguard Worker r_text_path = _compile_resources_rtxt_out 2684*6777b538SAndroid Build Coastguard Worker main_target_name = _template_name 2685*6777b538SAndroid Build Coastguard Worker supports_android = true 2686*6777b538SAndroid Build Coastguard Worker requires_android = true 2687*6777b538SAndroid Build Coastguard Worker srcjar_deps = _srcjar_deps 2688*6777b538SAndroid Build Coastguard Worker merged_android_manifest = _android_manifest 2689*6777b538SAndroid Build Coastguard Worker if (defined(_final_dex_path)) { 2690*6777b538SAndroid Build Coastguard Worker final_dex_path = _final_dex_path 2691*6777b538SAndroid Build Coastguard Worker } 2692*6777b538SAndroid Build Coastguard Worker if (defined(invoker.assert_no_native_deps)) { 2693*6777b538SAndroid Build Coastguard Worker assert_no_deps = invoker.assert_no_native_deps 2694*6777b538SAndroid Build Coastguard Worker } 2695*6777b538SAndroid Build Coastguard Worker 2696*6777b538SAndroid Build Coastguard Worker if (_is_bundle_module) { 2697*6777b538SAndroid Build Coastguard Worker proto_resources_path = _proto_resources_path 2698*6777b538SAndroid Build Coastguard Worker if (_optimize_resources) { 2699*6777b538SAndroid Build Coastguard Worker proto_resources_path = _optimized_proto_resources_path 2700*6777b538SAndroid Build Coastguard Worker if (_short_resource_paths) { 2701*6777b538SAndroid Build Coastguard Worker module_pathmap_path = _resources_path_map_out_path 2702*6777b538SAndroid Build Coastguard Worker } 2703*6777b538SAndroid Build Coastguard Worker } 2704*6777b538SAndroid Build Coastguard Worker } else { 2705*6777b538SAndroid Build Coastguard Worker apk_path = _final_apk_path 2706*6777b538SAndroid Build Coastguard Worker if (_incremental_apk) { 2707*6777b538SAndroid Build Coastguard Worker incremental_apk_path = _incremental_apk_path 2708*6777b538SAndroid Build Coastguard Worker incremental_install_json_path = _incremental_install_json_path 2709*6777b538SAndroid Build Coastguard Worker } 2710*6777b538SAndroid Build Coastguard Worker } 2711*6777b538SAndroid Build Coastguard Worker 2712*6777b538SAndroid Build Coastguard Worker proguard_enabled = _proguard_enabled 2713*6777b538SAndroid Build Coastguard Worker if (_proguard_enabled) { 2714*6777b538SAndroid Build Coastguard Worker proguard_configs = [ _generated_proguard_config ] 2715*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_configs)) { 2716*6777b538SAndroid Build Coastguard Worker proguard_configs += invoker.proguard_configs 2717*6777b538SAndroid Build Coastguard Worker } 2718*6777b538SAndroid Build Coastguard Worker if (!_is_bundle_module) { 2719*6777b538SAndroid Build Coastguard Worker proguard_mapping_path = _proguard_mapping_path 2720*6777b538SAndroid Build Coastguard Worker } 2721*6777b538SAndroid Build Coastguard Worker } 2722*6777b538SAndroid Build Coastguard Worker 2723*6777b538SAndroid Build Coastguard Worker # Do not add a dep on the generated_file target in order to avoid having 2724*6777b538SAndroid Build Coastguard Worker # to build the native libraries before this target. The dependency is 2725*6777b538SAndroid Build Coastguard Worker # instead captured via a depfile. 2726*6777b538SAndroid Build Coastguard Worker if (_native_libs_deps != []) { 2727*6777b538SAndroid Build Coastguard Worker shared_libraries_runtime_deps_file = _shared_library_list_file 2728*6777b538SAndroid Build Coastguard Worker } 2729*6777b538SAndroid Build Coastguard Worker if (defined(_secondary_abi_shared_library_list_file)) { 2730*6777b538SAndroid Build Coastguard Worker secondary_abi_shared_libraries_runtime_deps_file = 2731*6777b538SAndroid Build Coastguard Worker _secondary_abi_shared_library_list_file 2732*6777b538SAndroid Build Coastguard Worker } 2733*6777b538SAndroid Build Coastguard Worker 2734*6777b538SAndroid Build Coastguard Worker loadable_modules = _loadable_modules 2735*6777b538SAndroid Build Coastguard Worker 2736*6777b538SAndroid Build Coastguard Worker if (defined(_allowlist_r_txt_path) && _is_bundle_module) { 2737*6777b538SAndroid Build Coastguard Worker # Used to write the file path to the target's .build_config.json only. 2738*6777b538SAndroid Build Coastguard Worker base_allowlist_rtxt_path = _allowlist_r_txt_path 2739*6777b538SAndroid Build Coastguard Worker } 2740*6777b538SAndroid Build Coastguard Worker } 2741*6777b538SAndroid Build Coastguard Worker 2742*6777b538SAndroid Build Coastguard Worker # Old name for variable, mark as not_needed while it is being renamed 2743*6777b538SAndroid Build Coastguard Worker # downstream. Remove after all references to baseline_profile_path have been 2744*6777b538SAndroid Build Coastguard Worker # changed. 2745*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "baseline_profile_path" ]) 2746*6777b538SAndroid Build Coastguard Worker 2747*6777b538SAndroid Build Coastguard Worker _enable_art_profile_optimizations = 2748*6777b538SAndroid Build Coastguard Worker defined(invoker.art_profile_path) && _proguard_enabled 2749*6777b538SAndroid Build Coastguard Worker 2750*6777b538SAndroid Build Coastguard Worker if (_enable_art_profile_optimizations) { 2751*6777b538SAndroid Build Coastguard Worker _include_baseline_profile = enable_baseline_profiles 2752*6777b538SAndroid Build Coastguard Worker _enable_startup_profile = enable_startup_profiles 2753*6777b538SAndroid Build Coastguard Worker if (_include_baseline_profile) { 2754*6777b538SAndroid Build Coastguard Worker _obfuscated_art_profile = 2755*6777b538SAndroid Build Coastguard Worker "$target_out_dir/${target_name}.obfuscated.hrf" 2756*6777b538SAndroid Build Coastguard Worker } 2757*6777b538SAndroid Build Coastguard Worker } else { 2758*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "art_profile_path" ]) 2759*6777b538SAndroid Build Coastguard Worker } 2760*6777b538SAndroid Build Coastguard Worker 2761*6777b538SAndroid Build Coastguard Worker if (_is_bundle_module || _omit_dex) { 2762*6777b538SAndroid Build Coastguard Worker # Dex generation for app bundle modules take place in the 2763*6777b538SAndroid Build Coastguard Worker # android_app_bundle template. 2764*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "custom_assertion_handler" ]) 2765*6777b538SAndroid Build Coastguard Worker } else if (_incremental_apk) { 2766*6777b538SAndroid Build Coastguard Worker not_needed(invoker, 2767*6777b538SAndroid Build Coastguard Worker [ 2768*6777b538SAndroid Build Coastguard Worker "enable_proguard_checks", 2769*6777b538SAndroid Build Coastguard Worker "custom_assertion_handler", 2770*6777b538SAndroid Build Coastguard Worker ]) 2771*6777b538SAndroid Build Coastguard Worker } else { 2772*6777b538SAndroid Build Coastguard Worker _final_dex_target_name = "${_template_name}__final_dex" 2773*6777b538SAndroid Build Coastguard Worker dex(_final_dex_target_name) { 2774*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 2775*6777b538SAndroid Build Coastguard Worker [ 2776*6777b538SAndroid Build Coastguard Worker "enable_proguard_checks", 2777*6777b538SAndroid Build Coastguard Worker "custom_assertion_handler", 2778*6777b538SAndroid Build Coastguard Worker "proguard_enable_obfuscation", 2779*6777b538SAndroid Build Coastguard Worker "repackage_classes", 2780*6777b538SAndroid Build Coastguard Worker ]) 2781*6777b538SAndroid Build Coastguard Worker min_sdk_version = _min_sdk_version 2782*6777b538SAndroid Build Coastguard Worker proguard_enabled = _proguard_enabled 2783*6777b538SAndroid Build Coastguard Worker build_config = _build_config 2784*6777b538SAndroid Build Coastguard Worker output = _final_dex_path 2785*6777b538SAndroid Build Coastguard Worker deps = [ 2786*6777b538SAndroid Build Coastguard Worker ":$_build_config_target", 2787*6777b538SAndroid Build Coastguard Worker ":$_java_target_name", 2788*6777b538SAndroid Build Coastguard Worker ] 2789*6777b538SAndroid Build Coastguard Worker if (_proguard_enabled) { 2790*6777b538SAndroid Build Coastguard Worker # Generates proguard configs 2791*6777b538SAndroid Build Coastguard Worker deps += [ ":$_compile_resources_target" ] 2792*6777b538SAndroid Build Coastguard Worker proguard_mapping_path = _proguard_mapping_path 2793*6777b538SAndroid Build Coastguard Worker has_apk_under_test = defined(invoker.apk_under_test) 2794*6777b538SAndroid Build Coastguard Worker 2795*6777b538SAndroid Build Coastguard Worker if (_enable_art_profile_optimizations) { 2796*6777b538SAndroid Build Coastguard Worker input_art_profile = invoker.art_profile_path 2797*6777b538SAndroid Build Coastguard Worker if (_include_baseline_profile) { 2798*6777b538SAndroid Build Coastguard Worker output_art_profile = _obfuscated_art_profile 2799*6777b538SAndroid Build Coastguard Worker } 2800*6777b538SAndroid Build Coastguard Worker enable_startup_profile = _enable_startup_profile 2801*6777b538SAndroid Build Coastguard Worker } 2802*6777b538SAndroid Build Coastguard Worker 2803*6777b538SAndroid Build Coastguard Worker # Must not be set via write_build_config, because that will cause it 2804*6777b538SAndroid Build Coastguard Worker # to be picked up by test apks that use apk_under_test. 2805*6777b538SAndroid Build Coastguard Worker if (!_assertions_implicitly_enabled && !enable_java_asserts && 2806*6777b538SAndroid Build Coastguard Worker (!defined(testonly) || !testonly) && 2807*6777b538SAndroid Build Coastguard Worker # Injected JaCoCo code causes -checkdiscards to fail. 2808*6777b538SAndroid Build Coastguard Worker !use_jacoco_coverage) { 2809*6777b538SAndroid Build Coastguard Worker proguard_configs = [ 2810*6777b538SAndroid Build Coastguard Worker "//build/android/dcheck_is_off.flags", 2811*6777b538SAndroid Build Coastguard Worker "//third_party/jni_zero/checkdiscard_proguard.flags", 2812*6777b538SAndroid Build Coastguard Worker ] 2813*6777b538SAndroid Build Coastguard Worker } 2814*6777b538SAndroid Build Coastguard Worker } else { 2815*6777b538SAndroid Build Coastguard Worker if (_min_sdk_version >= default_min_sdk_version) { 2816*6777b538SAndroid Build Coastguard Worker # Enable dex merging only when min_sdk_version is >= what the library 2817*6777b538SAndroid Build Coastguard Worker # .dex files were created with. 2818*6777b538SAndroid Build Coastguard Worker input_dex_filearg = 2819*6777b538SAndroid Build Coastguard Worker "@FileArg(${_rebased_build_config}:deps_info:all_dex_files)" 2820*6777b538SAndroid Build Coastguard Worker 2821*6777b538SAndroid Build Coastguard Worker # Pure dex-merge. 2822*6777b538SAndroid Build Coastguard Worker enable_desugar = false 2823*6777b538SAndroid Build Coastguard Worker } else { 2824*6777b538SAndroid Build Coastguard Worker input_classes_filearg = 2825*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_build_config:deps_info:device_classpath)" 2826*6777b538SAndroid Build Coastguard Worker } 2827*6777b538SAndroid Build Coastguard Worker } 2828*6777b538SAndroid Build Coastguard Worker 2829*6777b538SAndroid Build Coastguard Worker # The individual dependencies would have caught real missing deps in 2830*6777b538SAndroid Build Coastguard Worker # their respective dex steps. False positives that were suppressed at 2831*6777b538SAndroid Build Coastguard Worker # per-target dex steps are emitted here since this may use jar files 2832*6777b538SAndroid Build Coastguard Worker # rather than dex files. 2833*6777b538SAndroid Build Coastguard Worker if (!defined(enable_desugar)) { 2834*6777b538SAndroid Build Coastguard Worker ignore_desugar_missing_deps = true 2835*6777b538SAndroid Build Coastguard Worker } 2836*6777b538SAndroid Build Coastguard Worker } 2837*6777b538SAndroid Build Coastguard Worker 2838*6777b538SAndroid Build Coastguard Worker _final_dex_target_dep = ":$_final_dex_target_name" 2839*6777b538SAndroid Build Coastguard Worker 2840*6777b538SAndroid Build Coastguard Worker if (_enable_art_profile_optimizations && _include_baseline_profile) { 2841*6777b538SAndroid Build Coastguard Worker _binary_profile_target = "${_template_name}__binary_baseline_profile" 2842*6777b538SAndroid Build Coastguard Worker _binary_baseline_profile_path = 2843*6777b538SAndroid Build Coastguard Worker "$target_out_dir/$_template_name.baseline.prof" 2844*6777b538SAndroid Build Coastguard Worker _binary_baseline_profile_metadata_path = 2845*6777b538SAndroid Build Coastguard Worker _binary_baseline_profile_path + "m" 2846*6777b538SAndroid Build Coastguard Worker create_binary_profile(_binary_profile_target) { 2847*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 2848*6777b538SAndroid Build Coastguard Worker binary_baseline_profile_path = _binary_baseline_profile_path 2849*6777b538SAndroid Build Coastguard Worker binary_baseline_profile_metadata_path = 2850*6777b538SAndroid Build Coastguard Worker _binary_baseline_profile_metadata_path 2851*6777b538SAndroid Build Coastguard Worker build_config = _build_config 2852*6777b538SAndroid Build Coastguard Worker input_profile_path = _obfuscated_art_profile 2853*6777b538SAndroid Build Coastguard Worker deps = [ 2854*6777b538SAndroid Build Coastguard Worker ":$_build_config_target", 2855*6777b538SAndroid Build Coastguard Worker _final_dex_target_dep, 2856*6777b538SAndroid Build Coastguard Worker ] 2857*6777b538SAndroid Build Coastguard Worker } 2858*6777b538SAndroid Build Coastguard Worker } 2859*6777b538SAndroid Build Coastguard Worker } 2860*6777b538SAndroid Build Coastguard Worker 2861*6777b538SAndroid Build Coastguard Worker _all_native_libs_deps = _native_libs_deps + _secondary_abi_native_libs_deps 2862*6777b538SAndroid Build Coastguard Worker if (_all_native_libs_deps != []) { 2863*6777b538SAndroid Build Coastguard Worker _native_libs_filearg_dep = ":$_build_config_target" 2864*6777b538SAndroid Build Coastguard Worker _all_native_libs_deps += [ _native_libs_filearg_dep ] 2865*6777b538SAndroid Build Coastguard Worker 2866*6777b538SAndroid Build Coastguard Worker if (!_is_bundle_module) { 2867*6777b538SAndroid Build Coastguard Worker _native_libs_filearg = 2868*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_build_config:native:libraries)" 2869*6777b538SAndroid Build Coastguard Worker } 2870*6777b538SAndroid Build Coastguard Worker } 2871*6777b538SAndroid Build Coastguard Worker 2872*6777b538SAndroid Build Coastguard Worker if (_is_bundle_module) { 2873*6777b538SAndroid Build Coastguard Worker _final_deps += [ 2874*6777b538SAndroid Build Coastguard Worker ":$_build_config_target", 2875*6777b538SAndroid Build Coastguard Worker ":$_compile_resources_target", 2876*6777b538SAndroid Build Coastguard Worker ":$_merge_manifest_target", 2877*6777b538SAndroid Build Coastguard Worker ] + _all_native_libs_deps 2878*6777b538SAndroid Build Coastguard Worker if (defined(invoker.asset_deps)) { 2879*6777b538SAndroid Build Coastguard Worker _final_deps += invoker.asset_deps 2880*6777b538SAndroid Build Coastguard Worker } 2881*6777b538SAndroid Build Coastguard Worker if (_optimize_resources) { 2882*6777b538SAndroid Build Coastguard Worker _final_deps += [ ":$_optimize_resources_target" ] 2883*6777b538SAndroid Build Coastguard Worker } 2884*6777b538SAndroid Build Coastguard Worker if (defined(_final_dex_target_dep)) { 2885*6777b538SAndroid Build Coastguard Worker not_needed([ "_final_dex_target_dep" ]) 2886*6777b538SAndroid Build Coastguard Worker } 2887*6777b538SAndroid Build Coastguard Worker } else { 2888*6777b538SAndroid Build Coastguard Worker # Generate size-info/*.jar.info files. 2889*6777b538SAndroid Build Coastguard Worker if (defined(invoker.name)) { 2890*6777b538SAndroid Build Coastguard Worker # Create size info files for targets that care about size 2891*6777b538SAndroid Build Coastguard Worker # (have proguard enabled). 2892*6777b538SAndroid Build Coastguard Worker _include_size_info = 2893*6777b538SAndroid Build Coastguard Worker defined(invoker.include_size_info) && invoker.include_size_info 2894*6777b538SAndroid Build Coastguard Worker if (_include_size_info || _proguard_enabled) { 2895*6777b538SAndroid Build Coastguard Worker _size_info_target = "${target_name}__size_info" 2896*6777b538SAndroid Build Coastguard Worker create_size_info_files(_size_info_target) { 2897*6777b538SAndroid Build Coastguard Worker name = "${invoker.name}.apk" 2898*6777b538SAndroid Build Coastguard Worker build_config = _build_config 2899*6777b538SAndroid Build Coastguard Worker res_size_info_path = _res_size_info_path 2900*6777b538SAndroid Build Coastguard Worker deps = [ 2901*6777b538SAndroid Build Coastguard Worker ":$_build_config_target", 2902*6777b538SAndroid Build Coastguard Worker ":$_compile_resources_target", 2903*6777b538SAndroid Build Coastguard Worker ":$_java_target_name", 2904*6777b538SAndroid Build Coastguard Worker ] 2905*6777b538SAndroid Build Coastguard Worker if (defined(invoker.asset_deps)) { 2906*6777b538SAndroid Build Coastguard Worker deps += invoker.asset_deps 2907*6777b538SAndroid Build Coastguard Worker } 2908*6777b538SAndroid Build Coastguard Worker } 2909*6777b538SAndroid Build Coastguard Worker _final_deps += [ ":$_size_info_target" ] 2910*6777b538SAndroid Build Coastguard Worker } else { 2911*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "name" ]) 2912*6777b538SAndroid Build Coastguard Worker } 2913*6777b538SAndroid Build Coastguard Worker } 2914*6777b538SAndroid Build Coastguard Worker 2915*6777b538SAndroid Build Coastguard Worker _create_apk_target = "${_template_name}__create" 2916*6777b538SAndroid Build Coastguard Worker _final_deps += [ ":$_create_apk_target" ] 2917*6777b538SAndroid Build Coastguard Worker package_apk("$_create_apk_target") { 2918*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 2919*6777b538SAndroid Build Coastguard Worker [ 2920*6777b538SAndroid Build Coastguard Worker "expected_libs_and_assets", 2921*6777b538SAndroid Build Coastguard Worker "expected_libs_and_assets_base", 2922*6777b538SAndroid Build Coastguard Worker "keystore_name", 2923*6777b538SAndroid Build Coastguard Worker "keystore_path", 2924*6777b538SAndroid Build Coastguard Worker "keystore_password", 2925*6777b538SAndroid Build Coastguard Worker "native_lib_placeholders", 2926*6777b538SAndroid Build Coastguard Worker "secondary_abi_loadable_modules", 2927*6777b538SAndroid Build Coastguard Worker "secondary_native_lib_placeholders", 2928*6777b538SAndroid Build Coastguard Worker "uncompress_dex", 2929*6777b538SAndroid Build Coastguard Worker "library_always_compress", 2930*6777b538SAndroid Build Coastguard Worker ]) 2931*6777b538SAndroid Build Coastguard Worker 2932*6777b538SAndroid Build Coastguard Worker if (defined(expected_libs_and_assets)) { 2933*6777b538SAndroid Build Coastguard Worker build_config_dep = ":$_build_config_target" 2934*6777b538SAndroid Build Coastguard Worker top_target_name = _template_name 2935*6777b538SAndroid Build Coastguard Worker } 2936*6777b538SAndroid Build Coastguard Worker 2937*6777b538SAndroid Build Coastguard Worker build_config = _build_config 2938*6777b538SAndroid Build Coastguard Worker min_sdk_version = _min_sdk_version 2939*6777b538SAndroid Build Coastguard Worker packaged_resources_path = _arsc_resources_path 2940*6777b538SAndroid Build Coastguard Worker 2941*6777b538SAndroid Build Coastguard Worker # Need full deps rather than _non_java_deps, because loadable_modules 2942*6777b538SAndroid Build Coastguard Worker # may include .so files extracted by __unpack_aar targets. 2943*6777b538SAndroid Build Coastguard Worker deps = _invoker_deps + [ ":$_build_config_target" ] 2944*6777b538SAndroid Build Coastguard Worker if (defined(invoker.asset_deps)) { 2945*6777b538SAndroid Build Coastguard Worker deps += invoker.asset_deps 2946*6777b538SAndroid Build Coastguard Worker } 2947*6777b538SAndroid Build Coastguard Worker 2948*6777b538SAndroid Build Coastguard Worker if (_incremental_apk) { 2949*6777b538SAndroid Build Coastguard Worker _dex_target = "//build/android/incremental_install:apk_dex" 2950*6777b538SAndroid Build Coastguard Worker 2951*6777b538SAndroid Build Coastguard Worker deps += [ 2952*6777b538SAndroid Build Coastguard Worker ":$_compile_resources_target", 2953*6777b538SAndroid Build Coastguard Worker _dex_target, 2954*6777b538SAndroid Build Coastguard Worker ] 2955*6777b538SAndroid Build Coastguard Worker 2956*6777b538SAndroid Build Coastguard Worker dex_path = get_label_info(_dex_target, "target_out_dir") + "/apk.dex" 2957*6777b538SAndroid Build Coastguard Worker 2958*6777b538SAndroid Build Coastguard Worker # Incremental APKs cannot be installed via `adb install` as such they 2959*6777b538SAndroid Build Coastguard Worker # should be clearly named/labeled "incremental". 2960*6777b538SAndroid Build Coastguard Worker output_apk_path = _incremental_apk_path 2961*6777b538SAndroid Build Coastguard Worker 2962*6777b538SAndroid Build Coastguard Worker # All native libraries are side-loaded, so use a placeholder to force 2963*6777b538SAndroid Build Coastguard Worker # the proper bitness for the app. 2964*6777b538SAndroid Build Coastguard Worker _has_native_libs = 2965*6777b538SAndroid Build Coastguard Worker defined(_native_libs_filearg) || _loadable_modules != [] 2966*6777b538SAndroid Build Coastguard Worker if (_has_native_libs && !defined(native_lib_placeholders)) { 2967*6777b538SAndroid Build Coastguard Worker native_lib_placeholders = [ "libfix.crbug.384638.so" ] 2968*6777b538SAndroid Build Coastguard Worker } 2969*6777b538SAndroid Build Coastguard Worker } else { 2970*6777b538SAndroid Build Coastguard Worker loadable_modules = _loadable_modules 2971*6777b538SAndroid Build Coastguard Worker deps += _all_native_libs_deps + [ 2972*6777b538SAndroid Build Coastguard Worker ":$_compile_resources_target", 2973*6777b538SAndroid Build Coastguard Worker ":$_merge_manifest_target", 2974*6777b538SAndroid Build Coastguard Worker ] 2975*6777b538SAndroid Build Coastguard Worker 2976*6777b538SAndroid Build Coastguard Worker if (defined(_final_dex_path)) { 2977*6777b538SAndroid Build Coastguard Worker dex_path = _final_dex_path 2978*6777b538SAndroid Build Coastguard Worker deps += [ _final_dex_target_dep ] 2979*6777b538SAndroid Build Coastguard Worker if (_enable_art_profile_optimizations && 2980*6777b538SAndroid Build Coastguard Worker _include_baseline_profile) { 2981*6777b538SAndroid Build Coastguard Worker # extra_assets is a list of ["{src_path}:{dst_path}"] 2982*6777b538SAndroid Build Coastguard Worker extra_assets = [ 2983*6777b538SAndroid Build Coastguard Worker rebase_path(_binary_baseline_profile_path, root_build_dir) + 2984*6777b538SAndroid Build Coastguard Worker ":dexopt/baseline.prof", 2985*6777b538SAndroid Build Coastguard Worker rebase_path(_binary_baseline_profile_metadata_path, 2986*6777b538SAndroid Build Coastguard Worker root_build_dir) + ":dexopt/baseline.profm", 2987*6777b538SAndroid Build Coastguard Worker ] 2988*6777b538SAndroid Build Coastguard Worker deps += [ ":$_binary_profile_target" ] 2989*6777b538SAndroid Build Coastguard Worker } 2990*6777b538SAndroid Build Coastguard Worker } 2991*6777b538SAndroid Build Coastguard Worker 2992*6777b538SAndroid Build Coastguard Worker output_apk_path = _final_apk_path 2993*6777b538SAndroid Build Coastguard Worker 2994*6777b538SAndroid Build Coastguard Worker if (defined(_native_libs_filearg)) { 2995*6777b538SAndroid Build Coastguard Worker native_libs_filearg = _native_libs_filearg 2996*6777b538SAndroid Build Coastguard Worker secondary_abi_native_libs_filearg = "@FileArg($_rebased_build_config:native:secondary_abi_libraries)" 2997*6777b538SAndroid Build Coastguard Worker } 2998*6777b538SAndroid Build Coastguard Worker } 2999*6777b538SAndroid Build Coastguard Worker } 3000*6777b538SAndroid Build Coastguard Worker } 3001*6777b538SAndroid Build Coastguard Worker 3002*6777b538SAndroid Build Coastguard Worker if (_incremental_apk) { 3003*6777b538SAndroid Build Coastguard Worker _write_installer_json_rule_name = "${_template_name}__incremental_json" 3004*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_write_installer_json_rule_name) { 3005*6777b538SAndroid Build Coastguard Worker script = "//build/android/incremental_install/write_installer_json.py" 3006*6777b538SAndroid Build Coastguard Worker deps = [ ":$_build_config_target" ] + _all_native_libs_deps 3007*6777b538SAndroid Build Coastguard Worker 3008*6777b538SAndroid Build Coastguard Worker data = [ _incremental_install_json_path ] 3009*6777b538SAndroid Build Coastguard Worker inputs = [ _build_config ] 3010*6777b538SAndroid Build Coastguard Worker outputs = [ _incremental_install_json_path ] 3011*6777b538SAndroid Build Coastguard Worker 3012*6777b538SAndroid Build Coastguard Worker _rebased_incremental_apk_path = 3013*6777b538SAndroid Build Coastguard Worker rebase_path(_incremental_apk_path, root_build_dir) 3014*6777b538SAndroid Build Coastguard Worker _rebased_incremental_install_json_path = 3015*6777b538SAndroid Build Coastguard Worker rebase_path(_incremental_install_json_path, root_build_dir) 3016*6777b538SAndroid Build Coastguard Worker args = [ 3017*6777b538SAndroid Build Coastguard Worker "--apk-path=$_rebased_incremental_apk_path", 3018*6777b538SAndroid Build Coastguard Worker "--output-path=$_rebased_incremental_install_json_path", 3019*6777b538SAndroid Build Coastguard Worker "--dex-file=@FileArg($_rebased_build_config:deps_info:all_dex_files)", 3020*6777b538SAndroid Build Coastguard Worker ] 3021*6777b538SAndroid Build Coastguard Worker if (_proguard_enabled) { 3022*6777b538SAndroid Build Coastguard Worker args += [ "--show-proguard-warning" ] 3023*6777b538SAndroid Build Coastguard Worker } 3024*6777b538SAndroid Build Coastguard Worker if (defined(_native_libs_filearg)) { 3025*6777b538SAndroid Build Coastguard Worker args += [ "--native-libs=$_native_libs_filearg" ] 3026*6777b538SAndroid Build Coastguard Worker deps += [ _native_libs_filearg_dep ] 3027*6777b538SAndroid Build Coastguard Worker } 3028*6777b538SAndroid Build Coastguard Worker if (_loadable_modules != []) { 3029*6777b538SAndroid Build Coastguard Worker _rebased_loadable_modules = 3030*6777b538SAndroid Build Coastguard Worker rebase_path(_loadable_modules, root_build_dir) 3031*6777b538SAndroid Build Coastguard Worker args += [ "--native-libs=$_rebased_loadable_modules" ] 3032*6777b538SAndroid Build Coastguard Worker } 3033*6777b538SAndroid Build Coastguard Worker } 3034*6777b538SAndroid Build Coastguard Worker _final_deps += [ ":$_write_installer_json_rule_name" ] 3035*6777b538SAndroid Build Coastguard Worker } 3036*6777b538SAndroid Build Coastguard Worker 3037*6777b538SAndroid Build Coastguard Worker # Generate apk operation related script. 3038*6777b538SAndroid Build Coastguard Worker if (!_is_bundle_module && 3039*6777b538SAndroid Build Coastguard Worker (!defined(invoker.create_apk_script) || invoker.create_apk_script)) { 3040*6777b538SAndroid Build Coastguard Worker if (_uses_static_library) { 3041*6777b538SAndroid Build Coastguard Worker _install_artifacts_target = "${target_name}__install_artifacts" 3042*6777b538SAndroid Build Coastguard Worker _install_artifacts_json = 3043*6777b538SAndroid Build Coastguard Worker "${target_gen_dir}/${target_name}.install_artifacts" 3044*6777b538SAndroid Build Coastguard Worker generated_file(_install_artifacts_target) { 3045*6777b538SAndroid Build Coastguard Worker output_conversion = "json" 3046*6777b538SAndroid Build Coastguard Worker deps = [ invoker.static_library_provider ] 3047*6777b538SAndroid Build Coastguard Worker outputs = [ _install_artifacts_json ] 3048*6777b538SAndroid Build Coastguard Worker data_keys = [ "install_artifacts" ] 3049*6777b538SAndroid Build Coastguard Worker rebase = root_build_dir 3050*6777b538SAndroid Build Coastguard Worker } 3051*6777b538SAndroid Build Coastguard Worker } 3052*6777b538SAndroid Build Coastguard Worker _apk_operations_target_name = "${target_name}__apk_operations" 3053*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_apk_operations_target_name) { 3054*6777b538SAndroid Build Coastguard Worker _generated_script = "$root_build_dir/bin/${invoker.target_name}" 3055*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/create_apk_operations_script.py" 3056*6777b538SAndroid Build Coastguard Worker outputs = [ _generated_script ] 3057*6777b538SAndroid Build Coastguard Worker args = [ 3058*6777b538SAndroid Build Coastguard Worker "--script-output-path", 3059*6777b538SAndroid Build Coastguard Worker rebase_path(_generated_script, root_build_dir), 3060*6777b538SAndroid Build Coastguard Worker "--target-cpu=$target_cpu", 3061*6777b538SAndroid Build Coastguard Worker ] 3062*6777b538SAndroid Build Coastguard Worker if (defined(invoker.command_line_flags_file)) { 3063*6777b538SAndroid Build Coastguard Worker args += [ 3064*6777b538SAndroid Build Coastguard Worker "--command-line-flags-file", 3065*6777b538SAndroid Build Coastguard Worker invoker.command_line_flags_file, 3066*6777b538SAndroid Build Coastguard Worker ] 3067*6777b538SAndroid Build Coastguard Worker } 3068*6777b538SAndroid Build Coastguard Worker if (_incremental_apk) { 3069*6777b538SAndroid Build Coastguard Worker args += [ 3070*6777b538SAndroid Build Coastguard Worker "--incremental-install-json-path", 3071*6777b538SAndroid Build Coastguard Worker rebase_path(_incremental_install_json_path, root_build_dir), 3072*6777b538SAndroid Build Coastguard Worker ] 3073*6777b538SAndroid Build Coastguard Worker } else { 3074*6777b538SAndroid Build Coastguard Worker args += [ 3075*6777b538SAndroid Build Coastguard Worker "--apk-path", 3076*6777b538SAndroid Build Coastguard Worker rebase_path(_final_apk_path, root_build_dir), 3077*6777b538SAndroid Build Coastguard Worker ] 3078*6777b538SAndroid Build Coastguard Worker } 3079*6777b538SAndroid Build Coastguard Worker if (_uses_static_library) { 3080*6777b538SAndroid Build Coastguard Worker deps = [ ":$_install_artifacts_target" ] 3081*6777b538SAndroid Build Coastguard Worker _rebased_install_artifacts_json = 3082*6777b538SAndroid Build Coastguard Worker rebase_path(_install_artifacts_json, root_build_dir) 3083*6777b538SAndroid Build Coastguard Worker _static_library_apk_path = 3084*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_install_artifacts_json[])" 3085*6777b538SAndroid Build Coastguard Worker args += [ 3086*6777b538SAndroid Build Coastguard Worker "--additional-apk", 3087*6777b538SAndroid Build Coastguard Worker _static_library_apk_path, 3088*6777b538SAndroid Build Coastguard Worker ] 3089*6777b538SAndroid Build Coastguard Worker } 3090*6777b538SAndroid Build Coastguard Worker data = [] 3091*6777b538SAndroid Build Coastguard Worker data_deps = [ 3092*6777b538SAndroid Build Coastguard Worker "//build/android:apk_operations_py", 3093*6777b538SAndroid Build Coastguard Worker "//build/android:stack_tools", 3094*6777b538SAndroid Build Coastguard Worker ] 3095*6777b538SAndroid Build Coastguard Worker 3096*6777b538SAndroid Build Coastguard Worker if (_proguard_enabled && !_incremental_apk) { 3097*6777b538SAndroid Build Coastguard Worker # Required by logcat command. 3098*6777b538SAndroid Build Coastguard Worker data_deps += [ "//build/android/stacktrace:java_deobfuscate" ] 3099*6777b538SAndroid Build Coastguard Worker data += [ "$_final_apk_path.mapping" ] 3100*6777b538SAndroid Build Coastguard Worker args += [ 3101*6777b538SAndroid Build Coastguard Worker "--proguard-mapping-path", 3102*6777b538SAndroid Build Coastguard Worker rebase_path("$_final_apk_path.mapping", root_build_dir), 3103*6777b538SAndroid Build Coastguard Worker ] 3104*6777b538SAndroid Build Coastguard Worker } 3105*6777b538SAndroid Build Coastguard Worker } 3106*6777b538SAndroid Build Coastguard Worker _final_deps += [ ":$_apk_operations_target_name" ] 3107*6777b538SAndroid Build Coastguard Worker } 3108*6777b538SAndroid Build Coastguard Worker 3109*6777b538SAndroid Build Coastguard Worker _enable_lint = defined(invoker.enable_lint) && invoker.enable_lint && 3110*6777b538SAndroid Build Coastguard Worker !disable_android_lint 3111*6777b538SAndroid Build Coastguard Worker if (_enable_lint) { 3112*6777b538SAndroid Build Coastguard Worker android_lint("${target_name}__lint") { 3113*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 3114*6777b538SAndroid Build Coastguard Worker [ 3115*6777b538SAndroid Build Coastguard Worker "lint_baseline_file", 3116*6777b538SAndroid Build Coastguard Worker "lint_gen_dir", 3117*6777b538SAndroid Build Coastguard Worker "lint_suppressions_file", 3118*6777b538SAndroid Build Coastguard Worker "min_sdk_version", 3119*6777b538SAndroid Build Coastguard Worker ]) 3120*6777b538SAndroid Build Coastguard Worker build_config = _build_config 3121*6777b538SAndroid Build Coastguard Worker build_config_dep = ":$_build_config_target" 3122*6777b538SAndroid Build Coastguard Worker 3123*6777b538SAndroid Build Coastguard Worker # This will use library subtargets under-the-hood 3124*6777b538SAndroid Build Coastguard Worker deps = [ ":$_java_target_name" ] 3125*6777b538SAndroid Build Coastguard Worker if (defined(invoker.lint_suppressions_dep)) { 3126*6777b538SAndroid Build Coastguard Worker deps += [ invoker.lint_suppressions_dep ] 3127*6777b538SAndroid Build Coastguard Worker } 3128*6777b538SAndroid Build Coastguard Worker if (defined(invoker.asset_deps)) { 3129*6777b538SAndroid Build Coastguard Worker deps += invoker.asset_deps 3130*6777b538SAndroid Build Coastguard Worker } 3131*6777b538SAndroid Build Coastguard Worker if (defined(invoker.lint_min_sdk_version)) { 3132*6777b538SAndroid Build Coastguard Worker min_sdk_version = invoker.lint_min_sdk_version 3133*6777b538SAndroid Build Coastguard Worker } 3134*6777b538SAndroid Build Coastguard Worker } 3135*6777b538SAndroid Build Coastguard Worker } else { 3136*6777b538SAndroid Build Coastguard Worker not_needed(invoker, 3137*6777b538SAndroid Build Coastguard Worker [ 3138*6777b538SAndroid Build Coastguard Worker "lint_baseline_file", 3139*6777b538SAndroid Build Coastguard Worker "lint_gen_dir", 3140*6777b538SAndroid Build Coastguard Worker "lint_jar_path", 3141*6777b538SAndroid Build Coastguard Worker "lint_min_sdk_version", 3142*6777b538SAndroid Build Coastguard Worker "lint_suppressions_dep", 3143*6777b538SAndroid Build Coastguard Worker "lint_suppressions_file", 3144*6777b538SAndroid Build Coastguard Worker ]) 3145*6777b538SAndroid Build Coastguard Worker } 3146*6777b538SAndroid Build Coastguard Worker 3147*6777b538SAndroid Build Coastguard Worker group(target_name) { 3148*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 3149*6777b538SAndroid Build Coastguard Worker [ 3150*6777b538SAndroid Build Coastguard Worker "assert_no_deps", 3151*6777b538SAndroid Build Coastguard Worker "data", 3152*6777b538SAndroid Build Coastguard Worker "data_deps", 3153*6777b538SAndroid Build Coastguard Worker ]) 3154*6777b538SAndroid Build Coastguard Worker metadata = { 3155*6777b538SAndroid Build Coastguard Worker if (defined(invoker.metadata)) { 3156*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker.metadata, "*") 3157*6777b538SAndroid Build Coastguard Worker } 3158*6777b538SAndroid Build Coastguard Worker 3159*6777b538SAndroid Build Coastguard Worker # Allows metadata collection via apk targets that traverse only java deps. 3160*6777b538SAndroid Build Coastguard Worker java_walk_keys = [ ":$_java_target_name" ] 3161*6777b538SAndroid Build Coastguard Worker } 3162*6777b538SAndroid Build Coastguard Worker 3163*6777b538SAndroid Build Coastguard Worker # Generate apk related operations at runtime. 3164*6777b538SAndroid Build Coastguard Worker public_deps = _final_deps 3165*6777b538SAndroid Build Coastguard Worker 3166*6777b538SAndroid Build Coastguard Worker if (!defined(data_deps)) { 3167*6777b538SAndroid Build Coastguard Worker data_deps = [] 3168*6777b538SAndroid Build Coastguard Worker } 3169*6777b538SAndroid Build Coastguard Worker 3170*6777b538SAndroid Build Coastguard Worker # Include unstripped native libraries so tests can symbolize stacks. 3171*6777b538SAndroid Build Coastguard Worker data_deps += _all_native_libs_deps + [ ":${_java_target_name}__validate" ] 3172*6777b538SAndroid Build Coastguard Worker if (_enable_lint) { 3173*6777b538SAndroid Build Coastguard Worker data_deps += [ ":${target_name}__lint" ] 3174*6777b538SAndroid Build Coastguard Worker } 3175*6777b538SAndroid Build Coastguard Worker 3176*6777b538SAndroid Build Coastguard Worker if (_uses_static_library) { 3177*6777b538SAndroid Build Coastguard Worker data_deps += [ invoker.static_library_provider ] 3178*6777b538SAndroid Build Coastguard Worker } 3179*6777b538SAndroid Build Coastguard Worker } 3180*6777b538SAndroid Build Coastguard Worker } 3181*6777b538SAndroid Build Coastguard Worker 3182*6777b538SAndroid Build Coastguard Worker # Declare an Android APK target 3183*6777b538SAndroid Build Coastguard Worker # 3184*6777b538SAndroid Build Coastguard Worker # This target creates an Android APK containing java code, resources, assets, 3185*6777b538SAndroid Build Coastguard Worker # and (possibly) native libraries. 3186*6777b538SAndroid Build Coastguard Worker # 3187*6777b538SAndroid Build Coastguard Worker # Supports all variables of android_apk_or_module(), plus: 3188*6777b538SAndroid Build Coastguard Worker # apk_name: Name for final apk. 3189*6777b538SAndroid Build Coastguard Worker # final_apk_path: (Optional) path to output APK. 3190*6777b538SAndroid Build Coastguard Worker # 3191*6777b538SAndroid Build Coastguard Worker # Example 3192*6777b538SAndroid Build Coastguard Worker # android_apk("foo_apk") { 3193*6777b538SAndroid Build Coastguard Worker # android_manifest = "AndroidManifest.xml" 3194*6777b538SAndroid Build Coastguard Worker # sources = [ 3195*6777b538SAndroid Build Coastguard Worker # "android/org/chromium/foo/FooApplication.java", 3196*6777b538SAndroid Build Coastguard Worker # "android/org/chromium/foo/FooActivity.java", 3197*6777b538SAndroid Build Coastguard Worker # ] 3198*6777b538SAndroid Build Coastguard Worker # deps = [ 3199*6777b538SAndroid Build Coastguard Worker # ":foo_support_java" 3200*6777b538SAndroid Build Coastguard Worker # ":foo_resources" 3201*6777b538SAndroid Build Coastguard Worker # ] 3202*6777b538SAndroid Build Coastguard Worker # srcjar_deps = [ 3203*6777b538SAndroid Build Coastguard Worker # ":foo_generated_enum" 3204*6777b538SAndroid Build Coastguard Worker # ] 3205*6777b538SAndroid Build Coastguard Worker # shared_libraries = [ 3206*6777b538SAndroid Build Coastguard Worker # ":my_shared_lib", 3207*6777b538SAndroid Build Coastguard Worker # ] 3208*6777b538SAndroid Build Coastguard Worker # } 3209*6777b538SAndroid Build Coastguard Worker template("android_apk") { 3210*6777b538SAndroid Build Coastguard Worker # TODO(crbug.com/1042017): Remove. 3211*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "no_build_hooks" ]) 3212*6777b538SAndroid Build Coastguard Worker android_apk_or_module(target_name) { 3213*6777b538SAndroid Build Coastguard Worker forward_variables_from( 3214*6777b538SAndroid Build Coastguard Worker invoker, 3215*6777b538SAndroid Build Coastguard Worker [ 3216*6777b538SAndroid Build Coastguard Worker "aapt_locale_allowlist", 3217*6777b538SAndroid Build Coastguard Worker "additional_jar_files", 3218*6777b538SAndroid Build Coastguard Worker "allow_unused_jni_from_native", 3219*6777b538SAndroid Build Coastguard Worker "alternative_android_sdk_dep", 3220*6777b538SAndroid Build Coastguard Worker "android_manifest", 3221*6777b538SAndroid Build Coastguard Worker "android_manifest_dep", 3222*6777b538SAndroid Build Coastguard Worker "annotation_processor_deps", 3223*6777b538SAndroid Build Coastguard Worker "apk_under_test", 3224*6777b538SAndroid Build Coastguard Worker "app_as_shared_lib", 3225*6777b538SAndroid Build Coastguard Worker "art_profile_path", 3226*6777b538SAndroid Build Coastguard Worker "assert_no_deps", 3227*6777b538SAndroid Build Coastguard Worker "assert_no_native_deps", 3228*6777b538SAndroid Build Coastguard Worker "asset_deps", 3229*6777b538SAndroid Build Coastguard Worker "baseline_profile_path", 3230*6777b538SAndroid Build Coastguard Worker "build_config_include_product_version_resource", 3231*6777b538SAndroid Build Coastguard Worker "bundles_supported", 3232*6777b538SAndroid Build Coastguard Worker "chromium_code", 3233*6777b538SAndroid Build Coastguard Worker "command_line_flags_file", 3234*6777b538SAndroid Build Coastguard Worker "create_apk_script", 3235*6777b538SAndroid Build Coastguard Worker "custom_assertion_handler", 3236*6777b538SAndroid Build Coastguard Worker "data", 3237*6777b538SAndroid Build Coastguard Worker "data_deps", 3238*6777b538SAndroid Build Coastguard Worker "deps", 3239*6777b538SAndroid Build Coastguard Worker "enable_lint", 3240*6777b538SAndroid Build Coastguard Worker "enable_jni_multiplexing", 3241*6777b538SAndroid Build Coastguard Worker "enable_proguard_checks", 3242*6777b538SAndroid Build Coastguard Worker "enforce_resource_overlays_in_tests", 3243*6777b538SAndroid Build Coastguard Worker "expected_android_manifest", 3244*6777b538SAndroid Build Coastguard Worker "expected_android_manifest_base", 3245*6777b538SAndroid Build Coastguard Worker "expected_android_manifest_library_version_offset", 3246*6777b538SAndroid Build Coastguard Worker "expected_android_manifest_version_code_offset", 3247*6777b538SAndroid Build Coastguard Worker "expected_libs_and_assets", 3248*6777b538SAndroid Build Coastguard Worker "expected_libs_and_assets_base", 3249*6777b538SAndroid Build Coastguard Worker "generate_buildconfig_java", 3250*6777b538SAndroid Build Coastguard Worker "generate_native_libraries_java", 3251*6777b538SAndroid Build Coastguard Worker "include_size_info", 3252*6777b538SAndroid Build Coastguard Worker "input_jars_paths", 3253*6777b538SAndroid Build Coastguard Worker "jacoco_never_instrument", 3254*6777b538SAndroid Build Coastguard Worker "javac_args", 3255*6777b538SAndroid Build Coastguard Worker "keystore_name", 3256*6777b538SAndroid Build Coastguard Worker "keystore_password", 3257*6777b538SAndroid Build Coastguard Worker "keystore_path", 3258*6777b538SAndroid Build Coastguard Worker "lint_baseline_file", 3259*6777b538SAndroid Build Coastguard Worker "lint_gen_dir", 3260*6777b538SAndroid Build Coastguard Worker "lint_min_sdk_version", 3261*6777b538SAndroid Build Coastguard Worker "lint_suppressions_dep", 3262*6777b538SAndroid Build Coastguard Worker "lint_suppressions_file", 3263*6777b538SAndroid Build Coastguard Worker "loadable_modules", 3264*6777b538SAndroid Build Coastguard Worker "manifest_package", 3265*6777b538SAndroid Build Coastguard Worker "max_sdk_version", 3266*6777b538SAndroid Build Coastguard Worker "mergeable_android_manifests", 3267*6777b538SAndroid Build Coastguard Worker "product_config_java_packages", 3268*6777b538SAndroid Build Coastguard Worker "min_sdk_version", 3269*6777b538SAndroid Build Coastguard Worker "native_lib_placeholders", 3270*6777b538SAndroid Build Coastguard Worker "never_incremental", 3271*6777b538SAndroid Build Coastguard Worker "omit_dex", 3272*6777b538SAndroid Build Coastguard Worker "png_to_webp", 3273*6777b538SAndroid Build Coastguard Worker "post_process_package_resources_script", 3274*6777b538SAndroid Build Coastguard Worker "processor_args_javac", 3275*6777b538SAndroid Build Coastguard Worker "proguard_configs", 3276*6777b538SAndroid Build Coastguard Worker "proguard_enabled", 3277*6777b538SAndroid Build Coastguard Worker "proguard_enable_obfuscation", 3278*6777b538SAndroid Build Coastguard Worker "r_java_root_package_name", 3279*6777b538SAndroid Build Coastguard Worker "repackage_classes", 3280*6777b538SAndroid Build Coastguard Worker "resource_exclusion_exceptions", 3281*6777b538SAndroid Build Coastguard Worker "resource_exclusion_regex", 3282*6777b538SAndroid Build Coastguard Worker "resource_ids_provider_dep", 3283*6777b538SAndroid Build Coastguard Worker "resource_values_filter_rules", 3284*6777b538SAndroid Build Coastguard Worker "require_native_mocks", 3285*6777b538SAndroid Build Coastguard Worker "secondary_abi_loadable_modules", 3286*6777b538SAndroid Build Coastguard Worker "secondary_abi_shared_libraries", 3287*6777b538SAndroid Build Coastguard Worker "secondary_native_lib_placeholders", 3288*6777b538SAndroid Build Coastguard Worker "shared_libraries", 3289*6777b538SAndroid Build Coastguard Worker "shared_resources", 3290*6777b538SAndroid Build Coastguard Worker "shared_resources_allowlist_locales", 3291*6777b538SAndroid Build Coastguard Worker "shared_resources_allowlist_target", 3292*6777b538SAndroid Build Coastguard Worker "sources", 3293*6777b538SAndroid Build Coastguard Worker "srcjar_deps", 3294*6777b538SAndroid Build Coastguard Worker "static_library_provider", 3295*6777b538SAndroid Build Coastguard Worker "static_library_provider_use_secondary_abi", 3296*6777b538SAndroid Build Coastguard Worker "target_sdk_version", 3297*6777b538SAndroid Build Coastguard Worker "testonly", 3298*6777b538SAndroid Build Coastguard Worker "uncompress_dex", 3299*6777b538SAndroid Build Coastguard Worker "library_always_compress", 3300*6777b538SAndroid Build Coastguard Worker "use_chromium_linker", 3301*6777b538SAndroid Build Coastguard Worker "version_code", 3302*6777b538SAndroid Build Coastguard Worker "version_name", 3303*6777b538SAndroid Build Coastguard Worker "visibility", 3304*6777b538SAndroid Build Coastguard Worker ]) 3305*6777b538SAndroid Build Coastguard Worker is_bundle_module = false 3306*6777b538SAndroid Build Coastguard Worker name = invoker.apk_name 3307*6777b538SAndroid Build Coastguard Worker if (defined(invoker.final_apk_path)) { 3308*6777b538SAndroid Build Coastguard Worker final_apk_path = invoker.final_apk_path 3309*6777b538SAndroid Build Coastguard Worker } else { 3310*6777b538SAndroid Build Coastguard Worker final_apk_path = "$root_build_dir/apks/${invoker.apk_name}.apk" 3311*6777b538SAndroid Build Coastguard Worker } 3312*6777b538SAndroid Build Coastguard Worker metadata = { 3313*6777b538SAndroid Build Coastguard Worker install_artifacts = [ final_apk_path ] 3314*6777b538SAndroid Build Coastguard Worker if (defined(invoker.static_library_provider)) { 3315*6777b538SAndroid Build Coastguard Worker install_artifacts_barrier = [] 3316*6777b538SAndroid Build Coastguard Worker } 3317*6777b538SAndroid Build Coastguard Worker } 3318*6777b538SAndroid Build Coastguard Worker 3319*6777b538SAndroid Build Coastguard Worker # TODO(smaier) - there were some remaining usages of this in angle. Once 3320*6777b538SAndroid Build Coastguard Worker # they are removed, remove this line. 3321*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "generate_final_jni" ]) 3322*6777b538SAndroid Build Coastguard Worker } 3323*6777b538SAndroid Build Coastguard Worker } 3324*6777b538SAndroid Build Coastguard Worker 3325*6777b538SAndroid Build Coastguard Worker # Declare an Android app bundle module target. 3326*6777b538SAndroid Build Coastguard Worker # 3327*6777b538SAndroid Build Coastguard Worker # The module can be used for an android_apk_or_module(). 3328*6777b538SAndroid Build Coastguard Worker # 3329*6777b538SAndroid Build Coastguard Worker # Supports all variables of android_library(), plus: 3330*6777b538SAndroid Build Coastguard Worker # module_name: Name of the module. 3331*6777b538SAndroid Build Coastguard Worker # is_base_module: If defined and true, indicates that this is the bundle's 3332*6777b538SAndroid Build Coastguard Worker # base module (optional). 3333*6777b538SAndroid Build Coastguard Worker # base_module_target: Base module target of the bundle this module will be 3334*6777b538SAndroid Build Coastguard Worker # added to (optional). Can only be specified for non-base modules. 3335*6777b538SAndroid Build Coastguard Worker template("android_app_bundle_module") { 3336*6777b538SAndroid Build Coastguard Worker _is_base_module = defined(invoker.is_base_module) && invoker.is_base_module 3337*6777b538SAndroid Build Coastguard Worker 3338*6777b538SAndroid Build Coastguard Worker if (_is_base_module) { 3339*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.base_module_target)) 3340*6777b538SAndroid Build Coastguard Worker } else { 3341*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.app_as_shared_lib)) 3342*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.shared_resources)) 3343*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.shared_resources_allowlist_target)) 3344*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.shared_resources_allowlist_locales)) 3345*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.base_module_target)) 3346*6777b538SAndroid Build Coastguard Worker } 3347*6777b538SAndroid Build Coastguard Worker 3348*6777b538SAndroid Build Coastguard Worker # android_app_bundle's write_build_config expects module targets to be named 3349*6777b538SAndroid Build Coastguard Worker # according to java_target_patterns otherwise it ignores them when listed in 3350*6777b538SAndroid Build Coastguard Worker # possible_config_deps. See https://crbug.com/1418398. 3351*6777b538SAndroid Build Coastguard Worker if (filter_exclude([ target_name ], [ "*_bundle_module" ]) != []) { 3352*6777b538SAndroid Build Coastguard Worker assert(false, 3353*6777b538SAndroid Build Coastguard Worker "Invalid android_app_bundle_module target name ($target_name), " + 3354*6777b538SAndroid Build Coastguard Worker "must end in _bundle_module.") 3355*6777b538SAndroid Build Coastguard Worker } 3356*6777b538SAndroid Build Coastguard Worker 3357*6777b538SAndroid Build Coastguard Worker # TODO(tiborg): We have several flags that are necessary for workarounds 3358*6777b538SAndroid Build Coastguard Worker # that come from the fact that the resources get compiled in the bundle 3359*6777b538SAndroid Build Coastguard Worker # module target, but bundle modules have to have certain flags in 3360*6777b538SAndroid Build Coastguard Worker # common or bundle modules have to know information about the base module. 3361*6777b538SAndroid Build Coastguard Worker # Those flags include version_code, version_name, and base_module_target. 3362*6777b538SAndroid Build Coastguard Worker # It would be better to move the resource compile target into the bundle 3363*6777b538SAndroid Build Coastguard Worker # target. Doing so would keep the bundle modules independent from the bundle 3364*6777b538SAndroid Build Coastguard Worker # and potentially reuse the same bundle modules for multiple bundles. 3365*6777b538SAndroid Build Coastguard Worker android_apk_or_module(target_name) { 3366*6777b538SAndroid Build Coastguard Worker forward_variables_from( 3367*6777b538SAndroid Build Coastguard Worker invoker, 3368*6777b538SAndroid Build Coastguard Worker [ 3369*6777b538SAndroid Build Coastguard Worker "add_view_trace_events", 3370*6777b538SAndroid Build Coastguard Worker "aapt_locale_allowlist", 3371*6777b538SAndroid Build Coastguard Worker "additional_jar_files", 3372*6777b538SAndroid Build Coastguard Worker "allow_unused_jni_from_native", 3373*6777b538SAndroid Build Coastguard Worker "alternative_android_sdk_dep", 3374*6777b538SAndroid Build Coastguard Worker "android_manifest", 3375*6777b538SAndroid Build Coastguard Worker "android_manifest_dep", 3376*6777b538SAndroid Build Coastguard Worker "annotation_processor_deps", 3377*6777b538SAndroid Build Coastguard Worker "app_as_shared_lib", 3378*6777b538SAndroid Build Coastguard Worker "assert_no_deps", 3379*6777b538SAndroid Build Coastguard Worker "assert_no_native_deps", 3380*6777b538SAndroid Build Coastguard Worker "asset_deps", 3381*6777b538SAndroid Build Coastguard Worker "base_module_target", 3382*6777b538SAndroid Build Coastguard Worker "build_config_include_product_version_resource", 3383*6777b538SAndroid Build Coastguard Worker "bundle_target", 3384*6777b538SAndroid Build Coastguard Worker "chromium_code", 3385*6777b538SAndroid Build Coastguard Worker "custom_assertion_handler", 3386*6777b538SAndroid Build Coastguard Worker "data", 3387*6777b538SAndroid Build Coastguard Worker "data_deps", 3388*6777b538SAndroid Build Coastguard Worker "deps", 3389*6777b538SAndroid Build Coastguard Worker "enable_jni_multiplexing", 3390*6777b538SAndroid Build Coastguard Worker "expected_android_manifest", 3391*6777b538SAndroid Build Coastguard Worker "expected_android_manifest_base", 3392*6777b538SAndroid Build Coastguard Worker "expected_android_manifest_library_version_offset", 3393*6777b538SAndroid Build Coastguard Worker "expected_android_manifest_version_code_offset", 3394*6777b538SAndroid Build Coastguard Worker "generate_buildconfig_java", 3395*6777b538SAndroid Build Coastguard Worker "generate_native_libraries_java", 3396*6777b538SAndroid Build Coastguard Worker "input_jars_paths", 3397*6777b538SAndroid Build Coastguard Worker "isolated_splits_enabled", 3398*6777b538SAndroid Build Coastguard Worker "is_base_module", 3399*6777b538SAndroid Build Coastguard Worker "jacoco_never_instrument", 3400*6777b538SAndroid Build Coastguard Worker "jar_excluded_patterns", 3401*6777b538SAndroid Build Coastguard Worker "javac_args", 3402*6777b538SAndroid Build Coastguard Worker "loadable_modules", 3403*6777b538SAndroid Build Coastguard Worker "product_config_java_packages", 3404*6777b538SAndroid Build Coastguard Worker "manifest_package", 3405*6777b538SAndroid Build Coastguard Worker "max_sdk_version", 3406*6777b538SAndroid Build Coastguard Worker "min_sdk_version", 3407*6777b538SAndroid Build Coastguard Worker "mergeable_android_manifests", 3408*6777b538SAndroid Build Coastguard Worker "override_target_sdk", 3409*6777b538SAndroid Build Coastguard Worker "module_name", 3410*6777b538SAndroid Build Coastguard Worker "native_lib_placeholders", 3411*6777b538SAndroid Build Coastguard Worker "package_id", 3412*6777b538SAndroid Build Coastguard Worker "parent_module_target", 3413*6777b538SAndroid Build Coastguard Worker "png_to_webp", 3414*6777b538SAndroid Build Coastguard Worker "processor_args_javac", 3415*6777b538SAndroid Build Coastguard Worker "proguard_configs", 3416*6777b538SAndroid Build Coastguard Worker "proguard_enabled", 3417*6777b538SAndroid Build Coastguard Worker "proguard_enable_obfuscation", 3418*6777b538SAndroid Build Coastguard Worker "repackage_classes", 3419*6777b538SAndroid Build Coastguard Worker "resource_exclusion_exceptions", 3420*6777b538SAndroid Build Coastguard Worker "resource_exclusion_regex", 3421*6777b538SAndroid Build Coastguard Worker "resource_ids_provider_dep", 3422*6777b538SAndroid Build Coastguard Worker "resource_values_filter_rules", 3423*6777b538SAndroid Build Coastguard Worker "resources_config_paths", 3424*6777b538SAndroid Build Coastguard Worker "secondary_abi_loadable_modules", 3425*6777b538SAndroid Build Coastguard Worker "secondary_abi_shared_libraries", 3426*6777b538SAndroid Build Coastguard Worker "secondary_native_lib_placeholders", 3427*6777b538SAndroid Build Coastguard Worker "shared_libraries", 3428*6777b538SAndroid Build Coastguard Worker "shared_resources", 3429*6777b538SAndroid Build Coastguard Worker "shared_resources_allowlist_locales", 3430*6777b538SAndroid Build Coastguard Worker "shared_resources_allowlist_target", 3431*6777b538SAndroid Build Coastguard Worker "short_resource_paths", 3432*6777b538SAndroid Build Coastguard Worker "srcjar_deps", 3433*6777b538SAndroid Build Coastguard Worker "static_library_provider", 3434*6777b538SAndroid Build Coastguard Worker "static_library_provider_use_secondary_abi", 3435*6777b538SAndroid Build Coastguard Worker "strip_resource_names", 3436*6777b538SAndroid Build Coastguard Worker "strip_unused_resources", 3437*6777b538SAndroid Build Coastguard Worker "target_sdk_version", 3438*6777b538SAndroid Build Coastguard Worker "testonly", 3439*6777b538SAndroid Build Coastguard Worker "library_always_compress", 3440*6777b538SAndroid Build Coastguard Worker "use_chromium_linker", 3441*6777b538SAndroid Build Coastguard Worker "uses_split", 3442*6777b538SAndroid Build Coastguard Worker "version_code", 3443*6777b538SAndroid Build Coastguard Worker "version_name", 3444*6777b538SAndroid Build Coastguard Worker "visibility", 3445*6777b538SAndroid Build Coastguard Worker ]) 3446*6777b538SAndroid Build Coastguard Worker is_bundle_module = true 3447*6777b538SAndroid Build Coastguard Worker generate_buildconfig_java = _is_base_module 3448*6777b538SAndroid Build Coastguard Worker if (defined(uses_split)) { 3449*6777b538SAndroid Build Coastguard Worker assert(defined(parent_module_target), 3450*6777b538SAndroid Build Coastguard Worker "Must set parent_module_target when uses_split is set") 3451*6777b538SAndroid Build Coastguard Worker } 3452*6777b538SAndroid Build Coastguard Worker } 3453*6777b538SAndroid Build Coastguard Worker } 3454*6777b538SAndroid Build Coastguard Worker 3455*6777b538SAndroid Build Coastguard Worker # Declare an Android instrumentation test runner. 3456*6777b538SAndroid Build Coastguard Worker # 3457*6777b538SAndroid Build Coastguard Worker # This target creates a wrapper script to run Android instrumentation tests. 3458*6777b538SAndroid Build Coastguard Worker # 3459*6777b538SAndroid Build Coastguard Worker # Arguments: 3460*6777b538SAndroid Build Coastguard Worker # android_test_apk: The target containing the tests. 3461*6777b538SAndroid Build Coastguard Worker # 3462*6777b538SAndroid Build Coastguard Worker # The following args are optional: 3463*6777b538SAndroid Build Coastguard Worker # apk_under_test: The target being tested. 3464*6777b538SAndroid Build Coastguard Worker # additional_apks: Additional targets to install on device. 3465*6777b538SAndroid Build Coastguard Worker # data: List of runtime data file dependencies. 3466*6777b538SAndroid Build Coastguard Worker # data_deps: List of non-linked dependencies. 3467*6777b538SAndroid Build Coastguard Worker # deps: List of private dependencies. 3468*6777b538SAndroid Build Coastguard Worker # extra_args: Extra arguments set for test runner. 3469*6777b538SAndroid Build Coastguard Worker # ignore_all_data_deps: Don't build data_deps and additional_apks. 3470*6777b538SAndroid Build Coastguard Worker # modules: Extra dynamic feature modules to install for test target. Can 3471*6777b538SAndroid Build Coastguard Worker # only be used if |apk_under_test| is an Android app bundle. 3472*6777b538SAndroid Build Coastguard Worker # fake_modules: Similar to |modules| but fake installed instead. 3473*6777b538SAndroid Build Coastguard Worker # never_incremental: Disable incremental builds. 3474*6777b538SAndroid Build Coastguard Worker # proguard_enabled: Enable proguard 3475*6777b538SAndroid Build Coastguard Worker # public_deps: List of public dependencies 3476*6777b538SAndroid Build Coastguard Worker # 3477*6777b538SAndroid Build Coastguard Worker # Example 3478*6777b538SAndroid Build Coastguard Worker # instrumentation_test_runner("foo_test_for_bar") { 3479*6777b538SAndroid Build Coastguard Worker # android_test_apk: ":foo" 3480*6777b538SAndroid Build Coastguard Worker # apk_under_test: ":bar" 3481*6777b538SAndroid Build Coastguard Worker # } 3482*6777b538SAndroid Build Coastguard Worker template("instrumentation_test_runner") { 3483*6777b538SAndroid Build Coastguard Worker _incremental_apk = !(defined(invoker.never_incremental) && 3484*6777b538SAndroid Build Coastguard Worker invoker.never_incremental) && incremental_install 3485*6777b538SAndroid Build Coastguard Worker _apk_operations_target_name = "${target_name}__apk_operations" 3486*6777b538SAndroid Build Coastguard Worker _apk_target = invoker.android_test_apk 3487*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apk_under_test) && !_incremental_apk) { 3488*6777b538SAndroid Build Coastguard Worker # The actual target is defined in the test_runner_script template. 3489*6777b538SAndroid Build Coastguard Worker _install_artifacts_json = 3490*6777b538SAndroid Build Coastguard Worker "${target_gen_dir}/${target_name}.install_artifacts" 3491*6777b538SAndroid Build Coastguard Worker _install_artifacts_target_name = "${target_name}__install_artifacts" 3492*6777b538SAndroid Build Coastguard Worker } 3493*6777b538SAndroid Build Coastguard Worker 3494*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_apk_operations_target_name) { 3495*6777b538SAndroid Build Coastguard Worker testonly = true 3496*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/create_test_apk_wrapper_script.py" 3497*6777b538SAndroid Build Coastguard Worker deps = [] 3498*6777b538SAndroid Build Coastguard Worker _generated_script = "$root_build_dir/bin/${invoker.target_name}" 3499*6777b538SAndroid Build Coastguard Worker outputs = [ _generated_script ] 3500*6777b538SAndroid Build Coastguard Worker _apk_build_config = 3501*6777b538SAndroid Build Coastguard Worker get_label_info(_apk_target, "target_gen_dir") + "/" + 3502*6777b538SAndroid Build Coastguard Worker get_label_info(_apk_target, "name") + ".build_config.json" 3503*6777b538SAndroid Build Coastguard Worker _rebased_apk_build_config = rebase_path(_apk_build_config, root_build_dir) 3504*6777b538SAndroid Build Coastguard Worker args = [ 3505*6777b538SAndroid Build Coastguard Worker "--script-output-path", 3506*6777b538SAndroid Build Coastguard Worker rebase_path(_generated_script, root_build_dir), 3507*6777b538SAndroid Build Coastguard Worker "--package-name", 3508*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_apk_build_config:deps_info:package_name)", 3509*6777b538SAndroid Build Coastguard Worker ] 3510*6777b538SAndroid Build Coastguard Worker deps += [ "${_apk_target}$build_config_target_suffix" ] 3511*6777b538SAndroid Build Coastguard Worker if (_incremental_apk) { 3512*6777b538SAndroid Build Coastguard Worker args += [ 3513*6777b538SAndroid Build Coastguard Worker "--test-apk-incremental-install-json", 3514*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_apk_build_config:deps_info:incremental_install_json_path)", 3515*6777b538SAndroid Build Coastguard Worker ] 3516*6777b538SAndroid Build Coastguard Worker } else { 3517*6777b538SAndroid Build Coastguard Worker args += [ 3518*6777b538SAndroid Build Coastguard Worker "--test-apk", 3519*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_apk_build_config:deps_info:apk_path)", 3520*6777b538SAndroid Build Coastguard Worker ] 3521*6777b538SAndroid Build Coastguard Worker } 3522*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_mapping_path) && !_incremental_apk) { 3523*6777b538SAndroid Build Coastguard Worker args += [ 3524*6777b538SAndroid Build Coastguard Worker "--proguard-mapping-path", 3525*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.proguard_mapping_path, root_build_dir), 3526*6777b538SAndroid Build Coastguard Worker ] 3527*6777b538SAndroid Build Coastguard Worker } 3528*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apk_under_test)) { 3529*6777b538SAndroid Build Coastguard Worker if (_incremental_apk) { 3530*6777b538SAndroid Build Coastguard Worker deps += [ "${invoker.apk_under_test}$build_config_target_suffix" ] 3531*6777b538SAndroid Build Coastguard Worker _apk_under_test_build_config = 3532*6777b538SAndroid Build Coastguard Worker get_label_info(invoker.apk_under_test, "target_gen_dir") + "/" + 3533*6777b538SAndroid Build Coastguard Worker get_label_info(invoker.apk_under_test, "name") + 3534*6777b538SAndroid Build Coastguard Worker ".build_config.json" 3535*6777b538SAndroid Build Coastguard Worker _rebased_apk_under_test_build_config = 3536*6777b538SAndroid Build Coastguard Worker rebase_path(_apk_under_test_build_config, root_build_dir) 3537*6777b538SAndroid Build Coastguard Worker _apk_under_test = "@FileArg($_rebased_apk_under_test_build_config:deps_info:incremental_apk_path)" 3538*6777b538SAndroid Build Coastguard Worker } else { 3539*6777b538SAndroid Build Coastguard Worker deps += [ ":${_install_artifacts_target_name}" ] 3540*6777b538SAndroid Build Coastguard Worker _rebased_install_artifacts_json = 3541*6777b538SAndroid Build Coastguard Worker rebase_path(_install_artifacts_json, root_build_dir) 3542*6777b538SAndroid Build Coastguard Worker _apk_under_test = "@FileArg($_rebased_install_artifacts_json[])" 3543*6777b538SAndroid Build Coastguard Worker } 3544*6777b538SAndroid Build Coastguard Worker args += [ 3545*6777b538SAndroid Build Coastguard Worker "--additional-apk", 3546*6777b538SAndroid Build Coastguard Worker _apk_under_test, 3547*6777b538SAndroid Build Coastguard Worker ] 3548*6777b538SAndroid Build Coastguard Worker } 3549*6777b538SAndroid Build Coastguard Worker if (defined(invoker.additional_apks)) { 3550*6777b538SAndroid Build Coastguard Worker foreach(additional_apk, invoker.additional_apks) { 3551*6777b538SAndroid Build Coastguard Worker deps += [ "$additional_apk$build_config_target_suffix" ] 3552*6777b538SAndroid Build Coastguard Worker _build_config = 3553*6777b538SAndroid Build Coastguard Worker get_label_info(additional_apk, "target_gen_dir") + "/" + 3554*6777b538SAndroid Build Coastguard Worker get_label_info(additional_apk, "name") + ".build_config.json" 3555*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(_build_config, root_build_dir) 3556*6777b538SAndroid Build Coastguard Worker args += [ 3557*6777b538SAndroid Build Coastguard Worker "--additional-apk", 3558*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_build_config:deps_info:apk_path)", 3559*6777b538SAndroid Build Coastguard Worker ] 3560*6777b538SAndroid Build Coastguard Worker } 3561*6777b538SAndroid Build Coastguard Worker deps += invoker.additional_apks 3562*6777b538SAndroid Build Coastguard Worker } 3563*6777b538SAndroid Build Coastguard Worker } 3564*6777b538SAndroid Build Coastguard Worker test_runner_script(target_name) { 3565*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 3566*6777b538SAndroid Build Coastguard Worker [ 3567*6777b538SAndroid Build Coastguard Worker "additional_apks", 3568*6777b538SAndroid Build Coastguard Worker "additional_locales", 3569*6777b538SAndroid Build Coastguard Worker "apk_under_test", 3570*6777b538SAndroid Build Coastguard Worker "data", 3571*6777b538SAndroid Build Coastguard Worker "data_deps", 3572*6777b538SAndroid Build Coastguard Worker "deps", 3573*6777b538SAndroid Build Coastguard Worker "extra_args", 3574*6777b538SAndroid Build Coastguard Worker "fake_modules", 3575*6777b538SAndroid Build Coastguard Worker "ignore_all_data_deps", 3576*6777b538SAndroid Build Coastguard Worker "is_unit_test", 3577*6777b538SAndroid Build Coastguard Worker "modules", 3578*6777b538SAndroid Build Coastguard Worker "proguard_mapping_path", 3579*6777b538SAndroid Build Coastguard Worker "use_webview_provider", 3580*6777b538SAndroid Build Coastguard Worker ]) 3581*6777b538SAndroid Build Coastguard Worker test_name = invoker.target_name 3582*6777b538SAndroid Build Coastguard Worker test_type = "instrumentation" 3583*6777b538SAndroid Build Coastguard Worker apk_target = invoker.android_test_apk 3584*6777b538SAndroid Build Coastguard Worker incremental_apk = _incremental_apk 3585*6777b538SAndroid Build Coastguard Worker 3586*6777b538SAndroid Build Coastguard Worker public_deps = [ 3587*6777b538SAndroid Build Coastguard Worker ":$_apk_operations_target_name", 3588*6777b538SAndroid Build Coastguard Worker apk_target, 3589*6777b538SAndroid Build Coastguard Worker ] 3590*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apk_under_test)) { 3591*6777b538SAndroid Build Coastguard Worker public_deps += [ invoker.apk_under_test ] 3592*6777b538SAndroid Build Coastguard Worker } 3593*6777b538SAndroid Build Coastguard Worker if (defined(invoker.additional_apks)) { 3594*6777b538SAndroid Build Coastguard Worker public_deps += invoker.additional_apks 3595*6777b538SAndroid Build Coastguard Worker } 3596*6777b538SAndroid Build Coastguard Worker } 3597*6777b538SAndroid Build Coastguard Worker } 3598*6777b538SAndroid Build Coastguard Worker 3599*6777b538SAndroid Build Coastguard Worker # Declare an Android instrumentation test apk 3600*6777b538SAndroid Build Coastguard Worker # 3601*6777b538SAndroid Build Coastguard Worker # This target creates an Android instrumentation test apk. 3602*6777b538SAndroid Build Coastguard Worker # 3603*6777b538SAndroid Build Coastguard Worker # Supports all variables of android_apk(), plus: 3604*6777b538SAndroid Build Coastguard Worker # apk_under_test: The apk being tested (optional). 3605*6777b538SAndroid Build Coastguard Worker # 3606*6777b538SAndroid Build Coastguard Worker # Example 3607*6777b538SAndroid Build Coastguard Worker # android_test_apk("foo_test_apk") { 3608*6777b538SAndroid Build Coastguard Worker # android_manifest = "AndroidManifest.xml" 3609*6777b538SAndroid Build Coastguard Worker # apk_name = "FooTest" 3610*6777b538SAndroid Build Coastguard Worker # apk_under_test = "Foo" 3611*6777b538SAndroid Build Coastguard Worker # sources = [ 3612*6777b538SAndroid Build Coastguard Worker # "android/org/chromium/foo/FooTestCase.java", 3613*6777b538SAndroid Build Coastguard Worker # "android/org/chromium/foo/FooExampleTest.java", 3614*6777b538SAndroid Build Coastguard Worker # ] 3615*6777b538SAndroid Build Coastguard Worker # deps = [ 3616*6777b538SAndroid Build Coastguard Worker # ":foo_test_support_java" 3617*6777b538SAndroid Build Coastguard Worker # ] 3618*6777b538SAndroid Build Coastguard Worker # } 3619*6777b538SAndroid Build Coastguard Worker template("android_test_apk") { 3620*6777b538SAndroid Build Coastguard Worker android_apk(target_name) { 3621*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 3622*6777b538SAndroid Build Coastguard Worker testonly = true 3623*6777b538SAndroid Build Coastguard Worker 3624*6777b538SAndroid Build Coastguard Worker # The size info enables the test_runner to find the source file location 3625*6777b538SAndroid Build Coastguard Worker # of a test after it is ran. 3626*6777b538SAndroid Build Coastguard Worker include_size_info = true 3627*6777b538SAndroid Build Coastguard Worker data = [ "$root_build_dir/size-info/${invoker.apk_name}.apk.jar.info" ] 3628*6777b538SAndroid Build Coastguard Worker if (defined(invoker.data)) { 3629*6777b538SAndroid Build Coastguard Worker data += invoker.data 3630*6777b538SAndroid Build Coastguard Worker } 3631*6777b538SAndroid Build Coastguard Worker 3632*6777b538SAndroid Build Coastguard Worker deps = [ 3633*6777b538SAndroid Build Coastguard Worker "//testing/android/instrumentation:instrumentation_test_runner_java", 3634*6777b538SAndroid Build Coastguard Worker ] 3635*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 3636*6777b538SAndroid Build Coastguard Worker deps += invoker.deps 3637*6777b538SAndroid Build Coastguard Worker } 3638*6777b538SAndroid Build Coastguard Worker data_deps = [ 3639*6777b538SAndroid Build Coastguard Worker # Ensure unstripped libraries are included in runtime deps so that 3640*6777b538SAndroid Build Coastguard Worker # symbolization can be done. 3641*6777b538SAndroid Build Coastguard Worker ":${target_name}__secondary_abi_shared_library_list", 3642*6777b538SAndroid Build Coastguard Worker ":${target_name}__shared_library_list", 3643*6777b538SAndroid Build Coastguard Worker ] 3644*6777b538SAndroid Build Coastguard Worker if (defined(invoker.data_deps)) { 3645*6777b538SAndroid Build Coastguard Worker data_deps += invoker.data_deps 3646*6777b538SAndroid Build Coastguard Worker } 3647*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apk_under_test)) { 3648*6777b538SAndroid Build Coastguard Worker data_deps += [ invoker.apk_under_test ] 3649*6777b538SAndroid Build Coastguard Worker } 3650*6777b538SAndroid Build Coastguard Worker 3651*6777b538SAndroid Build Coastguard Worker if (defined(invoker.apk_under_test)) { 3652*6777b538SAndroid Build Coastguard Worker _under_test_label = 3653*6777b538SAndroid Build Coastguard Worker get_label_info(invoker.apk_under_test, "label_no_toolchain") 3654*6777b538SAndroid Build Coastguard Worker data_deps += [ 3655*6777b538SAndroid Build Coastguard Worker "${_under_test_label}__secondary_abi_shared_library_list", 3656*6777b538SAndroid Build Coastguard Worker "${_under_test_label}__shared_library_list", 3657*6777b538SAndroid Build Coastguard Worker ] 3658*6777b538SAndroid Build Coastguard Worker } 3659*6777b538SAndroid Build Coastguard Worker 3660*6777b538SAndroid Build Coastguard Worker if (defined(invoker.additional_apks)) { 3661*6777b538SAndroid Build Coastguard Worker data_deps += invoker.additional_apks 3662*6777b538SAndroid Build Coastguard Worker } 3663*6777b538SAndroid Build Coastguard Worker if (defined(invoker.use_webview_provider)) { 3664*6777b538SAndroid Build Coastguard Worker data_deps += [ invoker.use_webview_provider ] 3665*6777b538SAndroid Build Coastguard Worker } 3666*6777b538SAndroid Build Coastguard Worker 3667*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_enabled) && invoker.proguard_enabled && 3668*6777b538SAndroid Build Coastguard Worker !incremental_install) { 3669*6777b538SAndroid Build Coastguard Worker # When ProGuard is on, we use ProGuard to combine the under test java 3670*6777b538SAndroid Build Coastguard Worker # code and the test java code. This is to allow us to apply all ProGuard 3671*6777b538SAndroid Build Coastguard Worker # optimizations that we ship with, but not have them break tests. The 3672*6777b538SAndroid Build Coastguard Worker # apk under test will still have the same resources, assets, and 3673*6777b538SAndroid Build Coastguard Worker # manifest, all of which are the ones used in the tests. 3674*6777b538SAndroid Build Coastguard Worker proguard_configs = [ 3675*6777b538SAndroid Build Coastguard Worker "//testing/android/proguard_for_test.flags", 3676*6777b538SAndroid Build Coastguard Worker "//third_party/jni_zero/proguard_for_test.flags", 3677*6777b538SAndroid Build Coastguard Worker ] 3678*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_configs)) { 3679*6777b538SAndroid Build Coastguard Worker proguard_configs += invoker.proguard_configs 3680*6777b538SAndroid Build Coastguard Worker } 3681*6777b538SAndroid Build Coastguard Worker enable_proguard_checks = false 3682*6777b538SAndroid Build Coastguard Worker if (defined(invoker.final_apk_path)) { 3683*6777b538SAndroid Build Coastguard Worker _final_apk_path = final_apk_path 3684*6777b538SAndroid Build Coastguard Worker } else { 3685*6777b538SAndroid Build Coastguard Worker _final_apk_path = "$root_build_dir/apks/${invoker.apk_name}.apk" 3686*6777b538SAndroid Build Coastguard Worker } 3687*6777b538SAndroid Build Coastguard Worker data += [ "$_final_apk_path.mapping" ] 3688*6777b538SAndroid Build Coastguard Worker } 3689*6777b538SAndroid Build Coastguard Worker 3690*6777b538SAndroid Build Coastguard Worker create_apk_script = false 3691*6777b538SAndroid Build Coastguard Worker 3692*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 3693*6777b538SAndroid Build Coastguard Worker "*", 3694*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 3695*6777b538SAndroid Build Coastguard Worker "data", 3696*6777b538SAndroid Build Coastguard Worker "data_deps", 3697*6777b538SAndroid Build Coastguard Worker "deps", 3698*6777b538SAndroid Build Coastguard Worker "extra_args", 3699*6777b538SAndroid Build Coastguard Worker "is_unit_test", 3700*6777b538SAndroid Build Coastguard Worker "proguard_configs", 3701*6777b538SAndroid Build Coastguard Worker ]) 3702*6777b538SAndroid Build Coastguard Worker } 3703*6777b538SAndroid Build Coastguard Worker } 3704*6777b538SAndroid Build Coastguard Worker 3705*6777b538SAndroid Build Coastguard Worker # Declare an Android instrumentation test apk with wrapper script. 3706*6777b538SAndroid Build Coastguard Worker # 3707*6777b538SAndroid Build Coastguard Worker # This target creates an Android instrumentation test apk with wrapper script 3708*6777b538SAndroid Build Coastguard Worker # to run the test. 3709*6777b538SAndroid Build Coastguard Worker # 3710*6777b538SAndroid Build Coastguard Worker # Supports all variables of android_test_apk. 3711*6777b538SAndroid Build Coastguard Worker template("instrumentation_test_apk") { 3712*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.apk_name)) 3713*6777b538SAndroid Build Coastguard Worker _apk_target_name = "${target_name}__test_apk" 3714*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 3715*6777b538SAndroid Build Coastguard Worker android_test_apk(_apk_target_name) { 3716*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 3717*6777b538SAndroid Build Coastguard Worker } 3718*6777b538SAndroid Build Coastguard Worker instrumentation_test_runner(target_name) { 3719*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 3720*6777b538SAndroid Build Coastguard Worker [ 3721*6777b538SAndroid Build Coastguard Worker "additional_apks", 3722*6777b538SAndroid Build Coastguard Worker "apk_under_test", 3723*6777b538SAndroid Build Coastguard Worker "data", 3724*6777b538SAndroid Build Coastguard Worker "data_deps", 3725*6777b538SAndroid Build Coastguard Worker "deps", 3726*6777b538SAndroid Build Coastguard Worker "extra_args", 3727*6777b538SAndroid Build Coastguard Worker "ignore_all_data_deps", 3728*6777b538SAndroid Build Coastguard Worker "is_unit_test", 3729*6777b538SAndroid Build Coastguard Worker "modules", 3730*6777b538SAndroid Build Coastguard Worker "never_incremental", 3731*6777b538SAndroid Build Coastguard Worker "public_deps", 3732*6777b538SAndroid Build Coastguard Worker "use_webview_provider", 3733*6777b538SAndroid Build Coastguard Worker ]) 3734*6777b538SAndroid Build Coastguard Worker android_test_apk = ":${_apk_target_name}" 3735*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_enabled) && invoker.proguard_enabled) { 3736*6777b538SAndroid Build Coastguard Worker proguard_mapping_path = 3737*6777b538SAndroid Build Coastguard Worker "$root_build_dir/apks/${invoker.apk_name}.apk.mapping" 3738*6777b538SAndroid Build Coastguard Worker } 3739*6777b538SAndroid Build Coastguard Worker } 3740*6777b538SAndroid Build Coastguard Worker } 3741*6777b538SAndroid Build Coastguard Worker 3742*6777b538SAndroid Build Coastguard Worker # Declare an Android gtest apk 3743*6777b538SAndroid Build Coastguard Worker # 3744*6777b538SAndroid Build Coastguard Worker # This target creates an Android apk for running gtest-based unittests. 3745*6777b538SAndroid Build Coastguard Worker # 3746*6777b538SAndroid Build Coastguard Worker # Variables 3747*6777b538SAndroid Build Coastguard Worker # deps: Specifies the dependencies of this target. These will be passed to 3748*6777b538SAndroid Build Coastguard Worker # the underlying android_apk invocation and should include the java and 3749*6777b538SAndroid Build Coastguard Worker # resource dependencies of the apk. 3750*6777b538SAndroid Build Coastguard Worker # shared_library: shared_library target that contains the unit tests. 3751*6777b538SAndroid Build Coastguard Worker # apk_name: The name of the produced apk. If unspecified, it uses the name 3752*6777b538SAndroid Build Coastguard Worker # of the shared_library target suffixed with "_apk". 3753*6777b538SAndroid Build Coastguard Worker # use_default_launcher: Whether the default activity (NativeUnitTestActivity) 3754*6777b538SAndroid Build Coastguard Worker # should be used for launching tests. 3755*6777b538SAndroid Build Coastguard Worker # allow_cleartext_traffic: (Optional) Whether to allow cleartext network 3756*6777b538SAndroid Build Coastguard Worker # requests during the test. 3757*6777b538SAndroid Build Coastguard Worker # use_native_activity: Test implements ANativeActivity_onCreate(). 3758*6777b538SAndroid Build Coastguard Worker # 3759*6777b538SAndroid Build Coastguard Worker # Example 3760*6777b538SAndroid Build Coastguard Worker # unittest_apk("foo_unittests_apk") { 3761*6777b538SAndroid Build Coastguard Worker # deps = [ ":foo_java", ":foo_resources" ] 3762*6777b538SAndroid Build Coastguard Worker # shared_library = ":foo_unittests" 3763*6777b538SAndroid Build Coastguard Worker # } 3764*6777b538SAndroid Build Coastguard Worker template("unittest_apk") { 3765*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 3766*6777b538SAndroid Build Coastguard Worker _use_native_activity = 3767*6777b538SAndroid Build Coastguard Worker defined(invoker.use_native_activity) && invoker.use_native_activity 3768*6777b538SAndroid Build Coastguard Worker _android_manifest = "$target_gen_dir/$target_name/AndroidManifest.xml" 3769*6777b538SAndroid Build Coastguard Worker assert(invoker.shared_library != "") 3770*6777b538SAndroid Build Coastguard Worker 3771*6777b538SAndroid Build Coastguard Worker # This trivial assert is needed in case android_manifest is defined, 3772*6777b538SAndroid Build Coastguard Worker # as otherwise _use_native_activity and _android_manifest would not be used. 3773*6777b538SAndroid Build Coastguard Worker assert(_use_native_activity != "" && _android_manifest != "") 3774*6777b538SAndroid Build Coastguard Worker 3775*6777b538SAndroid Build Coastguard Worker if (!defined(invoker.android_manifest)) { 3776*6777b538SAndroid Build Coastguard Worker _allow_cleartext_traffic = defined(invoker.allow_cleartext_traffic) && 3777*6777b538SAndroid Build Coastguard Worker invoker.allow_cleartext_traffic 3778*6777b538SAndroid Build Coastguard Worker jinja_template("${target_name}_manifest") { 3779*6777b538SAndroid Build Coastguard Worker _native_library_name = get_label_info(invoker.shared_library, "name") 3780*6777b538SAndroid Build Coastguard Worker if (defined(invoker.android_manifest_template)) { 3781*6777b538SAndroid Build Coastguard Worker input = invoker.android_manifest_template 3782*6777b538SAndroid Build Coastguard Worker } else { 3783*6777b538SAndroid Build Coastguard Worker input = 3784*6777b538SAndroid Build Coastguard Worker "//testing/android/native_test/java/AndroidManifest.xml.jinja2" 3785*6777b538SAndroid Build Coastguard Worker } 3786*6777b538SAndroid Build Coastguard Worker output = _android_manifest 3787*6777b538SAndroid Build Coastguard Worker variables = [ 3788*6777b538SAndroid Build Coastguard Worker "is_component_build=${is_component_build}", 3789*6777b538SAndroid Build Coastguard Worker "native_library_name=${_native_library_name}", 3790*6777b538SAndroid Build Coastguard Worker "use_native_activity=${_use_native_activity}", 3791*6777b538SAndroid Build Coastguard Worker "allow_cleartext_traffic=${_allow_cleartext_traffic}", 3792*6777b538SAndroid Build Coastguard Worker ] 3793*6777b538SAndroid Build Coastguard Worker } 3794*6777b538SAndroid Build Coastguard Worker } 3795*6777b538SAndroid Build Coastguard Worker 3796*6777b538SAndroid Build Coastguard Worker android_apk(target_name) { 3797*6777b538SAndroid Build Coastguard Worker data_deps = [] 3798*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 3799*6777b538SAndroid Build Coastguard Worker testonly = true 3800*6777b538SAndroid Build Coastguard Worker create_apk_script = false 3801*6777b538SAndroid Build Coastguard Worker 3802*6777b538SAndroid Build Coastguard Worker # TODO(crbug.com/1099849): Figure out why angle tests fail to launch 3803*6777b538SAndroid Build Coastguard Worker # with newer target_sdk_version. 3804*6777b538SAndroid Build Coastguard Worker if (!defined(invoker.target_sdk_version) && _use_native_activity) { 3805*6777b538SAndroid Build Coastguard Worker target_sdk_version = 24 3806*6777b538SAndroid Build Coastguard Worker } 3807*6777b538SAndroid Build Coastguard Worker 3808*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.proguard_enabled) || !invoker.proguard_enabled || 3809*6777b538SAndroid Build Coastguard Worker invoker.proguard_configs != []) 3810*6777b538SAndroid Build Coastguard Worker 3811*6777b538SAndroid Build Coastguard Worker if (!defined(apk_name)) { 3812*6777b538SAndroid Build Coastguard Worker apk_name = get_label_info(invoker.shared_library, "name") 3813*6777b538SAndroid Build Coastguard Worker } 3814*6777b538SAndroid Build Coastguard Worker 3815*6777b538SAndroid Build Coastguard Worker if (!defined(android_manifest)) { 3816*6777b538SAndroid Build Coastguard Worker android_manifest_dep = ":${target_name}_manifest" 3817*6777b538SAndroid Build Coastguard Worker android_manifest = _android_manifest 3818*6777b538SAndroid Build Coastguard Worker } 3819*6777b538SAndroid Build Coastguard Worker 3820*6777b538SAndroid Build Coastguard Worker final_apk_path = "$root_build_dir/${apk_name}_apk/${apk_name}-debug.apk" 3821*6777b538SAndroid Build Coastguard Worker 3822*6777b538SAndroid Build Coastguard Worker if (!defined(use_default_launcher) || use_default_launcher) { 3823*6777b538SAndroid Build Coastguard Worker deps += [ 3824*6777b538SAndroid Build Coastguard Worker "//build/android/gtest_apk:native_test_instrumentation_test_runner_java", 3825*6777b538SAndroid Build Coastguard Worker "//testing/android/native_test:native_test_java", 3826*6777b538SAndroid Build Coastguard Worker ] 3827*6777b538SAndroid Build Coastguard Worker } 3828*6777b538SAndroid Build Coastguard Worker shared_libraries = [ invoker.shared_library ] 3829*6777b538SAndroid Build Coastguard Worker deps += [ 3830*6777b538SAndroid Build Coastguard Worker ":${target_name}__secondary_abi_shared_library_list", 3831*6777b538SAndroid Build Coastguard Worker ":${target_name}__shared_library_list", 3832*6777b538SAndroid Build Coastguard Worker ] 3833*6777b538SAndroid Build Coastguard Worker } 3834*6777b538SAndroid Build Coastguard Worker } 3835*6777b538SAndroid Build Coastguard Worker 3836*6777b538SAndroid Build Coastguard Worker # Generate .java files from .aidl files. 3837*6777b538SAndroid Build Coastguard Worker # 3838*6777b538SAndroid Build Coastguard Worker # This target will store the .java files in a srcjar and should be included in 3839*6777b538SAndroid Build Coastguard Worker # an android_library or android_apk's srcjar_deps. 3840*6777b538SAndroid Build Coastguard Worker # 3841*6777b538SAndroid Build Coastguard Worker # Variables 3842*6777b538SAndroid Build Coastguard Worker # sources: Paths to .aidl files to compile. 3843*6777b538SAndroid Build Coastguard Worker # import_include: Path to directory containing .java files imported by the 3844*6777b538SAndroid Build Coastguard Worker # .aidl files. 3845*6777b538SAndroid Build Coastguard Worker # interface_file: Preprocessed aidl file to import. 3846*6777b538SAndroid Build Coastguard Worker # 3847*6777b538SAndroid Build Coastguard Worker # Example 3848*6777b538SAndroid Build Coastguard Worker # android_aidl("foo_aidl") { 3849*6777b538SAndroid Build Coastguard Worker # import_include = "java/src" 3850*6777b538SAndroid Build Coastguard Worker # sources = [ 3851*6777b538SAndroid Build Coastguard Worker # "java/src/com/foo/bar/FooBarService.aidl", 3852*6777b538SAndroid Build Coastguard Worker # "java/src/com/foo/bar/FooBarServiceCallback.aidl", 3853*6777b538SAndroid Build Coastguard Worker # ] 3854*6777b538SAndroid Build Coastguard Worker # } 3855*6777b538SAndroid Build Coastguard Worker template("android_aidl") { 3856*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 3857*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 3858*6777b538SAndroid Build Coastguard Worker 3859*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/aidl.py" 3860*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 3861*6777b538SAndroid Build Coastguard Worker sources = invoker.sources 3862*6777b538SAndroid Build Coastguard Worker 3863*6777b538SAndroid Build Coastguard Worker _srcjar_path = "${target_gen_dir}/${target_name}.srcjar" 3864*6777b538SAndroid Build Coastguard Worker _aidl_path = "${android_sdk_build_tools}/aidl" 3865*6777b538SAndroid Build Coastguard Worker _framework_aidl = "$android_sdk/framework.aidl" 3866*6777b538SAndroid Build Coastguard Worker _imports = [ _framework_aidl ] 3867*6777b538SAndroid Build Coastguard Worker if (defined(invoker.interface_file)) { 3868*6777b538SAndroid Build Coastguard Worker assert(invoker.interface_file != "") 3869*6777b538SAndroid Build Coastguard Worker _imports += [ invoker.interface_file ] 3870*6777b538SAndroid Build Coastguard Worker } 3871*6777b538SAndroid Build Coastguard Worker 3872*6777b538SAndroid Build Coastguard Worker inputs = [ _aidl_path ] + _imports 3873*6777b538SAndroid Build Coastguard Worker 3874*6777b538SAndroid Build Coastguard Worker outputs = [ _srcjar_path ] 3875*6777b538SAndroid Build Coastguard Worker _rebased_imports = rebase_path(_imports, root_build_dir) 3876*6777b538SAndroid Build Coastguard Worker args = [ 3877*6777b538SAndroid Build Coastguard Worker "--aidl-path", 3878*6777b538SAndroid Build Coastguard Worker rebase_path(_aidl_path, root_build_dir), 3879*6777b538SAndroid Build Coastguard Worker "--imports=$_rebased_imports", 3880*6777b538SAndroid Build Coastguard Worker "--srcjar", 3881*6777b538SAndroid Build Coastguard Worker rebase_path(_srcjar_path, root_build_dir), 3882*6777b538SAndroid Build Coastguard Worker "--depfile", 3883*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 3884*6777b538SAndroid Build Coastguard Worker ] 3885*6777b538SAndroid Build Coastguard Worker if (defined(invoker.import_include) && invoker.import_include != []) { 3886*6777b538SAndroid Build Coastguard Worker _rebased_import_paths = [] 3887*6777b538SAndroid Build Coastguard Worker foreach(_import_path, invoker.import_include) { 3888*6777b538SAndroid Build Coastguard Worker _rebased_import_path = [] 3889*6777b538SAndroid Build Coastguard Worker _rebased_import_path = [ rebase_path(_import_path, root_build_dir) ] 3890*6777b538SAndroid Build Coastguard Worker _rebased_import_paths += _rebased_import_path 3891*6777b538SAndroid Build Coastguard Worker } 3892*6777b538SAndroid Build Coastguard Worker args += [ "--includes=$_rebased_import_paths" ] 3893*6777b538SAndroid Build Coastguard Worker } 3894*6777b538SAndroid Build Coastguard Worker args += rebase_path(sources, root_build_dir) 3895*6777b538SAndroid Build Coastguard Worker } 3896*6777b538SAndroid Build Coastguard Worker } 3897*6777b538SAndroid Build Coastguard Worker 3898*6777b538SAndroid Build Coastguard Worker # Compile a protocol buffer to java. 3899*6777b538SAndroid Build Coastguard Worker # 3900*6777b538SAndroid Build Coastguard Worker # This generates java files from protocol buffers and creates an Android library 3901*6777b538SAndroid Build Coastguard Worker # containing the classes. 3902*6777b538SAndroid Build Coastguard Worker # 3903*6777b538SAndroid Build Coastguard Worker # Variables 3904*6777b538SAndroid Build Coastguard Worker # sources (required) 3905*6777b538SAndroid Build Coastguard Worker # Paths to .proto files to compile. 3906*6777b538SAndroid Build Coastguard Worker # 3907*6777b538SAndroid Build Coastguard Worker # proto_path (required) 3908*6777b538SAndroid Build Coastguard Worker # Root directory of .proto files. 3909*6777b538SAndroid Build Coastguard Worker # 3910*6777b538SAndroid Build Coastguard Worker # deps (optional) 3911*6777b538SAndroid Build Coastguard Worker # Additional dependencies. Passed through to both the action and the 3912*6777b538SAndroid Build Coastguard Worker # android_library targets. 3913*6777b538SAndroid Build Coastguard Worker # 3914*6777b538SAndroid Build Coastguard Worker # import_dirs (optional) 3915*6777b538SAndroid Build Coastguard Worker # A list of extra import directories to be passed to protoc compiler. 3916*6777b538SAndroid Build Coastguard Worker # WARNING: This circumvents proto checkdeps, and should only be used 3917*6777b538SAndroid Build Coastguard Worker # when needed, typically when proto files cannot cleanly import through 3918*6777b538SAndroid Build Coastguard Worker # absolute paths, such as for third_party or generated .proto files. 3919*6777b538SAndroid Build Coastguard Worker # http://crbug.com/691451 tracks fixing this. 3920*6777b538SAndroid Build Coastguard Worker # 3921*6777b538SAndroid Build Coastguard Worker # generator_plugin_label (optional) 3922*6777b538SAndroid Build Coastguard Worker # GN label for plugin executable which generates custom cc stubs. 3923*6777b538SAndroid Build Coastguard Worker # Don't specify a toolchain, host toolchain is assumed. 3924*6777b538SAndroid Build Coastguard Worker # 3925*6777b538SAndroid Build Coastguard Worker # Example: 3926*6777b538SAndroid Build Coastguard Worker # proto_java_library("foo_proto_java") { 3927*6777b538SAndroid Build Coastguard Worker # proto_path = "src/foo" 3928*6777b538SAndroid Build Coastguard Worker # sources = [ "$proto_path/foo.proto" ] 3929*6777b538SAndroid Build Coastguard Worker # } 3930*6777b538SAndroid Build Coastguard Worker template("proto_java_library") { 3931*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 3932*6777b538SAndroid Build Coastguard Worker 3933*6777b538SAndroid Build Coastguard Worker _template_name = target_name 3934*6777b538SAndroid Build Coastguard Worker 3935*6777b538SAndroid Build Coastguard Worker action_with_pydeps("${_template_name}__protoc_java") { 3936*6777b538SAndroid Build Coastguard Worker # The suffix "__protoc_java.srcjar" is used by SuperSize to identify 3937*6777b538SAndroid Build Coastguard Worker # protobuf symbols. 3938*6777b538SAndroid Build Coastguard Worker _srcjar_path = "$target_gen_dir/$target_name.srcjar" 3939*6777b538SAndroid Build Coastguard Worker script = "//build/protoc_java.py" 3940*6777b538SAndroid Build Coastguard Worker 3941*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 3942*6777b538SAndroid Build Coastguard Worker # Need to care only about targets that might generate .proto files. 3943*6777b538SAndroid Build Coastguard Worker # No need to depend on java_library or android_resource targets. 3944*6777b538SAndroid Build Coastguard Worker deps = filter_exclude(invoker.deps, java_target_patterns) 3945*6777b538SAndroid Build Coastguard Worker } 3946*6777b538SAndroid Build Coastguard Worker 3947*6777b538SAndroid Build Coastguard Worker sources = invoker.sources 3948*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$target_name.d" 3949*6777b538SAndroid Build Coastguard Worker outputs = [ _srcjar_path ] 3950*6777b538SAndroid Build Coastguard Worker args = [ 3951*6777b538SAndroid Build Coastguard Worker "--depfile", 3952*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 3953*6777b538SAndroid Build Coastguard Worker "--protoc", 3954*6777b538SAndroid Build Coastguard Worker rebase_path(android_protoc_bin, root_build_dir), 3955*6777b538SAndroid Build Coastguard Worker "--proto-path", 3956*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.proto_path, root_build_dir), 3957*6777b538SAndroid Build Coastguard Worker "--srcjar", 3958*6777b538SAndroid Build Coastguard Worker rebase_path(_srcjar_path, root_build_dir), 3959*6777b538SAndroid Build Coastguard Worker ] 3960*6777b538SAndroid Build Coastguard Worker 3961*6777b538SAndroid Build Coastguard Worker if (defined(invoker.generator_plugin_label)) { 3962*6777b538SAndroid Build Coastguard Worker if (host_os == "win") { 3963*6777b538SAndroid Build Coastguard Worker _host_executable_suffix = ".exe" 3964*6777b538SAndroid Build Coastguard Worker } else { 3965*6777b538SAndroid Build Coastguard Worker _host_executable_suffix = "" 3966*6777b538SAndroid Build Coastguard Worker } 3967*6777b538SAndroid Build Coastguard Worker 3968*6777b538SAndroid Build Coastguard Worker _plugin_host_label = 3969*6777b538SAndroid Build Coastguard Worker invoker.generator_plugin_label + "($host_toolchain)" 3970*6777b538SAndroid Build Coastguard Worker _plugin_path = 3971*6777b538SAndroid Build Coastguard Worker get_label_info(_plugin_host_label, "root_out_dir") + "/" + 3972*6777b538SAndroid Build Coastguard Worker get_label_info(_plugin_host_label, "name") + _host_executable_suffix 3973*6777b538SAndroid Build Coastguard Worker args += [ 3974*6777b538SAndroid Build Coastguard Worker "--plugin", 3975*6777b538SAndroid Build Coastguard Worker rebase_path(_plugin_path, root_build_dir), 3976*6777b538SAndroid Build Coastguard Worker ] 3977*6777b538SAndroid Build Coastguard Worker deps += [ _plugin_host_label ] 3978*6777b538SAndroid Build Coastguard Worker inputs = [ _plugin_path ] 3979*6777b538SAndroid Build Coastguard Worker } 3980*6777b538SAndroid Build Coastguard Worker 3981*6777b538SAndroid Build Coastguard Worker args += rebase_path(sources, root_build_dir) 3982*6777b538SAndroid Build Coastguard Worker 3983*6777b538SAndroid Build Coastguard Worker if (defined(invoker.import_dirs)) { 3984*6777b538SAndroid Build Coastguard Worker foreach(_import_dir, invoker.import_dirs) { 3985*6777b538SAndroid Build Coastguard Worker args += [ 3986*6777b538SAndroid Build Coastguard Worker "--import-dir", 3987*6777b538SAndroid Build Coastguard Worker rebase_path(_import_dir, root_build_dir), 3988*6777b538SAndroid Build Coastguard Worker ] 3989*6777b538SAndroid Build Coastguard Worker } 3990*6777b538SAndroid Build Coastguard Worker } 3991*6777b538SAndroid Build Coastguard Worker } 3992*6777b538SAndroid Build Coastguard Worker 3993*6777b538SAndroid Build Coastguard Worker android_library(target_name) { 3994*6777b538SAndroid Build Coastguard Worker chromium_code = false 3995*6777b538SAndroid Build Coastguard Worker sources = [] 3996*6777b538SAndroid Build Coastguard Worker srcjar_deps = [ ":${_template_name}__protoc_java" ] 3997*6777b538SAndroid Build Coastguard Worker deps = [ "//third_party/android_deps:protobuf_lite_runtime_java" ] 3998*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 3999*6777b538SAndroid Build Coastguard Worker deps += invoker.deps 4000*6777b538SAndroid Build Coastguard Worker } 4001*6777b538SAndroid Build Coastguard Worker } 4002*6777b538SAndroid Build Coastguard Worker } 4003*6777b538SAndroid Build Coastguard Worker 4004*6777b538SAndroid Build Coastguard Worker # Compile a flatbuffer to java. 4005*6777b538SAndroid Build Coastguard Worker # 4006*6777b538SAndroid Build Coastguard Worker # This generates java files from flat buffers and creates an Android library 4007*6777b538SAndroid Build Coastguard Worker # containing the classes. 4008*6777b538SAndroid Build Coastguard Worker # 4009*6777b538SAndroid Build Coastguard Worker # Variables 4010*6777b538SAndroid Build Coastguard Worker # sources (required) 4011*6777b538SAndroid Build Coastguard Worker # Paths to .fbs files to compile. 4012*6777b538SAndroid Build Coastguard Worker # 4013*6777b538SAndroid Build Coastguard Worker # root_dir (required) 4014*6777b538SAndroid Build Coastguard Worker # Root directory of .fbs files. 4015*6777b538SAndroid Build Coastguard Worker # 4016*6777b538SAndroid Build Coastguard Worker # deps (optional) 4017*6777b538SAndroid Build Coastguard Worker # Additional dependencies. Passed through to both the action and the 4018*6777b538SAndroid Build Coastguard Worker # android_library targets. 4019*6777b538SAndroid Build Coastguard Worker # 4020*6777b538SAndroid Build Coastguard Worker # flatc_include_dirs (optional) 4021*6777b538SAndroid Build Coastguard Worker # A list of extra import directories to be passed to flatc compiler. 4022*6777b538SAndroid Build Coastguard Worker # 4023*6777b538SAndroid Build Coastguard Worker # 4024*6777b538SAndroid Build Coastguard Worker # Example: 4025*6777b538SAndroid Build Coastguard Worker # flatbuffer_java_library("foo_flatbuffer_java") { 4026*6777b538SAndroid Build Coastguard Worker # root_dir = "src/foo" 4027*6777b538SAndroid Build Coastguard Worker # sources = [ "$proto_path/foo.fbs" ] 4028*6777b538SAndroid Build Coastguard Worker # } 4029*6777b538SAndroid Build Coastguard Worker template("flatbuffer_java_library") { 4030*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 4031*6777b538SAndroid Build Coastguard Worker 4032*6777b538SAndroid Build Coastguard Worker _template_name = target_name 4033*6777b538SAndroid Build Coastguard Worker _flatc_dep = "//third_party/flatbuffers:flatc($host_toolchain)" 4034*6777b538SAndroid Build Coastguard Worker _flatc_out_dir = get_label_info(_flatc_dep, "root_out_dir") 4035*6777b538SAndroid Build Coastguard Worker _flatc_bin = "$_flatc_out_dir/flatc" 4036*6777b538SAndroid Build Coastguard Worker 4037*6777b538SAndroid Build Coastguard Worker action_with_pydeps("${_template_name}__flatc_java") { 4038*6777b538SAndroid Build Coastguard Worker _srcjar_path = "$target_gen_dir/$target_name.srcjar" 4039*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/flatc_java.py" 4040*6777b538SAndroid Build Coastguard Worker 4041*6777b538SAndroid Build Coastguard Worker deps = [ _flatc_dep ] 4042*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 4043*6777b538SAndroid Build Coastguard Worker deps += invoker.deps 4044*6777b538SAndroid Build Coastguard Worker } 4045*6777b538SAndroid Build Coastguard Worker inputs = [ _flatc_bin ] 4046*6777b538SAndroid Build Coastguard Worker 4047*6777b538SAndroid Build Coastguard Worker sources = invoker.sources 4048*6777b538SAndroid Build Coastguard Worker outputs = [ _srcjar_path ] 4049*6777b538SAndroid Build Coastguard Worker args = [ 4050*6777b538SAndroid Build Coastguard Worker "--flatc", 4051*6777b538SAndroid Build Coastguard Worker rebase_path(_flatc_bin, root_build_dir), 4052*6777b538SAndroid Build Coastguard Worker "--import-dir", 4053*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.root_dir, root_build_dir), 4054*6777b538SAndroid Build Coastguard Worker "--srcjar", 4055*6777b538SAndroid Build Coastguard Worker rebase_path(_srcjar_path, root_build_dir), 4056*6777b538SAndroid Build Coastguard Worker ] + rebase_path(sources, root_build_dir) 4057*6777b538SAndroid Build Coastguard Worker 4058*6777b538SAndroid Build Coastguard Worker if (defined(invoker.flatc_include_dirs)) { 4059*6777b538SAndroid Build Coastguard Worker foreach(_include_dir, invoker.flatc_include_dirs) { 4060*6777b538SAndroid Build Coastguard Worker args += [ 4061*6777b538SAndroid Build Coastguard Worker "--import-dir", 4062*6777b538SAndroid Build Coastguard Worker rebase_path(_include_dir, root_build_dir), 4063*6777b538SAndroid Build Coastguard Worker ] 4064*6777b538SAndroid Build Coastguard Worker } 4065*6777b538SAndroid Build Coastguard Worker } 4066*6777b538SAndroid Build Coastguard Worker } 4067*6777b538SAndroid Build Coastguard Worker 4068*6777b538SAndroid Build Coastguard Worker android_library(target_name) { 4069*6777b538SAndroid Build Coastguard Worker chromium_code = false 4070*6777b538SAndroid Build Coastguard Worker sources = [] 4071*6777b538SAndroid Build Coastguard Worker srcjar_deps = [ ":${_template_name}__flatc_java" ] 4072*6777b538SAndroid Build Coastguard Worker deps = [ "//third_party/flatbuffers:flatbuffers_java" ] 4073*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 4074*6777b538SAndroid Build Coastguard Worker deps += invoker.deps 4075*6777b538SAndroid Build Coastguard Worker } 4076*6777b538SAndroid Build Coastguard Worker } 4077*6777b538SAndroid Build Coastguard Worker } 4078*6777b538SAndroid Build Coastguard Worker 4079*6777b538SAndroid Build Coastguard Worker # Declare an Android library target for a prebuilt AAR. 4080*6777b538SAndroid Build Coastguard Worker # 4081*6777b538SAndroid Build Coastguard Worker # This target creates an Android library containing java code and Android 4082*6777b538SAndroid Build Coastguard Worker # resources. For libraries without resources, it will not generate 4083*6777b538SAndroid Build Coastguard Worker # corresponding android_resources targets. 4084*6777b538SAndroid Build Coastguard Worker # 4085*6777b538SAndroid Build Coastguard Worker # To avoid slowing down "gn gen", an associated .info file must be committed 4086*6777b538SAndroid Build Coastguard Worker # along with the .aar file. In order to create this file, define the target 4087*6777b538SAndroid Build Coastguard Worker # and then run once with the gn arg "update_android_aar_prebuilts = true". 4088*6777b538SAndroid Build Coastguard Worker # 4089*6777b538SAndroid Build Coastguard Worker # Variables 4090*6777b538SAndroid Build Coastguard Worker # aar_path: Path to the AAR. 4091*6777b538SAndroid Build Coastguard Worker # info_path: Path to the .aar.info file (generated via 4092*6777b538SAndroid Build Coastguard Worker # update_android_aar_prebuilts GN arg). 4093*6777b538SAndroid Build Coastguard Worker # proguard_configs: List of proguard configs to use in final apk step for 4094*6777b538SAndroid Build Coastguard Worker # any apk that depends on this library. 4095*6777b538SAndroid Build Coastguard Worker # ignore_aidl: Whether to ignore .aidl files found with the .aar. 4096*6777b538SAndroid Build Coastguard Worker # ignore_assets: Whether to ignore assets found in the .aar. 4097*6777b538SAndroid Build Coastguard Worker # ignore_manifest: Whether to ignore creating manifest. 4098*6777b538SAndroid Build Coastguard Worker # ignore_native_libraries: Whether to ignore .so files found in the .aar. 4099*6777b538SAndroid Build Coastguard Worker # See also extract_native_libraries. 4100*6777b538SAndroid Build Coastguard Worker # ignore_proguard_configs: Whether to ignore proguard configs. 4101*6777b538SAndroid Build Coastguard Worker # strip_resources: Whether to ignore android resources found in the .aar. 4102*6777b538SAndroid Build Coastguard Worker # custom_package: Java package for generated R.java files. 4103*6777b538SAndroid Build Coastguard Worker # extract_native_libraries: Whether to extract .so files found in the .aar. 4104*6777b538SAndroid Build Coastguard Worker # If the file contains .so, either extract_native_libraries or 4105*6777b538SAndroid Build Coastguard Worker # ignore_native_libraries must be set. 4106*6777b538SAndroid Build Coastguard Worker # TODO(jbudorick@): remove this arguments after crbug.com/522043 is fixed. 4107*6777b538SAndroid Build Coastguard Worker # requires_android: Whether this target can only be used for compiling 4108*6777b538SAndroid Build Coastguard Worker # Android related targets. 4109*6777b538SAndroid Build Coastguard Worker # 4110*6777b538SAndroid Build Coastguard Worker # Example 4111*6777b538SAndroid Build Coastguard Worker # android_aar_prebuilt("foo_java") { 4112*6777b538SAndroid Build Coastguard Worker # aar_path = "foo.aar" 4113*6777b538SAndroid Build Coastguard Worker # } 4114*6777b538SAndroid Build Coastguard Worker template("android_aar_prebuilt") { 4115*6777b538SAndroid Build Coastguard Worker _info_path = "$target_name.info" 4116*6777b538SAndroid Build Coastguard Worker if (defined(invoker.info_path)) { 4117*6777b538SAndroid Build Coastguard Worker _info_path = invoker.info_path 4118*6777b538SAndroid Build Coastguard Worker } 4119*6777b538SAndroid Build Coastguard Worker _output_path = "${target_out_dir}/${target_name}" 4120*6777b538SAndroid Build Coastguard Worker 4121*6777b538SAndroid Build Coastguard Worker # Some targets only differ by _java with other targets so _java and _junit 4122*6777b538SAndroid Build Coastguard Worker # need to be replaced by non-empty strings to avoid duplicate targets. (e.g. 4123*6777b538SAndroid Build Coastguard Worker # androidx_window_window_java vs androidx_window_window_java_java). 4124*6777b538SAndroid Build Coastguard Worker _target_name_without_java_or_junit = 4125*6777b538SAndroid Build Coastguard Worker string_replace(string_replace(target_name, "_java", "_J"), 4126*6777b538SAndroid Build Coastguard Worker "_junit", 4127*6777b538SAndroid Build Coastguard Worker "_U") 4128*6777b538SAndroid Build Coastguard Worker 4129*6777b538SAndroid Build Coastguard Worker # This unpack target is a python action, not a valid java target. Since the 4130*6777b538SAndroid Build Coastguard Worker # java targets below depend on it, its name must not match the java patterns 4131*6777b538SAndroid Build Coastguard Worker # in internal_rules.gni. 4132*6777b538SAndroid Build Coastguard Worker _unpack_target_name = "${_target_name_without_java_or_junit}__unpack_aar" 4133*6777b538SAndroid Build Coastguard Worker _ignore_aidl = defined(invoker.ignore_aidl) && invoker.ignore_aidl 4134*6777b538SAndroid Build Coastguard Worker _ignore_assets = defined(invoker.ignore_assets) && invoker.ignore_assets 4135*6777b538SAndroid Build Coastguard Worker _ignore_manifest = 4136*6777b538SAndroid Build Coastguard Worker defined(invoker.ignore_manifest) && invoker.ignore_manifest 4137*6777b538SAndroid Build Coastguard Worker _ignore_native_libraries = defined(invoker.ignore_native_libraries) && 4138*6777b538SAndroid Build Coastguard Worker invoker.ignore_native_libraries 4139*6777b538SAndroid Build Coastguard Worker _ignore_proguard_configs = defined(invoker.ignore_proguard_configs) && 4140*6777b538SAndroid Build Coastguard Worker invoker.ignore_proguard_configs 4141*6777b538SAndroid Build Coastguard Worker _extract_native_libraries = defined(invoker.extract_native_libraries) && 4142*6777b538SAndroid Build Coastguard Worker invoker.extract_native_libraries 4143*6777b538SAndroid Build Coastguard Worker _strip_resources = 4144*6777b538SAndroid Build Coastguard Worker defined(invoker.strip_resources) && invoker.strip_resources 4145*6777b538SAndroid Build Coastguard Worker 4146*6777b538SAndroid Build Coastguard Worker # Allow 'resource_overlay' parameter even if there are no resources in order 4147*6777b538SAndroid Build Coastguard Worker # to keep the logic for generated 'android_aar_prebuilt' rules simple. 4148*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "resource_overlay" ]) 4149*6777b538SAndroid Build Coastguard Worker 4150*6777b538SAndroid Build Coastguard Worker _aar_common_args = [ rebase_path(invoker.aar_path, root_build_dir) ] 4151*6777b538SAndroid Build Coastguard Worker if (_strip_resources) { 4152*6777b538SAndroid Build Coastguard Worker _aar_common_args += [ "--ignore-resources" ] 4153*6777b538SAndroid Build Coastguard Worker } 4154*6777b538SAndroid Build Coastguard Worker if (defined(invoker.resource_exclusion_globs)) { 4155*6777b538SAndroid Build Coastguard Worker _aar_common_args += 4156*6777b538SAndroid Build Coastguard Worker [ "--resource-exclusion-globs=${invoker.resource_exclusion_globs}" ] 4157*6777b538SAndroid Build Coastguard Worker } 4158*6777b538SAndroid Build Coastguard Worker 4159*6777b538SAndroid Build Coastguard Worker # Scan the AAR file and determine the resources and jar files. 4160*6777b538SAndroid Build Coastguard Worker # Some libraries might not have resources; others might have two jars. 4161*6777b538SAndroid Build Coastguard Worker if (update_android_aar_prebuilts) { 4162*6777b538SAndroid Build Coastguard Worker print("Writing " + rebase_path(_info_path, "//")) 4163*6777b538SAndroid Build Coastguard Worker exec_script("//build/android/gyp/aar.py", 4164*6777b538SAndroid Build Coastguard Worker [ 4165*6777b538SAndroid Build Coastguard Worker "list", 4166*6777b538SAndroid Build Coastguard Worker "--output", 4167*6777b538SAndroid Build Coastguard Worker rebase_path(_info_path, root_build_dir), 4168*6777b538SAndroid Build Coastguard Worker ] + _aar_common_args) 4169*6777b538SAndroid Build Coastguard Worker } 4170*6777b538SAndroid Build Coastguard Worker 4171*6777b538SAndroid Build Coastguard Worker # If "gn gen" is failing on the following line, you need to generate an 4172*6777b538SAndroid Build Coastguard Worker # .info file for your new target by running: 4173*6777b538SAndroid Build Coastguard Worker # gn gen --args='target_os="android" update_android_aar_prebuilts=true' out/tmp 4174*6777b538SAndroid Build Coastguard Worker # rm -r out/tmp 4175*6777b538SAndroid Build Coastguard Worker _scanned_files = read_file(_info_path, "scope") 4176*6777b538SAndroid Build Coastguard Worker 4177*6777b538SAndroid Build Coastguard Worker _use_scanned_assets = !_ignore_assets && _scanned_files.assets != [] 4178*6777b538SAndroid Build Coastguard Worker _has_resources = _scanned_files.resources != [] 4179*6777b538SAndroid Build Coastguard Worker _common_deps = [ ":$_unpack_target_name" ] 4180*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 4181*6777b538SAndroid Build Coastguard Worker _common_deps += invoker.deps 4182*6777b538SAndroid Build Coastguard Worker } 4183*6777b538SAndroid Build Coastguard Worker if (defined(invoker.public_deps)) { 4184*6777b538SAndroid Build Coastguard Worker _common_deps += invoker.public_deps 4185*6777b538SAndroid Build Coastguard Worker } 4186*6777b538SAndroid Build Coastguard Worker 4187*6777b538SAndroid Build Coastguard Worker assert(_ignore_aidl || _scanned_files.aidl == [], 4188*6777b538SAndroid Build Coastguard Worker "android_aar_prebuilt() aidl not yet supported." + 4189*6777b538SAndroid Build Coastguard Worker " Implement or use ignore_aidl = true." + 4190*6777b538SAndroid Build Coastguard Worker " http://crbug.com/644439") 4191*6777b538SAndroid Build Coastguard Worker assert( 4192*6777b538SAndroid Build Coastguard Worker !_scanned_files.has_native_libraries || 4193*6777b538SAndroid Build Coastguard Worker (_ignore_native_libraries || _extract_native_libraries), 4194*6777b538SAndroid Build Coastguard Worker "android_aar_prebuilt() contains .so files." + 4195*6777b538SAndroid Build Coastguard Worker " Please set ignore_native_libraries or extract_native_libraries.") 4196*6777b538SAndroid Build Coastguard Worker assert( 4197*6777b538SAndroid Build Coastguard Worker !(_ignore_native_libraries && _extract_native_libraries), 4198*6777b538SAndroid Build Coastguard Worker "ignore_native_libraries and extract_native_libraries cannot both be set.") 4199*6777b538SAndroid Build Coastguard Worker assert(!_scanned_files.has_native_libraries || 4200*6777b538SAndroid Build Coastguard Worker _scanned_files.native_libraries != []) 4201*6777b538SAndroid Build Coastguard Worker assert(_scanned_files.has_classes_jar || _scanned_files.subjars == []) 4202*6777b538SAndroid Build Coastguard Worker 4203*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_unpack_target_name) { 4204*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/aar.py" # Unzips the AAR 4205*6777b538SAndroid Build Coastguard Worker args = [ 4206*6777b538SAndroid Build Coastguard Worker "extract", 4207*6777b538SAndroid Build Coastguard Worker "--output-dir", 4208*6777b538SAndroid Build Coastguard Worker rebase_path(_output_path, root_build_dir), 4209*6777b538SAndroid Build Coastguard Worker "--assert-info-file", 4210*6777b538SAndroid Build Coastguard Worker rebase_path(_info_path, root_build_dir), 4211*6777b538SAndroid Build Coastguard Worker ] + _aar_common_args 4212*6777b538SAndroid Build Coastguard Worker inputs = [ invoker.aar_path ] 4213*6777b538SAndroid Build Coastguard Worker outputs = [ "${_output_path}/AndroidManifest.xml" ] 4214*6777b538SAndroid Build Coastguard Worker outputs += 4215*6777b538SAndroid Build Coastguard Worker get_path_info(rebase_path(_scanned_files.resources, "", _output_path), 4216*6777b538SAndroid Build Coastguard Worker "abspath") 4217*6777b538SAndroid Build Coastguard Worker if (_scanned_files.has_r_text_file) { 4218*6777b538SAndroid Build Coastguard Worker # Certain packages, in particular Play Services have no R.txt even 4219*6777b538SAndroid Build Coastguard Worker # though its presence is mandated by AAR spec. Such packages cause 4220*6777b538SAndroid Build Coastguard Worker # spurious rebuilds if this output is specified unconditionally. 4221*6777b538SAndroid Build Coastguard Worker outputs += [ "${_output_path}/R.txt" ] 4222*6777b538SAndroid Build Coastguard Worker } 4223*6777b538SAndroid Build Coastguard Worker 4224*6777b538SAndroid Build Coastguard Worker if (_scanned_files.has_classes_jar) { 4225*6777b538SAndroid Build Coastguard Worker outputs += [ "${_output_path}/classes.jar" ] 4226*6777b538SAndroid Build Coastguard Worker } 4227*6777b538SAndroid Build Coastguard Worker outputs += 4228*6777b538SAndroid Build Coastguard Worker get_path_info(rebase_path(_scanned_files.subjars, "", _output_path), 4229*6777b538SAndroid Build Coastguard Worker "abspath") 4230*6777b538SAndroid Build Coastguard Worker if (!_ignore_proguard_configs) { 4231*6777b538SAndroid Build Coastguard Worker if (_scanned_files.has_proguard_flags) { 4232*6777b538SAndroid Build Coastguard Worker outputs += [ "${_output_path}/proguard.txt" ] 4233*6777b538SAndroid Build Coastguard Worker } 4234*6777b538SAndroid Build Coastguard Worker } 4235*6777b538SAndroid Build Coastguard Worker 4236*6777b538SAndroid Build Coastguard Worker if (_extract_native_libraries && _scanned_files.has_native_libraries) { 4237*6777b538SAndroid Build Coastguard Worker outputs += get_path_info( 4238*6777b538SAndroid Build Coastguard Worker rebase_path(_scanned_files.native_libraries, "", _output_path), 4239*6777b538SAndroid Build Coastguard Worker "abspath") 4240*6777b538SAndroid Build Coastguard Worker } 4241*6777b538SAndroid Build Coastguard Worker if (_use_scanned_assets) { 4242*6777b538SAndroid Build Coastguard Worker outputs += 4243*6777b538SAndroid Build Coastguard Worker get_path_info(rebase_path(_scanned_files.assets, "", _output_path), 4244*6777b538SAndroid Build Coastguard Worker "abspath") 4245*6777b538SAndroid Build Coastguard Worker } 4246*6777b538SAndroid Build Coastguard Worker } 4247*6777b538SAndroid Build Coastguard Worker 4248*6777b538SAndroid Build Coastguard Worker _should_process_manifest = 4249*6777b538SAndroid Build Coastguard Worker !_ignore_manifest && !_scanned_files.is_manifest_empty 4250*6777b538SAndroid Build Coastguard Worker 4251*6777b538SAndroid Build Coastguard Worker # Create the android_resources target for resources. 4252*6777b538SAndroid Build Coastguard Worker if (_has_resources || _should_process_manifest) { 4253*6777b538SAndroid Build Coastguard Worker _res_target_name = "${target_name}__resources" 4254*6777b538SAndroid Build Coastguard Worker android_resources(_res_target_name) { 4255*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 4256*6777b538SAndroid Build Coastguard Worker [ 4257*6777b538SAndroid Build Coastguard Worker "custom_package", 4258*6777b538SAndroid Build Coastguard Worker "resource_overlay", 4259*6777b538SAndroid Build Coastguard Worker "testonly", 4260*6777b538SAndroid Build Coastguard Worker "strip_drawables", 4261*6777b538SAndroid Build Coastguard Worker ]) 4262*6777b538SAndroid Build Coastguard Worker deps = _common_deps 4263*6777b538SAndroid Build Coastguard Worker if (_should_process_manifest) { 4264*6777b538SAndroid Build Coastguard Worker android_manifest_dep = ":$_unpack_target_name" 4265*6777b538SAndroid Build Coastguard Worker android_manifest = "${_output_path}/AndroidManifest.xml" 4266*6777b538SAndroid Build Coastguard Worker } else if (defined(_scanned_files.manifest_package) && 4267*6777b538SAndroid Build Coastguard Worker !defined(custom_package)) { 4268*6777b538SAndroid Build Coastguard Worker custom_package = _scanned_files.manifest_package 4269*6777b538SAndroid Build Coastguard Worker } 4270*6777b538SAndroid Build Coastguard Worker 4271*6777b538SAndroid Build Coastguard Worker sources = rebase_path(_scanned_files.resources, "", _output_path) 4272*6777b538SAndroid Build Coastguard Worker if (_scanned_files.has_r_text_file) { 4273*6777b538SAndroid Build Coastguard Worker r_text_file = "${_output_path}/R.txt" 4274*6777b538SAndroid Build Coastguard Worker } 4275*6777b538SAndroid Build Coastguard Worker } 4276*6777b538SAndroid Build Coastguard Worker } else if (defined(invoker.strip_drawables)) { 4277*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "strip_drawables" ]) 4278*6777b538SAndroid Build Coastguard Worker } 4279*6777b538SAndroid Build Coastguard Worker 4280*6777b538SAndroid Build Coastguard Worker if (_ignore_manifest) { 4281*6777b538SAndroid Build Coastguard Worker # Having this available can be useful for DFMs that depend on AARs. It 4282*6777b538SAndroid Build Coastguard Worker # provides a way to have manifest entries go into the base split while 4283*6777b538SAndroid Build Coastguard Worker # the code goes into a DFM. 4284*6777b538SAndroid Build Coastguard Worker java_group("${target_name}__ignored_manifest") { 4285*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 4286*6777b538SAndroid Build Coastguard Worker deps = [ ":$_unpack_target_name" ] 4287*6777b538SAndroid Build Coastguard Worker mergeable_android_manifests = [ "${_output_path}/AndroidManifest.xml" ] 4288*6777b538SAndroid Build Coastguard Worker } 4289*6777b538SAndroid Build Coastguard Worker } 4290*6777b538SAndroid Build Coastguard Worker 4291*6777b538SAndroid Build Coastguard Worker # Create the android_assets target for assets 4292*6777b538SAndroid Build Coastguard Worker if (_use_scanned_assets) { 4293*6777b538SAndroid Build Coastguard Worker _assets_target_name = "${target_name}__assets" 4294*6777b538SAndroid Build Coastguard Worker android_assets(_assets_target_name) { 4295*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 4296*6777b538SAndroid Build Coastguard Worker deps = [ ":$_unpack_target_name" ] 4297*6777b538SAndroid Build Coastguard Worker renaming_sources = [] 4298*6777b538SAndroid Build Coastguard Worker renaming_destinations = [] 4299*6777b538SAndroid Build Coastguard Worker foreach(_asset_file, _scanned_files.assets) { 4300*6777b538SAndroid Build Coastguard Worker _original_path = 4301*6777b538SAndroid Build Coastguard Worker get_path_info(rebase_path(_asset_file, "", _output_path), 4302*6777b538SAndroid Build Coastguard Worker "abspath") 4303*6777b538SAndroid Build Coastguard Worker _updated_path = string_replace(_asset_file, "assets/", "", 1) 4304*6777b538SAndroid Build Coastguard Worker renaming_sources += [ _original_path ] 4305*6777b538SAndroid Build Coastguard Worker renaming_destinations += [ _updated_path ] 4306*6777b538SAndroid Build Coastguard Worker } 4307*6777b538SAndroid Build Coastguard Worker } 4308*6777b538SAndroid Build Coastguard Worker } 4309*6777b538SAndroid Build Coastguard Worker 4310*6777b538SAndroid Build Coastguard Worker _target_label = get_label_info(":$target_name", "label_no_toolchain") 4311*6777b538SAndroid Build Coastguard Worker 4312*6777b538SAndroid Build Coastguard Worker # Create android_java_prebuilt target for classes.jar. 4313*6777b538SAndroid Build Coastguard Worker if (_scanned_files.has_classes_jar) { 4314*6777b538SAndroid Build Coastguard Worker _java_library_vars = [ 4315*6777b538SAndroid Build Coastguard Worker "alternative_android_sdk_dep", 4316*6777b538SAndroid Build Coastguard Worker "bytecode_rewriter_target", 4317*6777b538SAndroid Build Coastguard Worker "enable_bytecode_checks", 4318*6777b538SAndroid Build Coastguard Worker "jar_excluded_patterns", 4319*6777b538SAndroid Build Coastguard Worker "jar_included_patterns", 4320*6777b538SAndroid Build Coastguard Worker "missing_classes_allowlist", 4321*6777b538SAndroid Build Coastguard Worker "requires_android", 4322*6777b538SAndroid Build Coastguard Worker "testonly", 4323*6777b538SAndroid Build Coastguard Worker ] 4324*6777b538SAndroid Build Coastguard Worker 4325*6777b538SAndroid Build Coastguard Worker # Create android_java_prebuilt target for extra jars within jars/. 4326*6777b538SAndroid Build Coastguard Worker _subjar_targets = [] 4327*6777b538SAndroid Build Coastguard Worker foreach(_tuple, _scanned_files.subjar_tuples) { 4328*6777b538SAndroid Build Coastguard Worker _current_target = "${target_name}__subjar_${_tuple[0]}" 4329*6777b538SAndroid Build Coastguard Worker _subjar_targets += [ ":$_current_target" ] 4330*6777b538SAndroid Build Coastguard Worker java_prebuilt(_current_target) { 4331*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, _java_library_vars) 4332*6777b538SAndroid Build Coastguard Worker deps = _common_deps 4333*6777b538SAndroid Build Coastguard Worker if (!defined(requires_android)) { 4334*6777b538SAndroid Build Coastguard Worker requires_android = true 4335*6777b538SAndroid Build Coastguard Worker } 4336*6777b538SAndroid Build Coastguard Worker supports_android = true 4337*6777b538SAndroid Build Coastguard Worker jar_path = "$_output_path/${_tuple[1]}" 4338*6777b538SAndroid Build Coastguard Worker _base_output_name = get_path_info(jar_path, "name") 4339*6777b538SAndroid Build Coastguard Worker output_name = "${invoker.target_name}-$_base_output_name" 4340*6777b538SAndroid Build Coastguard Worker public_target_label = _target_label 4341*6777b538SAndroid Build Coastguard Worker } 4342*6777b538SAndroid Build Coastguard Worker } 4343*6777b538SAndroid Build Coastguard Worker 4344*6777b538SAndroid Build Coastguard Worker _jar_target_name = "${target_name}__classes" 4345*6777b538SAndroid Build Coastguard Worker java_prebuilt(_jar_target_name) { 4346*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, _java_library_vars) 4347*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 4348*6777b538SAndroid Build Coastguard Worker [ 4349*6777b538SAndroid Build Coastguard Worker "input_jars_paths", 4350*6777b538SAndroid Build Coastguard Worker "mergeable_android_manifests", 4351*6777b538SAndroid Build Coastguard Worker "proguard_configs", 4352*6777b538SAndroid Build Coastguard Worker ]) 4353*6777b538SAndroid Build Coastguard Worker deps = _common_deps + _subjar_targets 4354*6777b538SAndroid Build Coastguard Worker if (defined(_res_target_name)) { 4355*6777b538SAndroid Build Coastguard Worker deps += [ ":$_res_target_name" ] 4356*6777b538SAndroid Build Coastguard Worker } 4357*6777b538SAndroid Build Coastguard Worker if (!defined(requires_android)) { 4358*6777b538SAndroid Build Coastguard Worker requires_android = true 4359*6777b538SAndroid Build Coastguard Worker } 4360*6777b538SAndroid Build Coastguard Worker include_java_resources = !defined(invoker.include_java_resources) || 4361*6777b538SAndroid Build Coastguard Worker invoker.include_java_resources 4362*6777b538SAndroid Build Coastguard Worker supports_android = true 4363*6777b538SAndroid Build Coastguard Worker jar_path = "$_output_path/classes.jar" 4364*6777b538SAndroid Build Coastguard Worker aar_path = invoker.aar_path 4365*6777b538SAndroid Build Coastguard Worker output_name = invoker.target_name 4366*6777b538SAndroid Build Coastguard Worker 4367*6777b538SAndroid Build Coastguard Worker if (!_ignore_proguard_configs) { 4368*6777b538SAndroid Build Coastguard Worker if (!defined(proguard_configs)) { 4369*6777b538SAndroid Build Coastguard Worker proguard_configs = [] 4370*6777b538SAndroid Build Coastguard Worker } 4371*6777b538SAndroid Build Coastguard Worker if (_scanned_files.has_proguard_flags) { 4372*6777b538SAndroid Build Coastguard Worker proguard_configs += [ "$_output_path/proguard.txt" ] 4373*6777b538SAndroid Build Coastguard Worker } 4374*6777b538SAndroid Build Coastguard Worker } 4375*6777b538SAndroid Build Coastguard Worker public_target_label = _target_label 4376*6777b538SAndroid Build Coastguard Worker } 4377*6777b538SAndroid Build Coastguard Worker } 4378*6777b538SAndroid Build Coastguard Worker 4379*6777b538SAndroid Build Coastguard Worker java_group(target_name) { 4380*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 4381*6777b538SAndroid Build Coastguard Worker public_deps = [ ":$_unpack_target_name" ] 4382*6777b538SAndroid Build Coastguard Worker if (defined(invoker.public_deps)) { 4383*6777b538SAndroid Build Coastguard Worker public_deps += invoker.public_deps 4384*6777b538SAndroid Build Coastguard Worker } 4385*6777b538SAndroid Build Coastguard Worker deps = [] 4386*6777b538SAndroid Build Coastguard Worker if (defined(_jar_target_name)) { 4387*6777b538SAndroid Build Coastguard Worker deps += [ ":$_jar_target_name" ] 4388*6777b538SAndroid Build Coastguard Worker 4389*6777b538SAndroid Build Coastguard Worker # Although subjars are meant to be private, we add them as deps here 4390*6777b538SAndroid Build Coastguard Worker # because in practice they seem to contain classes required to be in the 4391*6777b538SAndroid Build Coastguard Worker # classpath. 4392*6777b538SAndroid Build Coastguard Worker deps += _subjar_targets 4393*6777b538SAndroid Build Coastguard Worker } 4394*6777b538SAndroid Build Coastguard Worker if (defined(_res_target_name)) { 4395*6777b538SAndroid Build Coastguard Worker deps += [ ":$_res_target_name" ] 4396*6777b538SAndroid Build Coastguard Worker } 4397*6777b538SAndroid Build Coastguard Worker if (defined(_assets_target_name)) { 4398*6777b538SAndroid Build Coastguard Worker deps += [ ":$_assets_target_name" ] 4399*6777b538SAndroid Build Coastguard Worker } 4400*6777b538SAndroid Build Coastguard Worker } 4401*6777b538SAndroid Build Coastguard Worker } 4402*6777b538SAndroid Build Coastguard Worker 4403*6777b538SAndroid Build Coastguard Worker # Create an Android application bundle from one base android_apk target, 4404*6777b538SAndroid Build Coastguard Worker # and zero or more associated android_apk. 4405*6777b538SAndroid Build Coastguard Worker # 4406*6777b538SAndroid Build Coastguard Worker # Variables: 4407*6777b538SAndroid Build Coastguard Worker # base_module_target: Name of the android_app_bundle_module target 4408*6777b538SAndroid Build Coastguard Worker # corresponding to the base module for this application bundle. The 4409*6777b538SAndroid Build Coastguard Worker # bundle file will include the same content in its base module, though in 4410*6777b538SAndroid Build Coastguard Worker # a slightly different format. 4411*6777b538SAndroid Build Coastguard Worker # 4412*6777b538SAndroid Build Coastguard Worker # bundle_base_path: Optional. If set, the bundle will be output to this 4413*6777b538SAndroid Build Coastguard Worker # directory. Defaults to "$root_build_dir/apks". 4414*6777b538SAndroid Build Coastguard Worker # 4415*6777b538SAndroid Build Coastguard Worker # bundle_name: Optional. If set, the bundle will be output to the 4416*6777b538SAndroid Build Coastguard Worker # filename "${bundle_name}.aab". 4417*6777b538SAndroid Build Coastguard Worker # 4418*6777b538SAndroid Build Coastguard Worker # extra_modules: Optional list of scopes, one per extra module used by 4419*6777b538SAndroid Build Coastguard Worker # this bundle. Each scope must have a 'name' field that specifies the 4420*6777b538SAndroid Build Coastguard Worker # module name (which cannot be 'base', since this is reserved for the 4421*6777b538SAndroid Build Coastguard Worker # base module), and an 'apk_target' field that specified the 4422*6777b538SAndroid Build Coastguard Worker # corresponding android_apk target name the module is modeled on. 4423*6777b538SAndroid Build Coastguard Worker # 4424*6777b538SAndroid Build Coastguard Worker # enable_language_splits: Optional. If true, enable APK splits based 4425*6777b538SAndroid Build Coastguard Worker # on languages. 4426*6777b538SAndroid Build Coastguard Worker # 4427*6777b538SAndroid Build Coastguard Worker # keystore_path: optional keystore path, used only when generating APKs. 4428*6777b538SAndroid Build Coastguard Worker # keystore_name: optional keystore name, used only when generating APKs. 4429*6777b538SAndroid Build Coastguard Worker # keystore_password: optional keystore password, used only when 4430*6777b538SAndroid Build Coastguard Worker # generating APKs. 4431*6777b538SAndroid Build Coastguard Worker # rotation_config: optional .textproto to enable key rotation. 4432*6777b538SAndroid Build Coastguard Worker # 4433*6777b538SAndroid Build Coastguard Worker # command_line_flags_file: Optional. If provided, named of the on-device 4434*6777b538SAndroid Build Coastguard Worker # file that will be used to store command-line arguments. The default 4435*6777b538SAndroid Build Coastguard Worker # is 'command_line_flags_file', but this is typically redefined to 4436*6777b538SAndroid Build Coastguard Worker # something more specific for certain bundles (e.g. the Chromium based 4437*6777b538SAndroid Build Coastguard Worker # APKs use 'chrome-command-line', the WebView one uses 4438*6777b538SAndroid Build Coastguard Worker # 'webview-command-line'). 4439*6777b538SAndroid Build Coastguard Worker # 4440*6777b538SAndroid Build Coastguard Worker # proguard_enabled: Optional. True if proguarding is enabled for this 4441*6777b538SAndroid Build Coastguard Worker # bundle. Default is to enable this only for release builds. Note that 4442*6777b538SAndroid Build Coastguard Worker # this will always perform synchronized proguarding. 4443*6777b538SAndroid Build Coastguard Worker # 4444*6777b538SAndroid Build Coastguard Worker # proguard_enable_obfuscation: Whether to enable obfuscation (default=true) 4445*6777b538SAndroid Build Coastguard Worker # 4446*6777b538SAndroid Build Coastguard Worker # proguard_android_sdk_dep: Optional. android_system_java_prebuilt() target 4447*6777b538SAndroid Build Coastguard Worker # used as a library jar for synchronized proguarding. 4448*6777b538SAndroid Build Coastguard Worker # 4449*6777b538SAndroid Build Coastguard Worker # system_image_locale_allowlist: List of locales that should be included 4450*6777b538SAndroid Build Coastguard Worker # on system APKs generated from this bundle. 4451*6777b538SAndroid Build Coastguard Worker # 4452*6777b538SAndroid Build Coastguard Worker # static_library_provider: Specifies a single target that this target will 4453*6777b538SAndroid Build Coastguard Worker # use as a static library APK. 4454*6777b538SAndroid Build Coastguard Worker # 4455*6777b538SAndroid Build Coastguard Worker # expected_libs_and_assets: Verify the list of included native libraries 4456*6777b538SAndroid Build Coastguard Worker # and assets is consistent with the given expectation file. 4457*6777b538SAndroid Build Coastguard Worker # expected_libs_and_assets_base: Treat expected_libs_and_assets as a diff 4458*6777b538SAndroid Build Coastguard Worker # with this file as the base. 4459*6777b538SAndroid Build Coastguard Worker # expected_proguard_config: Checks that the merged set of proguard flags 4460*6777b538SAndroid Build Coastguard Worker # matches the given config. 4461*6777b538SAndroid Build Coastguard Worker # expected_proguard_config_base: Treat expected_proguard_config as a diff 4462*6777b538SAndroid Build Coastguard Worker # with this file as the base. 4463*6777b538SAndroid Build Coastguard Worker # 4464*6777b538SAndroid Build Coastguard Worker # version_code: Optional. Version code of the target. 4465*6777b538SAndroid Build Coastguard Worker # 4466*6777b538SAndroid Build Coastguard Worker # is_multi_abi: If true will add a library placeholder for the missing ABI 4467*6777b538SAndroid Build Coastguard Worker # if either the primary or the secondary ABI has no native libraries set. 4468*6777b538SAndroid Build Coastguard Worker # 4469*6777b538SAndroid Build Coastguard Worker # default_modules_for_testing: (optional): A list of DFM that the wrapper 4470*6777b538SAndroid Build Coastguard Worker # script should install. This is for local testing only, and does not 4471*6777b538SAndroid Build Coastguard Worker # affect the actual DFM in production. 4472*6777b538SAndroid Build Coastguard Worker # 4473*6777b538SAndroid Build Coastguard Worker # add_view_trace_events: (optional): If true will add an additional step to 4474*6777b538SAndroid Build Coastguard Worker # add trace events to all Android views contained in the bundle. It also 4475*6777b538SAndroid Build Coastguard Worker # requires build argument enable_trace_event_bytecode_rewriting = true. 4476*6777b538SAndroid Build Coastguard Worker # 4477*6777b538SAndroid Build Coastguard Worker # Example: 4478*6777b538SAndroid Build Coastguard Worker # android_app_bundle("chrome_public_bundle") { 4479*6777b538SAndroid Build Coastguard Worker # base_module_target = "//chrome/android:chrome_public_apk" 4480*6777b538SAndroid Build Coastguard Worker # extra_modules = [ 4481*6777b538SAndroid Build Coastguard Worker # { # NOTE: Scopes require one field per line, and no comma separators. 4482*6777b538SAndroid Build Coastguard Worker # name = "my_module" 4483*6777b538SAndroid Build Coastguard Worker # module_target = ":my_module" 4484*6777b538SAndroid Build Coastguard Worker # }, 4485*6777b538SAndroid Build Coastguard Worker # ] 4486*6777b538SAndroid Build Coastguard Worker # } 4487*6777b538SAndroid Build Coastguard Worker # 4488*6777b538SAndroid Build Coastguard Worker template("android_app_bundle") { 4489*6777b538SAndroid Build Coastguard Worker _target_name = target_name 4490*6777b538SAndroid Build Coastguard Worker _uses_static_library = defined(invoker.static_library_provider) 4491*6777b538SAndroid Build Coastguard Worker _proguard_enabled = 4492*6777b538SAndroid Build Coastguard Worker defined(invoker.proguard_enabled) && invoker.proguard_enabled 4493*6777b538SAndroid Build Coastguard Worker 4494*6777b538SAndroid Build Coastguard Worker _min_sdk_version = default_min_sdk_version 4495*6777b538SAndroid Build Coastguard Worker if (defined(invoker.min_sdk_version)) { 4496*6777b538SAndroid Build Coastguard Worker _min_sdk_version = invoker.min_sdk_version 4497*6777b538SAndroid Build Coastguard Worker } 4498*6777b538SAndroid Build Coastguard Worker 4499*6777b538SAndroid Build Coastguard Worker _bundle_base_path = "$root_build_dir/apks" 4500*6777b538SAndroid Build Coastguard Worker if (defined(invoker.bundle_base_path)) { 4501*6777b538SAndroid Build Coastguard Worker _bundle_base_path = invoker.bundle_base_path 4502*6777b538SAndroid Build Coastguard Worker } 4503*6777b538SAndroid Build Coastguard Worker 4504*6777b538SAndroid Build Coastguard Worker _bundle_name = _target_name 4505*6777b538SAndroid Build Coastguard Worker if (defined(invoker.bundle_name)) { 4506*6777b538SAndroid Build Coastguard Worker _bundle_name = invoker.bundle_name 4507*6777b538SAndroid Build Coastguard Worker } 4508*6777b538SAndroid Build Coastguard Worker _bundle_path = "$_bundle_base_path/${_bundle_name}.aab" 4509*6777b538SAndroid Build Coastguard Worker _rebased_bundle_path = rebase_path(_bundle_path, root_build_dir) 4510*6777b538SAndroid Build Coastguard Worker 4511*6777b538SAndroid Build Coastguard Worker _base_target_name = get_label_info(invoker.base_module_target, "name") 4512*6777b538SAndroid Build Coastguard Worker _base_target_gen_dir = 4513*6777b538SAndroid Build Coastguard Worker get_label_info(invoker.base_module_target, "target_gen_dir") 4514*6777b538SAndroid Build Coastguard Worker _base_module_build_config = 4515*6777b538SAndroid Build Coastguard Worker "$_base_target_gen_dir/${_base_target_name}.build_config.json" 4516*6777b538SAndroid Build Coastguard Worker _base_module_build_config_target = 4517*6777b538SAndroid Build Coastguard Worker "${invoker.base_module_target}$build_config_target_suffix" 4518*6777b538SAndroid Build Coastguard Worker _rebased_base_module_build_config = 4519*6777b538SAndroid Build Coastguard Worker rebase_path(_base_module_build_config, root_build_dir) 4520*6777b538SAndroid Build Coastguard Worker 4521*6777b538SAndroid Build Coastguard Worker _modules = [ 4522*6777b538SAndroid Build Coastguard Worker { 4523*6777b538SAndroid Build Coastguard Worker name = "base" 4524*6777b538SAndroid Build Coastguard Worker module_target = invoker.base_module_target 4525*6777b538SAndroid Build Coastguard Worker build_config = _base_module_build_config 4526*6777b538SAndroid Build Coastguard Worker build_config_target = _base_module_build_config_target 4527*6777b538SAndroid Build Coastguard Worker if (_uses_static_library) { 4528*6777b538SAndroid Build Coastguard Worker parent = "lib" 4529*6777b538SAndroid Build Coastguard Worker } 4530*6777b538SAndroid Build Coastguard Worker }, 4531*6777b538SAndroid Build Coastguard Worker ] 4532*6777b538SAndroid Build Coastguard Worker 4533*6777b538SAndroid Build Coastguard Worker if (_proguard_enabled) { 4534*6777b538SAndroid Build Coastguard Worker _dex_target = "${_target_name}__dex" 4535*6777b538SAndroid Build Coastguard Worker _proguard_mapping_path = "${_bundle_path}.mapping" 4536*6777b538SAndroid Build Coastguard Worker } 4537*6777b538SAndroid Build Coastguard Worker 4538*6777b538SAndroid Build Coastguard Worker if (defined(invoker.extra_modules)) { 4539*6777b538SAndroid Build Coastguard Worker _module_count = 0 4540*6777b538SAndroid Build Coastguard Worker not_needed([ "_module_count" ]) 4541*6777b538SAndroid Build Coastguard Worker 4542*6777b538SAndroid Build Coastguard Worker foreach(_module, invoker.extra_modules) { 4543*6777b538SAndroid Build Coastguard Worker _module_count += 1 4544*6777b538SAndroid Build Coastguard Worker assert(defined(_module.name), 4545*6777b538SAndroid Build Coastguard Worker "Missing 'name' field for extra module #${_module_count}.") 4546*6777b538SAndroid Build Coastguard Worker assert(_module.name != "base", 4547*6777b538SAndroid Build Coastguard Worker "Module name 'base' is reserved for the main bundle module") 4548*6777b538SAndroid Build Coastguard Worker assert( 4549*6777b538SAndroid Build Coastguard Worker defined(_module.module_target), 4550*6777b538SAndroid Build Coastguard Worker "Missing 'module_target' field for extra module ${_module.name}.") 4551*6777b538SAndroid Build Coastguard Worker _module_target = _module.module_target 4552*6777b538SAndroid Build Coastguard Worker _module_target_name = get_label_info(_module_target, "name") 4553*6777b538SAndroid Build Coastguard Worker _module_target_gen_dir = 4554*6777b538SAndroid Build Coastguard Worker get_label_info(_module_target, "target_gen_dir") 4555*6777b538SAndroid Build Coastguard Worker _module.build_config = 4556*6777b538SAndroid Build Coastguard Worker "$_module_target_gen_dir/${_module_target_name}.build_config.json" 4557*6777b538SAndroid Build Coastguard Worker _module.build_config_target = 4558*6777b538SAndroid Build Coastguard Worker "$_module_target$build_config_target_suffix" 4559*6777b538SAndroid Build Coastguard Worker _module.parent = "base" 4560*6777b538SAndroid Build Coastguard Worker _modules += [ _module ] 4561*6777b538SAndroid Build Coastguard Worker } 4562*6777b538SAndroid Build Coastguard Worker } 4563*6777b538SAndroid Build Coastguard Worker 4564*6777b538SAndroid Build Coastguard Worker # Make build config, which is required for synchronized proguarding. 4565*6777b538SAndroid Build Coastguard Worker _module_java_targets = [] 4566*6777b538SAndroid Build Coastguard Worker _module_build_configs = [] 4567*6777b538SAndroid Build Coastguard Worker _module_targets = [] 4568*6777b538SAndroid Build Coastguard Worker foreach(_module, _modules) { 4569*6777b538SAndroid Build Coastguard Worker _module_targets += [ _module.module_target ] 4570*6777b538SAndroid Build Coastguard Worker _module_java_targets += [ "${_module.module_target}__java" ] 4571*6777b538SAndroid Build Coastguard Worker _module_build_configs += [ _module.build_config ] 4572*6777b538SAndroid Build Coastguard Worker } 4573*6777b538SAndroid Build Coastguard Worker 4574*6777b538SAndroid Build Coastguard Worker # Used to expose the module Java targets of the bundle. 4575*6777b538SAndroid Build Coastguard Worker group("${_target_name}__java") { 4576*6777b538SAndroid Build Coastguard Worker deps = _module_java_targets 4577*6777b538SAndroid Build Coastguard Worker } 4578*6777b538SAndroid Build Coastguard Worker group("${_target_name}__compile_resources") { 4579*6777b538SAndroid Build Coastguard Worker deps = [ "${invoker.base_module_target}__compile_resources" ] 4580*6777b538SAndroid Build Coastguard Worker } 4581*6777b538SAndroid Build Coastguard Worker 4582*6777b538SAndroid Build Coastguard Worker _build_config = "$target_gen_dir/${_target_name}.build_config.json" 4583*6777b538SAndroid Build Coastguard Worker _rebased_build_config = rebase_path(_build_config, root_build_dir) 4584*6777b538SAndroid Build Coastguard Worker _build_config_target = "$_target_name$build_config_target_suffix" 4585*6777b538SAndroid Build Coastguard Worker if (defined(invoker.proguard_android_sdk_dep)) { 4586*6777b538SAndroid Build Coastguard Worker _android_sdk_dep = invoker.proguard_android_sdk_dep 4587*6777b538SAndroid Build Coastguard Worker } else { 4588*6777b538SAndroid Build Coastguard Worker _android_sdk_dep = default_android_sdk_dep 4589*6777b538SAndroid Build Coastguard Worker } 4590*6777b538SAndroid Build Coastguard Worker 4591*6777b538SAndroid Build Coastguard Worker if (_proguard_enabled) { 4592*6777b538SAndroid Build Coastguard Worker _proguard_mapping_path = "${_bundle_path}.mapping" 4593*6777b538SAndroid Build Coastguard Worker _add_view_trace_events = 4594*6777b538SAndroid Build Coastguard Worker defined(invoker.add_view_trace_events) && 4595*6777b538SAndroid Build Coastguard Worker invoker.add_view_trace_events && enable_trace_event_bytecode_rewriting 4596*6777b538SAndroid Build Coastguard Worker } else { 4597*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "add_view_trace_events" ]) 4598*6777b538SAndroid Build Coastguard Worker } 4599*6777b538SAndroid Build Coastguard Worker 4600*6777b538SAndroid Build Coastguard Worker write_build_config(_build_config_target) { 4601*6777b538SAndroid Build Coastguard Worker type = "android_app_bundle" 4602*6777b538SAndroid Build Coastguard Worker possible_config_deps = _module_targets + [ _android_sdk_dep ] 4603*6777b538SAndroid Build Coastguard Worker build_config = _build_config 4604*6777b538SAndroid Build Coastguard Worker proguard_enabled = _proguard_enabled 4605*6777b538SAndroid Build Coastguard Worker module_build_configs = _module_build_configs 4606*6777b538SAndroid Build Coastguard Worker modules = _modules 4607*6777b538SAndroid Build Coastguard Worker 4608*6777b538SAndroid Build Coastguard Worker if (_proguard_enabled) { 4609*6777b538SAndroid Build Coastguard Worker add_view_trace_events = _add_view_trace_events 4610*6777b538SAndroid Build Coastguard Worker proguard_mapping_path = _proguard_mapping_path 4611*6777b538SAndroid Build Coastguard Worker } 4612*6777b538SAndroid Build Coastguard Worker } 4613*6777b538SAndroid Build Coastguard Worker 4614*6777b538SAndroid Build Coastguard Worker # Old name for variable, mark as not_needed while it is being renamed 4615*6777b538SAndroid Build Coastguard Worker # downstream. Remove after all references to baseline_profile_path have been 4616*6777b538SAndroid Build Coastguard Worker # changed. 4617*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "baseline_profile_path" ]) 4618*6777b538SAndroid Build Coastguard Worker 4619*6777b538SAndroid Build Coastguard Worker _enable_art_profile_optimizations = 4620*6777b538SAndroid Build Coastguard Worker defined(invoker.art_profile_path) && _proguard_enabled 4621*6777b538SAndroid Build Coastguard Worker 4622*6777b538SAndroid Build Coastguard Worker if (_enable_art_profile_optimizations) { 4623*6777b538SAndroid Build Coastguard Worker _include_baseline_profile = enable_baseline_profiles 4624*6777b538SAndroid Build Coastguard Worker _enable_startup_profile = enable_startup_profiles 4625*6777b538SAndroid Build Coastguard Worker if (_include_baseline_profile) { 4626*6777b538SAndroid Build Coastguard Worker _obfuscated_art_profile = 4627*6777b538SAndroid Build Coastguard Worker "$target_out_dir/${target_name}.obfuscated.hrf" 4628*6777b538SAndroid Build Coastguard Worker } 4629*6777b538SAndroid Build Coastguard Worker } else { 4630*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "art_profile_path" ]) 4631*6777b538SAndroid Build Coastguard Worker } 4632*6777b538SAndroid Build Coastguard Worker 4633*6777b538SAndroid Build Coastguard Worker if (_proguard_enabled) { 4634*6777b538SAndroid Build Coastguard Worker if (_add_view_trace_events) { 4635*6777b538SAndroid Build Coastguard Worker _trace_event_rewriter_target = 4636*6777b538SAndroid Build Coastguard Worker "//build/android/bytecode:trace_event_adder" 4637*6777b538SAndroid Build Coastguard Worker _rewritten_jar_target_name = "${target_name}__trace_event_rewritten" 4638*6777b538SAndroid Build Coastguard Worker _rewriter_path = root_build_dir + "/bin/helper/trace_event_adder" 4639*6777b538SAndroid Build Coastguard Worker _stamp = "${target_out_dir}/${target_name}.trace_event_rewrite.stamp" 4640*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_rewritten_jar_target_name) { 4641*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/trace_event_bytecode_rewriter.py" 4642*6777b538SAndroid Build Coastguard Worker inputs = java_paths_for_inputs + [ 4643*6777b538SAndroid Build Coastguard Worker _rewriter_path, 4644*6777b538SAndroid Build Coastguard Worker _build_config, 4645*6777b538SAndroid Build Coastguard Worker ] 4646*6777b538SAndroid Build Coastguard Worker outputs = [ _stamp ] 4647*6777b538SAndroid Build Coastguard Worker depfile = "$target_gen_dir/$_rewritten_jar_target_name.d" 4648*6777b538SAndroid Build Coastguard Worker args = [ 4649*6777b538SAndroid Build Coastguard Worker "--stamp", 4650*6777b538SAndroid Build Coastguard Worker rebase_path(_stamp, root_build_dir), 4651*6777b538SAndroid Build Coastguard Worker "--depfile", 4652*6777b538SAndroid Build Coastguard Worker rebase_path(depfile, root_build_dir), 4653*6777b538SAndroid Build Coastguard Worker "--script", 4654*6777b538SAndroid Build Coastguard Worker rebase_path(_rewriter_path, root_build_dir), 4655*6777b538SAndroid Build Coastguard Worker "--classpath", 4656*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_build_config:android:sdk_jars)", 4657*6777b538SAndroid Build Coastguard Worker "--input-jars", 4658*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_build_config:deps_info:device_classpath)", 4659*6777b538SAndroid Build Coastguard Worker "--output-jars", 4660*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_build_config:deps_info:trace_event_rewritten_device_classpath)", 4661*6777b538SAndroid Build Coastguard Worker ] 4662*6777b538SAndroid Build Coastguard Worker deps = [ 4663*6777b538SAndroid Build Coastguard Worker ":$_build_config_target", 4664*6777b538SAndroid Build Coastguard Worker _trace_event_rewriter_target, 4665*6777b538SAndroid Build Coastguard Worker ] + _module_java_targets 4666*6777b538SAndroid Build Coastguard Worker } 4667*6777b538SAndroid Build Coastguard Worker } 4668*6777b538SAndroid Build Coastguard Worker 4669*6777b538SAndroid Build Coastguard Worker dex(_dex_target) { 4670*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 4671*6777b538SAndroid Build Coastguard Worker [ 4672*6777b538SAndroid Build Coastguard Worker "custom_assertion_handler", 4673*6777b538SAndroid Build Coastguard Worker "expected_proguard_config", 4674*6777b538SAndroid Build Coastguard Worker "expected_proguard_config_base", 4675*6777b538SAndroid Build Coastguard Worker "proguard_enable_obfuscation", 4676*6777b538SAndroid Build Coastguard Worker "repackage_classes", 4677*6777b538SAndroid Build Coastguard Worker ]) 4678*6777b538SAndroid Build Coastguard Worker if (defined(expected_proguard_config)) { 4679*6777b538SAndroid Build Coastguard Worker top_target_name = _target_name 4680*6777b538SAndroid Build Coastguard Worker } 4681*6777b538SAndroid Build Coastguard Worker min_sdk_version = _min_sdk_version 4682*6777b538SAndroid Build Coastguard Worker add_view_trace_events = _add_view_trace_events 4683*6777b538SAndroid Build Coastguard Worker proguard_enabled = true 4684*6777b538SAndroid Build Coastguard Worker proguard_mapping_path = _proguard_mapping_path 4685*6777b538SAndroid Build Coastguard Worker build_config = _build_config 4686*6777b538SAndroid Build Coastguard Worker if (_enable_art_profile_optimizations) { 4687*6777b538SAndroid Build Coastguard Worker input_art_profile = invoker.art_profile_path 4688*6777b538SAndroid Build Coastguard Worker if (_include_baseline_profile) { 4689*6777b538SAndroid Build Coastguard Worker output_art_profile = _obfuscated_art_profile 4690*6777b538SAndroid Build Coastguard Worker } 4691*6777b538SAndroid Build Coastguard Worker enable_startup_profile = _enable_startup_profile 4692*6777b538SAndroid Build Coastguard Worker } 4693*6777b538SAndroid Build Coastguard Worker 4694*6777b538SAndroid Build Coastguard Worker deps = _module_java_targets + [ ":$_build_config_target" ] 4695*6777b538SAndroid Build Coastguard Worker if (_add_view_trace_events) { 4696*6777b538SAndroid Build Coastguard Worker deps += [ ":${_rewritten_jar_target_name}" ] 4697*6777b538SAndroid Build Coastguard Worker } 4698*6777b538SAndroid Build Coastguard Worker modules = _modules 4699*6777b538SAndroid Build Coastguard Worker 4700*6777b538SAndroid Build Coastguard Worker # Must not be set via write_build_config, because that will cause it 4701*6777b538SAndroid Build Coastguard Worker # to be picked up by test apks that use apk_under_test. 4702*6777b538SAndroid Build Coastguard Worker _assertions_implicitly_enabled = 4703*6777b538SAndroid Build Coastguard Worker defined(invoker.custom_assertion_handler) 4704*6777b538SAndroid Build Coastguard Worker if (!_assertions_implicitly_enabled && !enable_java_asserts && 4705*6777b538SAndroid Build Coastguard Worker (!defined(testonly) || !testonly) && 4706*6777b538SAndroid Build Coastguard Worker # Injected JaCoCo code causes -checkdiscards to fail. 4707*6777b538SAndroid Build Coastguard Worker !use_jacoco_coverage) { 4708*6777b538SAndroid Build Coastguard Worker proguard_configs = [ 4709*6777b538SAndroid Build Coastguard Worker "//build/android/dcheck_is_off.flags", 4710*6777b538SAndroid Build Coastguard Worker "//third_party/jni_zero/checkdiscard_proguard.flags", 4711*6777b538SAndroid Build Coastguard Worker ] 4712*6777b538SAndroid Build Coastguard Worker } 4713*6777b538SAndroid Build Coastguard Worker } 4714*6777b538SAndroid Build Coastguard Worker } 4715*6777b538SAndroid Build Coastguard Worker 4716*6777b538SAndroid Build Coastguard Worker _all_create_module_targets = [] 4717*6777b538SAndroid Build Coastguard Worker _all_module_zip_paths = [] 4718*6777b538SAndroid Build Coastguard Worker _all_module_build_configs = [] 4719*6777b538SAndroid Build Coastguard Worker _all_module_unused_resources_deps = [] 4720*6777b538SAndroid Build Coastguard Worker foreach(_module, _modules) { 4721*6777b538SAndroid Build Coastguard Worker _module_target = _module.module_target 4722*6777b538SAndroid Build Coastguard Worker _module_build_config = _module.build_config 4723*6777b538SAndroid Build Coastguard Worker _module_build_config_target = _module.build_config_target 4724*6777b538SAndroid Build Coastguard Worker 4725*6777b538SAndroid Build Coastguard Worker if (!_proguard_enabled) { 4726*6777b538SAndroid Build Coastguard Worker _module_target_name = get_label_info(_module_target, "name") 4727*6777b538SAndroid Build Coastguard Worker _dex_target = "${_module_target_name}__final_dex" 4728*6777b538SAndroid Build Coastguard Worker _dex_path = "$target_out_dir/$_module_target_name/$_module_target_name.mergeddex.jar" 4729*6777b538SAndroid Build Coastguard Worker dex(_dex_target) { 4730*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "custom_assertion_handler" ]) 4731*6777b538SAndroid Build Coastguard Worker min_sdk_version = _min_sdk_version 4732*6777b538SAndroid Build Coastguard Worker output = _dex_path 4733*6777b538SAndroid Build Coastguard Worker build_config = _build_config 4734*6777b538SAndroid Build Coastguard Worker 4735*6777b538SAndroid Build Coastguard Worker # This will be a pure dex-merge. 4736*6777b538SAndroid Build Coastguard Worker input_dex_filearg = "@FileArg($_rebased_build_config:modules:${_module.name}:all_dex_files)" 4737*6777b538SAndroid Build Coastguard Worker enable_desugar = false 4738*6777b538SAndroid Build Coastguard Worker 4739*6777b538SAndroid Build Coastguard Worker deps = [ 4740*6777b538SAndroid Build Coastguard Worker ":$_build_config_target", 4741*6777b538SAndroid Build Coastguard Worker ":${_module_target_name}__java", 4742*6777b538SAndroid Build Coastguard Worker ] 4743*6777b538SAndroid Build Coastguard Worker } 4744*6777b538SAndroid Build Coastguard Worker } 4745*6777b538SAndroid Build Coastguard Worker _dex_target_for_module = ":$_dex_target" 4746*6777b538SAndroid Build Coastguard Worker 4747*6777b538SAndroid Build Coastguard Worker if (_enable_art_profile_optimizations && _include_baseline_profile) { 4748*6777b538SAndroid Build Coastguard Worker _module_target_name = get_label_info(_module_target, "name") 4749*6777b538SAndroid Build Coastguard Worker _binary_profile_target = 4750*6777b538SAndroid Build Coastguard Worker "${_module_target_name}__binary_baseline_profile" 4751*6777b538SAndroid Build Coastguard Worker _binary_baseline_profile_path = "$target_out_dir/$_module_target_name/$_module_target_name.baseline.prof" 4752*6777b538SAndroid Build Coastguard Worker _binary_baseline_profile_metadata_path = 4753*6777b538SAndroid Build Coastguard Worker _binary_baseline_profile_path + "m" 4754*6777b538SAndroid Build Coastguard Worker create_binary_profile(_binary_profile_target) { 4755*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 4756*6777b538SAndroid Build Coastguard Worker binary_baseline_profile_path = _binary_baseline_profile_path 4757*6777b538SAndroid Build Coastguard Worker binary_baseline_profile_metadata_path = 4758*6777b538SAndroid Build Coastguard Worker _binary_baseline_profile_metadata_path 4759*6777b538SAndroid Build Coastguard Worker build_config = _module_build_config 4760*6777b538SAndroid Build Coastguard Worker input_profile_path = _obfuscated_art_profile 4761*6777b538SAndroid Build Coastguard Worker deps = [ 4762*6777b538SAndroid Build Coastguard Worker _dex_target_for_module, 4763*6777b538SAndroid Build Coastguard Worker _module_build_config_target, 4764*6777b538SAndroid Build Coastguard Worker ] 4765*6777b538SAndroid Build Coastguard Worker } 4766*6777b538SAndroid Build Coastguard Worker } 4767*6777b538SAndroid Build Coastguard Worker 4768*6777b538SAndroid Build Coastguard Worker # Generate one module .zip file per bundle module. 4769*6777b538SAndroid Build Coastguard Worker # 4770*6777b538SAndroid Build Coastguard Worker # Important: the bundle tool uses the module's zip filename as 4771*6777b538SAndroid Build Coastguard Worker # the internal module name inside the final bundle, in other words, 4772*6777b538SAndroid Build Coastguard Worker # this file *must* be named ${_module.name}.zip 4773*6777b538SAndroid Build Coastguard Worker _create_module_target = "${_target_name}__${_module.name}__create" 4774*6777b538SAndroid Build Coastguard Worker _module_zip_path = "$target_out_dir/$target_name/${_module.name}.zip" 4775*6777b538SAndroid Build Coastguard Worker create_android_app_bundle_module(_create_module_target) { 4776*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 4777*6777b538SAndroid Build Coastguard Worker [ 4778*6777b538SAndroid Build Coastguard Worker "is_multi_abi", 4779*6777b538SAndroid Build Coastguard Worker "uncompress_dex", 4780*6777b538SAndroid Build Coastguard Worker ]) 4781*6777b538SAndroid Build Coastguard Worker module_name = _module.name 4782*6777b538SAndroid Build Coastguard Worker min_sdk_version = _min_sdk_version 4783*6777b538SAndroid Build Coastguard Worker build_config = _module_build_config 4784*6777b538SAndroid Build Coastguard Worker module_zip_path = _module_zip_path 4785*6777b538SAndroid Build Coastguard Worker if (!_proguard_enabled) { 4786*6777b538SAndroid Build Coastguard Worker dex_path = _dex_path 4787*6777b538SAndroid Build Coastguard Worker # dex_path is read from the build_config in the proguard case. 4788*6777b538SAndroid Build Coastguard Worker } 4789*6777b538SAndroid Build Coastguard Worker 4790*6777b538SAndroid Build Coastguard Worker if (module_name == "base" && 4791*6777b538SAndroid Build Coastguard Worker defined(invoker.expected_libs_and_assets)) { 4792*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 4793*6777b538SAndroid Build Coastguard Worker [ 4794*6777b538SAndroid Build Coastguard Worker "expected_libs_and_assets", 4795*6777b538SAndroid Build Coastguard Worker "expected_libs_and_assets_base", 4796*6777b538SAndroid Build Coastguard Worker ]) 4797*6777b538SAndroid Build Coastguard Worker top_target_name = _target_name 4798*6777b538SAndroid Build Coastguard Worker build_config_target = _module_build_config_target 4799*6777b538SAndroid Build Coastguard Worker } 4800*6777b538SAndroid Build Coastguard Worker 4801*6777b538SAndroid Build Coastguard Worker deps = [ 4802*6777b538SAndroid Build Coastguard Worker _dex_target_for_module, 4803*6777b538SAndroid Build Coastguard Worker _module_build_config_target, 4804*6777b538SAndroid Build Coastguard Worker _module_target, 4805*6777b538SAndroid Build Coastguard Worker ] 4806*6777b538SAndroid Build Coastguard Worker 4807*6777b538SAndroid Build Coastguard Worker if (_enable_art_profile_optimizations && _include_baseline_profile) { 4808*6777b538SAndroid Build Coastguard Worker # extra_assets is a list of ["{src_path}:{dst_path}"] 4809*6777b538SAndroid Build Coastguard Worker extra_assets = [ 4810*6777b538SAndroid Build Coastguard Worker rebase_path(_binary_baseline_profile_path, root_build_dir) + 4811*6777b538SAndroid Build Coastguard Worker ":dexopt/baseline.prof", 4812*6777b538SAndroid Build Coastguard Worker rebase_path(_binary_baseline_profile_metadata_path, 4813*6777b538SAndroid Build Coastguard Worker root_build_dir) + ":dexopt/baseline.profm", 4814*6777b538SAndroid Build Coastguard Worker ] 4815*6777b538SAndroid Build Coastguard Worker deps += [ ":$_binary_profile_target" ] 4816*6777b538SAndroid Build Coastguard Worker } 4817*6777b538SAndroid Build Coastguard Worker } 4818*6777b538SAndroid Build Coastguard Worker 4819*6777b538SAndroid Build Coastguard Worker _all_create_module_targets += [ 4820*6777b538SAndroid Build Coastguard Worker ":$_create_module_target", 4821*6777b538SAndroid Build Coastguard Worker _module_build_config_target, 4822*6777b538SAndroid Build Coastguard Worker "${_module_target}__compile_resources", 4823*6777b538SAndroid Build Coastguard Worker ] 4824*6777b538SAndroid Build Coastguard Worker _all_module_zip_paths += [ _module_zip_path ] 4825*6777b538SAndroid Build Coastguard Worker _all_module_build_configs += [ _module_build_config ] 4826*6777b538SAndroid Build Coastguard Worker _all_module_unused_resources_deps += [ 4827*6777b538SAndroid Build Coastguard Worker "${_module_target}__compile_resources", 4828*6777b538SAndroid Build Coastguard Worker _dex_target_for_module, 4829*6777b538SAndroid Build Coastguard Worker _module_build_config_target, 4830*6777b538SAndroid Build Coastguard Worker ] 4831*6777b538SAndroid Build Coastguard Worker } 4832*6777b538SAndroid Build Coastguard Worker _strip_unused_resources = defined(invoker.strip_unused_resources) && 4833*6777b538SAndroid Build Coastguard Worker invoker.strip_unused_resources 4834*6777b538SAndroid Build Coastguard Worker if (_strip_unused_resources) { 4835*6777b538SAndroid Build Coastguard Worker # Resources only live in the base module so we define the unused resources 4836*6777b538SAndroid Build Coastguard Worker # target only on the base module target. 4837*6777b538SAndroid Build Coastguard Worker _unused_resources_target = "${_base_target_name}__unused_resources" 4838*6777b538SAndroid Build Coastguard Worker _unused_resources_config = 4839*6777b538SAndroid Build Coastguard Worker "${_base_target_gen_dir}/${_base_target_name}_unused_resources.config" 4840*6777b538SAndroid Build Coastguard Worker _unused_resources_r_txt_out = 4841*6777b538SAndroid Build Coastguard Worker "${_base_target_gen_dir}/${_base_target_name}_unused_resources.R.txt" 4842*6777b538SAndroid Build Coastguard Worker unused_resources(_unused_resources_target) { 4843*6777b538SAndroid Build Coastguard Worker deps = _all_module_unused_resources_deps 4844*6777b538SAndroid Build Coastguard Worker all_module_build_configs = _all_module_build_configs 4845*6777b538SAndroid Build Coastguard Worker build_config = _base_module_build_config 4846*6777b538SAndroid Build Coastguard Worker if (_proguard_enabled) { 4847*6777b538SAndroid Build Coastguard Worker proguard_mapping_path = _proguard_mapping_path 4848*6777b538SAndroid Build Coastguard Worker } 4849*6777b538SAndroid Build Coastguard Worker output_config = _unused_resources_config 4850*6777b538SAndroid Build Coastguard Worker output_r_txt = _unused_resources_r_txt_out 4851*6777b538SAndroid Build Coastguard Worker } 4852*6777b538SAndroid Build Coastguard Worker _unused_resources_final_path = "${_bundle_path}.unused_resources" 4853*6777b538SAndroid Build Coastguard Worker _copy_unused_resources_target = 4854*6777b538SAndroid Build Coastguard Worker "${_base_target_name}__copy_unused_resources" 4855*6777b538SAndroid Build Coastguard Worker copy(_copy_unused_resources_target) { 4856*6777b538SAndroid Build Coastguard Worker deps = [ ":$_unused_resources_target" ] 4857*6777b538SAndroid Build Coastguard Worker sources = [ _unused_resources_config ] 4858*6777b538SAndroid Build Coastguard Worker outputs = [ _unused_resources_final_path ] 4859*6777b538SAndroid Build Coastguard Worker } 4860*6777b538SAndroid Build Coastguard Worker } 4861*6777b538SAndroid Build Coastguard Worker 4862*6777b538SAndroid Build Coastguard Worker _all_rebased_module_zip_paths = 4863*6777b538SAndroid Build Coastguard Worker rebase_path(_all_module_zip_paths, root_build_dir) 4864*6777b538SAndroid Build Coastguard Worker 4865*6777b538SAndroid Build Coastguard Worker _enable_language_splits = defined(invoker.enable_language_splits) && 4866*6777b538SAndroid Build Coastguard Worker invoker.enable_language_splits 4867*6777b538SAndroid Build Coastguard Worker 4868*6777b538SAndroid Build Coastguard Worker _split_dimensions = [] 4869*6777b538SAndroid Build Coastguard Worker if (_enable_language_splits) { 4870*6777b538SAndroid Build Coastguard Worker _split_dimensions += [ "language" ] 4871*6777b538SAndroid Build Coastguard Worker } 4872*6777b538SAndroid Build Coastguard Worker 4873*6777b538SAndroid Build Coastguard Worker _keystore_path = android_keystore_path 4874*6777b538SAndroid Build Coastguard Worker _keystore_password = android_keystore_password 4875*6777b538SAndroid Build Coastguard Worker _keystore_name = android_keystore_name 4876*6777b538SAndroid Build Coastguard Worker 4877*6777b538SAndroid Build Coastguard Worker if (defined(invoker.keystore_path)) { 4878*6777b538SAndroid Build Coastguard Worker _keystore_path = invoker.keystore_path 4879*6777b538SAndroid Build Coastguard Worker _keystore_password = invoker.keystore_password 4880*6777b538SAndroid Build Coastguard Worker _keystore_name = invoker.keystore_name 4881*6777b538SAndroid Build Coastguard Worker } 4882*6777b538SAndroid Build Coastguard Worker 4883*6777b538SAndroid Build Coastguard Worker _rebased_keystore_path = rebase_path(_keystore_path, root_build_dir) 4884*6777b538SAndroid Build Coastguard Worker 4885*6777b538SAndroid Build Coastguard Worker _bundle_target_name = "${_target_name}__bundle" 4886*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_bundle_target_name) { 4887*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/create_app_bundle.py" 4888*6777b538SAndroid Build Coastguard Worker inputs = _all_module_zip_paths + _all_module_build_configs + 4889*6777b538SAndroid Build Coastguard Worker [ _BUNDLETOOL_JAR_PATH ] + java_paths_for_inputs 4890*6777b538SAndroid Build Coastguard Worker outputs = [ _bundle_path ] 4891*6777b538SAndroid Build Coastguard Worker deps = _all_create_module_targets + [ ":$_build_config_target" ] 4892*6777b538SAndroid Build Coastguard Worker args = [ 4893*6777b538SAndroid Build Coastguard Worker "--out-bundle=$_rebased_bundle_path", 4894*6777b538SAndroid Build Coastguard Worker "--rtxt-out-path=$_rebased_bundle_path.R.txt", 4895*6777b538SAndroid Build Coastguard Worker "--pathmap-out-path=$_rebased_bundle_path.pathmap.txt", 4896*6777b538SAndroid Build Coastguard Worker "--module-zips=$_all_rebased_module_zip_paths", 4897*6777b538SAndroid Build Coastguard Worker ] 4898*6777b538SAndroid Build Coastguard Worker if (_split_dimensions != []) { 4899*6777b538SAndroid Build Coastguard Worker args += [ "--split-dimensions=$_split_dimensions" ] 4900*6777b538SAndroid Build Coastguard Worker } 4901*6777b538SAndroid Build Coastguard Worker 4902*6777b538SAndroid Build Coastguard Worker # Android P+ support loading from stored dex. 4903*6777b538SAndroid Build Coastguard Worker if (_min_sdk_version < 27) { 4904*6777b538SAndroid Build Coastguard Worker args += [ "--compress-dex" ] 4905*6777b538SAndroid Build Coastguard Worker } 4906*6777b538SAndroid Build Coastguard Worker 4907*6777b538SAndroid Build Coastguard Worker if (defined(invoker.rotation_config)) { 4908*6777b538SAndroid Build Coastguard Worker args += [ 4909*6777b538SAndroid Build Coastguard Worker "--rotation-config", 4910*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.rotation_config, root_build_dir), 4911*6777b538SAndroid Build Coastguard Worker ] 4912*6777b538SAndroid Build Coastguard Worker } 4913*6777b538SAndroid Build Coastguard Worker 4914*6777b538SAndroid Build Coastguard Worker if (treat_warnings_as_errors) { 4915*6777b538SAndroid Build Coastguard Worker args += [ "--warnings-as-errors" ] 4916*6777b538SAndroid Build Coastguard Worker } 4917*6777b538SAndroid Build Coastguard Worker 4918*6777b538SAndroid Build Coastguard Worker if (_enable_language_splits) { 4919*6777b538SAndroid Build Coastguard Worker args += [ "--base-allowlist-rtxt-path=@FileArg($_rebased_base_module_build_config:deps_info:base_allowlist_rtxt_path)" ] 4920*6777b538SAndroid Build Coastguard Worker if (_strip_unused_resources) { 4921*6777b538SAndroid Build Coastguard Worker # Use the stripped out rtxt file to set resources that are pinned to 4922*6777b538SAndroid Build Coastguard Worker # the default language split. 4923*6777b538SAndroid Build Coastguard Worker _rebased_unused_resources_r_txt_out = 4924*6777b538SAndroid Build Coastguard Worker rebase_path(_unused_resources_r_txt_out, root_build_dir) 4925*6777b538SAndroid Build Coastguard Worker inputs += [ _unused_resources_r_txt_out ] 4926*6777b538SAndroid Build Coastguard Worker deps += [ ":$_unused_resources_target" ] 4927*6777b538SAndroid Build Coastguard Worker args += 4928*6777b538SAndroid Build Coastguard Worker [ "--base-module-rtxt-path=$_rebased_unused_resources_r_txt_out" ] 4929*6777b538SAndroid Build Coastguard Worker } else { 4930*6777b538SAndroid Build Coastguard Worker args += [ "--base-module-rtxt-path=@FileArg($_rebased_base_module_build_config:deps_info:r_text_path)" ] 4931*6777b538SAndroid Build Coastguard Worker } 4932*6777b538SAndroid Build Coastguard Worker } 4933*6777b538SAndroid Build Coastguard Worker if (defined(invoker.validate_services) && invoker.validate_services) { 4934*6777b538SAndroid Build Coastguard Worker args += [ "--validate-services" ] 4935*6777b538SAndroid Build Coastguard Worker } 4936*6777b538SAndroid Build Coastguard Worker 4937*6777b538SAndroid Build Coastguard Worker foreach(_module, _modules) { 4938*6777b538SAndroid Build Coastguard Worker _rebased_build_config = 4939*6777b538SAndroid Build Coastguard Worker rebase_path(_module.build_config, root_build_dir) 4940*6777b538SAndroid Build Coastguard Worker args += [ 4941*6777b538SAndroid Build Coastguard Worker "--uncompressed-assets=@FileArg(" + 4942*6777b538SAndroid Build Coastguard Worker "$_rebased_build_config:uncompressed_assets)", 4943*6777b538SAndroid Build Coastguard Worker "--rtxt-in-paths=@FileArg(" + 4944*6777b538SAndroid Build Coastguard Worker "$_rebased_build_config:deps_info:r_text_path)", 4945*6777b538SAndroid Build Coastguard Worker "--pathmap-in-paths=@FileArg(" + 4946*6777b538SAndroid Build Coastguard Worker "$_rebased_build_config:deps_info:module_pathmap_path)", 4947*6777b538SAndroid Build Coastguard Worker "--module-name=" + _module.name, 4948*6777b538SAndroid Build Coastguard Worker ] 4949*6777b538SAndroid Build Coastguard Worker } 4950*6777b538SAndroid Build Coastguard Worker 4951*6777b538SAndroid Build Coastguard Worker # http://crbug.com/725224. Fix for bots running out of memory. 4952*6777b538SAndroid Build Coastguard Worker if (defined(java_cmd_pool_size)) { 4953*6777b538SAndroid Build Coastguard Worker pool = "//build/config/android:java_cmd_pool($default_toolchain)" 4954*6777b538SAndroid Build Coastguard Worker } else { 4955*6777b538SAndroid Build Coastguard Worker pool = "//build/toolchain:link_pool($default_toolchain)" 4956*6777b538SAndroid Build Coastguard Worker } 4957*6777b538SAndroid Build Coastguard Worker } 4958*6777b538SAndroid Build Coastguard Worker 4959*6777b538SAndroid Build Coastguard Worker # Create size info files for targets that care about size 4960*6777b538SAndroid Build Coastguard Worker # (have proguard enabled). 4961*6777b538SAndroid Build Coastguard Worker if (_proguard_enabled) { 4962*6777b538SAndroid Build Coastguard Worker # Merge all module targets to obtain size info files for all targets. 4963*6777b538SAndroid Build Coastguard Worker _all_module_targets = _module_targets 4964*6777b538SAndroid Build Coastguard Worker 4965*6777b538SAndroid Build Coastguard Worker _size_info_target = "${_target_name}__size_info" 4966*6777b538SAndroid Build Coastguard Worker create_size_info_files(_size_info_target) { 4967*6777b538SAndroid Build Coastguard Worker name = "$_bundle_name.aab" 4968*6777b538SAndroid Build Coastguard Worker deps = _all_module_targets + [ ":$_build_config_target" ] 4969*6777b538SAndroid Build Coastguard Worker module_build_configs = _all_module_build_configs 4970*6777b538SAndroid Build Coastguard Worker } 4971*6777b538SAndroid Build Coastguard Worker } 4972*6777b538SAndroid Build Coastguard Worker 4973*6777b538SAndroid Build Coastguard Worker if (_uses_static_library) { 4974*6777b538SAndroid Build Coastguard Worker _install_artifacts_target = "${target_name}__install_artifacts" 4975*6777b538SAndroid Build Coastguard Worker _install_artifacts_json = 4976*6777b538SAndroid Build Coastguard Worker "${target_gen_dir}/${target_name}.install_artifacts" 4977*6777b538SAndroid Build Coastguard Worker generated_file(_install_artifacts_target) { 4978*6777b538SAndroid Build Coastguard Worker output_conversion = "json" 4979*6777b538SAndroid Build Coastguard Worker deps = [ invoker.static_library_provider ] 4980*6777b538SAndroid Build Coastguard Worker outputs = [ _install_artifacts_json ] 4981*6777b538SAndroid Build Coastguard Worker data_keys = [ "install_artifacts" ] 4982*6777b538SAndroid Build Coastguard Worker rebase = root_build_dir 4983*6777b538SAndroid Build Coastguard Worker } 4984*6777b538SAndroid Build Coastguard Worker } 4985*6777b538SAndroid Build Coastguard Worker 4986*6777b538SAndroid Build Coastguard Worker # Generate a wrapper script for the bundle. 4987*6777b538SAndroid Build Coastguard Worker _android_aapt2_path = android_sdk_tools_bundle_aapt2 4988*6777b538SAndroid Build Coastguard Worker 4989*6777b538SAndroid Build Coastguard Worker _bundle_apks_path = "$_bundle_base_path/$_bundle_name.apks" 4990*6777b538SAndroid Build Coastguard Worker _bundle_wrapper_script_dir = "$root_build_dir/bin" 4991*6777b538SAndroid Build Coastguard Worker _bundle_wrapper_script_path = "$_bundle_wrapper_script_dir/$_target_name" 4992*6777b538SAndroid Build Coastguard Worker 4993*6777b538SAndroid Build Coastguard Worker action_with_pydeps("${_target_name}__wrapper_script") { 4994*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/create_bundle_wrapper_script.py" 4995*6777b538SAndroid Build Coastguard Worker inputs = [ _base_module_build_config ] 4996*6777b538SAndroid Build Coastguard Worker outputs = [ _bundle_wrapper_script_path ] 4997*6777b538SAndroid Build Coastguard Worker 4998*6777b538SAndroid Build Coastguard Worker # Telemetry for bundles uses the wrapper script for installation. 4999*6777b538SAndroid Build Coastguard Worker data = [ 5000*6777b538SAndroid Build Coastguard Worker _bundle_wrapper_script_path, 5001*6777b538SAndroid Build Coastguard Worker _android_aapt2_path, 5002*6777b538SAndroid Build Coastguard Worker _keystore_path, 5003*6777b538SAndroid Build Coastguard Worker _bundle_path, 5004*6777b538SAndroid Build Coastguard Worker ] 5005*6777b538SAndroid Build Coastguard Worker data_deps = [ 5006*6777b538SAndroid Build Coastguard Worker "//build/android:apk_operations_py", 5007*6777b538SAndroid Build Coastguard Worker "//build/android:stack_tools", 5008*6777b538SAndroid Build Coastguard Worker ] 5009*6777b538SAndroid Build Coastguard Worker 5010*6777b538SAndroid Build Coastguard Worker deps = [ _base_module_build_config_target ] 5011*6777b538SAndroid Build Coastguard Worker args = [ 5012*6777b538SAndroid Build Coastguard Worker "--script-output-path", 5013*6777b538SAndroid Build Coastguard Worker rebase_path(_bundle_wrapper_script_path, root_build_dir), 5014*6777b538SAndroid Build Coastguard Worker "--package-name=@FileArg($_rebased_base_module_build_config:deps_info:package_name)", 5015*6777b538SAndroid Build Coastguard Worker "--aapt2", 5016*6777b538SAndroid Build Coastguard Worker rebase_path(_android_aapt2_path, root_build_dir), 5017*6777b538SAndroid Build Coastguard Worker "--bundle-path", 5018*6777b538SAndroid Build Coastguard Worker _rebased_bundle_path, 5019*6777b538SAndroid Build Coastguard Worker "--bundle-apks-path", 5020*6777b538SAndroid Build Coastguard Worker rebase_path(_bundle_apks_path, root_build_dir), 5021*6777b538SAndroid Build Coastguard Worker "--target-cpu=$target_cpu", 5022*6777b538SAndroid Build Coastguard Worker "--keystore-path", 5023*6777b538SAndroid Build Coastguard Worker _rebased_keystore_path, 5024*6777b538SAndroid Build Coastguard Worker "--keystore-password", 5025*6777b538SAndroid Build Coastguard Worker _keystore_password, 5026*6777b538SAndroid Build Coastguard Worker "--key-name", 5027*6777b538SAndroid Build Coastguard Worker _keystore_name, 5028*6777b538SAndroid Build Coastguard Worker ] 5029*6777b538SAndroid Build Coastguard Worker if (defined(invoker.default_modules_for_testing)) { 5030*6777b538SAndroid Build Coastguard Worker args += [ "--default-modules" ] + invoker.default_modules_for_testing 5031*6777b538SAndroid Build Coastguard Worker } 5032*6777b538SAndroid Build Coastguard Worker if (defined(invoker.system_image_locale_allowlist)) { 5033*6777b538SAndroid Build Coastguard Worker args += [ 5034*6777b538SAndroid Build Coastguard Worker "--system-image-locales=${invoker.system_image_locale_allowlist}", 5035*6777b538SAndroid Build Coastguard Worker ] 5036*6777b538SAndroid Build Coastguard Worker } 5037*6777b538SAndroid Build Coastguard Worker if (defined(invoker.command_line_flags_file)) { 5038*6777b538SAndroid Build Coastguard Worker args += [ 5039*6777b538SAndroid Build Coastguard Worker "--command-line-flags-file", 5040*6777b538SAndroid Build Coastguard Worker invoker.command_line_flags_file, 5041*6777b538SAndroid Build Coastguard Worker ] 5042*6777b538SAndroid Build Coastguard Worker } 5043*6777b538SAndroid Build Coastguard Worker if (_uses_static_library) { 5044*6777b538SAndroid Build Coastguard Worker deps += [ ":$_install_artifacts_target" ] 5045*6777b538SAndroid Build Coastguard Worker _rebased_install_artifacts_json = 5046*6777b538SAndroid Build Coastguard Worker rebase_path(_install_artifacts_json, root_build_dir) 5047*6777b538SAndroid Build Coastguard Worker _static_library_apk_path = 5048*6777b538SAndroid Build Coastguard Worker "@FileArg($_rebased_install_artifacts_json[])" 5049*6777b538SAndroid Build Coastguard Worker args += [ 5050*6777b538SAndroid Build Coastguard Worker "--additional-apk", 5051*6777b538SAndroid Build Coastguard Worker _static_library_apk_path, 5052*6777b538SAndroid Build Coastguard Worker ] 5053*6777b538SAndroid Build Coastguard Worker } 5054*6777b538SAndroid Build Coastguard Worker 5055*6777b538SAndroid Build Coastguard Worker if (_proguard_enabled) { 5056*6777b538SAndroid Build Coastguard Worker args += [ 5057*6777b538SAndroid Build Coastguard Worker "--proguard-mapping-path", 5058*6777b538SAndroid Build Coastguard Worker rebase_path(_proguard_mapping_path, root_build_dir), 5059*6777b538SAndroid Build Coastguard Worker ] 5060*6777b538SAndroid Build Coastguard Worker 5061*6777b538SAndroid Build Coastguard Worker # Required by logcat command. 5062*6777b538SAndroid Build Coastguard Worker data_deps += [ "//build/android/stacktrace:java_deobfuscate" ] 5063*6777b538SAndroid Build Coastguard Worker data += [ _proguard_mapping_path ] 5064*6777b538SAndroid Build Coastguard Worker } 5065*6777b538SAndroid Build Coastguard Worker } 5066*6777b538SAndroid Build Coastguard Worker 5067*6777b538SAndroid Build Coastguard Worker _enable_lint = defined(invoker.enable_lint) && invoker.enable_lint && 5068*6777b538SAndroid Build Coastguard Worker !disable_android_lint 5069*6777b538SAndroid Build Coastguard Worker if (_enable_lint) { 5070*6777b538SAndroid Build Coastguard Worker android_lint("${target_name}__lint") { 5071*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 5072*6777b538SAndroid Build Coastguard Worker [ 5073*6777b538SAndroid Build Coastguard Worker "lint_baseline_file", 5074*6777b538SAndroid Build Coastguard Worker "lint_gen_dir", 5075*6777b538SAndroid Build Coastguard Worker "lint_jar_path", 5076*6777b538SAndroid Build Coastguard Worker "lint_suppressions_file", 5077*6777b538SAndroid Build Coastguard Worker ]) 5078*6777b538SAndroid Build Coastguard Worker build_config = _build_config 5079*6777b538SAndroid Build Coastguard Worker build_config_dep = ":$_build_config_target" 5080*6777b538SAndroid Build Coastguard Worker deps = _module_java_targets 5081*6777b538SAndroid Build Coastguard Worker if (defined(invoker.lint_suppressions_dep)) { 5082*6777b538SAndroid Build Coastguard Worker deps += [ invoker.lint_suppressions_dep ] 5083*6777b538SAndroid Build Coastguard Worker } 5084*6777b538SAndroid Build Coastguard Worker if (defined(invoker.lint_min_sdk_version)) { 5085*6777b538SAndroid Build Coastguard Worker min_sdk_version = invoker.lint_min_sdk_version 5086*6777b538SAndroid Build Coastguard Worker } else { 5087*6777b538SAndroid Build Coastguard Worker min_sdk_version = _min_sdk_version 5088*6777b538SAndroid Build Coastguard Worker } 5089*6777b538SAndroid Build Coastguard Worker } 5090*6777b538SAndroid Build Coastguard Worker } else { 5091*6777b538SAndroid Build Coastguard Worker not_needed(invoker, 5092*6777b538SAndroid Build Coastguard Worker [ 5093*6777b538SAndroid Build Coastguard Worker "lint_baseline_file", 5094*6777b538SAndroid Build Coastguard Worker "lint_gen_dir", 5095*6777b538SAndroid Build Coastguard Worker "lint_jar_path", 5096*6777b538SAndroid Build Coastguard Worker "lint_min_sdk_version", 5097*6777b538SAndroid Build Coastguard Worker "lint_suppressions_dep", 5098*6777b538SAndroid Build Coastguard Worker "lint_suppressions_file", 5099*6777b538SAndroid Build Coastguard Worker ]) 5100*6777b538SAndroid Build Coastguard Worker } 5101*6777b538SAndroid Build Coastguard Worker 5102*6777b538SAndroid Build Coastguard Worker group(_target_name) { 5103*6777b538SAndroid Build Coastguard Worker public_deps = [ 5104*6777b538SAndroid Build Coastguard Worker ":$_bundle_target_name", 5105*6777b538SAndroid Build Coastguard Worker ":${_target_name}__wrapper_script", 5106*6777b538SAndroid Build Coastguard Worker ] 5107*6777b538SAndroid Build Coastguard Worker if (defined(_size_info_target)) { 5108*6777b538SAndroid Build Coastguard Worker public_deps += [ ":$_size_info_target" ] 5109*6777b538SAndroid Build Coastguard Worker } 5110*6777b538SAndroid Build Coastguard Worker if (_enable_lint) { 5111*6777b538SAndroid Build Coastguard Worker if (!defined(data_deps)) { 5112*6777b538SAndroid Build Coastguard Worker data_deps = [] 5113*6777b538SAndroid Build Coastguard Worker } 5114*6777b538SAndroid Build Coastguard Worker data_deps += [ ":${target_name}__lint" ] 5115*6777b538SAndroid Build Coastguard Worker } 5116*6777b538SAndroid Build Coastguard Worker } 5117*6777b538SAndroid Build Coastguard Worker 5118*6777b538SAndroid Build Coastguard Worker _apks_path = "$root_build_dir/apks/$_bundle_name.apks" 5119*6777b538SAndroid Build Coastguard Worker action_with_pydeps("${_target_name}_apks") { 5120*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/create_app_bundle_apks.py" 5121*6777b538SAndroid Build Coastguard Worker inputs = java_paths_for_inputs + [ 5122*6777b538SAndroid Build Coastguard Worker _bundle_path, 5123*6777b538SAndroid Build Coastguard Worker _BUNDLETOOL_JAR_PATH, 5124*6777b538SAndroid Build Coastguard Worker ] 5125*6777b538SAndroid Build Coastguard Worker outputs = [ _apks_path ] 5126*6777b538SAndroid Build Coastguard Worker data = [ _apks_path ] 5127*6777b538SAndroid Build Coastguard Worker args = [ 5128*6777b538SAndroid Build Coastguard Worker "--bundle", 5129*6777b538SAndroid Build Coastguard Worker _rebased_bundle_path, 5130*6777b538SAndroid Build Coastguard Worker "--output", 5131*6777b538SAndroid Build Coastguard Worker rebase_path(_apks_path, root_build_dir), 5132*6777b538SAndroid Build Coastguard Worker "--aapt2-path", 5133*6777b538SAndroid Build Coastguard Worker rebase_path(android_sdk_tools_bundle_aapt2, root_build_dir), 5134*6777b538SAndroid Build Coastguard Worker "--keystore-path", 5135*6777b538SAndroid Build Coastguard Worker rebase_path(android_keystore_path, root_build_dir), 5136*6777b538SAndroid Build Coastguard Worker "--keystore-name", 5137*6777b538SAndroid Build Coastguard Worker android_keystore_name, 5138*6777b538SAndroid Build Coastguard Worker "--keystore-password", 5139*6777b538SAndroid Build Coastguard Worker android_keystore_password, 5140*6777b538SAndroid Build Coastguard Worker ] 5141*6777b538SAndroid Build Coastguard Worker if (debuggable_apks) { 5142*6777b538SAndroid Build Coastguard Worker args += [ "--local-testing" ] 5143*6777b538SAndroid Build Coastguard Worker } 5144*6777b538SAndroid Build Coastguard Worker deps = [ ":$_bundle_target_name" ] 5145*6777b538SAndroid Build Coastguard Worker metadata = { 5146*6777b538SAndroid Build Coastguard Worker install_artifacts = [ _apks_path ] 5147*6777b538SAndroid Build Coastguard Worker if (defined(invoker.static_library_provider)) { 5148*6777b538SAndroid Build Coastguard Worker install_artifacts_barrier = [] 5149*6777b538SAndroid Build Coastguard Worker } 5150*6777b538SAndroid Build Coastguard Worker } 5151*6777b538SAndroid Build Coastguard Worker 5152*6777b538SAndroid Build Coastguard Worker # http://crbug.com/725224. Fix for bots running out of memory. 5153*6777b538SAndroid Build Coastguard Worker if (defined(java_cmd_pool_size)) { 5154*6777b538SAndroid Build Coastguard Worker pool = "//build/config/android:java_cmd_pool($default_toolchain)" 5155*6777b538SAndroid Build Coastguard Worker } else { 5156*6777b538SAndroid Build Coastguard Worker pool = "//build/toolchain:link_pool($default_toolchain)" 5157*6777b538SAndroid Build Coastguard Worker } 5158*6777b538SAndroid Build Coastguard Worker } 5159*6777b538SAndroid Build Coastguard Worker } 5160*6777b538SAndroid Build Coastguard Worker 5161*6777b538SAndroid Build Coastguard Worker # Create an .apks file from an .aab file. The .apks file will contain the 5162*6777b538SAndroid Build Coastguard Worker # minimal set of .apk files needed for tracking binary size. 5163*6777b538SAndroid Build Coastguard Worker # The file will be created at "$bundle_path_without_extension.minimal.apks". 5164*6777b538SAndroid Build Coastguard Worker # 5165*6777b538SAndroid Build Coastguard Worker # Variables: 5166*6777b538SAndroid Build Coastguard Worker # bundle_path: Path to the input .aab file. 5167*6777b538SAndroid Build Coastguard Worker # 5168*6777b538SAndroid Build Coastguard Worker # Example: 5169*6777b538SAndroid Build Coastguard Worker # create_app_bundle_minimal_apks("minimal_apks") { 5170*6777b538SAndroid Build Coastguard Worker # deps = [ 5171*6777b538SAndroid Build Coastguard Worker # ":bundle_target", 5172*6777b538SAndroid Build Coastguard Worker # ] 5173*6777b538SAndroid Build Coastguard Worker # bundle_path = "$root_build_dir/apks/Bundle.aab" 5174*6777b538SAndroid Build Coastguard Worker # } 5175*6777b538SAndroid Build Coastguard Worker template("create_app_bundle_minimal_apks") { 5176*6777b538SAndroid Build Coastguard Worker action_with_pydeps(target_name) { 5177*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY + [ "deps" ]) 5178*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/create_app_bundle_apks.py" 5179*6777b538SAndroid Build Coastguard Worker _dir = get_path_info(invoker.bundle_path, "dir") 5180*6777b538SAndroid Build Coastguard Worker _name = get_path_info(invoker.bundle_path, "name") 5181*6777b538SAndroid Build Coastguard Worker _output_path = "$_dir/$_name.minimal.apks" 5182*6777b538SAndroid Build Coastguard Worker outputs = [ _output_path ] 5183*6777b538SAndroid Build Coastguard Worker inputs = [ invoker.bundle_path ] + java_paths_for_inputs 5184*6777b538SAndroid Build Coastguard Worker args = [ 5185*6777b538SAndroid Build Coastguard Worker "--bundle", 5186*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.bundle_path, root_build_dir), 5187*6777b538SAndroid Build Coastguard Worker "--output", 5188*6777b538SAndroid Build Coastguard Worker rebase_path(_output_path, root_build_dir), 5189*6777b538SAndroid Build Coastguard Worker "--aapt2-path", 5190*6777b538SAndroid Build Coastguard Worker rebase_path(android_sdk_tools_bundle_aapt2, root_build_dir), 5191*6777b538SAndroid Build Coastguard Worker "--keystore-path", 5192*6777b538SAndroid Build Coastguard Worker rebase_path(android_keystore_path, root_build_dir), 5193*6777b538SAndroid Build Coastguard Worker "--keystore-name", 5194*6777b538SAndroid Build Coastguard Worker android_keystore_name, 5195*6777b538SAndroid Build Coastguard Worker "--keystore-password", 5196*6777b538SAndroid Build Coastguard Worker android_keystore_password, 5197*6777b538SAndroid Build Coastguard Worker "--minimal", 5198*6777b538SAndroid Build Coastguard Worker ] 5199*6777b538SAndroid Build Coastguard Worker } 5200*6777b538SAndroid Build Coastguard Worker } 5201*6777b538SAndroid Build Coastguard Worker 5202*6777b538SAndroid Build Coastguard Worker template("alias_with_wrapper_script") { 5203*6777b538SAndroid Build Coastguard Worker copy(target_name) { 5204*6777b538SAndroid Build Coastguard Worker _aliased_wrapper_script_name = 5205*6777b538SAndroid Build Coastguard Worker get_label_info(invoker.alias_target, "name") 5206*6777b538SAndroid Build Coastguard Worker _aliased_wrapper_script = 5207*6777b538SAndroid Build Coastguard Worker "$root_build_dir/bin/$_aliased_wrapper_script_name" 5208*6777b538SAndroid Build Coastguard Worker sources = [ _aliased_wrapper_script ] 5209*6777b538SAndroid Build Coastguard Worker deps = [ invoker.alias_target ] 5210*6777b538SAndroid Build Coastguard Worker 5211*6777b538SAndroid Build Coastguard Worker _output_path = "$root_build_dir/bin/$target_name" 5212*6777b538SAndroid Build Coastguard Worker outputs = [ _output_path ] 5213*6777b538SAndroid Build Coastguard Worker } 5214*6777b538SAndroid Build Coastguard Worker } 5215*6777b538SAndroid Build Coastguard Worker 5216*6777b538SAndroid Build Coastguard Worker # Generate an Android resources target that contains localized strings 5217*6777b538SAndroid Build Coastguard Worker # describing the current locale used by the Android framework to display 5218*6777b538SAndroid Build Coastguard Worker # UI strings. These are used by 5219*6777b538SAndroid Build Coastguard Worker # org.chromium.chrome.browser.ChromeLocalizationUtils. 5220*6777b538SAndroid Build Coastguard Worker # 5221*6777b538SAndroid Build Coastguard Worker # Variables: 5222*6777b538SAndroid Build Coastguard Worker # ui_locales: List of Chromium locale names to generate resources for. 5223*6777b538SAndroid Build Coastguard Worker # 5224*6777b538SAndroid Build Coastguard Worker template("generate_ui_locale_resources") { 5225*6777b538SAndroid Build Coastguard Worker _generating_target_name = "${target_name}__generate" 5226*6777b538SAndroid Build Coastguard Worker _rebased_output_zip_path = rebase_path(target_gen_dir, root_gen_dir) 5227*6777b538SAndroid Build Coastguard Worker _output_zip = "${root_out_dir}/resource_zips/${_rebased_output_zip_path}/" + 5228*6777b538SAndroid Build Coastguard Worker "${target_name}.zip" 5229*6777b538SAndroid Build Coastguard Worker 5230*6777b538SAndroid Build Coastguard Worker action_with_pydeps(_generating_target_name) { 5231*6777b538SAndroid Build Coastguard Worker script = "//build/android/gyp/create_ui_locale_resources.py" 5232*6777b538SAndroid Build Coastguard Worker outputs = [ _output_zip ] 5233*6777b538SAndroid Build Coastguard Worker args = [ 5234*6777b538SAndroid Build Coastguard Worker "--locale-list=${invoker.ui_locales}", 5235*6777b538SAndroid Build Coastguard Worker "--output-zip", 5236*6777b538SAndroid Build Coastguard Worker rebase_path(_output_zip, root_build_dir), 5237*6777b538SAndroid Build Coastguard Worker ] 5238*6777b538SAndroid Build Coastguard Worker } 5239*6777b538SAndroid Build Coastguard Worker 5240*6777b538SAndroid Build Coastguard Worker android_generated_resources(target_name) { 5241*6777b538SAndroid Build Coastguard Worker generating_target = ":$_generating_target_name" 5242*6777b538SAndroid Build Coastguard Worker generated_resources_zip = _output_zip 5243*6777b538SAndroid Build Coastguard Worker } 5244*6777b538SAndroid Build Coastguard Worker } 5245*6777b538SAndroid Build Coastguard Worker} 5246