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