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