xref: /aosp_15_r20/external/cronet/build/config/siso/rust_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 rust/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("./config.star", "config")
10*6777b538SAndroid Build Coastguard Workerload("./fuchsia.star", "fuchsia")
11*6777b538SAndroid Build Coastguard Worker
12*6777b538SAndroid Build Coastguard Worker# TODO: b/323091468 - Propagate fuchsia arch and version from GN,
13*6777b538SAndroid Build Coastguard Worker# and remove the hardcoded filegroups.
14*6777b538SAndroid Build Coastguard Workerfuchsia_archs = [
15*6777b538SAndroid Build Coastguard Worker    "arm64",
16*6777b538SAndroid Build Coastguard Worker    "riscv64",
17*6777b538SAndroid Build Coastguard Worker    "x64",
18*6777b538SAndroid Build Coastguard Worker]
19*6777b538SAndroid Build Coastguard Worker
20*6777b538SAndroid Build Coastguard Workerfuchsia_versions = [12, 14, 15, 16, 17, 18]
21*6777b538SAndroid Build Coastguard Worker
22*6777b538SAndroid Build Coastguard Workerdef __filegroups(ctx):
23*6777b538SAndroid Build Coastguard Worker    fg = {
24*6777b538SAndroid Build Coastguard Worker        "third_party/rust-toolchain:toolchain": {
25*6777b538SAndroid Build Coastguard Worker            "type": "glob",
26*6777b538SAndroid Build Coastguard Worker            "includes": [
27*6777b538SAndroid Build Coastguard Worker                "bin/rustc",
28*6777b538SAndroid Build Coastguard Worker                "lib/*.so",
29*6777b538SAndroid Build Coastguard Worker                "lib/rustlib/src/rust/library/std/src/lib.rs",
30*6777b538SAndroid Build Coastguard Worker                "lib/rustlib/x86_64-unknown-linux-gnu/lib/*",
31*6777b538SAndroid Build Coastguard Worker            ],
32*6777b538SAndroid Build Coastguard Worker        },
33*6777b538SAndroid Build Coastguard Worker        "third_party/rust:rustlib": {
34*6777b538SAndroid Build Coastguard Worker            "type": "glob",
35*6777b538SAndroid Build Coastguard Worker            "includes": [
36*6777b538SAndroid Build Coastguard Worker                "*.rs",
37*6777b538SAndroid Build Coastguard Worker            ],
38*6777b538SAndroid Build Coastguard Worker        },
39*6777b538SAndroid Build Coastguard Worker        "build/linux/debian_bullseye_amd64-sysroot:rustlink": {
40*6777b538SAndroid Build Coastguard Worker            "type": "glob",
41*6777b538SAndroid Build Coastguard Worker            "includes": [
42*6777b538SAndroid Build Coastguard Worker                "*.so",
43*6777b538SAndroid Build Coastguard Worker                "*.so.*",
44*6777b538SAndroid Build Coastguard Worker                "*.o",
45*6777b538SAndroid Build Coastguard Worker                "*.a",
46*6777b538SAndroid Build Coastguard Worker            ],
47*6777b538SAndroid Build Coastguard Worker        },
48*6777b538SAndroid Build Coastguard Worker        "third_party/llvm-build/Release+Asserts:rustlink": {
49*6777b538SAndroid Build Coastguard Worker            "type": "glob",
50*6777b538SAndroid Build Coastguard Worker            "includes": [
51*6777b538SAndroid Build Coastguard Worker                "bin/clang",
52*6777b538SAndroid Build Coastguard Worker                "bin/clang++",
53*6777b538SAndroid Build Coastguard Worker                "bin/*lld",
54*6777b538SAndroid Build Coastguard Worker                "libclang*.a",
55*6777b538SAndroid Build Coastguard Worker            ],
56*6777b538SAndroid Build Coastguard Worker        },
57*6777b538SAndroid Build Coastguard Worker    }
58*6777b538SAndroid Build Coastguard Worker    if fuchsia.enabled(ctx):
59*6777b538SAndroid Build Coastguard Worker        for arch in fuchsia_archs:
60*6777b538SAndroid Build Coastguard Worker            group = "third_party/fuchsia-sdk/sdk/arch/%s:rustlink" % arch
61*6777b538SAndroid Build Coastguard Worker            fg[group] = {
62*6777b538SAndroid Build Coastguard Worker                "type": "glob",
63*6777b538SAndroid Build Coastguard Worker                "includes": [
64*6777b538SAndroid Build Coastguard Worker                    "lib/*",
65*6777b538SAndroid Build Coastguard Worker                    "sysroot/lib/*",
66*6777b538SAndroid Build Coastguard Worker                ],
67*6777b538SAndroid Build Coastguard Worker            }
68*6777b538SAndroid Build Coastguard Worker            for ver in fuchsia_versions:
69*6777b538SAndroid Build Coastguard Worker                group = "third_party/fuchsia-sdk/sdk/obj/%s-api-%s:rustlink" % (arch, ver)
70*6777b538SAndroid Build Coastguard Worker                fg[group] = {
71*6777b538SAndroid Build Coastguard Worker                    "type": "glob",
72*6777b538SAndroid Build Coastguard Worker                    "includes": [
73*6777b538SAndroid Build Coastguard Worker                        "lib/*",
74*6777b538SAndroid Build Coastguard Worker                        "sysroot/lib/*",
75*6777b538SAndroid Build Coastguard Worker                    ],
76*6777b538SAndroid Build Coastguard Worker                }
77*6777b538SAndroid Build Coastguard Worker    return fg
78*6777b538SAndroid Build Coastguard Worker
79*6777b538SAndroid Build Coastguard Workerdef __rust_bin_handler(ctx, cmd):
80*6777b538SAndroid Build Coastguard Worker    inputs = []
81*6777b538SAndroid Build Coastguard Worker    use_android_toolchain = None
82*6777b538SAndroid Build Coastguard Worker    target = None
83*6777b538SAndroid Build Coastguard Worker    for i, arg in enumerate(cmd.args):
84*6777b538SAndroid Build Coastguard Worker        if arg.startswith("--sysroot=../../third_party/fuchsia-sdk/sdk"):
85*6777b538SAndroid Build Coastguard Worker            # Get the corresponding sdk filegroup from --sysroot.
86*6777b538SAndroid Build Coastguard Worker            # e.g. --sysroot=../../third_party/fuchsia-sdk/sdk/obj/x64-api-16/sysroot -> third_party/fuchsia-sdk/sdk/obj/x64-api-16:rustlink
87*6777b538SAndroid Build Coastguard Worker            filegroup = "%s:rustlink" % path.dir(ctx.fs.canonpath(arg.removeprefix("--sysroot=")))
88*6777b538SAndroid Build Coastguard Worker            inputs.append(filegroup)
89*6777b538SAndroid Build Coastguard Worker        elif arg.startswith("--sysroot=../../third_party/android_toolchain/ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot"):
90*6777b538SAndroid Build Coastguard Worker            use_android_toolchain = True
91*6777b538SAndroid Build Coastguard Worker        if arg.startswith("--target="):
92*6777b538SAndroid Build Coastguard Worker            target = arg.removeprefix("--target=")
93*6777b538SAndroid Build Coastguard Worker    if use_android_toolchain and target:
94*6777b538SAndroid Build Coastguard Worker        # e.g. target=aarch64-linux-android26
95*6777b538SAndroid Build Coastguard Worker        android_ver = ""
96*6777b538SAndroid Build Coastguard Worker        i = target.find("android")
97*6777b538SAndroid Build Coastguard Worker        if i >= 0:
98*6777b538SAndroid Build Coastguard Worker            android_ver = target[i:].removeprefix("android").removeprefix("eabi")
99*6777b538SAndroid Build Coastguard Worker        if android_ver:
100*6777b538SAndroid Build Coastguard Worker            android_arch = target.removesuffix(android_ver)
101*6777b538SAndroid Build Coastguard Worker            filegroup = "third_party/android_toolchain/ndk/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/%s/%s:link" % (android_arch, android_ver)
102*6777b538SAndroid Build Coastguard Worker            inputs.append(filegroup)
103*6777b538SAndroid Build Coastguard Worker
104*6777b538SAndroid Build Coastguard Worker    ctx.actions.fix(inputs = cmd.inputs + inputs)
105*6777b538SAndroid Build Coastguard Worker
106*6777b538SAndroid Build Coastguard Worker__handlers = {
107*6777b538SAndroid Build Coastguard Worker    "rust_bin_handler": __rust_bin_handler,
108*6777b538SAndroid Build Coastguard Worker}
109*6777b538SAndroid Build Coastguard Worker
110*6777b538SAndroid Build Coastguard Workerdef __step_config(ctx, step_config):
111*6777b538SAndroid Build Coastguard Worker    remote_run = True  # Turn this to False when you do file access trace.
112*6777b538SAndroid Build Coastguard Worker    platform_ref = "large"  # Rust actions run faster on large workers.
113*6777b538SAndroid Build Coastguard Worker    clang_inputs = [
114*6777b538SAndroid Build Coastguard Worker        "build/linux/debian_bullseye_amd64-sysroot:rustlink",
115*6777b538SAndroid Build Coastguard Worker        "third_party/llvm-build/Release+Asserts:rustlink",
116*6777b538SAndroid Build Coastguard Worker    ]
117*6777b538SAndroid Build Coastguard Worker    rust_inputs = [
118*6777b538SAndroid Build Coastguard Worker        "build/action_helpers.py",
119*6777b538SAndroid Build Coastguard Worker        "build/gn_helpers.py",
120*6777b538SAndroid Build Coastguard Worker        "build/rust/rustc_wrapper.py",
121*6777b538SAndroid Build Coastguard Worker        # TODO(b/285225184): use precomputed subtree
122*6777b538SAndroid Build Coastguard Worker        "third_party/rust-toolchain:toolchain",
123*6777b538SAndroid Build Coastguard Worker    ]
124*6777b538SAndroid Build Coastguard Worker    rust_indirect_inputs = {
125*6777b538SAndroid Build Coastguard Worker        "includes": [
126*6777b538SAndroid Build Coastguard Worker            "*.h",
127*6777b538SAndroid Build Coastguard Worker            "*.o",
128*6777b538SAndroid Build Coastguard Worker            "*.rlib",
129*6777b538SAndroid Build Coastguard Worker            "*.rs",
130*6777b538SAndroid Build Coastguard Worker            "*.so",
131*6777b538SAndroid Build Coastguard Worker        ],
132*6777b538SAndroid Build Coastguard Worker    }
133*6777b538SAndroid Build Coastguard Worker    step_config["rules"].extend([
134*6777b538SAndroid Build Coastguard Worker        {
135*6777b538SAndroid Build Coastguard Worker            "name": "rust_bin",
136*6777b538SAndroid Build Coastguard Worker            "action": "(.*_)?rust_bin",
137*6777b538SAndroid Build Coastguard Worker            "inputs": rust_inputs + clang_inputs,
138*6777b538SAndroid Build Coastguard Worker            "indirect_inputs": rust_indirect_inputs,
139*6777b538SAndroid Build Coastguard Worker            "handler": "rust_bin_handler",
140*6777b538SAndroid Build Coastguard Worker            "deps": "none",  # disable gcc scandeps
141*6777b538SAndroid Build Coastguard Worker            "remote": remote_run,
142*6777b538SAndroid Build Coastguard Worker            # "canonicalize_dir": True,  # TODO(b/300352286)
143*6777b538SAndroid Build Coastguard Worker            "timeout": "2m",
144*6777b538SAndroid Build Coastguard Worker            "platform_ref": platform_ref,
145*6777b538SAndroid Build Coastguard Worker        },
146*6777b538SAndroid Build Coastguard Worker        {
147*6777b538SAndroid Build Coastguard Worker            "name": "rust_cdylib",
148*6777b538SAndroid Build Coastguard Worker            "action": "(.*_)?rust_cdylib",
149*6777b538SAndroid Build Coastguard Worker            "inputs": rust_inputs + clang_inputs,
150*6777b538SAndroid Build Coastguard Worker            "indirect_inputs": rust_indirect_inputs,
151*6777b538SAndroid Build Coastguard Worker            "deps": "none",  # disable gcc scandeps
152*6777b538SAndroid Build Coastguard Worker            "remote": remote_run,
153*6777b538SAndroid Build Coastguard Worker            # "canonicalize_dir": True,  # TODO(b/300352286)
154*6777b538SAndroid Build Coastguard Worker            "timeout": "2m",
155*6777b538SAndroid Build Coastguard Worker            "platform_ref": platform_ref,
156*6777b538SAndroid Build Coastguard Worker        },
157*6777b538SAndroid Build Coastguard Worker        {
158*6777b538SAndroid Build Coastguard Worker            "name": "rust_macro",
159*6777b538SAndroid Build Coastguard Worker            "action": "(.*_)?rust_macro",
160*6777b538SAndroid Build Coastguard Worker            "inputs": rust_inputs + clang_inputs,
161*6777b538SAndroid Build Coastguard Worker            "indirect_inputs": rust_indirect_inputs,
162*6777b538SAndroid Build Coastguard Worker            "deps": "none",  # disable gcc scandeps
163*6777b538SAndroid Build Coastguard Worker            # "canonicalize_dir": True,  # TODO(b/300352286)
164*6777b538SAndroid Build Coastguard Worker            "remote": remote_run,
165*6777b538SAndroid Build Coastguard Worker            "timeout": "2m",
166*6777b538SAndroid Build Coastguard Worker            "platform_ref": platform_ref,
167*6777b538SAndroid Build Coastguard Worker        },
168*6777b538SAndroid Build Coastguard Worker        {
169*6777b538SAndroid Build Coastguard Worker            "name": "rust_rlib",
170*6777b538SAndroid Build Coastguard Worker            "action": "(.*_)?rust_rlib",
171*6777b538SAndroid Build Coastguard Worker            "inputs": rust_inputs,
172*6777b538SAndroid Build Coastguard Worker            "indirect_inputs": rust_indirect_inputs,
173*6777b538SAndroid Build Coastguard Worker            "deps": "none",  # disable gcc scandeps
174*6777b538SAndroid Build Coastguard Worker            "remote": remote_run,
175*6777b538SAndroid Build Coastguard Worker            # "canonicalize_dir": True,  # TODO(b/300352286)
176*6777b538SAndroid Build Coastguard Worker            "timeout": "2m",
177*6777b538SAndroid Build Coastguard Worker            "platform_ref": platform_ref,
178*6777b538SAndroid Build Coastguard Worker        },
179*6777b538SAndroid Build Coastguard Worker        {
180*6777b538SAndroid Build Coastguard Worker            "name": "rust_staticlib",
181*6777b538SAndroid Build Coastguard Worker            "action": "(.*_)?rust_staticlib",
182*6777b538SAndroid Build Coastguard Worker            "inputs": rust_inputs,
183*6777b538SAndroid Build Coastguard Worker            "indirect_inputs": rust_indirect_inputs,
184*6777b538SAndroid Build Coastguard Worker            "deps": "none",  # disable gcc scandeps
185*6777b538SAndroid Build Coastguard Worker            "remote": remote_run,
186*6777b538SAndroid Build Coastguard Worker            # "canonicalize_dir": True,  # TODO(b/300352286)
187*6777b538SAndroid Build Coastguard Worker            "timeout": "2m",
188*6777b538SAndroid Build Coastguard Worker            "platform_ref": platform_ref,
189*6777b538SAndroid Build Coastguard Worker        },
190*6777b538SAndroid Build Coastguard Worker        {
191*6777b538SAndroid Build Coastguard Worker            "name": "rust/run_build_script",
192*6777b538SAndroid Build Coastguard Worker            "command_prefix": "python3 ../../build/rust/run_build_script.py",
193*6777b538SAndroid Build Coastguard Worker            "inputs": [
194*6777b538SAndroid Build Coastguard Worker                "build/action_helpers.py",
195*6777b538SAndroid Build Coastguard Worker                "build/gn_helpers.py",
196*6777b538SAndroid Build Coastguard Worker                "third_party/rust-toolchain:toolchain",
197*6777b538SAndroid Build Coastguard Worker                "third_party/rust:rustlib",
198*6777b538SAndroid Build Coastguard Worker                # XXX: -src-dir?
199*6777b538SAndroid Build Coastguard Worker                "third_party/rust-toolchain/lib/rustlib/src/rust/library/std",
200*6777b538SAndroid Build Coastguard Worker                "third_party/rust-toolchain/lib/rustlib/src/rust/vendor/libc-0.2.153",
201*6777b538SAndroid Build Coastguard Worker                "third_party/rust-toolchain/lib/rustlib/src/rust/vendor/memchr-2.5.0",
202*6777b538SAndroid Build Coastguard Worker                "third_party/rust-toolchain/lib/rustlib/src/rust/vendor/compiler_builtins-0.1.108",
203*6777b538SAndroid Build Coastguard Worker            ],
204*6777b538SAndroid Build Coastguard Worker            "remote": config.get(ctx, "cog"),
205*6777b538SAndroid Build Coastguard Worker            "input_root_absolute_path": True,
206*6777b538SAndroid Build Coastguard Worker            "timeout": "2m",
207*6777b538SAndroid Build Coastguard Worker        },
208*6777b538SAndroid Build Coastguard Worker        {
209*6777b538SAndroid Build Coastguard Worker            "name": "rust/find_std_rlibs",
210*6777b538SAndroid Build Coastguard Worker            "command_prefix": "python3 ../../build/rust/std/find_std_rlibs.py",
211*6777b538SAndroid Build Coastguard Worker            "inputs": [
212*6777b538SAndroid Build Coastguard Worker                "third_party/rust-toolchain:toolchain",
213*6777b538SAndroid Build Coastguard Worker                "third_party/rust-toolchain/lib/rustlib:rlib",
214*6777b538SAndroid Build Coastguard Worker            ],
215*6777b538SAndroid Build Coastguard Worker            "remote": config.get(ctx, "cog"),
216*6777b538SAndroid Build Coastguard Worker            "input_root_absolute_path": True,
217*6777b538SAndroid Build Coastguard Worker            "timeout": "2m",
218*6777b538SAndroid Build Coastguard Worker        },
219*6777b538SAndroid Build Coastguard Worker    ])
220*6777b538SAndroid Build Coastguard Worker    return step_config
221*6777b538SAndroid Build Coastguard Worker
222*6777b538SAndroid Build Coastguard Workerrust = module(
223*6777b538SAndroid Build Coastguard Worker    "rust",
224*6777b538SAndroid Build Coastguard Worker    filegroups = __filegroups,
225*6777b538SAndroid Build Coastguard Worker    handlers = __handlers,
226*6777b538SAndroid Build Coastguard Worker    step_config = __step_config,
227*6777b538SAndroid Build Coastguard Worker)
228