android.star (25474B)
1 # -*- bazel-starlark -*- 2 # Copyright 2023 The Chromium Authors 3 # Use of this source code is governed by a BSD-style license that can be 4 # found in the LICENSE file. 5 """Siso configuration for Android builds.""" 6 7 load("@builtin//encoding.star", "json") 8 load("@builtin//lib/gn.star", "gn") 9 load("@builtin//struct.star", "module") 10 load("./config.star", "config") 11 load("./gn_logs.star", "gn_logs") 12 13 # TODO: crbug.com/323091468 - Propagate target android ABI and 14 # android SDK version from GN, and remove the hardcoded filegroups. 15 __archs = [ 16 "aarch64-linux-android", 17 "arm-linux-androideabi", 18 "i686-linux-android", 19 "riscv64-linux-android", 20 "x86_64-linux-android", 21 ] 22 23 def __enabled(ctx): 24 if "args.gn" in ctx.metadata: 25 gn_args = gn.args(ctx) 26 if gn_args.get("target_os") == '"android"': 27 return True 28 return False 29 30 def __filegroups(ctx): 31 fg = {} 32 for arch in __archs: 33 api_level = gn_logs.read(ctx).get("android64_ndk_api_level") 34 if api_level: 35 group = "third_party/android_toolchain/ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/%s/%s:link" % (arch, api_level) 36 fg[group] = { 37 "type": "glob", 38 "includes": ["*"], 39 } 40 return fg 41 42 def __step_config(ctx, step_config): 43 remote_run = True # Turn this to False when you do file access trace. 44 45 # Run static analysis steps locally when build server is enabled. 46 # https://chromium.googlesource.com/chromium/src/+/main/docs/android_build_instructions.md#asynchronous-static-analysis 47 remote_run_static_analysis = True 48 if "args.gn" in ctx.metadata: 49 gn_args = gn.args(ctx) 50 if gn_args.get("android_static_analysis") == '"build_server"': 51 remote_run_static_analysis = False 52 53 step_config["rules"].extend([ 54 # See also https://chromium.googlesource.com/chromium/src/build/+/HEAD/android/docs/java_toolchain.md 55 { 56 "name": "android/write_build_config", 57 "command_prefix": "python3 ../../build/android/gyp/write_build_config.py", 58 "handler": "android_write_build_config", 59 "remote": remote_run, 60 "canonicalize_dir": True, 61 "timeout": "2m", 62 }, 63 { 64 "name": "android/ijar", 65 "command_prefix": "python3 ../../build/android/gyp/ijar.py", 66 "remote": remote_run, 67 "canonicalize_dir": True, 68 "timeout": "2m", 69 }, 70 { 71 "name": "android/turbine", 72 "command_prefix": "python3 ../../build/android/gyp/turbine.py", 73 "handler": "android_turbine", 74 # TODO: crbug.com/396220357 - fix gn to remove unnecessary deps 75 "exclude_input_patterns": [ 76 "*.a", 77 "*.cc", 78 "*.cpp", 79 "*.h", 80 "*.html", 81 "*.inc", 82 "*.info", 83 "*.js", 84 "*.map", 85 "*.o", 86 "*.pak", 87 "*.proto", 88 "*.sql", 89 "*.stamp", 90 "*.svg", 91 "*.xml", 92 ], 93 "remote": remote_run, 94 "platform_ref": "large", 95 "canonicalize_dir": True, 96 "timeout": "2m", 97 }, 98 { 99 "name": "android/compile_resources", 100 "command_prefix": "python3 ../../build/android/gyp/compile_resources.py", 101 "handler": "android_compile_resources", 102 "exclude_input_patterns": [ 103 "*.a", 104 "*.cc", 105 "*.h", 106 "*.inc", 107 "*.info", 108 "*.o", 109 "*.pak", 110 "*.sql", 111 ], 112 "remote": remote_run, 113 "canonicalize_dir": True, 114 "timeout": "5m", 115 }, 116 { 117 "name": "android/compile_java", 118 "command_prefix": "python3 ../../build/android/gyp/compile_java.py", 119 "handler": "android_compile_java", 120 "exclude_input_patterns": [ 121 "*.a", 122 "*.cc", 123 "*.h", 124 "*.inc", 125 "*.info", 126 "*.o", 127 "*.pak", 128 "*.sql", 129 ], 130 # Don't include files under --generated-dir. 131 # This is probably optimization for local incrmental builds. 132 # However, this is harmful for remote build cache hits. 133 "ignore_extra_input_pattern": ".*srcjars.*\\.java", 134 "ignore_extra_output_pattern": ".*srcjars.*\\.java", 135 "remote": remote_run, 136 "platform_ref": "large", 137 "canonicalize_dir": True, 138 "timeout": "2m", 139 }, 140 { 141 "name": "android/errorprone", 142 "command_prefix": "python3 ../../build/android/gyp/errorprone.py", 143 "handler": "android_compile_java", 144 "exclude_input_patterns": [ 145 "*.a", 146 "*.cc", 147 "*.h", 148 "*.inc", 149 "*.info", 150 "*.o", 151 "*.pak", 152 "*.sql", 153 ], 154 "remote": remote_run_static_analysis, 155 "platform_ref": "large", 156 "canonicalize_dir": True, 157 "timeout": "2m", 158 }, 159 { 160 "name": "android/compile_kt", 161 "command_prefix": "python3 ../../build/android/gyp/compile_kt.py", 162 "handler": "android_compile_java", 163 "exclude_input_patterns": [ 164 "*.a", 165 "*.cc", 166 "*.h", 167 "*.inc", 168 "*.info", 169 "*.o", 170 "*.pak", 171 "*.sql", 172 ], 173 # Don't include files under --generated-dir. 174 # This is probably optimization for local incrmental builds. 175 # However, this is harmful for remote build cache hits. 176 "ignore_extra_input_pattern": ".*srcjars.*\\.java", 177 "ignore_extra_output_pattern": ".*srcjars.*\\.java", 178 "remote": remote_run, 179 "platform_ref": "large", 180 "canonicalize_dir": True, 181 "timeout": "2m", 182 }, 183 { 184 "name": "android/dex", 185 "command_prefix": "python3 ../../build/android/gyp/dex.py", 186 "handler": "android_dex", 187 # TODO(crbug.com/40270798): include only required jar, dex files in GN config. 188 "indirect_inputs": { 189 "includes": ["*.dex", "*.ijar.jar", "*.turbine.jar"], 190 }, 191 "exclude_input_patterns": [ 192 "*.a", 193 "*.cc", 194 "*.h", 195 "*.inc", 196 "*.info", 197 "*.o", 198 "*.pak", 199 "*.sql", 200 ], 201 # *.dex files are intermediate files used in incremental builds. 202 # Fo remote actions, let's ignore them, assuming remote cache hits compensate. 203 "ignore_extra_input_pattern": ".*\\.dex", 204 "ignore_extra_output_pattern": ".*\\.dex", 205 "remote": remote_run, 206 "platform_ref": "large", 207 "canonicalize_dir": True, 208 "timeout": "2m", 209 }, 210 { 211 "name": "android/filter_zip", 212 "command_prefix": "python3 ../../build/android/gyp/filter_zip.py", 213 "remote": remote_run, 214 "canonicalize_dir": True, 215 "timeout": "2m", 216 }, 217 { 218 "name": "android/generate_resource_allowlist", 219 "command_prefix": "python3 ../../tools/resources/generate_resource_allowlist.py", 220 "indirect_inputs": { 221 "includes": ["*.o", "*.a"], 222 }, 223 # When remote linking without bytes enabled, .o, .a files don't 224 # exist on the local file system. 225 # This step also should run remortely to avoid downloading them. 226 "remote": config.get(ctx, "remote-link"), 227 "platform_ref": "large", 228 "canonicalize_dir": True, 229 "timeout": "2m", 230 }, 231 { 232 "name": "android/trace_event_bytecode_rewriter", 233 "command_prefix": "python3 ../../build/android/gyp/trace_event_bytecode_rewriter.py", 234 "handler": "android_trace_event_bytecode_rewriter", 235 "canonicalize_dir": True, 236 "remote": remote_run, 237 "platform_ref": "large", 238 "timeout": "10m", 239 }, 240 { 241 "name": "android/proguard", 242 "command_prefix": "python3 ../../build/android/gyp/proguard.py", 243 "handler": "android_proguard", 244 "exclude_input_patterns": [ 245 "*.a", 246 "*.cc", 247 "*.h", 248 "*.inc", 249 "*.info", 250 "*.o", 251 "*.pak", 252 "*.sql", 253 ], 254 "canonicalize_dir": True, 255 "remote": remote_run, 256 "platform_ref": "large", 257 "timeout": "10m", 258 }, 259 { 260 "name": "android/trace_references", 261 "command_prefix": "python3 ../../build/android/gyp/tracereferences.py", 262 "handler": "android_trace_references", 263 "exclude_input_patterns": [ 264 "*.a", 265 "*.cc", 266 "*.h", 267 "*.inc", 268 "*.info", 269 "*.o", 270 "*.pak", 271 "*.sql", 272 ], 273 "canonicalize_dir": True, 274 "remote": remote_run_static_analysis, 275 "platform_ref": "large", 276 "timeout": "10m", 277 }, 278 ]) 279 return step_config 280 281 def __filearg(ctx, arg): 282 fn = "" 283 if arg.startswith("@FileArg("): 284 f = arg.removeprefix("@FileArg(").removesuffix(")").split(":") 285 fn = f[0].removesuffix("[]") # [] suffix controls expand list? 286 v = json.decode(str(ctx.fs.read(ctx.fs.canonpath(fn)))) 287 for k in f[1:]: 288 v = v[k] 289 arg = v 290 if type(arg) == "string": 291 if arg.startswith("["): 292 return fn, json.decode(arg) 293 return fn, [arg] 294 return fn, arg 295 296 def __android_compile_resources_handler(ctx, cmd): 297 # Script: 298 # https://crsrc.org/c/build/android/gyp/compile_resources.py 299 # GN Config: 300 # https://crsrc.org/c/build/config/android/internal_rules.gni;l=2163;drc=1b15af251f8a255e44f2e3e3e7990e67e87dcc3b 301 # https://crsrc.org/c/build/config/android/system_image.gni;l=58;drc=39debde76e509774287a655285d8556a9b8dc634 302 # Sample args: 303 # --aapt2-path ../../third_party/android_build_tools/aapt2/cipd/aapt2 304 # --android-manifest gen/chrome/android/trichrome_library_system_stub_apk__manifest.xml 305 # --arsc-package-name=org.chromium.trichromelibrary 306 # --arsc-path obj/chrome/android/trichrome_library_system_stub_apk.ap_ 307 # --debuggable 308 # --dependencies-res-zip-overlays=@FileArg\(gen/chrome/android/webapk/shell_apk/maps_go_webapk.build_config.json:deps_info:dependency_zip_overlays\) 309 # --dependencies-res-zips=@FileArg\(gen/chrome/android/webapk/shell_apk/maps_go_webapk.build_config.json:deps_info:dependency_zips\) 310 # --depfile gen/chrome/android/webapk/shell_apk/maps_go_webapk__compile_resources.d 311 # --emit-ids-out=gen/chrome/android/webapk/shell_apk/maps_go_webapk__compile_resources.resource_ids 312 # --extra-res-packages=@FileArg\(gen/chrome/android/webapk/shell_apk/maps_go_webapk.build_config.json:deps_info:extra_package_names\) 313 # --include-resources(=)../../third_party/android_sdk/public/platforms/android-34/android.jar 314 # --info-path obj/chrome/android/webapk/shell_apk/maps_go_webapk.ap_.info 315 # --min-sdk-version=24 316 # --proguard-file obj/chrome/android/webapk/shell_apk/maps_go_webapk/maps_go_webapk.resources.proguard.txt 317 # --r-text-out gen/chrome/android/webapk/shell_apk/maps_go_webapk__compile_resources_R.txt 318 # --rename-manifest-package=org.chromium.trichromelibrary 319 # --srcjar-out gen/chrome/android/webapk/shell_apk/maps_go_webapk__compile_resources.srcjar 320 # --target-sdk-version=33 321 # --version-code 1 322 # --version-name Developer\ Build 323 # --webp-cache-dir=obj/android-webp-cache 324 inputs = [] 325 for i, arg in enumerate(cmd.args): 326 for k in ["--dependencies-res-zips=", "--dependencies-res-zip-overlays=", "--extra-res-packages="]: 327 if arg.startswith(k): 328 arg = arg.removeprefix(k) 329 _, v = __filearg(ctx, arg) 330 for f in v: 331 f = ctx.fs.canonpath(f) 332 inputs.append(f) 333 if k == "--dependencies-res-zips=" and ctx.fs.exists(f + ".info"): 334 inputs.append(f + ".info") 335 336 ctx.actions.fix( 337 inputs = cmd.inputs + inputs, 338 ) 339 340 def __android_compile_java_handler(ctx, cmd): 341 # Script: 342 # https://crsrc.org/c/build/android/gyp/compile_java.py 343 # GN Config: 344 # https://crsrc.org/c/build/config/android/internal_rules.gni;l=2995;drc=775b3a9ebccd468c79592dad43ef46632d3a411f 345 # Sample args: 346 # --depfile=gen/chrome/android/chrome_test_java__compile_java.d 347 # --generated-dir=gen/chrome/android/chrome_test_java/generated_java 348 # --jar-path=obj/chrome/android/chrome_test_java.javac.jar 349 # --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\"\] 350 # --target-name //chrome/android:chrome_test_java__compile_java 351 # --classpath=@FileArg\(gen/chrome/android/chrome_test_java.build_config.json:android:sdk_interface_jars\) 352 # --header-jar obj/chrome/android/chrome_test_java.turbine.jar 353 # --classpath=\[\"obj/chrome/android/chrome_test_java.turbine.jar\"\] 354 # --classpath=@FileArg\(gen/chrome/android/chrome_test_java.build_config.json:deps_info:javac_full_interface_classpath\) 355 # --kotlin-jar-path=obj/chrome/browser/tabmodel/internal/java.kotlinc.jar 356 # --chromium-code=1 357 # --warnings-as-errors 358 # --jar-info-exclude-globs=\[\"\*/R.class\",\ \"\*/R\\\$\*.class\",\ \"\*/Manifest.class\",\ \"\*/Manifest\\\$\*.class\",\ \"\*/\*GEN_JNI.class\"\] 359 # --enable-errorprone 360 # @gen/chrome/android/chrome_test_java.sources 361 362 out = cmd.outputs[0] 363 outputs = [ 364 out + ".md5.stamp", 365 ] 366 367 inputs = [] 368 for i, arg in enumerate(cmd.args): 369 for k in ["--classpath=", "--bootclasspath=", "--processorpath="]: 370 if arg.startswith(k): 371 arg = arg.removeprefix(k) 372 fn, v = __filearg(ctx, arg) 373 if fn: 374 inputs.append(ctx.fs.canonpath(fn)) 375 for f in v: 376 f, _, _ = f.partition(":") 377 inputs.append(ctx.fs.canonpath(f)) 378 379 ctx.actions.fix( 380 inputs = cmd.inputs + inputs, 381 outputs = cmd.outputs + outputs, 382 ) 383 384 def __android_dex_handler(ctx, cmd): 385 out = cmd.outputs[0] 386 inputs = [] 387 388 # Add __dex.desugardeps to the outputs. 389 outputs = [ 390 out + ".md5.stamp", 391 ] 392 for i, arg in enumerate(cmd.args): 393 if arg == "--desugar-dependencies": 394 outputs.append(ctx.fs.canonpath(cmd.args[i + 1])) 395 for k in ["--class-inputs=", "--bootclasspath=", "--classpath=", "--class-inputs-filearg=", "--dex-inputs-filearg="]: 396 if arg.startswith(k): 397 arg = arg.removeprefix(k) 398 _, v = __filearg(ctx, arg) 399 for f in v: 400 f, _, _ = f.partition(":") 401 f = ctx.fs.canonpath(f) 402 inputs.append(f) 403 404 # TODO: dex.py takes --incremental-dir to reuse the .dex produced in a previous build. 405 # Should remote dex action also take this? 406 ctx.actions.fix( 407 inputs = cmd.inputs + inputs, 408 outputs = cmd.outputs + outputs, 409 ) 410 411 def __android_trace_event_bytecode_rewriter(ctx, cmd): 412 # Sample command: 413 # python3 ../../build/android/gyp/trace_event_bytecode_rewriter.py \ 414 # --stamp obj/chrome/android/trichrome_chrome_bundle.trace_event_rewrite.stamp \ 415 # --depfile gen/chrome/android/trichrome_chrome_bundle__trace_event_rewritten.d \ 416 # --script bin/helper/trace_event_adder \ 417 # --classpath @FileArg\(gen/chrome/android/trichrome_chrome_bundle.build_config.json:android:sdk_jars\) \ 418 # --input-jars @FileArg\(gen/chrome/android/trichrome_chrome_bundle.build_config.json:deps_info:device_classpath\) \ 419 # --output-jars @FileArg\(gen/chrome/android/trichrome_chrome_bundle.build_config.json:deps_info:trace_event_rewritten_device_classpath\) 420 inputs = [] 421 outputs = [] 422 script = "" 423 for i, arg in enumerate(cmd.args): 424 if arg in ["--input-jars", "--classpath"]: 425 fn, v = __filearg(ctx, cmd.args[i + 1]) 426 if fn: 427 inputs.append(ctx.fs.canonpath(fn)) 428 for f in v: 429 f, _, _ = f.partition(":") 430 inputs.append(ctx.fs.canonpath(f)) 431 continue 432 if arg == "--output-jars": 433 fn, v = __filearg(ctx, cmd.args[i + 1]) 434 if fn: 435 inputs.append(ctx.fs.canonpath(fn)) 436 for f in v: 437 f, _, _ = f.partition(":") 438 outputs.append(ctx.fs.canonpath(f)) 439 continue 440 if arg == "--script": 441 script = cmd.args[i + 1] 442 continue 443 444 # Find runtime jars for trace_event_adder 445 if script == "bin/helper/trace_event_adder": 446 trace_event_adder_json = json.decode( 447 str(ctx.fs.read(ctx.fs.canonpath("gen/build/android/bytecode/trace_event_adder.build_config.json"))), 448 ) 449 for path in trace_event_adder_json.get("deps_info", {}).get("host_classpath", []): 450 inputs.append(ctx.fs.canonpath(path)) 451 452 ctx.actions.fix( 453 inputs = cmd.inputs + inputs, 454 outputs = cmd.outputs + outputs, 455 ) 456 457 def __android_proguard_handler(ctx, cmd): 458 inputs = [] 459 outputs = [] 460 for i, arg in enumerate(cmd.args): 461 for k in ["--proguard-configs=", "--input-paths=", "--feature-jars="]: 462 if arg.startswith(k): 463 arg = arg.removeprefix(k) 464 fn, v = __filearg(ctx, arg) 465 if fn: 466 inputs.append(ctx.fs.canonpath(fn)) 467 for f in v: 468 f, _, _ = f.partition(":") 469 inputs.append(ctx.fs.canonpath(f)) 470 break 471 if arg in ["--sdk-jars", "--sdk-extension-jars"]: 472 fn, v = __filearg(ctx, cmd.args[i + 1]) 473 if fn: 474 inputs.append(ctx.fs.canonpath(fn)) 475 for f in v: 476 f, _, _ = f.partition(":") 477 inputs.append(ctx.fs.canonpath(f)) 478 continue 479 if arg.startswith("--dex-dest="): 480 arg = arg.removeprefix("--dex-dest=") 481 fn, v = __filearg(ctx, arg) 482 if fn: 483 inputs.append(ctx.fs.canonpath(fn)) 484 for f in v: 485 f, _, _ = f.partition(":") 486 outputs.append(ctx.fs.canonpath(f)) 487 continue 488 489 ctx.actions.fix( 490 inputs = cmd.inputs + inputs, 491 outputs = cmd.outputs + outputs, 492 ) 493 494 def __android_trace_references_handler(ctx, cmd): 495 # Sample command: 496 # python3 ../../build/android/gyp/tracereferences.py \ 497 # --depfile gen/chrome/android/monochrome_public_bundle__dex.d \ 498 # --tracerefs-json gen/chrome/android/monochrome_public_bundle__dex.tracerefs.json \ 499 # --stamp obj/chrome/android/monochrome_public_bundle__dex.tracereferences.stamp --warnings-as-errors 500 # Sample tracerefs.json: 501 # { 502 # "r8jar": "../../third_party/r8/cipd/lib/r8.jar", 503 # "libs": [ 504 # "../../clank/third_party/android_system_sdk/src/android_system.jar", 505 # "../../third_party/android_sdk/xr_extensions/com.android.extensions.xr.jar", 506 # "obj/third_party/android_sdk/window_extensions/androidx_window_extensions_java.javac.jar" 507 # ], 508 # "jobs": [ 509 # { 510 # "name": "", 511 # "jars": [ 512 # "obj/chrome/android/monochrome_public_bundle__base_bundle_module/monochrome_public_bundle__base_bundle_module.r8dex.jar", 513 # "obj/chrome/android/monochrome_public_bundle__chrome_bundle_module/monochrome_public_bundle__chrome_bundle_module.r8dex.jar", 514 # "obj/chrome/android/monochrome_public_bundle__dev_ui_bundle_module/monochrome_public_bundle__dev_ui_bundle_module.r8dex.jar", 515 # "obj/chrome/android/monochrome_public_bundle__stack_unwinder_bundle_module/monochrome_public_bundle__stack_unwinder_bundle_module.r8dex.jar", 516 # "obj/chrome/android/monochrome_public_bundle__test_dummy_bundle_module/monochrome_public_bundle__test_dummy_bundle_module.r8dex.jar" 517 # ] 518 # }, 519 # { 520 # "name": "base", 521 # "jars": [ 522 # "obj/chrome/android/monochrome_public_bundle__base_bundle_module/monochrome_public_bundle__base_bundle_module.r8dex.jar" 523 # ] 524 # } 525 # ] 526 # } 527 inputs = [] 528 for i, arg in enumerate(cmd.args): 529 if arg == "--tracerefs-json": 530 tracerefs_json = json.decode(str(ctx.fs.read(ctx.fs.canonpath(cmd.args[i + 1])))) 531 break 532 533 for lib in tracerefs_json.get("libs", []): 534 inputs.append(ctx.fs.canonpath(lib)) 535 for job in tracerefs_json.get("jobs", []): 536 for jar in job.get("jars", ""): 537 inputs.append(ctx.fs.canonpath(jar)) 538 539 ctx.actions.fix( 540 inputs = cmd.inputs + inputs, 541 ) 542 543 def __android_turbine_handler(ctx, cmd): 544 inputs = [] 545 for i, arg in enumerate(cmd.args): 546 for k in ["--classpath=", "--processorpath="]: 547 if arg.startswith(k): 548 arg = arg.removeprefix(k) 549 _, v = __filearg(ctx, arg) 550 for f in v: 551 f, _, _ = f.partition(":") 552 inputs.append(ctx.fs.canonpath(f)) 553 554 ctx.actions.fix( 555 inputs = cmd.inputs + inputs, 556 ) 557 558 def __deps_configs(ctx, f, seen, inputs): 559 if f in seen: 560 return 561 seen[f] = True 562 inputs.append(f) 563 v = json.decode(str(ctx.fs.read(f))) 564 for f in v["deps_info"]["deps_configs"]: 565 f = ctx.fs.canonpath(f) 566 __deps_configs(ctx, f, seen, inputs) 567 if "public_deps_configs" in v["deps_info"]: 568 for f in v["deps_info"]["public_deps_configs"]: 569 f = ctx.fs.canonpath(f) 570 __deps_configs(ctx, f, seen, inputs) 571 572 def __android_write_build_config_handler(ctx, cmd): 573 # Script: 574 # https://crsrc.org/c/build/android/gyp/write_build_config.py 575 # GN Config: 576 # https://crsrc.org/c/build/config/android/internal_rules.gni;l=122;drc=99e4f79301e108ea3d27ec84320f430490382587 577 # Sample args: 578 # --type=java_library 579 # --depfile gen/third_party/android_deps/org_jetbrains_kotlinx_kotlinx_metadata_jvm_java__build_config_crbug_908819.d 580 # --deps-configs=\[\"gen/third_party/kotlin_stdlib/kotlin_stdlib_java.build_config.json\"\] 581 # --public-deps-configs=\[\] 582 # --build-config gen/third_party/android_deps/org_jetbrains_kotlinx_kotlinx_metadata_jvm_java.build_config.json 583 # --gn-target //third_party/android_deps:org_jetbrains_kotlinx_kotlinx_metadata_jvm_java 584 # --non-chromium-code 585 # --host-jar-path lib.java/third_party/android_deps/org_jetbrains_kotlinx_kotlinx_metadata_jvm.jar 586 # --unprocessed-jar-path ../../third_party/android_deps/libs/org_jetbrains_kotlinx_kotlinx_metadata_jvm/kotlinx-metadata-jvm-0.1.0.jar 587 # --interface-jar-path obj/third_party/android_deps/org_jetbrains_kotlinx_kotlinx_metadata_jvm.ijar.jar 588 # --is-prebuilt 589 # --bundled-srcjars=\[\] 590 inputs = [] 591 seen = {} 592 for i, arg in enumerate(cmd.args): 593 if arg in ["--shared-libraries-runtime-deps", "--secondary-abi-shared-libraries-runtime-deps"]: 594 inputs.append(ctx.fs.canonpath(cmd.args[i + 1])) 595 continue 596 if arg == "--tested-apk-config": 597 f = ctx.fs.canonpath(cmd.args[i + 1]) 598 __deps_configs(ctx, f, seen, inputs) 599 continue 600 for k in ["--deps-configs=", "--public-deps-configs=", "--annotation-processor-configs="]: 601 if arg.startswith(k): 602 arg = arg.removeprefix(k) 603 v = json.decode(arg) 604 for f in v: 605 f = ctx.fs.canonpath(f) 606 __deps_configs(ctx, f, seen, inputs) 607 608 ctx.actions.fix(inputs = cmd.inputs + inputs) 609 610 __handlers = { 611 "android_compile_java": __android_compile_java_handler, 612 "android_compile_resources": __android_compile_resources_handler, 613 "android_dex": __android_dex_handler, 614 "android_trace_event_bytecode_rewriter": __android_trace_event_bytecode_rewriter, 615 "android_proguard": __android_proguard_handler, 616 "android_trace_references": __android_trace_references_handler, 617 "android_turbine": __android_turbine_handler, 618 "android_write_build_config": __android_write_build_config_handler, 619 } 620 621 android = module( 622 "android", 623 enabled = __enabled, 624 archs = __archs, 625 step_config = __step_config, 626 filegroups = __filegroups, 627 handlers = __handlers, 628 )