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 rewriting remote calls into reproxy config.""" 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//path.star", "path") 10*6777b538SAndroid Build Coastguard Workerload("@builtin//struct.star", "module") 11*6777b538SAndroid Build Coastguard Workerload("./clang_code_coverage_wrapper.star", "clang_code_coverage_wrapper") 12*6777b538SAndroid Build Coastguard Workerload("./config.star", "config") 13*6777b538SAndroid Build Coastguard Workerload("./platform.star", "platform") 14*6777b538SAndroid Build Coastguard Workerload("./rewrapper_cfg.star", "rewrapper_cfg") 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Workerdef __filegroups(ctx): 17*6777b538SAndroid Build Coastguard Worker return {} 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Workerdef __parse_rewrapper_cmdline(ctx, cmd): 20*6777b538SAndroid Build Coastguard Worker if not "rewrapper" in cmd.args[0]: 21*6777b538SAndroid Build Coastguard Worker return [], "", False 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker # Example command: 24*6777b538SAndroid Build Coastguard Worker # ../../buildtools/reclient/rewrapper 25*6777b538SAndroid Build Coastguard Worker # -cfg=../../buildtools/reclient_cfgs/chromium-browser-clang/rewrapper_linux.cfg 26*6777b538SAndroid Build Coastguard Worker # -inputs=build/config/unsafe_buffers_paths.txt 27*6777b538SAndroid Build Coastguard Worker # -exec_root=/path/to/your/chromium/src/ 28*6777b538SAndroid Build Coastguard Worker # ../../third_party/llvm-build/Release+Asserts/bin/clang++ 29*6777b538SAndroid Build Coastguard Worker # [rest of clang args] 30*6777b538SAndroid Build Coastguard Worker # We don't need to care about: 31*6777b538SAndroid Build Coastguard Worker # -exec_root: Siso already knows this. 32*6777b538SAndroid Build Coastguard Worker wrapped_command_pos = -1 33*6777b538SAndroid Build Coastguard Worker cfg_file = None 34*6777b538SAndroid Build Coastguard Worker skip = "" 35*6777b538SAndroid Build Coastguard Worker rw_ops = {} 36*6777b538SAndroid Build Coastguard Worker for i, arg in enumerate(cmd.args): 37*6777b538SAndroid Build Coastguard Worker if i == 0: 38*6777b538SAndroid Build Coastguard Worker continue 39*6777b538SAndroid Build Coastguard Worker if arg.startswith("-cfg="): 40*6777b538SAndroid Build Coastguard Worker cfg_file = ctx.fs.canonpath(arg.removeprefix("-cfg=")) 41*6777b538SAndroid Build Coastguard Worker continue 42*6777b538SAndroid Build Coastguard Worker if arg.startswith("-inputs=") or skip == "-inputs": 43*6777b538SAndroid Build Coastguard Worker rw_ops["inputs"] = arg.removeprefix("-inputs=").split(",") 44*6777b538SAndroid Build Coastguard Worker skip = "" 45*6777b538SAndroid Build Coastguard Worker continue 46*6777b538SAndroid Build Coastguard Worker if arg == "-inputs": 47*6777b538SAndroid Build Coastguard Worker skip = arg 48*6777b538SAndroid Build Coastguard Worker continue 49*6777b538SAndroid Build Coastguard Worker if not arg.startswith("-"): 50*6777b538SAndroid Build Coastguard Worker wrapped_command_pos = i 51*6777b538SAndroid Build Coastguard Worker break 52*6777b538SAndroid Build Coastguard Worker if wrapped_command_pos < 1: 53*6777b538SAndroid Build Coastguard Worker fail("couldn't find first non-arg passed to rewrapper for %s" % str(cmd.args)) 54*6777b538SAndroid Build Coastguard Worker if not cfg_file: 55*6777b538SAndroid Build Coastguard Worker return cmd.args[wrapped_command_pos:], rw_ops, True 56*6777b538SAndroid Build Coastguard Worker rw_cfg_opts = rewrapper_cfg.parse(ctx, cfg_file) 57*6777b538SAndroid Build Coastguard Worker 58*6777b538SAndroid Build Coastguard Worker # Command line options have higher priority than the ones in the cfg file. 59*6777b538SAndroid Build Coastguard Worker rw_cfg_opts.update(rw_ops) 60*6777b538SAndroid Build Coastguard Worker return cmd.args[wrapped_command_pos:], rw_cfg_opts, True 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Workerdef __parse_cros_rewrapper_cmdline(ctx, cmd): 63*6777b538SAndroid Build Coastguard Worker # fix cros sdk clang command line and extract rewrapper cfg. 64*6777b538SAndroid Build Coastguard Worker # Example command: 65*6777b538SAndroid Build Coastguard Worker # ../../build/cros_cache/chrome-sdk/symlinks/amd64-generic+15629.0.0+target_toolchain/bin/x86_64-cros-linux-gnu-clang++ 66*6777b538SAndroid Build Coastguard Worker # -MMD -MF obj/third_party/abseil-cpp/absl/base/base/spinlock.o.d 67*6777b538SAndroid Build Coastguard Worker # ... 68*6777b538SAndroid Build Coastguard Worker # --rewrapper-path /usr/local/google/home/ukai/src/chromium/src/build/args/chromeos/rewrapper_amd64-generic 69*6777b538SAndroid Build Coastguard Worker # --rewrapper-cfg ../../buildtools/reclient_cfgs/chromium-browser-clang/rewrapper_linux.cfg 70*6777b538SAndroid Build Coastguard Worker # -pipe -march=x86-64 -msse3 ... 71*6777b538SAndroid Build Coastguard Worker cfg_file = None 72*6777b538SAndroid Build Coastguard Worker skip = "" 73*6777b538SAndroid Build Coastguard Worker args = [] 74*6777b538SAndroid Build Coastguard Worker toolchainpath = None 75*6777b538SAndroid Build Coastguard Worker for i, arg in enumerate(cmd.args): 76*6777b538SAndroid Build Coastguard Worker if i == 0: 77*6777b538SAndroid Build Coastguard Worker toolchainpath = path.dir(path.dir(ctx.fs.canonpath(arg))) 78*6777b538SAndroid Build Coastguard Worker args.append(arg) 79*6777b538SAndroid Build Coastguard Worker continue 80*6777b538SAndroid Build Coastguard Worker if skip: 81*6777b538SAndroid Build Coastguard Worker if skip == "--rewrapper-cfg": 82*6777b538SAndroid Build Coastguard Worker cfg_file = ctx.fs.canonpath(arg) 83*6777b538SAndroid Build Coastguard Worker skip = "" 84*6777b538SAndroid Build Coastguard Worker continue 85*6777b538SAndroid Build Coastguard Worker if arg in ("--rewrapper-path", "--rewrapper-cfg"): 86*6777b538SAndroid Build Coastguard Worker skip = arg 87*6777b538SAndroid Build Coastguard Worker continue 88*6777b538SAndroid Build Coastguard Worker args.append(arg) 89*6777b538SAndroid Build Coastguard Worker if not cfg_file: 90*6777b538SAndroid Build Coastguard Worker fail("couldn't find rewrapper cfg file in %s" % str(cmd.args)) 91*6777b538SAndroid Build Coastguard Worker rwcfg = rewrapper_cfg.parse(ctx, cfg_file) 92*6777b538SAndroid Build Coastguard Worker inputs = rwcfg.get("inputs", []) 93*6777b538SAndroid Build Coastguard Worker inputs.extend([ 94*6777b538SAndroid Build Coastguard Worker path.join(toolchainpath, "bin"), 95*6777b538SAndroid Build Coastguard Worker path.join(toolchainpath, "lib"), 96*6777b538SAndroid Build Coastguard Worker path.join(toolchainpath, "usr/bin"), 97*6777b538SAndroid Build Coastguard Worker path.join(toolchainpath, "usr/lib64/clang"), 98*6777b538SAndroid Build Coastguard Worker # TODO: b/320189180 - Simple Chrome builds should use libraries under usr/lib64. 99*6777b538SAndroid Build Coastguard Worker # But, Ninja/Reclient also don't use them unexpectedly. 100*6777b538SAndroid Build Coastguard Worker ]) 101*6777b538SAndroid Build Coastguard Worker rwcfg["inputs"] = inputs 102*6777b538SAndroid Build Coastguard Worker rwcfg["preserve_symlinks"] = True 103*6777b538SAndroid Build Coastguard Worker return args, rwcfg 104*6777b538SAndroid Build Coastguard Worker 105*6777b538SAndroid Build Coastguard Worker# TODO(b/278225415): change gn so this wrapper (and by extension this handler) becomes unnecessary. 106*6777b538SAndroid Build Coastguard Workerdef __parse_clang_code_coverage_wrapper_cmdline(ctx, cmd): 107*6777b538SAndroid Build Coastguard Worker # Example command: 108*6777b538SAndroid Build Coastguard Worker # python3 109*6777b538SAndroid Build Coastguard Worker # ../../build/toolchain/clang_code_coverage_wrapper.py 110*6777b538SAndroid Build Coastguard Worker # --target-os=... 111*6777b538SAndroid Build Coastguard Worker # --files_to_instrument=... 112*6777b538SAndroid Build Coastguard Worker # ../../buildtools/reclient/rewrapper 113*6777b538SAndroid Build Coastguard Worker # -cfg=../../buildtools/reclient_cfgs/chromium-browser-clang/rewrapper_linux.cfg 114*6777b538SAndroid Build Coastguard Worker # -inputs=build/config/unsafe_buffers_paths.txt 115*6777b538SAndroid Build Coastguard Worker # -exec_root=/path/to/your/chromium/src/ 116*6777b538SAndroid Build Coastguard Worker # ../../third_party/llvm-build/Release+Asserts/bin/clang++ 117*6777b538SAndroid Build Coastguard Worker # [rest of clang args] 118*6777b538SAndroid Build Coastguard Worker # We don't need to care about: 119*6777b538SAndroid Build Coastguard Worker # most args to clang_code_coverage_wrapper (need --files_to_instrument as tool_input) 120*6777b538SAndroid Build Coastguard Worker # -exec_root: Siso already knows this. 121*6777b538SAndroid Build Coastguard Worker rewrapper_pos = -1 122*6777b538SAndroid Build Coastguard Worker wrapped_command_pos = -1 123*6777b538SAndroid Build Coastguard Worker cfg_file = None 124*6777b538SAndroid Build Coastguard Worker skip = None 125*6777b538SAndroid Build Coastguard Worker rw_ops = {} 126*6777b538SAndroid Build Coastguard Worker for i, arg in enumerate(cmd.args): 127*6777b538SAndroid Build Coastguard Worker if i < 2: 128*6777b538SAndroid Build Coastguard Worker continue 129*6777b538SAndroid Build Coastguard Worker if rewrapper_pos == -1 and not arg.startswith("-"): 130*6777b538SAndroid Build Coastguard Worker rewrapper_pos = i 131*6777b538SAndroid Build Coastguard Worker continue 132*6777b538SAndroid Build Coastguard Worker if rewrapper_pos > 0 and arg.startswith("-cfg="): 133*6777b538SAndroid Build Coastguard Worker cfg_file = ctx.fs.canonpath(arg.removeprefix("-cfg=")) 134*6777b538SAndroid Build Coastguard Worker continue 135*6777b538SAndroid Build Coastguard Worker if arg.startswith("-inputs=") or skip == "-inputs": 136*6777b538SAndroid Build Coastguard Worker rw_ops["inputs"] = arg.removeprefix("-inputs=").split(",") 137*6777b538SAndroid Build Coastguard Worker skip = "" 138*6777b538SAndroid Build Coastguard Worker continue 139*6777b538SAndroid Build Coastguard Worker if arg == "-inputs": 140*6777b538SAndroid Build Coastguard Worker skip = arg 141*6777b538SAndroid Build Coastguard Worker continue 142*6777b538SAndroid Build Coastguard Worker if rewrapper_pos > 0 and not arg.startswith("-"): 143*6777b538SAndroid Build Coastguard Worker wrapped_command_pos = i 144*6777b538SAndroid Build Coastguard Worker break 145*6777b538SAndroid Build Coastguard Worker if rewrapper_pos < 1: 146*6777b538SAndroid Build Coastguard Worker fail("couldn't find rewrapper in %s" % str(cmd.args)) 147*6777b538SAndroid Build Coastguard Worker if wrapped_command_pos < 1: 148*6777b538SAndroid Build Coastguard Worker fail("couldn't find first non-arg passed to rewrapper for %s" % str(cmd.args)) 149*6777b538SAndroid Build Coastguard Worker if not cfg_file: 150*6777b538SAndroid Build Coastguard Worker fail("couldn't find rewrapper cfg file in %s" % str(cmd.args)) 151*6777b538SAndroid Build Coastguard Worker coverage_wrapper_command = cmd.args[:rewrapper_pos] + cmd.args[wrapped_command_pos:] 152*6777b538SAndroid Build Coastguard Worker clang_command = clang_code_coverage_wrapper.run(ctx, list(coverage_wrapper_command)) 153*6777b538SAndroid Build Coastguard Worker if len(clang_command) > 1 and "/chrome-sdk/" in clang_command[0]: 154*6777b538SAndroid Build Coastguard Worker # TODO: implement cros sdk support under code coverage wrapper 155*6777b538SAndroid Build Coastguard Worker fail("need to fix handler for cros sdk under code coverage wrapper") 156*6777b538SAndroid Build Coastguard Worker rw_cfg_opts = rewrapper_cfg.parse(ctx, cfg_file) 157*6777b538SAndroid Build Coastguard Worker 158*6777b538SAndroid Build Coastguard Worker # Command line options have higher priority than the ones in the cfg file. 159*6777b538SAndroid Build Coastguard Worker rw_cfg_opts.update(rw_ops) 160*6777b538SAndroid Build Coastguard Worker return clang_command, rw_cfg_opts 161*6777b538SAndroid Build Coastguard Worker 162*6777b538SAndroid Build Coastguard Workerdef __rewrite_rewrapper(ctx, cmd, use_large = False): 163*6777b538SAndroid Build Coastguard Worker # If clang-coverage, needs different handling. 164*6777b538SAndroid Build Coastguard Worker if len(cmd.args) > 2 and "clang_code_coverage_wrapper.py" in cmd.args[1]: 165*6777b538SAndroid Build Coastguard Worker args, rwcfg = __parse_clang_code_coverage_wrapper_cmdline(ctx, cmd) 166*6777b538SAndroid Build Coastguard Worker elif len(cmd.args) > 1 and "/chrome-sdk/" in cmd.args[0]: 167*6777b538SAndroid Build Coastguard Worker args, rwcfg = __parse_cros_rewrapper_cmdline(ctx, cmd) 168*6777b538SAndroid Build Coastguard Worker else: 169*6777b538SAndroid Build Coastguard Worker # handling for generic rewrapper. 170*6777b538SAndroid Build Coastguard Worker args, rwcfg, wrapped = __parse_rewrapper_cmdline(ctx, cmd) 171*6777b538SAndroid Build Coastguard Worker if not wrapped: 172*6777b538SAndroid Build Coastguard Worker print("command doesn't have rewrapper. %s" % str(cmd.args)) 173*6777b538SAndroid Build Coastguard Worker return 174*6777b538SAndroid Build Coastguard Worker if not rwcfg: 175*6777b538SAndroid Build Coastguard Worker fail("couldn't find rewrapper cfg file in %s" % str(cmd.args)) 176*6777b538SAndroid Build Coastguard Worker if use_large: 177*6777b538SAndroid Build Coastguard Worker platform = rwcfg.get("platform", {}) 178*6777b538SAndroid Build Coastguard Worker if platform.get("OSFamily") == "Windows": 179*6777b538SAndroid Build Coastguard Worker # Since there is no large Windows workers, it needs to run locally. 180*6777b538SAndroid Build Coastguard Worker ctx.actions.fix(args = args) 181*6777b538SAndroid Build Coastguard Worker return 182*6777b538SAndroid Build Coastguard Worker if platform: 183*6777b538SAndroid Build Coastguard Worker action_key = None 184*6777b538SAndroid Build Coastguard Worker for key in rwcfg["platform"]: 185*6777b538SAndroid Build Coastguard Worker if key.startswith("label:action_"): 186*6777b538SAndroid Build Coastguard Worker action_key = key 187*6777b538SAndroid Build Coastguard Worker break 188*6777b538SAndroid Build Coastguard Worker if action_key: 189*6777b538SAndroid Build Coastguard Worker rwcfg["platform"].pop(action_key) 190*6777b538SAndroid Build Coastguard Worker else: 191*6777b538SAndroid Build Coastguard Worker rwcfg["platform"] = {} 192*6777b538SAndroid Build Coastguard Worker rwcfg["platform"].update({ 193*6777b538SAndroid Build Coastguard Worker "label:action_large": "1", 194*6777b538SAndroid Build Coastguard Worker }) 195*6777b538SAndroid Build Coastguard Worker 196*6777b538SAndroid Build Coastguard Worker # Some large compiles take longer than the default timeout 2m. 197*6777b538SAndroid Build Coastguard Worker rwcfg["exec_timeout"] = "4m" 198*6777b538SAndroid Build Coastguard Worker rwcfg["reclient_timeout"] = "4m" 199*6777b538SAndroid Build Coastguard Worker ctx.actions.fix( 200*6777b538SAndroid Build Coastguard Worker args = args, 201*6777b538SAndroid Build Coastguard Worker reproxy_config = json.encode(rwcfg), 202*6777b538SAndroid Build Coastguard Worker ) 203*6777b538SAndroid Build Coastguard Worker 204*6777b538SAndroid Build Coastguard Workerdef __rewrite_rewrapper_large(ctx, cmd): 205*6777b538SAndroid Build Coastguard Worker return __rewrite_rewrapper(ctx, cmd, use_large = True) 206*6777b538SAndroid Build Coastguard Worker 207*6777b538SAndroid Build Coastguard Workerdef __strip_rewrapper(ctx, cmd): 208*6777b538SAndroid Build Coastguard Worker # If clang-coverage, needs different handling. 209*6777b538SAndroid Build Coastguard Worker if len(cmd.args) > 2 and "clang_code_coverage_wrapper.py" in cmd.args[1]: 210*6777b538SAndroid Build Coastguard Worker args, _ = __parse_clang_code_coverage_wrapper_cmdline(ctx, cmd) 211*6777b538SAndroid Build Coastguard Worker else: 212*6777b538SAndroid Build Coastguard Worker args, _, wrapped = __parse_rewrapper_cmdline(ctx, cmd) 213*6777b538SAndroid Build Coastguard Worker if not wrapped: 214*6777b538SAndroid Build Coastguard Worker print("command doesn't have rewrapper. %s" % str(cmd.args)) 215*6777b538SAndroid Build Coastguard Worker return 216*6777b538SAndroid Build Coastguard Worker ctx.actions.fix(args = args) 217*6777b538SAndroid Build Coastguard Worker 218*6777b538SAndroid Build Coastguard Worker__handlers = { 219*6777b538SAndroid Build Coastguard Worker "rewrite_rewrapper": __rewrite_rewrapper, 220*6777b538SAndroid Build Coastguard Worker "rewrite_rewrapper_large": __rewrite_rewrapper_large, 221*6777b538SAndroid Build Coastguard Worker "strip_rewrapper": __strip_rewrapper, 222*6777b538SAndroid Build Coastguard Worker} 223*6777b538SAndroid Build Coastguard Worker 224*6777b538SAndroid Build Coastguard Workerdef __use_remoteexec(ctx): 225*6777b538SAndroid Build Coastguard Worker if "args.gn" in ctx.metadata: 226*6777b538SAndroid Build Coastguard Worker gn_args = gn.args(ctx) 227*6777b538SAndroid Build Coastguard Worker if gn_args.get("use_remoteexec") == "true": 228*6777b538SAndroid Build Coastguard Worker return True 229*6777b538SAndroid Build Coastguard Worker return False 230*6777b538SAndroid Build Coastguard Worker 231*6777b538SAndroid Build Coastguard Workerdef __step_config(ctx, step_config): 232*6777b538SAndroid Build Coastguard Worker # New rules to convert commands calling rewrapper to use reproxy instead. 233*6777b538SAndroid Build Coastguard Worker new_rules = [] 234*6777b538SAndroid Build Coastguard Worker 235*6777b538SAndroid Build Coastguard Worker # Disable racing on builders since bots don't have many CPU cores. 236*6777b538SAndroid Build Coastguard Worker # TODO: b/297807325 - Siso wants to handle local execution. 237*6777b538SAndroid Build Coastguard Worker # However, Reclient's alerts require racing and local fallback to be 238*6777b538SAndroid Build Coastguard Worker # done on Reproxy side. 239*6777b538SAndroid Build Coastguard Worker exec_strategy = "racing" 240*6777b538SAndroid Build Coastguard Worker if config.get(ctx, "builder"): 241*6777b538SAndroid Build Coastguard Worker exec_strategy = "remote_local_fallback" 242*6777b538SAndroid Build Coastguard Worker 243*6777b538SAndroid Build Coastguard Worker for rule in step_config["rules"]: 244*6777b538SAndroid Build Coastguard Worker # Replace nacl-clang/clang++ rules without command_prefix, because they will incorrectly match rewrapper. 245*6777b538SAndroid Build Coastguard Worker # Replace the original step rule with one that only rewrites rewrapper and convert its rewrapper config to reproxy config. 246*6777b538SAndroid Build Coastguard Worker if rule["name"].find("nacl-clang") >= 0 and not rule.get("command_prefix"): 247*6777b538SAndroid Build Coastguard Worker new_rule = { 248*6777b538SAndroid Build Coastguard Worker "name": rule["name"], 249*6777b538SAndroid Build Coastguard Worker "action": rule["action"], 250*6777b538SAndroid Build Coastguard Worker "handler": "rewrite_rewrapper", 251*6777b538SAndroid Build Coastguard Worker } 252*6777b538SAndroid Build Coastguard Worker new_rules.append(new_rule) 253*6777b538SAndroid Build Coastguard Worker continue 254*6777b538SAndroid Build Coastguard Worker 255*6777b538SAndroid Build Coastguard Worker # clang cxx/cc/objcxx/objc will always have rewrapper config when use_remoteexec=true. 256*6777b538SAndroid Build Coastguard Worker # Remove the native siso handling and replace with custom rewrapper-specific handling. 257*6777b538SAndroid Build Coastguard Worker # All other rule values are not reused, instead use rewrapper config via handler. 258*6777b538SAndroid Build Coastguard Worker # (In particular, command_prefix should be avoided because it will be rewrapper.) 259*6777b538SAndroid Build Coastguard Worker if (rule["name"].startswith("clang/cxx") or rule["name"].startswith("clang/cc") or 260*6777b538SAndroid Build Coastguard Worker rule["name"].startswith("clang-cl/cxx") or rule["name"].startswith("clang-cl/cc") or 261*6777b538SAndroid Build Coastguard Worker rule["name"].startswith("clang/objc")): 262*6777b538SAndroid Build Coastguard Worker if not rule.get("action"): 263*6777b538SAndroid Build Coastguard Worker fail("clang rule %s found without action" % rule["name"]) 264*6777b538SAndroid Build Coastguard Worker 265*6777b538SAndroid Build Coastguard Worker new_rule = { 266*6777b538SAndroid Build Coastguard Worker "name": rule["name"], 267*6777b538SAndroid Build Coastguard Worker "action": rule["action"], 268*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": rule.get("exclude_input_patterns"), 269*6777b538SAndroid Build Coastguard Worker "handler": "rewrite_rewrapper", 270*6777b538SAndroid Build Coastguard Worker "input_root_absolute_path": rule.get("input_root_absolute_path"), 271*6777b538SAndroid Build Coastguard Worker } 272*6777b538SAndroid Build Coastguard Worker new_rules.append(new_rule) 273*6777b538SAndroid Build Coastguard Worker continue 274*6777b538SAndroid Build Coastguard Worker 275*6777b538SAndroid Build Coastguard Worker # clang-coverage/ is handled by the rewrite_rewrapper handler of clang/{cxx, cc} action rules above, so ignore these rules. 276*6777b538SAndroid Build Coastguard Worker if rule["name"].startswith("clang-coverage/"): 277*6777b538SAndroid Build Coastguard Worker continue 278*6777b538SAndroid Build Coastguard Worker 279*6777b538SAndroid Build Coastguard Worker # Add non-remote rules as-is. 280*6777b538SAndroid Build Coastguard Worker if not rule.get("remote"): 281*6777b538SAndroid Build Coastguard Worker new_rules.append(rule) 282*6777b538SAndroid Build Coastguard Worker continue 283*6777b538SAndroid Build Coastguard Worker 284*6777b538SAndroid Build Coastguard Worker # Finally handle remaining remote rules. It's assumed it is enough to only convert native remote config to reproxy config. 285*6777b538SAndroid Build Coastguard Worker platform_ref = rule.get("platform_ref") 286*6777b538SAndroid Build Coastguard Worker if platform_ref: 287*6777b538SAndroid Build Coastguard Worker p = step_config["platforms"].get(platform_ref) 288*6777b538SAndroid Build Coastguard Worker if not p: 289*6777b538SAndroid Build Coastguard Worker fail("Rule %s uses undefined platform '%s'" % (rule["name"], platform_ref)) 290*6777b538SAndroid Build Coastguard Worker else: 291*6777b538SAndroid Build Coastguard Worker p = step_config.get("platforms", {}).get("default") 292*6777b538SAndroid Build Coastguard Worker if not p: 293*6777b538SAndroid Build Coastguard Worker fail("Rule %s did not set platform_ref but no default platform exists" % rule["name"]) 294*6777b538SAndroid Build Coastguard Worker rule["reproxy_config"] = { 295*6777b538SAndroid Build Coastguard Worker "platform": p, 296*6777b538SAndroid Build Coastguard Worker "labels": { 297*6777b538SAndroid Build Coastguard Worker "type": "tool", 298*6777b538SAndroid Build Coastguard Worker "siso_rule": rule["name"], 299*6777b538SAndroid Build Coastguard Worker }, 300*6777b538SAndroid Build Coastguard Worker "canonicalize_working_dir": rule.get("canonicalize_dir", False), 301*6777b538SAndroid Build Coastguard Worker "exec_strategy": exec_strategy, 302*6777b538SAndroid Build Coastguard Worker "exec_timeout": rule.get("timeout", "10m"), 303*6777b538SAndroid Build Coastguard Worker "reclient_timeout": rule.get("timeout", "10m"), 304*6777b538SAndroid Build Coastguard Worker "download_outputs": True, 305*6777b538SAndroid Build Coastguard Worker } 306*6777b538SAndroid Build Coastguard Worker new_rules.append(rule) 307*6777b538SAndroid Build Coastguard Worker 308*6777b538SAndroid Build Coastguard Worker step_config["rules"] = new_rules 309*6777b538SAndroid Build Coastguard Worker return step_config 310*6777b538SAndroid Build Coastguard Worker 311*6777b538SAndroid Build Coastguard Workerreproxy = module( 312*6777b538SAndroid Build Coastguard Worker "reproxy", 313*6777b538SAndroid Build Coastguard Worker enabled = __use_remoteexec, 314*6777b538SAndroid Build Coastguard Worker step_config = __step_config, 315*6777b538SAndroid Build Coastguard Worker filegroups = __filegroups, 316*6777b538SAndroid Build Coastguard Worker handlers = __handlers, 317*6777b538SAndroid Build Coastguard Worker) 318