1*8975f5c5SAndroid Build Coastguard Worker# -*- bazel-starlark -*- 2*8975f5c5SAndroid Build Coastguard Worker# Copyright 2023 The Chromium Authors 3*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker"""Siso configuration for Android builds.""" 6*8975f5c5SAndroid Build Coastguard Worker 7*8975f5c5SAndroid Build Coastguard Workerload("@builtin//encoding.star", "json") 8*8975f5c5SAndroid Build Coastguard Workerload("@builtin//lib/gn.star", "gn") 9*8975f5c5SAndroid Build Coastguard Workerload("@builtin//struct.star", "module") 10*8975f5c5SAndroid Build Coastguard Workerload("./config.star", "config") 11*8975f5c5SAndroid Build Coastguard Worker 12*8975f5c5SAndroid Build Coastguard Workerdef __enabled(ctx): 13*8975f5c5SAndroid Build Coastguard Worker if "args.gn" in ctx.metadata: 14*8975f5c5SAndroid Build Coastguard Worker gn_args = gn.args(ctx) 15*8975f5c5SAndroid Build Coastguard Worker if gn_args.get("target_os") == '"android"': 16*8975f5c5SAndroid Build Coastguard Worker return True 17*8975f5c5SAndroid Build Coastguard Worker return False 18*8975f5c5SAndroid Build Coastguard Worker 19*8975f5c5SAndroid Build Coastguard Workerdef __filegroups(ctx): 20*8975f5c5SAndroid Build Coastguard Worker return {} 21*8975f5c5SAndroid Build Coastguard Worker 22*8975f5c5SAndroid Build Coastguard Workerdef __step_config(ctx, step_config): 23*8975f5c5SAndroid Build Coastguard Worker remote_run = True # Turn this to False when you do file access trace. 24*8975f5c5SAndroid Build Coastguard Worker step_config["rules"].extend([ 25*8975f5c5SAndroid Build Coastguard Worker # See also https://chromium.googlesource.com/chromium/src/build/+/HEAD/android/docs/java_toolchain.md 26*8975f5c5SAndroid Build Coastguard Worker { 27*8975f5c5SAndroid Build Coastguard Worker "name": "android/write_build_config", 28*8975f5c5SAndroid Build Coastguard Worker "command_prefix": "python3 ../../build/android/gyp/write_build_config.py", 29*8975f5c5SAndroid Build Coastguard Worker "handler": "android_write_build_config", 30*8975f5c5SAndroid Build Coastguard Worker "remote": remote_run, 31*8975f5c5SAndroid Build Coastguard Worker "canonicalize_dir": True, 32*8975f5c5SAndroid Build Coastguard Worker "timeout": "2m", 33*8975f5c5SAndroid Build Coastguard Worker }, 34*8975f5c5SAndroid Build Coastguard Worker { 35*8975f5c5SAndroid Build Coastguard Worker "name": "android/ijar", 36*8975f5c5SAndroid Build Coastguard Worker "command_prefix": "python3 ../../build/android/gyp/ijar.py", 37*8975f5c5SAndroid Build Coastguard Worker "remote": remote_run, 38*8975f5c5SAndroid Build Coastguard Worker "canonicalize_dir": True, 39*8975f5c5SAndroid Build Coastguard Worker "timeout": "2m", 40*8975f5c5SAndroid Build Coastguard Worker }, 41*8975f5c5SAndroid Build Coastguard Worker { 42*8975f5c5SAndroid Build Coastguard Worker "name": "android/turbine", 43*8975f5c5SAndroid Build Coastguard Worker "command_prefix": "python3 ../../build/android/gyp/turbine.py", 44*8975f5c5SAndroid Build Coastguard Worker "handler": "android_turbine", 45*8975f5c5SAndroid Build Coastguard Worker "remote": remote_run, 46*8975f5c5SAndroid Build Coastguard Worker "platform_ref": "large", 47*8975f5c5SAndroid Build Coastguard Worker "canonicalize_dir": True, 48*8975f5c5SAndroid Build Coastguard Worker "timeout": "2m", 49*8975f5c5SAndroid Build Coastguard Worker }, 50*8975f5c5SAndroid Build Coastguard Worker { 51*8975f5c5SAndroid Build Coastguard Worker "name": "android/compile_resources", 52*8975f5c5SAndroid Build Coastguard Worker "command_prefix": "python3 ../../build/android/gyp/compile_resources.py", 53*8975f5c5SAndroid Build Coastguard Worker "handler": "android_compile_resources", 54*8975f5c5SAndroid Build Coastguard Worker "exclude_input_patterns": [ 55*8975f5c5SAndroid Build Coastguard Worker "*.a", 56*8975f5c5SAndroid Build Coastguard Worker "*.cc", 57*8975f5c5SAndroid Build Coastguard Worker "*.h", 58*8975f5c5SAndroid Build Coastguard Worker "*.inc", 59*8975f5c5SAndroid Build Coastguard Worker "*.info", 60*8975f5c5SAndroid Build Coastguard Worker "*.o", 61*8975f5c5SAndroid Build Coastguard Worker "*.pak", 62*8975f5c5SAndroid Build Coastguard Worker "*.sql", 63*8975f5c5SAndroid Build Coastguard Worker ], 64*8975f5c5SAndroid Build Coastguard Worker "remote": remote_run, 65*8975f5c5SAndroid Build Coastguard Worker "canonicalize_dir": True, 66*8975f5c5SAndroid Build Coastguard Worker "timeout": "5m", 67*8975f5c5SAndroid Build Coastguard Worker }, 68*8975f5c5SAndroid Build Coastguard Worker { 69*8975f5c5SAndroid Build Coastguard Worker "name": "android/compile_java", 70*8975f5c5SAndroid Build Coastguard Worker "command_prefix": "python3 ../../build/android/gyp/compile_java.py", 71*8975f5c5SAndroid Build Coastguard Worker "handler": "android_compile_java", 72*8975f5c5SAndroid Build Coastguard Worker "exclude_input_patterns": [ 73*8975f5c5SAndroid Build Coastguard Worker "*.a", 74*8975f5c5SAndroid Build Coastguard Worker "*.cc", 75*8975f5c5SAndroid Build Coastguard Worker "*.h", 76*8975f5c5SAndroid Build Coastguard Worker "*.inc", 77*8975f5c5SAndroid Build Coastguard Worker "*.info", 78*8975f5c5SAndroid Build Coastguard Worker "*.o", 79*8975f5c5SAndroid Build Coastguard Worker "*.pak", 80*8975f5c5SAndroid Build Coastguard Worker "*.sql", 81*8975f5c5SAndroid Build Coastguard Worker ], 82*8975f5c5SAndroid Build Coastguard Worker # Don't include files under --generated-dir. 83*8975f5c5SAndroid Build Coastguard Worker # This is probably optimization for local incrmental builds. 84*8975f5c5SAndroid Build Coastguard Worker # However, this is harmful for remote build cache hits. 85*8975f5c5SAndroid Build Coastguard Worker "ignore_extra_input_pattern": ".*srcjars.*\\.java", 86*8975f5c5SAndroid Build Coastguard Worker "ignore_extra_output_pattern": ".*srcjars.*\\.java", 87*8975f5c5SAndroid Build Coastguard Worker "remote": remote_run, 88*8975f5c5SAndroid Build Coastguard Worker "platform_ref": "large", 89*8975f5c5SAndroid Build Coastguard Worker "canonicalize_dir": True, 90*8975f5c5SAndroid Build Coastguard Worker "timeout": "2m", 91*8975f5c5SAndroid Build Coastguard Worker }, 92*8975f5c5SAndroid Build Coastguard Worker { 93*8975f5c5SAndroid Build Coastguard Worker "name": "android/compile_kt", 94*8975f5c5SAndroid Build Coastguard Worker "command_prefix": "python3 ../../build/android/gyp/compile_kt.py", 95*8975f5c5SAndroid Build Coastguard Worker "handler": "android_compile_java", 96*8975f5c5SAndroid Build Coastguard Worker "exclude_input_patterns": [ 97*8975f5c5SAndroid Build Coastguard Worker "*.a", 98*8975f5c5SAndroid Build Coastguard Worker "*.cc", 99*8975f5c5SAndroid Build Coastguard Worker "*.h", 100*8975f5c5SAndroid Build Coastguard Worker "*.inc", 101*8975f5c5SAndroid Build Coastguard Worker "*.info", 102*8975f5c5SAndroid Build Coastguard Worker "*.o", 103*8975f5c5SAndroid Build Coastguard Worker "*.pak", 104*8975f5c5SAndroid Build Coastguard Worker "*.sql", 105*8975f5c5SAndroid Build Coastguard Worker ], 106*8975f5c5SAndroid Build Coastguard Worker # Don't include files under --generated-dir. 107*8975f5c5SAndroid Build Coastguard Worker # This is probably optimization for local incrmental builds. 108*8975f5c5SAndroid Build Coastguard Worker # However, this is harmful for remote build cache hits. 109*8975f5c5SAndroid Build Coastguard Worker "ignore_extra_input_pattern": ".*srcjars.*\\.java", 110*8975f5c5SAndroid Build Coastguard Worker "ignore_extra_output_pattern": ".*srcjars.*\\.java", 111*8975f5c5SAndroid Build Coastguard Worker "remote": remote_run, 112*8975f5c5SAndroid Build Coastguard Worker "platform_ref": "large", 113*8975f5c5SAndroid Build Coastguard Worker "canonicalize_dir": True, 114*8975f5c5SAndroid Build Coastguard Worker "timeout": "2m", 115*8975f5c5SAndroid Build Coastguard Worker }, 116*8975f5c5SAndroid Build Coastguard Worker { 117*8975f5c5SAndroid Build Coastguard Worker "name": "android/dex", 118*8975f5c5SAndroid Build Coastguard Worker "command_prefix": "python3 ../../build/android/gyp/dex.py", 119*8975f5c5SAndroid Build Coastguard Worker "handler": "android_dex", 120*8975f5c5SAndroid Build Coastguard Worker # TODO(crbug.com/40270798): include only required jar, dex files in GN config. 121*8975f5c5SAndroid Build Coastguard Worker "indirect_inputs": { 122*8975f5c5SAndroid Build Coastguard Worker "includes": ["*.dex", "*.ijar.jar", "*.turbine.jar"], 123*8975f5c5SAndroid Build Coastguard Worker }, 124*8975f5c5SAndroid Build Coastguard Worker "exclude_input_patterns": [ 125*8975f5c5SAndroid Build Coastguard Worker "*.a", 126*8975f5c5SAndroid Build Coastguard Worker "*.cc", 127*8975f5c5SAndroid Build Coastguard Worker "*.h", 128*8975f5c5SAndroid Build Coastguard Worker "*.inc", 129*8975f5c5SAndroid Build Coastguard Worker "*.info", 130*8975f5c5SAndroid Build Coastguard Worker "*.o", 131*8975f5c5SAndroid Build Coastguard Worker "*.pak", 132*8975f5c5SAndroid Build Coastguard Worker "*.sql", 133*8975f5c5SAndroid Build Coastguard Worker ], 134*8975f5c5SAndroid Build Coastguard Worker # *.dex files are intermediate files used in incremental builds. 135*8975f5c5SAndroid Build Coastguard Worker # Fo remote actions, let's ignore them, assuming remote cache hits compensate. 136*8975f5c5SAndroid Build Coastguard Worker "ignore_extra_input_pattern": ".*\\.dex", 137*8975f5c5SAndroid Build Coastguard Worker "ignore_extra_output_pattern": ".*\\.dex", 138*8975f5c5SAndroid Build Coastguard Worker "remote": remote_run, 139*8975f5c5SAndroid Build Coastguard Worker "platform_ref": "large", 140*8975f5c5SAndroid Build Coastguard Worker "canonicalize_dir": True, 141*8975f5c5SAndroid Build Coastguard Worker "timeout": "2m", 142*8975f5c5SAndroid Build Coastguard Worker }, 143*8975f5c5SAndroid Build Coastguard Worker { 144*8975f5c5SAndroid Build Coastguard Worker "name": "android/filter_zip", 145*8975f5c5SAndroid Build Coastguard Worker "command_prefix": "python3 ../../build/android/gyp/filter_zip.py", 146*8975f5c5SAndroid Build Coastguard Worker "remote": remote_run, 147*8975f5c5SAndroid Build Coastguard Worker "canonicalize_dir": True, 148*8975f5c5SAndroid Build Coastguard Worker "timeout": "2m", 149*8975f5c5SAndroid Build Coastguard Worker }, 150*8975f5c5SAndroid Build Coastguard Worker { 151*8975f5c5SAndroid Build Coastguard Worker "name": "android/generate_resource_allowlist", 152*8975f5c5SAndroid Build Coastguard Worker "command_prefix": "python3 ../../tools/resources/generate_resource_allowlist.py", 153*8975f5c5SAndroid Build Coastguard Worker "indirect_inputs": { 154*8975f5c5SAndroid Build Coastguard Worker "includes": ["*.o", "*.a"], 155*8975f5c5SAndroid Build Coastguard Worker }, 156*8975f5c5SAndroid Build Coastguard Worker # When remote linking without bytes enabled, .o, .a files don't 157*8975f5c5SAndroid Build Coastguard Worker # exist on the local file system. 158*8975f5c5SAndroid Build Coastguard Worker # This step also should run remortely to avoid downloading them. 159*8975f5c5SAndroid Build Coastguard Worker "remote": config.get(ctx, "remote-link"), 160*8975f5c5SAndroid Build Coastguard Worker "platform_ref": "large", 161*8975f5c5SAndroid Build Coastguard Worker "canonicalize_dir": True, 162*8975f5c5SAndroid Build Coastguard Worker "timeout": "2m", 163*8975f5c5SAndroid Build Coastguard Worker }, 164*8975f5c5SAndroid Build Coastguard Worker { 165*8975f5c5SAndroid Build Coastguard Worker "name": "android/proguard", 166*8975f5c5SAndroid Build Coastguard Worker "command_prefix": "python3 ../../build/android/gyp/proguard.py", 167*8975f5c5SAndroid Build Coastguard Worker "handler": "android_proguard", 168*8975f5c5SAndroid Build Coastguard Worker "exclude_input_patterns": [ 169*8975f5c5SAndroid Build Coastguard Worker "*.a", 170*8975f5c5SAndroid Build Coastguard Worker "*.cc", 171*8975f5c5SAndroid Build Coastguard Worker "*.h", 172*8975f5c5SAndroid Build Coastguard Worker "*.inc", 173*8975f5c5SAndroid Build Coastguard Worker "*.info", 174*8975f5c5SAndroid Build Coastguard Worker "*.o", 175*8975f5c5SAndroid Build Coastguard Worker "*.pak", 176*8975f5c5SAndroid Build Coastguard Worker "*.sql", 177*8975f5c5SAndroid Build Coastguard Worker ], 178*8975f5c5SAndroid Build Coastguard Worker "canonicalize_dir": True, 179*8975f5c5SAndroid Build Coastguard Worker "remote": remote_run, 180*8975f5c5SAndroid Build Coastguard Worker "platform_ref": "large", 181*8975f5c5SAndroid Build Coastguard Worker "timeout": "10m", 182*8975f5c5SAndroid Build Coastguard Worker }, 183*8975f5c5SAndroid Build Coastguard Worker ]) 184*8975f5c5SAndroid Build Coastguard Worker return step_config 185*8975f5c5SAndroid Build Coastguard Worker 186*8975f5c5SAndroid Build Coastguard Workerdef __filearg(ctx, arg): 187*8975f5c5SAndroid Build Coastguard Worker fn = "" 188*8975f5c5SAndroid Build Coastguard Worker if arg.startswith("@FileArg("): 189*8975f5c5SAndroid Build Coastguard Worker f = arg.removeprefix("@FileArg(").removesuffix(")").split(":") 190*8975f5c5SAndroid Build Coastguard Worker fn = f[0].removesuffix("[]") # [] suffix controls expand list? 191*8975f5c5SAndroid Build Coastguard Worker v = json.decode(str(ctx.fs.read(ctx.fs.canonpath(fn)))) 192*8975f5c5SAndroid Build Coastguard Worker for k in f[1:]: 193*8975f5c5SAndroid Build Coastguard Worker v = v[k] 194*8975f5c5SAndroid Build Coastguard Worker arg = v 195*8975f5c5SAndroid Build Coastguard Worker if type(arg) == "string": 196*8975f5c5SAndroid Build Coastguard Worker if arg.startswith("["): 197*8975f5c5SAndroid Build Coastguard Worker return fn, json.decode(arg) 198*8975f5c5SAndroid Build Coastguard Worker return fn, [arg] 199*8975f5c5SAndroid Build Coastguard Worker return fn, arg 200*8975f5c5SAndroid Build Coastguard Worker 201*8975f5c5SAndroid Build Coastguard Workerdef __android_compile_resources_handler(ctx, cmd): 202*8975f5c5SAndroid Build Coastguard Worker # Script: 203*8975f5c5SAndroid Build Coastguard Worker # https://crsrc.org/c/build/android/gyp/compile_resources.py 204*8975f5c5SAndroid Build Coastguard Worker # GN Config: 205*8975f5c5SAndroid Build Coastguard Worker # https://crsrc.org/c/build/config/android/internal_rules.gni;l=2163;drc=1b15af251f8a255e44f2e3e3e7990e67e87dcc3b 206*8975f5c5SAndroid Build Coastguard Worker # https://crsrc.org/c/build/config/android/system_image.gni;l=58;drc=39debde76e509774287a655285d8556a9b8dc634 207*8975f5c5SAndroid Build Coastguard Worker # Sample args: 208*8975f5c5SAndroid Build Coastguard Worker # --aapt2-path ../../third_party/android_build_tools/aapt2/cipd/aapt2 209*8975f5c5SAndroid Build Coastguard Worker # --android-manifest gen/chrome/android/trichrome_library_system_stub_apk__manifest.xml 210*8975f5c5SAndroid Build Coastguard Worker # --arsc-package-name=org.chromium.trichromelibrary 211*8975f5c5SAndroid Build Coastguard Worker # --arsc-path obj/chrome/android/trichrome_library_system_stub_apk.ap_ 212*8975f5c5SAndroid Build Coastguard Worker # --debuggable 213*8975f5c5SAndroid Build Coastguard Worker # --dependencies-res-zip-overlays=@FileArg\(gen/chrome/android/webapk/shell_apk/maps_go_webapk.build_config.json:deps_info:dependency_zip_overlays\) 214*8975f5c5SAndroid Build Coastguard Worker # --dependencies-res-zips=@FileArg\(gen/chrome/android/webapk/shell_apk/maps_go_webapk.build_config.json:deps_info:dependency_zips\) 215*8975f5c5SAndroid Build Coastguard Worker # --depfile gen/chrome/android/webapk/shell_apk/maps_go_webapk__compile_resources.d 216*8975f5c5SAndroid Build Coastguard Worker # --emit-ids-out=gen/chrome/android/webapk/shell_apk/maps_go_webapk__compile_resources.resource_ids 217*8975f5c5SAndroid Build Coastguard Worker # --extra-res-packages=@FileArg\(gen/chrome/android/webapk/shell_apk/maps_go_webapk.build_config.json:deps_info:extra_package_names\) 218*8975f5c5SAndroid Build Coastguard Worker # --include-resources(=)../../third_party/android_sdk/public/platforms/android-34/android.jar 219*8975f5c5SAndroid Build Coastguard Worker # --info-path obj/chrome/android/webapk/shell_apk/maps_go_webapk.ap_.info 220*8975f5c5SAndroid Build Coastguard Worker # --min-sdk-version=24 221*8975f5c5SAndroid Build Coastguard Worker # --proguard-file obj/chrome/android/webapk/shell_apk/maps_go_webapk/maps_go_webapk.resources.proguard.txt 222*8975f5c5SAndroid Build Coastguard Worker # --r-text-out gen/chrome/android/webapk/shell_apk/maps_go_webapk__compile_resources_R.txt 223*8975f5c5SAndroid Build Coastguard Worker # --rename-manifest-package=org.chromium.trichromelibrary 224*8975f5c5SAndroid Build Coastguard Worker # --srcjar-out gen/chrome/android/webapk/shell_apk/maps_go_webapk__compile_resources.srcjar 225*8975f5c5SAndroid Build Coastguard Worker # --target-sdk-version=33 226*8975f5c5SAndroid Build Coastguard Worker # --version-code 1 227*8975f5c5SAndroid Build Coastguard Worker # --version-name Developer\ Build 228*8975f5c5SAndroid Build Coastguard Worker # --webp-cache-dir=obj/android-webp-cache 229*8975f5c5SAndroid Build Coastguard Worker inputs = [] 230*8975f5c5SAndroid Build Coastguard Worker for i, arg in enumerate(cmd.args): 231*8975f5c5SAndroid Build Coastguard Worker for k in ["--dependencies-res-zips=", "--dependencies-res-zip-overlays=", "--extra-res-packages="]: 232*8975f5c5SAndroid Build Coastguard Worker if arg.startswith(k): 233*8975f5c5SAndroid Build Coastguard Worker arg = arg.removeprefix(k) 234*8975f5c5SAndroid Build Coastguard Worker _, v = __filearg(ctx, arg) 235*8975f5c5SAndroid Build Coastguard Worker for f in v: 236*8975f5c5SAndroid Build Coastguard Worker f = ctx.fs.canonpath(f) 237*8975f5c5SAndroid Build Coastguard Worker inputs.append(f) 238*8975f5c5SAndroid Build Coastguard Worker if k == "--dependencies-res-zips=" and ctx.fs.exists(f + ".info"): 239*8975f5c5SAndroid Build Coastguard Worker inputs.append(f + ".info") 240*8975f5c5SAndroid Build Coastguard Worker 241*8975f5c5SAndroid Build Coastguard Worker ctx.actions.fix( 242*8975f5c5SAndroid Build Coastguard Worker inputs = cmd.inputs + inputs, 243*8975f5c5SAndroid Build Coastguard Worker ) 244*8975f5c5SAndroid Build Coastguard Worker 245*8975f5c5SAndroid Build Coastguard Workerdef __android_compile_java_handler(ctx, cmd): 246*8975f5c5SAndroid Build Coastguard Worker # Script: 247*8975f5c5SAndroid Build Coastguard Worker # https://crsrc.org/c/build/android/gyp/compile_java.py 248*8975f5c5SAndroid Build Coastguard Worker # GN Config: 249*8975f5c5SAndroid Build Coastguard Worker # https://crsrc.org/c/build/config/android/internal_rules.gni;l=2995;drc=775b3a9ebccd468c79592dad43ef46632d3a411f 250*8975f5c5SAndroid Build Coastguard Worker # Sample args: 251*8975f5c5SAndroid Build Coastguard Worker # --depfile=gen/chrome/android/chrome_test_java__compile_java.d 252*8975f5c5SAndroid Build Coastguard Worker # --generated-dir=gen/chrome/android/chrome_test_java/generated_java 253*8975f5c5SAndroid Build Coastguard Worker # --jar-path=obj/chrome/android/chrome_test_java.javac.jar 254*8975f5c5SAndroid Build Coastguard Worker # --java-srcjars=\[\"gen/chrome/browser/tos_dialog_behavior_generated_enum.srcjar\",\ \"gen/chrome/android/chrome_test_java__assetres.srcjar\",\ \"gen/chrome/android/chrome_test_java.generated.srcjar\"\] 255*8975f5c5SAndroid Build Coastguard Worker # --target-name //chrome/android:chrome_test_java__compile_java 256*8975f5c5SAndroid Build Coastguard Worker # --classpath=@FileArg\(gen/chrome/android/chrome_test_java.build_config.json:android:sdk_interface_jars\) 257*8975f5c5SAndroid Build Coastguard Worker # --header-jar obj/chrome/android/chrome_test_java.turbine.jar 258*8975f5c5SAndroid Build Coastguard Worker # --classpath=\[\"obj/chrome/android/chrome_test_java.turbine.jar\"\] 259*8975f5c5SAndroid Build Coastguard Worker # --classpath=@FileArg\(gen/chrome/android/chrome_test_java.build_config.json:deps_info:javac_full_interface_classpath\) 260*8975f5c5SAndroid Build Coastguard Worker # --kotlin-jar-path=obj/chrome/browser/tabmodel/internal/java.kotlinc.jar 261*8975f5c5SAndroid Build Coastguard Worker # --chromium-code=1 262*8975f5c5SAndroid Build Coastguard Worker # --warnings-as-errors 263*8975f5c5SAndroid Build Coastguard Worker # --jar-info-exclude-globs=\[\"\*/R.class\",\ \"\*/R\\\$\*.class\",\ \"\*/Manifest.class\",\ \"\*/Manifest\\\$\*.class\",\ \"\*/\*GEN_JNI.class\"\] 264*8975f5c5SAndroid Build Coastguard Worker # --enable-errorprone 265*8975f5c5SAndroid Build Coastguard Worker # @gen/chrome/android/chrome_test_java.sources 266*8975f5c5SAndroid Build Coastguard Worker 267*8975f5c5SAndroid Build Coastguard Worker out = cmd.outputs[0] 268*8975f5c5SAndroid Build Coastguard Worker outputs = [ 269*8975f5c5SAndroid Build Coastguard Worker out + ".md5.stamp", 270*8975f5c5SAndroid Build Coastguard Worker ] 271*8975f5c5SAndroid Build Coastguard Worker 272*8975f5c5SAndroid Build Coastguard Worker inputs = [] 273*8975f5c5SAndroid Build Coastguard Worker for i, arg in enumerate(cmd.args): 274*8975f5c5SAndroid Build Coastguard Worker for k in ["--classpath=", "--bootclasspath=", "--processorpath="]: 275*8975f5c5SAndroid Build Coastguard Worker if arg.startswith(k): 276*8975f5c5SAndroid Build Coastguard Worker arg = arg.removeprefix(k) 277*8975f5c5SAndroid Build Coastguard Worker fn, v = __filearg(ctx, arg) 278*8975f5c5SAndroid Build Coastguard Worker if fn: 279*8975f5c5SAndroid Build Coastguard Worker inputs.append(ctx.fs.canonpath(fn)) 280*8975f5c5SAndroid Build Coastguard Worker for f in v: 281*8975f5c5SAndroid Build Coastguard Worker f, _, _ = f.partition(":") 282*8975f5c5SAndroid Build Coastguard Worker inputs.append(ctx.fs.canonpath(f)) 283*8975f5c5SAndroid Build Coastguard Worker 284*8975f5c5SAndroid Build Coastguard Worker ctx.actions.fix( 285*8975f5c5SAndroid Build Coastguard Worker inputs = cmd.inputs + inputs, 286*8975f5c5SAndroid Build Coastguard Worker outputs = cmd.outputs + outputs, 287*8975f5c5SAndroid Build Coastguard Worker ) 288*8975f5c5SAndroid Build Coastguard Worker 289*8975f5c5SAndroid Build Coastguard Workerdef __android_dex_handler(ctx, cmd): 290*8975f5c5SAndroid Build Coastguard Worker out = cmd.outputs[0] 291*8975f5c5SAndroid Build Coastguard Worker inputs = [] 292*8975f5c5SAndroid Build Coastguard Worker 293*8975f5c5SAndroid Build Coastguard Worker # Add __dex.desugardeps to the outputs. 294*8975f5c5SAndroid Build Coastguard Worker outputs = [ 295*8975f5c5SAndroid Build Coastguard Worker out + ".md5.stamp", 296*8975f5c5SAndroid Build Coastguard Worker ] 297*8975f5c5SAndroid Build Coastguard Worker for i, arg in enumerate(cmd.args): 298*8975f5c5SAndroid Build Coastguard Worker if arg == "--desugar-dependencies": 299*8975f5c5SAndroid Build Coastguard Worker outputs.append(ctx.fs.canonpath(cmd.args[i + 1])) 300*8975f5c5SAndroid Build Coastguard Worker for k in ["--class-inputs=", "--bootclasspath=", "--classpath=", "--class-inputs-filearg=", "--dex-inputs-filearg="]: 301*8975f5c5SAndroid Build Coastguard Worker if arg.startswith(k): 302*8975f5c5SAndroid Build Coastguard Worker arg = arg.removeprefix(k) 303*8975f5c5SAndroid Build Coastguard Worker _, v = __filearg(ctx, arg) 304*8975f5c5SAndroid Build Coastguard Worker for f in v: 305*8975f5c5SAndroid Build Coastguard Worker f, _, _ = f.partition(":") 306*8975f5c5SAndroid Build Coastguard Worker f = ctx.fs.canonpath(f) 307*8975f5c5SAndroid Build Coastguard Worker inputs.append(f) 308*8975f5c5SAndroid Build Coastguard Worker 309*8975f5c5SAndroid Build Coastguard Worker # TODO: dex.py takes --incremental-dir to reuse the .dex produced in a previous build. 310*8975f5c5SAndroid Build Coastguard Worker # Should remote dex action also take this? 311*8975f5c5SAndroid Build Coastguard Worker ctx.actions.fix( 312*8975f5c5SAndroid Build Coastguard Worker inputs = cmd.inputs + inputs, 313*8975f5c5SAndroid Build Coastguard Worker outputs = cmd.outputs + outputs, 314*8975f5c5SAndroid Build Coastguard Worker ) 315*8975f5c5SAndroid Build Coastguard Worker 316*8975f5c5SAndroid Build Coastguard Workerdef __android_proguard_handler(ctx, cmd): 317*8975f5c5SAndroid Build Coastguard Worker inputs = [] 318*8975f5c5SAndroid Build Coastguard Worker outputs = [] 319*8975f5c5SAndroid Build Coastguard Worker for i, arg in enumerate(cmd.args): 320*8975f5c5SAndroid Build Coastguard Worker for k in ["--proguard-configs=", "--input-paths="]: 321*8975f5c5SAndroid Build Coastguard Worker if arg.startswith(k): 322*8975f5c5SAndroid Build Coastguard Worker arg = arg.removeprefix(k) 323*8975f5c5SAndroid Build Coastguard Worker fn, v = __filearg(ctx, arg) 324*8975f5c5SAndroid Build Coastguard Worker if fn: 325*8975f5c5SAndroid Build Coastguard Worker inputs.append(ctx.fs.canonpath(fn)) 326*8975f5c5SAndroid Build Coastguard Worker for f in v: 327*8975f5c5SAndroid Build Coastguard Worker f, _, _ = f.partition(":") 328*8975f5c5SAndroid Build Coastguard Worker inputs.append(ctx.fs.canonpath(f)) 329*8975f5c5SAndroid Build Coastguard Worker break 330*8975f5c5SAndroid Build Coastguard Worker if arg in ["--sdk-jars", "--sdk-extension-jars"]: 331*8975f5c5SAndroid Build Coastguard Worker fn, v = __filearg(ctx, cmd.args[i + 1]) 332*8975f5c5SAndroid Build Coastguard Worker if fn: 333*8975f5c5SAndroid Build Coastguard Worker inputs.append(ctx.fs.canonpath(fn)) 334*8975f5c5SAndroid Build Coastguard Worker for f in v: 335*8975f5c5SAndroid Build Coastguard Worker f, _, _ = f.partition(":") 336*8975f5c5SAndroid Build Coastguard Worker inputs.append(ctx.fs.canonpath(f)) 337*8975f5c5SAndroid Build Coastguard Worker continue 338*8975f5c5SAndroid Build Coastguard Worker if arg.startswith("--dex-dest="): 339*8975f5c5SAndroid Build Coastguard Worker arg = arg.removeprefix("--dex-dest=") 340*8975f5c5SAndroid Build Coastguard Worker fn, v = __filearg(ctx, arg) 341*8975f5c5SAndroid Build Coastguard Worker if fn: 342*8975f5c5SAndroid Build Coastguard Worker inputs.append(ctx.fs.canonpath(fn)) 343*8975f5c5SAndroid Build Coastguard Worker for f in v: 344*8975f5c5SAndroid Build Coastguard Worker f, _, _ = f.partition(":") 345*8975f5c5SAndroid Build Coastguard Worker outputs.append(ctx.fs.canonpath(f)) 346*8975f5c5SAndroid Build Coastguard Worker continue 347*8975f5c5SAndroid Build Coastguard Worker 348*8975f5c5SAndroid Build Coastguard Worker ctx.actions.fix( 349*8975f5c5SAndroid Build Coastguard Worker inputs = cmd.inputs + inputs, 350*8975f5c5SAndroid Build Coastguard Worker outputs = cmd.outputs + outputs, 351*8975f5c5SAndroid Build Coastguard Worker ) 352*8975f5c5SAndroid Build Coastguard Worker 353*8975f5c5SAndroid Build Coastguard Workerdef __android_turbine_handler(ctx, cmd): 354*8975f5c5SAndroid Build Coastguard Worker inputs = [] 355*8975f5c5SAndroid Build Coastguard Worker for i, arg in enumerate(cmd.args): 356*8975f5c5SAndroid Build Coastguard Worker for k in ["--classpath=", "--processorpath="]: 357*8975f5c5SAndroid Build Coastguard Worker if arg.startswith(k): 358*8975f5c5SAndroid Build Coastguard Worker arg = arg.removeprefix(k) 359*8975f5c5SAndroid Build Coastguard Worker _, v = __filearg(ctx, arg) 360*8975f5c5SAndroid Build Coastguard Worker for f in v: 361*8975f5c5SAndroid Build Coastguard Worker f, _, _ = f.partition(":") 362*8975f5c5SAndroid Build Coastguard Worker inputs.append(ctx.fs.canonpath(f)) 363*8975f5c5SAndroid Build Coastguard Worker 364*8975f5c5SAndroid Build Coastguard Worker ctx.actions.fix( 365*8975f5c5SAndroid Build Coastguard Worker inputs = cmd.inputs + inputs, 366*8975f5c5SAndroid Build Coastguard Worker ) 367*8975f5c5SAndroid Build Coastguard Worker 368*8975f5c5SAndroid Build Coastguard Workerdef __deps_configs(ctx, f, seen, inputs): 369*8975f5c5SAndroid Build Coastguard Worker if f in seen: 370*8975f5c5SAndroid Build Coastguard Worker return 371*8975f5c5SAndroid Build Coastguard Worker seen[f] = True 372*8975f5c5SAndroid Build Coastguard Worker inputs.append(f) 373*8975f5c5SAndroid Build Coastguard Worker v = json.decode(str(ctx.fs.read(f))) 374*8975f5c5SAndroid Build Coastguard Worker for f in v["deps_info"]["deps_configs"]: 375*8975f5c5SAndroid Build Coastguard Worker f = ctx.fs.canonpath(f) 376*8975f5c5SAndroid Build Coastguard Worker __deps_configs(ctx, f, seen, inputs) 377*8975f5c5SAndroid Build Coastguard Worker if "public_deps_configs" in v["deps_info"]: 378*8975f5c5SAndroid Build Coastguard Worker for f in v["deps_info"]["public_deps_configs"]: 379*8975f5c5SAndroid Build Coastguard Worker f = ctx.fs.canonpath(f) 380*8975f5c5SAndroid Build Coastguard Worker __deps_configs(ctx, f, seen, inputs) 381*8975f5c5SAndroid Build Coastguard Worker 382*8975f5c5SAndroid Build Coastguard Workerdef __android_write_build_config_handler(ctx, cmd): 383*8975f5c5SAndroid Build Coastguard Worker # Script: 384*8975f5c5SAndroid Build Coastguard Worker # https://crsrc.org/c/build/android/gyp/write_build_config.py 385*8975f5c5SAndroid Build Coastguard Worker # GN Config: 386*8975f5c5SAndroid Build Coastguard Worker # https://crsrc.org/c/build/config/android/internal_rules.gni;l=122;drc=99e4f79301e108ea3d27ec84320f430490382587 387*8975f5c5SAndroid Build Coastguard Worker # Sample args: 388*8975f5c5SAndroid Build Coastguard Worker # --type=java_library 389*8975f5c5SAndroid Build Coastguard Worker # --depfile gen/third_party/android_deps/org_jetbrains_kotlinx_kotlinx_metadata_jvm_java__build_config_crbug_908819.d 390*8975f5c5SAndroid Build Coastguard Worker # --deps-configs=\[\"gen/third_party/kotlin_stdlib/kotlin_stdlib_java.build_config.json\"\] 391*8975f5c5SAndroid Build Coastguard Worker # --public-deps-configs=\[\] 392*8975f5c5SAndroid Build Coastguard Worker # --build-config gen/third_party/android_deps/org_jetbrains_kotlinx_kotlinx_metadata_jvm_java.build_config.json 393*8975f5c5SAndroid Build Coastguard Worker # --gn-target //third_party/android_deps:org_jetbrains_kotlinx_kotlinx_metadata_jvm_java 394*8975f5c5SAndroid Build Coastguard Worker # --non-chromium-code 395*8975f5c5SAndroid Build Coastguard Worker # --host-jar-path lib.java/third_party/android_deps/org_jetbrains_kotlinx_kotlinx_metadata_jvm.jar 396*8975f5c5SAndroid Build Coastguard Worker # --unprocessed-jar-path ../../third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_metadata_jvm/kotlinx-metadata-jvm-0.1.0.jar 397*8975f5c5SAndroid Build Coastguard Worker # --interface-jar-path obj/third_party/android_deps/org_jetbrains_kotlinx_kotlinx_metadata_jvm.ijar.jar 398*8975f5c5SAndroid Build Coastguard Worker # --is-prebuilt 399*8975f5c5SAndroid Build Coastguard Worker # --bundled-srcjars=\[\] 400*8975f5c5SAndroid Build Coastguard Worker inputs = [] 401*8975f5c5SAndroid Build Coastguard Worker seen = {} 402*8975f5c5SAndroid Build Coastguard Worker for i, arg in enumerate(cmd.args): 403*8975f5c5SAndroid Build Coastguard Worker if arg in ["--shared-libraries-runtime-deps", "--secondary-abi-shared-libraries-runtime-deps"]: 404*8975f5c5SAndroid Build Coastguard Worker inputs.append(ctx.fs.canonpath(cmd.args[i + 1])) 405*8975f5c5SAndroid Build Coastguard Worker continue 406*8975f5c5SAndroid Build Coastguard Worker if arg == "--tested-apk-config": 407*8975f5c5SAndroid Build Coastguard Worker f = ctx.fs.canonpath(cmd.args[i + 1]) 408*8975f5c5SAndroid Build Coastguard Worker __deps_configs(ctx, f, seen, inputs) 409*8975f5c5SAndroid Build Coastguard Worker continue 410*8975f5c5SAndroid Build Coastguard Worker for k in ["--deps-configs=", "--public-deps-configs=", "--annotation-processor-configs="]: 411*8975f5c5SAndroid Build Coastguard Worker if arg.startswith(k): 412*8975f5c5SAndroid Build Coastguard Worker arg = arg.removeprefix(k) 413*8975f5c5SAndroid Build Coastguard Worker v = json.decode(arg) 414*8975f5c5SAndroid Build Coastguard Worker for f in v: 415*8975f5c5SAndroid Build Coastguard Worker f = ctx.fs.canonpath(f) 416*8975f5c5SAndroid Build Coastguard Worker __deps_configs(ctx, f, seen, inputs) 417*8975f5c5SAndroid Build Coastguard Worker 418*8975f5c5SAndroid Build Coastguard Worker ctx.actions.fix(inputs = cmd.inputs + inputs) 419*8975f5c5SAndroid Build Coastguard Worker 420*8975f5c5SAndroid Build Coastguard Worker__handlers = { 421*8975f5c5SAndroid Build Coastguard Worker "android_compile_java": __android_compile_java_handler, 422*8975f5c5SAndroid Build Coastguard Worker "android_compile_resources": __android_compile_resources_handler, 423*8975f5c5SAndroid Build Coastguard Worker "android_dex": __android_dex_handler, 424*8975f5c5SAndroid Build Coastguard Worker "android_proguard": __android_proguard_handler, 425*8975f5c5SAndroid Build Coastguard Worker "android_turbine": __android_turbine_handler, 426*8975f5c5SAndroid Build Coastguard Worker "android_write_build_config": __android_write_build_config_handler, 427*8975f5c5SAndroid Build Coastguard Worker} 428*8975f5c5SAndroid Build Coastguard Worker 429*8975f5c5SAndroid Build Coastguard Workerandroid = module( 430*8975f5c5SAndroid Build Coastguard Worker "android", 431*8975f5c5SAndroid Build Coastguard Worker enabled = __enabled, 432*8975f5c5SAndroid Build Coastguard Worker step_config = __step_config, 433*8975f5c5SAndroid Build Coastguard Worker filegroups = __filegroups, 434*8975f5c5SAndroid Build Coastguard Worker handlers = __handlers, 435*8975f5c5SAndroid Build Coastguard Worker) 436