xref: /aosp_15_r20/external/cronet/build/config/siso/clang_linux.star (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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