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/linux.""" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Workerload("@builtin//path.star", "path") 8*6777b538SAndroid Build Coastguard Workerload("@builtin//struct.star", "module") 9*6777b538SAndroid Build Coastguard Workerload("./android.star", "android") 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("./config.star", "config") 13*6777b538SAndroid Build Coastguard Workerload("./cros.star", "cros") 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker# TODO: b/323091468 - Propagate target android ABI and android SDK version 16*6777b538SAndroid Build Coastguard Worker# from GN, and remove the hardcoded filegroups. 17*6777b538SAndroid Build Coastguard Workerandroid_archs = [ 18*6777b538SAndroid Build Coastguard Worker "aarch64-linux-android", 19*6777b538SAndroid Build Coastguard Worker "arm-linux-androideabi", 20*6777b538SAndroid Build Coastguard Worker "i686-linux-android", 21*6777b538SAndroid Build Coastguard Worker "riscv64-linux-android", 22*6777b538SAndroid Build Coastguard Worker "x86_64-linux-android", 23*6777b538SAndroid Build Coastguard Worker] 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Workerandroid_versions = list(range(21, 35)) 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Workerdef __filegroups(ctx): 28*6777b538SAndroid Build Coastguard Worker fg = { 29*6777b538SAndroid Build Coastguard Worker # for precomputed subtrees 30*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot/usr/include:include": { 31*6777b538SAndroid Build Coastguard Worker "type": "glob", 32*6777b538SAndroid Build Coastguard Worker "includes": ["*"], 33*6777b538SAndroid Build Coastguard Worker # need bits/stab.def, c++/* 34*6777b538SAndroid Build Coastguard Worker }, 35*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot/usr/lib:headers": { 36*6777b538SAndroid Build Coastguard Worker "type": "glob", 37*6777b538SAndroid Build Coastguard Worker "includes": ["*.h", "crtbegin.o"], 38*6777b538SAndroid Build Coastguard Worker }, 39*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_i386-sysroot/usr/include:include": { 40*6777b538SAndroid Build Coastguard Worker "type": "glob", 41*6777b538SAndroid Build Coastguard Worker "includes": ["*"], 42*6777b538SAndroid Build Coastguard Worker # need bits/stab.def, c++/* 43*6777b538SAndroid Build Coastguard Worker }, 44*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_i386-sysroot/usr/lib:headers": { 45*6777b538SAndroid Build Coastguard Worker "type": "glob", 46*6777b538SAndroid Build Coastguard Worker "includes": ["*.h", "crtbegin.o"], 47*6777b538SAndroid Build Coastguard Worker }, 48*6777b538SAndroid Build Coastguard Worker "third_party/android_toolchain/ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include:include": { 49*6777b538SAndroid Build Coastguard Worker "type": "glob", 50*6777b538SAndroid Build Coastguard Worker "includes": ["*"], 51*6777b538SAndroid Build Coastguard Worker # can't use "*.h", because c++ headers have no extension. 52*6777b538SAndroid Build Coastguard Worker }, 53*6777b538SAndroid Build Coastguard Worker "third_party/android_toolchain/ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include:include": { 54*6777b538SAndroid Build Coastguard Worker "type": "glob", 55*6777b538SAndroid Build Coastguard Worker "includes": ["*"], 56*6777b538SAndroid Build Coastguard Worker }, 57*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/lib/clang:libs": { 58*6777b538SAndroid Build Coastguard Worker "type": "glob", 59*6777b538SAndroid Build Coastguard Worker "includes": ["*/lib/*/*", "*/lib/*", "*/share/*"], 60*6777b538SAndroid Build Coastguard Worker }, 61*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot/lib/x86_64-linux-gnu:libso": { 62*6777b538SAndroid Build Coastguard Worker "type": "glob", 63*6777b538SAndroid Build Coastguard Worker "includes": ["*.so*"], 64*6777b538SAndroid Build Coastguard Worker }, 65*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot/usr/lib/x86_64-linux-gnu:libs": { 66*6777b538SAndroid Build Coastguard Worker "type": "glob", 67*6777b538SAndroid Build Coastguard Worker "includes": ["*.o", "*.so*", "lib*.a"], 68*6777b538SAndroid Build Coastguard Worker }, 69*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu:libgcc": { 70*6777b538SAndroid Build Coastguard Worker "type": "glob", 71*6777b538SAndroid Build Coastguard Worker "includes": ["*.o", "*.a", "*.so"], 72*6777b538SAndroid Build Coastguard Worker }, 73*6777b538SAndroid Build Coastguard Worker } 74*6777b538SAndroid Build Coastguard Worker if android.enabled(ctx): 75*6777b538SAndroid Build Coastguard Worker for arch in android_archs: 76*6777b538SAndroid Build Coastguard Worker for ver in android_versions: 77*6777b538SAndroid Build Coastguard Worker group = "third_party/android_toolchain/ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/%s/%d:link" % (arch, ver) 78*6777b538SAndroid Build Coastguard Worker fg[group] = { 79*6777b538SAndroid Build Coastguard Worker "type": "glob", 80*6777b538SAndroid Build Coastguard Worker "includes": ["*"], 81*6777b538SAndroid Build Coastguard Worker } 82*6777b538SAndroid Build Coastguard Worker 83*6777b538SAndroid Build Coastguard Worker fg.update(clang_all.filegroups(ctx)) 84*6777b538SAndroid Build Coastguard Worker return fg 85*6777b538SAndroid Build Coastguard Worker 86*6777b538SAndroid Build Coastguard Workerdef __clang_compile_coverage(ctx, cmd): 87*6777b538SAndroid Build Coastguard Worker clang_command = clang_code_coverage_wrapper.run(ctx, list(cmd.args)) 88*6777b538SAndroid Build Coastguard Worker ctx.actions.fix(args = clang_command) 89*6777b538SAndroid Build Coastguard Worker 90*6777b538SAndroid Build Coastguard Worker__handlers = { 91*6777b538SAndroid Build Coastguard Worker "clang_compile_coverage": __clang_compile_coverage, 92*6777b538SAndroid Build Coastguard Worker} 93*6777b538SAndroid Build Coastguard Worker 94*6777b538SAndroid Build Coastguard Workerdef __step_config(ctx, step_config): 95*6777b538SAndroid Build Coastguard Worker step_config["input_deps"].update({ 96*6777b538SAndroid Build Coastguard Worker # sysroot headers for precomputed subtrees 97*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot:headers": [ 98*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot/usr/include:include", 99*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot/usr/lib:headers", 100*6777b538SAndroid Build Coastguard Worker ], 101*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_i386-sysroot:headers": [ 102*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_i386-sysroot/usr/include:include", 103*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_i386-sysroot/usr/lib:headers", 104*6777b538SAndroid Build Coastguard Worker ], 105*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot:link": [ 106*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot/lib/x86_64-linux-gnu:libso", 107*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot/lib64/ld-linux-x86-64.so.2", 108*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot/usr/lib/gcc/x86_64-linux-gnu:libgcc", 109*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot/usr/lib/x86_64-linux-gnu:libs", 110*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang", 111*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang++", 112*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/ld.lld", 113*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/lld", 114*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/llvm-nm", 115*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/llvm-readelf", 116*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/llvm-readobj", 117*6777b538SAndroid Build Coastguard Worker # The following inputs are used for sanitizer builds. 118*6777b538SAndroid Build Coastguard Worker # It might be better to add them only for sanitizer builds if there is a performance issue. 119*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/lib/clang:libs", 120*6777b538SAndroid Build Coastguard Worker ], 121*6777b538SAndroid Build Coastguard Worker "third_party/android_toolchain/ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot:headers": [ 122*6777b538SAndroid Build Coastguard Worker "third_party/android_toolchain/ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include:include", 123*6777b538SAndroid Build Coastguard Worker "third_party/android_toolchain/ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include:include", 124*6777b538SAndroid Build Coastguard Worker ], 125*6777b538SAndroid Build Coastguard Worker }) 126*6777b538SAndroid Build Coastguard Worker step_config["input_deps"].update(clang_all.input_deps) 127*6777b538SAndroid Build Coastguard Worker step_config["rules"].extend([ 128*6777b538SAndroid Build Coastguard Worker { 129*6777b538SAndroid Build Coastguard Worker "name": "clang/cxx", 130*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?cxx", 131*6777b538SAndroid Build Coastguard Worker "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang++ ", 132*6777b538SAndroid Build Coastguard Worker "inputs": [ 133*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang++", 134*6777b538SAndroid Build Coastguard Worker ], 135*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 136*6777b538SAndroid Build Coastguard Worker "remote": True, 137*6777b538SAndroid Build Coastguard Worker "canonicalize_dir": True, 138*6777b538SAndroid Build Coastguard Worker "timeout": "2m", 139*6777b538SAndroid Build Coastguard Worker }, 140*6777b538SAndroid Build Coastguard Worker { 141*6777b538SAndroid Build Coastguard Worker "name": "clang/cc", 142*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?cc", 143*6777b538SAndroid Build Coastguard Worker "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang ", 144*6777b538SAndroid Build Coastguard Worker "inputs": [ 145*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang", 146*6777b538SAndroid Build Coastguard Worker ], 147*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 148*6777b538SAndroid Build Coastguard Worker "remote": True, 149*6777b538SAndroid Build Coastguard Worker "canonicalize_dir": True, 150*6777b538SAndroid Build Coastguard Worker "timeout": "2m", 151*6777b538SAndroid Build Coastguard Worker }, 152*6777b538SAndroid Build Coastguard Worker { 153*6777b538SAndroid Build Coastguard Worker "name": "clang/asm", 154*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?asm", 155*6777b538SAndroid Build Coastguard Worker "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang", 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 "remote": config.get(ctx, "cog"), 160*6777b538SAndroid Build Coastguard Worker "canonicalize_dir": True, 161*6777b538SAndroid Build Coastguard Worker "timeout": "2m", 162*6777b538SAndroid Build Coastguard Worker }, 163*6777b538SAndroid Build Coastguard Worker { 164*6777b538SAndroid Build Coastguard Worker "name": "clang-coverage/cxx", 165*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?cxx", 166*6777b538SAndroid Build Coastguard Worker "command_prefix": "\"python3\" ../../build/toolchain/clang_code_coverage_wrapper.py", 167*6777b538SAndroid Build Coastguard Worker "inputs": [ 168*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang++", 169*6777b538SAndroid Build Coastguard Worker ], 170*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 171*6777b538SAndroid Build Coastguard Worker "handler": "clang_compile_coverage", 172*6777b538SAndroid Build Coastguard Worker "remote": True, 173*6777b538SAndroid Build Coastguard Worker "canonicalize_dir": True, 174*6777b538SAndroid Build Coastguard Worker "timeout": "2m", 175*6777b538SAndroid Build Coastguard Worker }, 176*6777b538SAndroid Build Coastguard Worker { 177*6777b538SAndroid Build Coastguard Worker "name": "clang-coverage/cc", 178*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?cc", 179*6777b538SAndroid Build Coastguard Worker "command_prefix": "\"python3\" ../../build/toolchain/clang_code_coverage_wrapper.py", 180*6777b538SAndroid Build Coastguard Worker "inputs": [ 181*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/clang", 182*6777b538SAndroid Build Coastguard Worker ], 183*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": ["*.stamp"], 184*6777b538SAndroid Build Coastguard Worker "handler": "clang_compile_coverage", 185*6777b538SAndroid Build Coastguard Worker "remote": True, 186*6777b538SAndroid Build Coastguard Worker "canonicalize_dir": True, 187*6777b538SAndroid Build Coastguard Worker "timeout": "2m", 188*6777b538SAndroid Build Coastguard Worker }, 189*6777b538SAndroid Build Coastguard Worker ]) 190*6777b538SAndroid Build Coastguard Worker 191*6777b538SAndroid Build Coastguard Worker # TODO: b/316267242 - Enable remote links for Android and CrOS toolchain builds. 192*6777b538SAndroid Build Coastguard Worker if not android.enabled(ctx) and not (cros.custom_toolchain(ctx) or cros.custom_sysroot(ctx)): 193*6777b538SAndroid Build Coastguard Worker step_config["rules"].extend([ 194*6777b538SAndroid Build Coastguard Worker { 195*6777b538SAndroid Build Coastguard Worker "name": "clang/alink/llvm-ar", 196*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?alink", 197*6777b538SAndroid Build Coastguard Worker "inputs": [ 198*6777b538SAndroid Build Coastguard Worker # TODO: b/316267242 - Add inputs to GN config. 199*6777b538SAndroid Build Coastguard Worker "third_party/llvm-build/Release+Asserts/bin/llvm-ar", 200*6777b538SAndroid Build Coastguard Worker ], 201*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": [ 202*6777b538SAndroid Build Coastguard Worker "*.cc", 203*6777b538SAndroid Build Coastguard Worker "*.h", 204*6777b538SAndroid Build Coastguard Worker "*.js", 205*6777b538SAndroid Build Coastguard Worker "*.pak", 206*6777b538SAndroid Build Coastguard Worker "*.py", 207*6777b538SAndroid Build Coastguard Worker "*.stamp", 208*6777b538SAndroid Build Coastguard Worker ], 209*6777b538SAndroid Build Coastguard Worker "remote": config.get(ctx, "remote-library-link"), 210*6777b538SAndroid Build Coastguard Worker "canonicalize_dir": True, 211*6777b538SAndroid Build Coastguard Worker "platform_ref": "large", 212*6777b538SAndroid Build Coastguard Worker "accumulate": True, 213*6777b538SAndroid Build Coastguard Worker }, 214*6777b538SAndroid Build Coastguard Worker { 215*6777b538SAndroid Build Coastguard Worker "name": "clang/solink/gcc_solink_wrapper", 216*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?solink", 217*6777b538SAndroid Build Coastguard Worker "command_prefix": "\"python3\" \"../../build/toolchain/gcc_solink_wrapper.py\"", 218*6777b538SAndroid Build Coastguard Worker "inputs": [ 219*6777b538SAndroid Build Coastguard Worker # TODO: b/316267242 - Add inputs to GN config. 220*6777b538SAndroid Build Coastguard Worker "build/toolchain/gcc_solink_wrapper.py", 221*6777b538SAndroid Build Coastguard Worker "build/toolchain/whole_archive.py", 222*6777b538SAndroid Build Coastguard Worker "build/toolchain/wrapper_utils.py", 223*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot:link", 224*6777b538SAndroid Build Coastguard Worker ], 225*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": [ 226*6777b538SAndroid Build Coastguard Worker "*.cc", 227*6777b538SAndroid Build Coastguard Worker "*.h", 228*6777b538SAndroid Build Coastguard Worker "*.js", 229*6777b538SAndroid Build Coastguard Worker "*.pak", 230*6777b538SAndroid Build Coastguard Worker "*.py", 231*6777b538SAndroid Build Coastguard Worker "*.stamp", 232*6777b538SAndroid Build Coastguard Worker ], 233*6777b538SAndroid Build Coastguard Worker "remote": config.get(ctx, "remote-library-link"), 234*6777b538SAndroid Build Coastguard Worker "canonicalize_dir": True, 235*6777b538SAndroid Build Coastguard Worker "platform_ref": "large", 236*6777b538SAndroid Build Coastguard Worker }, 237*6777b538SAndroid Build Coastguard Worker { 238*6777b538SAndroid Build Coastguard Worker "name": "clang/link/gcc_link_wrapper", 239*6777b538SAndroid Build Coastguard Worker "action": "(.*_)?link", 240*6777b538SAndroid Build Coastguard Worker "command_prefix": "\"python3\" \"../../build/toolchain/gcc_link_wrapper.py\"", 241*6777b538SAndroid Build Coastguard Worker "inputs": [ 242*6777b538SAndroid Build Coastguard Worker # TODO: b/316267242 - Add inputs to GN config. 243*6777b538SAndroid Build Coastguard Worker "build/toolchain/gcc_link_wrapper.py", 244*6777b538SAndroid Build Coastguard Worker "build/toolchain/whole_archive.py", 245*6777b538SAndroid Build Coastguard Worker "build/toolchain/wrapper_utils.py", 246*6777b538SAndroid Build Coastguard Worker "build/linux/debian_bullseye_amd64-sysroot:link", 247*6777b538SAndroid Build Coastguard Worker ], 248*6777b538SAndroid Build Coastguard Worker "exclude_input_patterns": [ 249*6777b538SAndroid Build Coastguard Worker "*.cc", 250*6777b538SAndroid Build Coastguard Worker "*.h", 251*6777b538SAndroid Build Coastguard Worker "*.js", 252*6777b538SAndroid Build Coastguard Worker "*.pak", 253*6777b538SAndroid Build Coastguard Worker "*.py", 254*6777b538SAndroid Build Coastguard Worker "*.stamp", 255*6777b538SAndroid Build Coastguard Worker ], 256*6777b538SAndroid Build Coastguard Worker "remote": config.get(ctx, "remote-exec-link"), 257*6777b538SAndroid Build Coastguard Worker "canonicalize_dir": True, 258*6777b538SAndroid Build Coastguard Worker "platform_ref": "large", 259*6777b538SAndroid Build Coastguard Worker "timeout": "10m", 260*6777b538SAndroid Build Coastguard Worker }, 261*6777b538SAndroid Build Coastguard Worker ]) 262*6777b538SAndroid Build Coastguard Worker return step_config 263*6777b538SAndroid Build Coastguard Worker 264*6777b538SAndroid Build Coastguard Workerclang = module( 265*6777b538SAndroid Build Coastguard Worker "clang", 266*6777b538SAndroid Build Coastguard Worker step_config = __step_config, 267*6777b538SAndroid Build Coastguard Worker filegroups = __filegroups, 268*6777b538SAndroid Build Coastguard Worker handlers = __handlers, 269*6777b538SAndroid Build Coastguard Worker) 270