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