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 clang/mac.""" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Workerload("@builtin//lib/gn.star", "gn") 8*6777b538SAndroid Build Coastguard Workerload("@builtin//path.star", "path") 9*6777b538SAndroid Build Coastguard Workerload("@builtin//struct.star", "module") 10*6777b538SAndroid Build Coastguard Workerload("./clang_all.star", "clang_all") 11*6777b538SAndroid Build Coastguard Workerload("./clang_code_coverage_wrapper.star", "clang_code_coverage_wrapper") 12*6777b538SAndroid Build Coastguard Workerload("./rewrapper_cfg.star", "rewrapper_cfg") 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Workerdef __filegroups(ctx): 15*6777b538SAndroid Build Coastguard Worker sdk_includes = [ 16*6777b538SAndroid Build Coastguard Worker "*.framework", 17*6777b538SAndroid Build Coastguard Worker "*.h", 18*6777b538SAndroid Build Coastguard Worker "*.json", 19*6777b538SAndroid Build Coastguard Worker "*.modulemap", 20*6777b538SAndroid Build Coastguard Worker "Current", 21*6777b538SAndroid Build Coastguard Worker "Frameworks", 22*6777b538SAndroid Build Coastguard Worker "Headers", 23*6777b538SAndroid Build Coastguard Worker "Modules", 24*6777b538SAndroid Build Coastguard Worker "crt*.o", 25*6777b538SAndroid Build Coastguard Worker "usr/include/c++/v1/*", 26*6777b538SAndroid Build Coastguard Worker "usr/include/c++/v1/*/*", 27*6777b538SAndroid Build Coastguard Worker ] 28*6777b538SAndroid Build Coastguard Worker fg = { 29*6777b538SAndroid Build Coastguard Worker "build/mac_files/xcode_binaries/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk:headers": { 30*6777b538SAndroid Build Coastguard Worker "type": "glob", 31*6777b538SAndroid Build Coastguard Worker "includes": sdk_includes, 32*6777b538SAndroid Build Coastguard Worker }, 33*6777b538SAndroid Build Coastguard Worker } 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker # precompute subtree for sysroot/frameworks for siso scandeps, 36*6777b538SAndroid Build Coastguard Worker # which is not complex enough to handle C preprocessor tricks 37*6777b538SAndroid Build Coastguard Worker # and need system include dirs when using deps log of -MMD. 38*6777b538SAndroid Build Coastguard Worker # need to add new entries when new version is used. 39*6777b538SAndroid Build Coastguard Worker # TODO: b/323091468 - get sysroot, ios_sdk_path from gn 40*6777b538SAndroid Build Coastguard Worker fg[ctx.fs.canonpath("./sdk/xcode_links/MacOSX14.2.sdk") + ":headers"] = { 41*6777b538SAndroid Build Coastguard Worker "type": "glob", 42*6777b538SAndroid Build Coastguard Worker "includes": sdk_includes, 43*6777b538SAndroid Build Coastguard Worker } 44*6777b538SAndroid Build Coastguard Worker fg[ctx.fs.canonpath("./sdk/xcode_links/iPhoneSimulator17.2.sdk") + ":headers"] = { 45*6777b538SAndroid Build Coastguard Worker "type": "glob", 46*6777b538SAndroid Build Coastguard Worker "includes": sdk_includes, 47*6777b538SAndroid Build Coastguard Worker } 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker # https://b.corp.google.com/issues/332652041#comment2 50*6777b538SAndroid Build Coastguard Worker fg[ctx.fs.canonpath("./sdk/xcode_links/MacOSX14.4.sdk") + ":headers"] = { 51*6777b538SAndroid Build Coastguard Worker "type": "glob", 52*6777b538SAndroid Build Coastguard Worker "includes": sdk_includes, 53*6777b538SAndroid Build Coastguard Worker } 54*6777b538SAndroid Build Coastguard Worker fg[ctx.fs.canonpath("./sdk/xcode_links/iPhoneSimulator17.4.sdk") + ":headers"] = { 55*6777b538SAndroid Build Coastguard Worker "type": "glob", 56*6777b538SAndroid Build Coastguard Worker "includes": sdk_includes, 57*6777b538SAndroid Build Coastguard Worker } 58*6777b538SAndroid Build Coastguard Worker fg[ctx.fs.canonpath("./sdk/xcode_links/iPhoneSimulator.platform/Developer/Library/Frameworks") + ":headers"] = { 59*6777b538SAndroid Build Coastguard Worker "type": "glob", 60*6777b538SAndroid Build Coastguard Worker "includes": sdk_includes, 61*6777b538SAndroid Build Coastguard Worker } 62*6777b538SAndroid Build Coastguard Worker fg.update(clang_all.filegroups(ctx)) 63*6777b538SAndroid Build Coastguard Worker return fg 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Workerdef __clang_compile_coverage(ctx, cmd): 66*6777b538SAndroid Build Coastguard Worker clang_command = clang_code_coverage_wrapper.run(ctx, list(cmd.args)) 67*6777b538SAndroid Build Coastguard Worker ctx.actions.fix(args = clang_command) 68*6777b538SAndroid Build Coastguard Worker 69*6777b538SAndroid Build Coastguard Worker__handlers = { 70*6777b538SAndroid Build Coastguard Worker "clang_compile_coverage": __clang_compile_coverage, 71*6777b538SAndroid Build Coastguard Worker} 72*6777b538SAndroid Build Coastguard Worker 73*6777b538SAndroid Build Coastguard Workerdef __step_config(ctx, step_config): 74*6777b538SAndroid Build Coastguard Worker cfg = "buildtools/reclient_cfgs/chromium-browser-clang/rewrapper_mac.cfg" 75*6777b538SAndroid Build Coastguard Worker if ctx.fs.exists(cfg): 76*6777b538SAndroid Build Coastguard Worker reproxy_config = rewrapper_cfg.parse(ctx, cfg) 77*6777b538SAndroid Build Coastguard Worker largePlatform = {} 78*6777b538SAndroid Build Coastguard Worker for k, v in reproxy_config["platform"].items(): 79*6777b538SAndroid Build Coastguard Worker if k.startswith("label:action"): 80*6777b538SAndroid Build Coastguard Worker continue 81*6777b538SAndroid Build Coastguard Worker largePlatform[k] = v 82*6777b538SAndroid Build Coastguard Worker largePlatform["label:action_large"] = "1" 83*6777b538SAndroid Build Coastguard Worker step_config["platforms"].update({ 84*6777b538SAndroid Build Coastguard Worker "clang": reproxy_config["platform"], 85*6777b538SAndroid Build Coastguard Worker "clang_large": largePlatform, 86*6777b538SAndroid Build Coastguard Worker }) 87*6777b538SAndroid Build Coastguard Worker step_config["input_deps"].update(clang_all.input_deps) 88*6777b538SAndroid Build Coastguard Worker 89*6777b538SAndroid Build Coastguard Worker # TODO: https://issues.chromium.org/40120210 - remove this 90*6777b538SAndroid Build Coastguard Worker # once we can use relative path in hmap. 91*6777b538SAndroid Build Coastguard Worker need_input_root_absolute_path_for_objc = False 92*6777b538SAndroid Build Coastguard Worker gn_args = gn.args(ctx) 93*6777b538SAndroid Build Coastguard Worker if gn_args.get("target_os") == "\"ios\"": 94*6777b538SAndroid Build Coastguard Worker # objc/objcxx uses hmap, which contains absolute path 95*6777b538SAndroid Build Coastguard Worker # see also b/256536089 96*6777b538SAndroid Build Coastguard Worker need_input_root_absolute_path_for_objc = True 97*6777b538SAndroid Build Coastguard Worker step_config["rules"].extend([ 98*6777b538SAndroid Build Coastguard Worker { 99*6777b538SAndroid Build Coastguard Worker "name": "clang/cxx", 100*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?cxx", 101*6777b538SAndroid Build Coastguard Worker "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang++", 102*6777b538SAndroid Build Coastguard Worker "inputs": [ 103*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang++", 104*6777b538SAndroid Build Coastguard Worker ], 105*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 106*6777b538SAndroid Build Coastguard Worker "platform_ref": "clang", 107*6777b538SAndroid Build Coastguard Worker "remote": True, 108*6777b538SAndroid Build Coastguard Worker "remote_wrapper": reproxy_config["remote_wrapper"], 109*6777b538SAndroid Build Coastguard Worker "timeout": "2m", 110*6777b538SAndroid Build Coastguard Worker }, 111*6777b538SAndroid Build Coastguard Worker { 112*6777b538SAndroid Build Coastguard Worker "name": "clang/cc", 113*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?cc", 114*6777b538SAndroid Build Coastguard Worker "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang", 115*6777b538SAndroid Build Coastguard Worker "inputs": [ 116*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang", 117*6777b538SAndroid Build Coastguard Worker ], 118*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 119*6777b538SAndroid Build Coastguard Worker "platform_ref": "clang", 120*6777b538SAndroid Build Coastguard Worker "remote": True, 121*6777b538SAndroid Build Coastguard Worker "remote_wrapper": reproxy_config["remote_wrapper"], 122*6777b538SAndroid Build Coastguard Worker "timeout": "2m", 123*6777b538SAndroid Build Coastguard Worker }, 124*6777b538SAndroid Build Coastguard Worker { 125*6777b538SAndroid Build Coastguard Worker "name": "clang/objcxx", 126*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?objcxx", 127*6777b538SAndroid Build Coastguard Worker "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang++", 128*6777b538SAndroid Build Coastguard Worker "inputs": [ 129*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang++", 130*6777b538SAndroid Build Coastguard Worker ], 131*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 132*6777b538SAndroid Build Coastguard Worker "platform_ref": "clang", 133*6777b538SAndroid Build Coastguard Worker "remote": True, 134*6777b538SAndroid Build Coastguard Worker "remote_wrapper": reproxy_config["remote_wrapper"], 135*6777b538SAndroid Build Coastguard Worker "timeout": "2m", 136*6777b538SAndroid Build Coastguard Worker "input_root_absolute_path": need_input_root_absolute_path_for_objc, 137*6777b538SAndroid Build Coastguard Worker }, 138*6777b538SAndroid Build Coastguard Worker { 139*6777b538SAndroid Build Coastguard Worker "name": "clang/objc", 140*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?objc", 141*6777b538SAndroid Build Coastguard Worker "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang", 142*6777b538SAndroid Build Coastguard Worker "inputs": [ 143*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang", 144*6777b538SAndroid Build Coastguard Worker ], 145*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 146*6777b538SAndroid Build Coastguard Worker "platform_ref": "clang", 147*6777b538SAndroid Build Coastguard Worker "remote": True, 148*6777b538SAndroid Build Coastguard Worker "remote_wrapper": reproxy_config["remote_wrapper"], 149*6777b538SAndroid Build Coastguard Worker "timeout": "2m", 150*6777b538SAndroid Build Coastguard Worker "input_root_absolute_path": need_input_root_absolute_path_for_objc, 151*6777b538SAndroid Build Coastguard Worker }, 152*6777b538SAndroid Build Coastguard Worker { 153*6777b538SAndroid Build Coastguard Worker "name": "clang-coverage/cxx", 154*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?cxx", 155*6777b538SAndroid Build Coastguard Worker "command_prefix": "python3 ../../build/toolchain/clang_code_coverage_wrapper.py", 156*6777b538SAndroid Build Coastguard Worker "inputs": [ 157*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang++", 158*6777b538SAndroid Build Coastguard Worker ], 159*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 160*6777b538SAndroid Build Coastguard Worker "handler": "clang_compile_coverage", 161*6777b538SAndroid Build Coastguard Worker "platform_ref": "clang", 162*6777b538SAndroid Build Coastguard Worker "remote": True, 163*6777b538SAndroid Build Coastguard Worker "remote_wrapper": reproxy_config["remote_wrapper"], 164*6777b538SAndroid Build Coastguard Worker "timeout": "2m", 165*6777b538SAndroid Build Coastguard Worker }, 166*6777b538SAndroid Build Coastguard Worker { 167*6777b538SAndroid Build Coastguard Worker "name": "clang-coverage/cc", 168*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?cc", 169*6777b538SAndroid Build Coastguard Worker "command_prefix": "python3 ../../build/toolchain/clang_code_coverage_wrapper.py", 170*6777b538SAndroid Build Coastguard Worker "inputs": [ 171*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang", 172*6777b538SAndroid Build Coastguard Worker ], 173*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 174*6777b538SAndroid Build Coastguard Worker "handler": "clang_compile_coverage", 175*6777b538SAndroid Build Coastguard Worker "platform_ref": "clang", 176*6777b538SAndroid Build Coastguard Worker "remote": True, 177*6777b538SAndroid Build Coastguard Worker "remote_wrapper": reproxy_config["remote_wrapper"], 178*6777b538SAndroid Build Coastguard Worker "timeout": "2m", 179*6777b538SAndroid Build Coastguard Worker }, 180*6777b538SAndroid Build Coastguard Worker { 181*6777b538SAndroid Build Coastguard Worker "name": "clang-coverage/objcxx", 182*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?objcxx", 183*6777b538SAndroid Build Coastguard Worker "command_prefix": "python3 ../../build/toolchain/clang_code_coverage_wrapper.py", 184*6777b538SAndroid Build Coastguard Worker "inputs": [ 185*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang++", 186*6777b538SAndroid Build Coastguard Worker ], 187*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 188*6777b538SAndroid Build Coastguard Worker "handler": "clang_compile_coverage", 189*6777b538SAndroid Build Coastguard Worker "platform_ref": "clang", 190*6777b538SAndroid Build Coastguard Worker "remote": True, 191*6777b538SAndroid Build Coastguard Worker "remote_wrapper": reproxy_config["remote_wrapper"], 192*6777b538SAndroid Build Coastguard Worker "timeout": "2m", 193*6777b538SAndroid Build Coastguard Worker "input_root_absolute_path": need_input_root_absolute_path_for_objc, 194*6777b538SAndroid Build Coastguard Worker }, 195*6777b538SAndroid Build Coastguard Worker { 196*6777b538SAndroid Build Coastguard Worker "name": "clang-coverage/objc", 197*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?objc", 198*6777b538SAndroid Build Coastguard Worker "command_prefix": "python3 ../../build/toolchain/clang_code_coverage_wrapper.py", 199*6777b538SAndroid Build Coastguard Worker "inputs": [ 200*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang", 201*6777b538SAndroid Build Coastguard Worker ], 202*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 203*6777b538SAndroid Build Coastguard Worker "handler": "clang_compile_coverage", 204*6777b538SAndroid Build Coastguard Worker "platform_ref": "clang", 205*6777b538SAndroid Build Coastguard Worker "remote": True, 206*6777b538SAndroid Build Coastguard Worker "remote_wrapper": reproxy_config["remote_wrapper"], 207*6777b538SAndroid Build Coastguard Worker "timeout": "2m", 208*6777b538SAndroid Build Coastguard Worker "input_root_absolute_path": need_input_root_absolute_path_for_objc, 209*6777b538SAndroid Build Coastguard Worker }, 210*6777b538SAndroid Build Coastguard Worker ]) 211*6777b538SAndroid Build Coastguard Worker return step_config 212*6777b538SAndroid Build Coastguard Worker 213*6777b538SAndroid Build Coastguard Workerclang = module( 214*6777b538SAndroid Build Coastguard Worker "clang", 215*6777b538SAndroid Build Coastguard Worker step_config = __step_config, 216*6777b538SAndroid Build Coastguard Worker filegroups = __filegroups, 217*6777b538SAndroid Build Coastguard Worker handlers = __handlers, 218*6777b538SAndroid Build Coastguard Worker) 219