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 clang-cl/windows.""" 6*8975f5c5SAndroid Build Coastguard Worker 7*8975f5c5SAndroid Build Coastguard Workerload("@builtin//lib/gn.star", "gn") 8*8975f5c5SAndroid Build Coastguard Workerload("@builtin//path.star", "path") 9*8975f5c5SAndroid Build Coastguard Workerload("@builtin//struct.star", "module") 10*8975f5c5SAndroid Build Coastguard Workerload("./clang_all.star", "clang_all") 11*8975f5c5SAndroid Build Coastguard Workerload("./clang_code_coverage_wrapper.star", "clang_code_coverage_wrapper") 12*8975f5c5SAndroid Build Coastguard Workerload("./config.star", "config") 13*8975f5c5SAndroid Build Coastguard Workerload("./gn_logs.star", "gn_logs") 14*8975f5c5SAndroid Build Coastguard Workerload("./reproxy.star", "reproxy") 15*8975f5c5SAndroid Build Coastguard Workerload("./rewrapper_cfg.star", "rewrapper_cfg") 16*8975f5c5SAndroid Build Coastguard Workerload("./win_sdk.star", "win_sdk") 17*8975f5c5SAndroid Build Coastguard Worker 18*8975f5c5SAndroid Build Coastguard Workerdef __filegroups(ctx): 19*8975f5c5SAndroid Build Coastguard Worker fg = {} 20*8975f5c5SAndroid Build Coastguard Worker fg.update(win_sdk.filegroups(ctx)) 21*8975f5c5SAndroid Build Coastguard Worker fg.update(clang_all.filegroups(ctx)) 22*8975f5c5SAndroid Build Coastguard Worker return fg 23*8975f5c5SAndroid Build Coastguard Worker 24*8975f5c5SAndroid Build Coastguard Workerdef __clang_compile_coverage(ctx, cmd): 25*8975f5c5SAndroid Build Coastguard Worker clang_command = clang_code_coverage_wrapper.run(ctx, list(cmd.args)) 26*8975f5c5SAndroid Build Coastguard Worker ctx.actions.fix(args = clang_command) 27*8975f5c5SAndroid Build Coastguard Worker 28*8975f5c5SAndroid Build Coastguard Worker__handlers = { 29*8975f5c5SAndroid Build Coastguard Worker "clang_compile_coverage": __clang_compile_coverage, 30*8975f5c5SAndroid Build Coastguard Worker} 31*8975f5c5SAndroid Build Coastguard Worker 32*8975f5c5SAndroid Build Coastguard Workerdef __step_config(ctx, step_config): 33*8975f5c5SAndroid Build Coastguard Worker cfg = "buildtools/reclient_cfgs/chromium-browser-clang/rewrapper_windows.cfg" 34*8975f5c5SAndroid Build Coastguard Worker if ctx.fs.exists(cfg): 35*8975f5c5SAndroid Build Coastguard Worker reproxy_config = rewrapper_cfg.parse(ctx, cfg) 36*8975f5c5SAndroid Build Coastguard Worker largePlatform = {} 37*8975f5c5SAndroid Build Coastguard Worker for k, v in reproxy_config["platform"].items(): 38*8975f5c5SAndroid Build Coastguard Worker if k.startswith("label:action"): 39*8975f5c5SAndroid Build Coastguard Worker continue 40*8975f5c5SAndroid Build Coastguard Worker largePlatform[k] = v 41*8975f5c5SAndroid Build Coastguard Worker 42*8975f5c5SAndroid Build Coastguard Worker # no "action_large" Windows worker pool 43*8975f5c5SAndroid Build Coastguard Worker windowsWorker = True 44*8975f5c5SAndroid Build Coastguard Worker if reproxy_config["platform"]["OSFamily"] != "Windows": 45*8975f5c5SAndroid Build Coastguard Worker largePlatform["label:action_large"] = "1" 46*8975f5c5SAndroid Build Coastguard Worker windowsWorker = False 47*8975f5c5SAndroid Build Coastguard Worker step_config["platforms"].update({ 48*8975f5c5SAndroid Build Coastguard Worker "clang-cl": reproxy_config["platform"], 49*8975f5c5SAndroid Build Coastguard Worker "clang-cl_large": largePlatform, 50*8975f5c5SAndroid Build Coastguard Worker }) 51*8975f5c5SAndroid Build Coastguard Worker step_config["input_deps"].update(clang_all.input_deps) 52*8975f5c5SAndroid Build Coastguard Worker 53*8975f5c5SAndroid Build Coastguard Worker # when win_toolchain_dir is unknown (e.g. 54*8975f5c5SAndroid Build Coastguard Worker # missing build/win_toolchain.json), we can't run 55*8975f5c5SAndroid Build Coastguard Worker # clang-cl remotely as we can find sysroot files 56*8975f5c5SAndroid Build Coastguard Worker # under exec_root, so just run locally. 57*8975f5c5SAndroid Build Coastguard Worker # When building with ToT Clang, we can't run clang-cl 58*8975f5c5SAndroid Build Coastguard Worker # remotely, too. 59*8975f5c5SAndroid Build Coastguard Worker remote = False 60*8975f5c5SAndroid Build Coastguard Worker win_toolchain_dir = win_sdk.toolchain_dir(ctx) 61*8975f5c5SAndroid Build Coastguard Worker if win_toolchain_dir: 62*8975f5c5SAndroid Build Coastguard Worker remote = True 63*8975f5c5SAndroid Build Coastguard Worker if reproxy_config["platform"]["OSFamily"] == "Windows": 64*8975f5c5SAndroid Build Coastguard Worker step_config["input_deps"].update({ 65*8975f5c5SAndroid Build Coastguard Worker win_toolchain_dir + ":headers": [ 66*8975f5c5SAndroid Build Coastguard Worker win_toolchain_dir + ":headers-ci", 67*8975f5c5SAndroid Build Coastguard Worker ], 68*8975f5c5SAndroid Build Coastguard Worker }) 69*8975f5c5SAndroid Build Coastguard Worker else: 70*8975f5c5SAndroid Build Coastguard Worker win_sdk.step_config(ctx, step_config) 71*8975f5c5SAndroid Build Coastguard Worker remote_wrapper = reproxy_config.get("remote_wrapper") 72*8975f5c5SAndroid Build Coastguard Worker input_root_absolute_path = gn_logs.read(ctx).get("clang_need_input_root_absolute_path") == "true" 73*8975f5c5SAndroid Build Coastguard Worker canonicalize_dir = not input_root_absolute_path 74*8975f5c5SAndroid Build Coastguard Worker 75*8975f5c5SAndroid Build Coastguard Worker timeout = "2m" 76*8975f5c5SAndroid Build Coastguard Worker if (not reproxy.enabled(ctx)) and windowsWorker: 77*8975f5c5SAndroid Build Coastguard Worker # use longer timeout for siso native 78*8975f5c5SAndroid Build Coastguard Worker # it takes long time for input fetch (many files in sysroot etc) 79*8975f5c5SAndroid Build Coastguard Worker timeout = "4m" 80*8975f5c5SAndroid Build Coastguard Worker 81*8975f5c5SAndroid Build Coastguard Worker step_config["rules"].extend([ 82*8975f5c5SAndroid Build Coastguard Worker { 83*8975f5c5SAndroid Build Coastguard Worker "name": "clang-cl/cxx", 84*8975f5c5SAndroid Build Coastguard Worker "action": "(.*_)?cxx", 85*8975f5c5SAndroid Build Coastguard Worker "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe", 86*8975f5c5SAndroid Build Coastguard Worker "inputs": [ 87*8975f5c5SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang-cl.exe", 88*8975f5c5SAndroid Build Coastguard Worker ], 89*8975f5c5SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 90*8975f5c5SAndroid Build Coastguard Worker "platform_ref": "clang-cl", 91*8975f5c5SAndroid Build Coastguard Worker "remote": remote, 92*8975f5c5SAndroid Build Coastguard Worker "input_root_absolute_path": input_root_absolute_path, 93*8975f5c5SAndroid Build Coastguard Worker "canonicalize_dir": canonicalize_dir, 94*8975f5c5SAndroid Build Coastguard Worker "remote_wrapper": remote_wrapper, 95*8975f5c5SAndroid Build Coastguard Worker "timeout": timeout, 96*8975f5c5SAndroid Build Coastguard Worker }, 97*8975f5c5SAndroid Build Coastguard Worker { 98*8975f5c5SAndroid Build Coastguard Worker "name": "clang-cl/cc", 99*8975f5c5SAndroid Build Coastguard Worker "action": "(.*_)?cc", 100*8975f5c5SAndroid Build Coastguard Worker "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe", 101*8975f5c5SAndroid Build Coastguard Worker "inputs": [ 102*8975f5c5SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang-cl.exe", 103*8975f5c5SAndroid Build Coastguard Worker ], 104*8975f5c5SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 105*8975f5c5SAndroid Build Coastguard Worker "platform_ref": "clang-cl", 106*8975f5c5SAndroid Build Coastguard Worker "remote": remote, 107*8975f5c5SAndroid Build Coastguard Worker "input_root_absolute_path": input_root_absolute_path, 108*8975f5c5SAndroid Build Coastguard Worker "canonicalize_dir": canonicalize_dir, 109*8975f5c5SAndroid Build Coastguard Worker "remote_wrapper": remote_wrapper, 110*8975f5c5SAndroid Build Coastguard Worker "timeout": timeout, 111*8975f5c5SAndroid Build Coastguard Worker }, 112*8975f5c5SAndroid Build Coastguard Worker { 113*8975f5c5SAndroid Build Coastguard Worker "name": "clang-coverage/cxx", 114*8975f5c5SAndroid Build Coastguard Worker "action": "(.*_)?cxx", 115*8975f5c5SAndroid Build Coastguard Worker "command_prefix": "python3.exe ../../build/toolchain/clang_code_coverage_wrapper.py", 116*8975f5c5SAndroid Build Coastguard Worker "inputs": [ 117*8975f5c5SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang++", 118*8975f5c5SAndroid Build Coastguard Worker ], 119*8975f5c5SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 120*8975f5c5SAndroid Build Coastguard Worker "handler": "clang_compile_coverage", 121*8975f5c5SAndroid Build Coastguard Worker "platform_ref": "clang-cl", 122*8975f5c5SAndroid Build Coastguard Worker "remote": remote, 123*8975f5c5SAndroid Build Coastguard Worker "input_root_absolute_path": input_root_absolute_path, 124*8975f5c5SAndroid Build Coastguard Worker "canonicalize_dir": canonicalize_dir, 125*8975f5c5SAndroid Build Coastguard Worker "remote_wrapper": remote_wrapper, 126*8975f5c5SAndroid Build Coastguard Worker "timeout": timeout, 127*8975f5c5SAndroid Build Coastguard Worker }, 128*8975f5c5SAndroid Build Coastguard Worker { 129*8975f5c5SAndroid Build Coastguard Worker "name": "clang-coverage/cc", 130*8975f5c5SAndroid Build Coastguard Worker "action": "(.*_)?cc", 131*8975f5c5SAndroid Build Coastguard Worker "command_prefix": "python3.exe ../../build/toolchain/clang_code_coverage_wrapper.py", 132*8975f5c5SAndroid Build Coastguard Worker "inputs": [ 133*8975f5c5SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang", 134*8975f5c5SAndroid Build Coastguard Worker ], 135*8975f5c5SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 136*8975f5c5SAndroid Build Coastguard Worker "handler": "clang_compile_coverage", 137*8975f5c5SAndroid Build Coastguard Worker "platform_ref": "clang-cl", 138*8975f5c5SAndroid Build Coastguard Worker "remote": remote, 139*8975f5c5SAndroid Build Coastguard Worker "input_root_absolute_path": input_root_absolute_path, 140*8975f5c5SAndroid Build Coastguard Worker "canonicalize_dir": canonicalize_dir, 141*8975f5c5SAndroid Build Coastguard Worker "remote_wrapper": remote_wrapper, 142*8975f5c5SAndroid Build Coastguard Worker "timeout": timeout, 143*8975f5c5SAndroid Build Coastguard Worker }, 144*8975f5c5SAndroid Build Coastguard Worker ]) 145*8975f5c5SAndroid Build Coastguard Worker elif gn.args(ctx).get("use_remoteexec") == "true": 146*8975f5c5SAndroid Build Coastguard Worker fail("remoteexec requires rewrapper config") 147*8975f5c5SAndroid Build Coastguard Worker return step_config 148*8975f5c5SAndroid Build Coastguard Worker 149*8975f5c5SAndroid Build Coastguard Workerclang = module( 150*8975f5c5SAndroid Build Coastguard Worker "clang", 151*8975f5c5SAndroid Build Coastguard Worker step_config = __step_config, 152*8975f5c5SAndroid Build Coastguard Worker filegroups = __filegroups, 153*8975f5c5SAndroid Build Coastguard Worker handlers = __handlers, 154*8975f5c5SAndroid Build Coastguard Worker) 155