1*5225e6b1SAndroid Build Coastguard Worker# Copyright (C) 2023 The Android Open Source Project 2*5225e6b1SAndroid Build Coastguard Worker# 3*5225e6b1SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*5225e6b1SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*5225e6b1SAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*5225e6b1SAndroid Build Coastguard Worker# 7*5225e6b1SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*5225e6b1SAndroid Build Coastguard Worker# 9*5225e6b1SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*5225e6b1SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*5225e6b1SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*5225e6b1SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*5225e6b1SAndroid Build Coastguard Worker# limitations under the License. 14*5225e6b1SAndroid Build Coastguard Worker 15*5225e6b1SAndroid Build Coastguard Workerload("@bazel_skylib//rules:common_settings.bzl", "bool_setting") 16*5225e6b1SAndroid Build Coastguard Workerload( 17*5225e6b1SAndroid Build Coastguard Worker "@gbl_llvm_prebuilts//:info.bzl", 18*5225e6b1SAndroid Build Coastguard Worker "LINUX_SYSROOT_INCLUDES", 19*5225e6b1SAndroid Build Coastguard Worker "LLVM_PREBUILTS_CPP_INCLUDE", 20*5225e6b1SAndroid Build Coastguard Worker "LLVM_PREBUILTS_C_INCLUDE", 21*5225e6b1SAndroid Build Coastguard Worker "gbl_llvm_tool_path", 22*5225e6b1SAndroid Build Coastguard Worker) 23*5225e6b1SAndroid Build Coastguard Workerload("@rules_rust//bindgen:defs.bzl", "rust_bindgen_toolchain") 24*5225e6b1SAndroid Build Coastguard Workerload( 25*5225e6b1SAndroid Build Coastguard Worker "@rules_rust//rust:toolchain.bzl", 26*5225e6b1SAndroid Build Coastguard Worker "rust_stdlib_filegroup", 27*5225e6b1SAndroid Build Coastguard Worker "rust_toolchain", 28*5225e6b1SAndroid Build Coastguard Worker "rustfmt_toolchain", 29*5225e6b1SAndroid Build Coastguard Worker) 30*5225e6b1SAndroid Build Coastguard Workerload( 31*5225e6b1SAndroid Build Coastguard Worker ":gbl_toolchain.bzl", 32*5225e6b1SAndroid Build Coastguard Worker "build_with_no_rust_sysroot", 33*5225e6b1SAndroid Build Coastguard Worker "gbl_clang_cc_toolchain", 34*5225e6b1SAndroid Build Coastguard Worker "prebuilt_binary", 35*5225e6b1SAndroid Build Coastguard Worker) 36*5225e6b1SAndroid Build Coastguard Worker 37*5225e6b1SAndroid Build Coastguard Workerpackage( 38*5225e6b1SAndroid Build Coastguard Worker default_visibility = ["//visibility:public"], 39*5225e6b1SAndroid Build Coastguard Worker) 40*5225e6b1SAndroid Build Coastguard Worker 41*5225e6b1SAndroid Build Coastguard Worker# The following constraint/settings will be used in our newly defined 42*5225e6b1SAndroid Build Coastguard Worker# toolchains, so that they only get selected by bazel when we configure 43*5225e6b1SAndroid Build Coastguard Worker# to build GBL. 44*5225e6b1SAndroid Build Coastguard Workerconstraint_setting(name = "firmware_image_type") 45*5225e6b1SAndroid Build Coastguard Worker 46*5225e6b1SAndroid Build Coastguard Workerconstraint_value( 47*5225e6b1SAndroid Build Coastguard Worker name = "uefi", 48*5225e6b1SAndroid Build Coastguard Worker constraint_setting = ":firmware_image_type", 49*5225e6b1SAndroid Build Coastguard Worker) 50*5225e6b1SAndroid Build Coastguard Worker 51*5225e6b1SAndroid Build Coastguard Workerconstraint_value( 52*5225e6b1SAndroid Build Coastguard Worker name = "elf", 53*5225e6b1SAndroid Build Coastguard Worker constraint_setting = ":firmware_image_type", 54*5225e6b1SAndroid Build Coastguard Worker) 55*5225e6b1SAndroid Build Coastguard Worker 56*5225e6b1SAndroid Build Coastguard Workerhost_x86_64_constraint_values = [ 57*5225e6b1SAndroid Build Coastguard Worker "@platforms//os:linux", 58*5225e6b1SAndroid Build Coastguard Worker "@platforms//cpu:x86_64", 59*5225e6b1SAndroid Build Coastguard Worker] 60*5225e6b1SAndroid Build Coastguard Worker 61*5225e6b1SAndroid Build Coastguard Workeruefi_x86_64_constraint_values = [ 62*5225e6b1SAndroid Build Coastguard Worker ":uefi", 63*5225e6b1SAndroid Build Coastguard Worker "@platforms//os:none", 64*5225e6b1SAndroid Build Coastguard Worker "@platforms//cpu:x86_64", 65*5225e6b1SAndroid Build Coastguard Worker] 66*5225e6b1SAndroid Build Coastguard Worker 67*5225e6b1SAndroid Build Coastguard Workeruefi_x86_32_constraint_values = [ 68*5225e6b1SAndroid Build Coastguard Worker ":uefi", 69*5225e6b1SAndroid Build Coastguard Worker "@platforms//os:none", 70*5225e6b1SAndroid Build Coastguard Worker "@platforms//cpu:x86_32", 71*5225e6b1SAndroid Build Coastguard Worker] 72*5225e6b1SAndroid Build Coastguard Worker 73*5225e6b1SAndroid Build Coastguard Workeruefi_aarch64_constraint_values = [ 74*5225e6b1SAndroid Build Coastguard Worker ":uefi", 75*5225e6b1SAndroid Build Coastguard Worker "@platforms//os:none", 76*5225e6b1SAndroid Build Coastguard Worker "@platforms//cpu:aarch64", 77*5225e6b1SAndroid Build Coastguard Worker] 78*5225e6b1SAndroid Build Coastguard Worker 79*5225e6b1SAndroid Build Coastguard Workerelf_riscv64_constraint_values = [ 80*5225e6b1SAndroid Build Coastguard Worker ":elf", 81*5225e6b1SAndroid Build Coastguard Worker "@platforms//os:none", 82*5225e6b1SAndroid Build Coastguard Worker "@platforms//cpu:riscv64", 83*5225e6b1SAndroid Build Coastguard Worker] 84*5225e6b1SAndroid Build Coastguard Worker 85*5225e6b1SAndroid Build Coastguard Workerconfig_setting( 86*5225e6b1SAndroid Build Coastguard Worker name = "gbl_rust_host_x86_64", 87*5225e6b1SAndroid Build Coastguard Worker constraint_values = host_x86_64_constraint_values, 88*5225e6b1SAndroid Build Coastguard Worker) 89*5225e6b1SAndroid Build Coastguard Worker 90*5225e6b1SAndroid Build Coastguard Workerconfig_setting( 91*5225e6b1SAndroid Build Coastguard Worker name = "gbl_rust_uefi_x86_64", 92*5225e6b1SAndroid Build Coastguard Worker constraint_values = uefi_x86_64_constraint_values, 93*5225e6b1SAndroid Build Coastguard Worker) 94*5225e6b1SAndroid Build Coastguard Worker 95*5225e6b1SAndroid Build Coastguard Workerconfig_setting( 96*5225e6b1SAndroid Build Coastguard Worker name = "gbl_rust_uefi_x86_32", 97*5225e6b1SAndroid Build Coastguard Worker constraint_values = uefi_x86_32_constraint_values, 98*5225e6b1SAndroid Build Coastguard Worker) 99*5225e6b1SAndroid Build Coastguard Worker 100*5225e6b1SAndroid Build Coastguard Workerconfig_setting( 101*5225e6b1SAndroid Build Coastguard Worker name = "gbl_rust_uefi_aarch64", 102*5225e6b1SAndroid Build Coastguard Worker constraint_values = uefi_aarch64_constraint_values, 103*5225e6b1SAndroid Build Coastguard Worker) 104*5225e6b1SAndroid Build Coastguard Worker 105*5225e6b1SAndroid Build Coastguard Workerconfig_setting( 106*5225e6b1SAndroid Build Coastguard Worker name = "gbl_rust_elf_riscv64", 107*5225e6b1SAndroid Build Coastguard Worker constraint_values = elf_riscv64_constraint_values, 108*5225e6b1SAndroid Build Coastguard Worker) 109*5225e6b1SAndroid Build Coastguard Worker 110*5225e6b1SAndroid Build Coastguard Worker# The following will be passed to "bazel build --platform=<>" argument to 111*5225e6b1SAndroid Build Coastguard Worker# configure building for specific architecture and image type. 112*5225e6b1SAndroid Build Coastguard Workerplatform( 113*5225e6b1SAndroid Build Coastguard Worker name = "gbl_uefi_x86_64", 114*5225e6b1SAndroid Build Coastguard Worker constraint_values = uefi_x86_64_constraint_values, 115*5225e6b1SAndroid Build Coastguard Worker) 116*5225e6b1SAndroid Build Coastguard Worker 117*5225e6b1SAndroid Build Coastguard Workerplatform( 118*5225e6b1SAndroid Build Coastguard Worker name = "gbl_uefi_x86_32", 119*5225e6b1SAndroid Build Coastguard Worker constraint_values = uefi_x86_32_constraint_values, 120*5225e6b1SAndroid Build Coastguard Worker) 121*5225e6b1SAndroid Build Coastguard Worker 122*5225e6b1SAndroid Build Coastguard Workerplatform( 123*5225e6b1SAndroid Build Coastguard Worker name = "gbl_uefi_aarch64", 124*5225e6b1SAndroid Build Coastguard Worker constraint_values = uefi_aarch64_constraint_values, 125*5225e6b1SAndroid Build Coastguard Worker) 126*5225e6b1SAndroid Build Coastguard Worker 127*5225e6b1SAndroid Build Coastguard Workerplatform( 128*5225e6b1SAndroid Build Coastguard Worker name = "gbl_elf_riscv64", 129*5225e6b1SAndroid Build Coastguard Worker constraint_values = elf_riscv64_constraint_values, 130*5225e6b1SAndroid Build Coastguard Worker) 131*5225e6b1SAndroid Build Coastguard Worker 132*5225e6b1SAndroid Build Coastguard Workerbool_setting( 133*5225e6b1SAndroid Build Coastguard Worker name = "rust_no_sysroot", 134*5225e6b1SAndroid Build Coastguard Worker build_setting_default = False, 135*5225e6b1SAndroid Build Coastguard Worker visibility = ["//visibility:public"], 136*5225e6b1SAndroid Build Coastguard Worker) 137*5225e6b1SAndroid Build Coastguard Worker 138*5225e6b1SAndroid Build Coastguard Workerconfig_setting( 139*5225e6b1SAndroid Build Coastguard Worker name = "rust_no_sysroot_true", 140*5225e6b1SAndroid Build Coastguard Worker flag_values = {":rust_no_sysroot": "True"}, 141*5225e6b1SAndroid Build Coastguard Worker) 142*5225e6b1SAndroid Build Coastguard Worker 143*5225e6b1SAndroid Build Coastguard Worker# Linux host LLVM toolchain. 144*5225e6b1SAndroid Build Coastguard Worker# The toolchain is mainly used for building/linking host tools, i.e. bindgen pre-processing 145*5225e6b1SAndroid Build Coastguard Workergbl_clang_cc_toolchain( 146*5225e6b1SAndroid Build Coastguard Worker name = "x86_64-unknown-linux-gnu", 147*5225e6b1SAndroid Build Coastguard Worker # Host LLVM toolchain has additional C++ stdlib. 148*5225e6b1SAndroid Build Coastguard Worker builtin_includes = [ 149*5225e6b1SAndroid Build Coastguard Worker LLVM_PREBUILTS_CPP_INCLUDE, # C++ headers must come first. 150*5225e6b1SAndroid Build Coastguard Worker LLVM_PREBUILTS_C_INCLUDE, 151*5225e6b1SAndroid Build Coastguard Worker ] + LINUX_SYSROOT_INCLUDES, 152*5225e6b1SAndroid Build Coastguard Worker ld_flags = [ 153*5225e6b1SAndroid Build Coastguard Worker "-stdlib=libc++", 154*5225e6b1SAndroid Build Coastguard Worker "-static-libstdc++", 155*5225e6b1SAndroid Build Coastguard Worker ], 156*5225e6b1SAndroid Build Coastguard Worker target_cpu = "x86_64", 157*5225e6b1SAndroid Build Coastguard Worker target_system_triple = "x86_64-unknown-linux-gnu", 158*5225e6b1SAndroid Build Coastguard Worker) 159*5225e6b1SAndroid Build Coastguard Worker 160*5225e6b1SAndroid Build Coastguard Workertoolchain( 161*5225e6b1SAndroid Build Coastguard Worker name = "x86_64-unknown-linux-gnu_toolchain", 162*5225e6b1SAndroid Build Coastguard Worker exec_compatible_with = ["@platforms//os:linux"], 163*5225e6b1SAndroid Build Coastguard Worker target_compatible_with = [ 164*5225e6b1SAndroid Build Coastguard Worker "@platforms//os:linux", 165*5225e6b1SAndroid Build Coastguard Worker "@platforms//cpu:x86_64", 166*5225e6b1SAndroid Build Coastguard Worker ], 167*5225e6b1SAndroid Build Coastguard Worker toolchain = ":x86_64-unknown-linux-gnu", 168*5225e6b1SAndroid Build Coastguard Worker toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", 169*5225e6b1SAndroid Build Coastguard Worker) 170*5225e6b1SAndroid Build Coastguard Worker 171*5225e6b1SAndroid Build Coastguard Worker# The following defines LLVM C++ toolchains for UEFI/ELF targets. They are mostly used for the 172*5225e6b1SAndroid Build Coastguard Worker# final step of linking Rust executables, but may also be used for compiling mixed C/C++ code. 173*5225e6b1SAndroid Build Coastguard Worker 174*5225e6b1SAndroid Build Coastguard Workercc_flags_common = [ 175*5225e6b1SAndroid Build Coastguard Worker "-ffreestanding", 176*5225e6b1SAndroid Build Coastguard Worker "-fno-common", 177*5225e6b1SAndroid Build Coastguard Worker "-fno-exceptions", 178*5225e6b1SAndroid Build Coastguard Worker "-fno-rtti", 179*5225e6b1SAndroid Build Coastguard Worker # Enable optimization otherwise software AVB hash will be too slow. 180*5225e6b1SAndroid Build Coastguard Worker "-O3", 181*5225e6b1SAndroid Build Coastguard Worker] 182*5225e6b1SAndroid Build Coastguard Worker 183*5225e6b1SAndroid Build Coastguard Worker# x86_64 UEFI targets 184*5225e6b1SAndroid Build Coastguard Workergbl_clang_cc_toolchain( 185*5225e6b1SAndroid Build Coastguard Worker name = "x86_64_uefi_clang_cc_toolchain", 186*5225e6b1SAndroid Build Coastguard Worker cc_flags = cc_flags_common, 187*5225e6b1SAndroid Build Coastguard Worker target_cpu = "x86_64", 188*5225e6b1SAndroid Build Coastguard Worker target_system_triple = "x86_64-unknown-windows-msvc", 189*5225e6b1SAndroid Build Coastguard Worker) 190*5225e6b1SAndroid Build Coastguard Worker 191*5225e6b1SAndroid Build Coastguard Workertoolchain( 192*5225e6b1SAndroid Build Coastguard Worker name = "x86_64_uefi_clang", 193*5225e6b1SAndroid Build Coastguard Worker exec_compatible_with = ["@platforms//os:linux"], 194*5225e6b1SAndroid Build Coastguard Worker target_compatible_with = uefi_x86_64_constraint_values, 195*5225e6b1SAndroid Build Coastguard Worker toolchain = ":x86_64_uefi_clang_cc_toolchain", 196*5225e6b1SAndroid Build Coastguard Worker toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", 197*5225e6b1SAndroid Build Coastguard Worker) 198*5225e6b1SAndroid Build Coastguard Worker 199*5225e6b1SAndroid Build Coastguard Worker# x86_32 UEFI targets 200*5225e6b1SAndroid Build Coastguard Workergbl_clang_cc_toolchain( 201*5225e6b1SAndroid Build Coastguard Worker name = "x86_32_uefi_clang_cc_toolchain", 202*5225e6b1SAndroid Build Coastguard Worker cc_flags = cc_flags_common + [ 203*5225e6b1SAndroid Build Coastguard Worker "-m32", 204*5225e6b1SAndroid Build Coastguard Worker # Adding this prevents the compiler from generating mmx, sse instructions such as 205*5225e6b1SAndroid Build Coastguard Worker # "movsd (%esp),%xmm0" which likely isn't enabled during the bootloader stage and causes 206*5225e6b1SAndroid Build Coastguard Worker # crash as a result. 207*5225e6b1SAndroid Build Coastguard Worker "-march=i686", 208*5225e6b1SAndroid Build Coastguard Worker ], 209*5225e6b1SAndroid Build Coastguard Worker # Safe Exception Handlers is not applicable to EFI systems. 210*5225e6b1SAndroid Build Coastguard Worker ld_flags = ["/SAFESEH:no"], 211*5225e6b1SAndroid Build Coastguard Worker target_cpu = "x86_32", 212*5225e6b1SAndroid Build Coastguard Worker target_system_triple = "i686-unknown-windows-gnu", 213*5225e6b1SAndroid Build Coastguard Worker) 214*5225e6b1SAndroid Build Coastguard Worker 215*5225e6b1SAndroid Build Coastguard Workertoolchain( 216*5225e6b1SAndroid Build Coastguard Worker name = "x86_32_uefi_clang", 217*5225e6b1SAndroid Build Coastguard Worker exec_compatible_with = ["@platforms//os:linux"], 218*5225e6b1SAndroid Build Coastguard Worker target_compatible_with = uefi_x86_32_constraint_values, 219*5225e6b1SAndroid Build Coastguard Worker toolchain = ":x86_32_uefi_clang_cc_toolchain", 220*5225e6b1SAndroid Build Coastguard Worker toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", 221*5225e6b1SAndroid Build Coastguard Worker) 222*5225e6b1SAndroid Build Coastguard Worker 223*5225e6b1SAndroid Build Coastguard Worker# aarch64 UEFI targets 224*5225e6b1SAndroid Build Coastguard Workergbl_clang_cc_toolchain( 225*5225e6b1SAndroid Build Coastguard Worker name = "aarch64_uefi_clang_cc_toolchain", 226*5225e6b1SAndroid Build Coastguard Worker cc_flags = cc_flags_common, 227*5225e6b1SAndroid Build Coastguard Worker target_cpu = "aarch64", 228*5225e6b1SAndroid Build Coastguard Worker target_system_triple = "aarch64-windows-msvc", 229*5225e6b1SAndroid Build Coastguard Worker) 230*5225e6b1SAndroid Build Coastguard Worker 231*5225e6b1SAndroid Build Coastguard Workertoolchain( 232*5225e6b1SAndroid Build Coastguard Worker name = "aarch64_uefi_clang", 233*5225e6b1SAndroid Build Coastguard Worker exec_compatible_with = ["@platforms//os:linux"], 234*5225e6b1SAndroid Build Coastguard Worker target_compatible_with = uefi_aarch64_constraint_values, 235*5225e6b1SAndroid Build Coastguard Worker toolchain = ":aarch64_uefi_clang_cc_toolchain", 236*5225e6b1SAndroid Build Coastguard Worker toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", 237*5225e6b1SAndroid Build Coastguard Worker) 238*5225e6b1SAndroid Build Coastguard Worker 239*5225e6b1SAndroid Build Coastguard Worker# riscv64 ELF targets 240*5225e6b1SAndroid Build Coastguard Workergbl_clang_cc_toolchain( 241*5225e6b1SAndroid Build Coastguard Worker name = "riscv64_elf_clang_cc_toolchain", 242*5225e6b1SAndroid Build Coastguard Worker cc_flags = cc_flags_common + ["-fpie"], 243*5225e6b1SAndroid Build Coastguard Worker target_cpu = "riscv64", 244*5225e6b1SAndroid Build Coastguard Worker target_system_triple = "riscv64-unknown-linux", 245*5225e6b1SAndroid Build Coastguard Worker) 246*5225e6b1SAndroid Build Coastguard Worker 247*5225e6b1SAndroid Build Coastguard Workertoolchain( 248*5225e6b1SAndroid Build Coastguard Worker name = "riscv64_elf_clang", 249*5225e6b1SAndroid Build Coastguard Worker exec_compatible_with = ["@platforms//os:linux"], 250*5225e6b1SAndroid Build Coastguard Worker target_compatible_with = elf_riscv64_constraint_values, 251*5225e6b1SAndroid Build Coastguard Worker toolchain = ":riscv64_elf_clang_cc_toolchain", 252*5225e6b1SAndroid Build Coastguard Worker toolchain_type = "@bazel_tools//tools/cpp:toolchain_type", 253*5225e6b1SAndroid Build Coastguard Worker) 254*5225e6b1SAndroid Build Coastguard Worker 255*5225e6b1SAndroid Build Coastguard Worker# Rust toolchains 256*5225e6b1SAndroid Build Coastguard Worker 257*5225e6b1SAndroid Build Coastguard Worker# An empty rust std file group used as placeholder when building rust sysroot. 258*5225e6b1SAndroid Build Coastguard Workerrust_stdlib_filegroup( 259*5225e6b1SAndroid Build Coastguard Worker name = "rust_stdlib_empty", 260*5225e6b1SAndroid Build Coastguard Worker srcs = [], 261*5225e6b1SAndroid Build Coastguard Worker) 262*5225e6b1SAndroid Build Coastguard Worker 263*5225e6b1SAndroid Build Coastguard Worker# A rule for building sysroot from source. 264*5225e6b1SAndroid Build Coastguard Workerbuild_with_no_rust_sysroot( 265*5225e6b1SAndroid Build Coastguard Worker name = "rust_sysroot_source_build", 266*5225e6b1SAndroid Build Coastguard Worker deps = [ 267*5225e6b1SAndroid Build Coastguard Worker "@rust_prebuilts//:liballoc", 268*5225e6b1SAndroid Build Coastguard Worker "@rust_prebuilts//:libcompiler_builtins", 269*5225e6b1SAndroid Build Coastguard Worker "@rust_prebuilts//:libcore", 270*5225e6b1SAndroid Build Coastguard Worker ], 271*5225e6b1SAndroid Build Coastguard Worker) 272*5225e6b1SAndroid Build Coastguard Worker 273*5225e6b1SAndroid Build Coastguard Workerrust_stdlib_filegroup( 274*5225e6b1SAndroid Build Coastguard Worker name = "rust_std_source_build", 275*5225e6b1SAndroid Build Coastguard Worker srcs = [":rust_sysroot_source_build"], 276*5225e6b1SAndroid Build Coastguard Worker) 277*5225e6b1SAndroid Build Coastguard Worker 278*5225e6b1SAndroid Build Coastguard Workercommon_lint_opts = [ 279*5225e6b1SAndroid Build Coastguard Worker "-A", 280*5225e6b1SAndroid Build Coastguard Worker "deprecated", 281*5225e6b1SAndroid Build Coastguard Worker # external/rust/crates/spin doesn't pass this lint check and there is not a way to make an 282*5225e6b1SAndroid Build Coastguard Worker # exemption. Disable it until upstream is fixed or we figure out a workaround. 283*5225e6b1SAndroid Build Coastguard Worker #"-D", 284*5225e6b1SAndroid Build Coastguard Worker #"unsafe_op_in_unsafe_fn", 285*5225e6b1SAndroid Build Coastguard Worker "-D", 286*5225e6b1SAndroid Build Coastguard Worker "warnings", 287*5225e6b1SAndroid Build Coastguard Worker "-D", 288*5225e6b1SAndroid Build Coastguard Worker "clippy::undocumented_unsafe_blocks", 289*5225e6b1SAndroid Build Coastguard Worker "-D", 290*5225e6b1SAndroid Build Coastguard Worker "clippy::too-many-arguments", 291*5225e6b1SAndroid Build Coastguard Worker] 292*5225e6b1SAndroid Build Coastguard Worker 293*5225e6b1SAndroid Build Coastguard Worker# Linux x86_64 Host toolchain 294*5225e6b1SAndroid Build Coastguard Workerrust_toolchain( 295*5225e6b1SAndroid Build Coastguard Worker name = "x86_64_unknown_linux_gnu", 296*5225e6b1SAndroid Build Coastguard Worker allocator_library = None, 297*5225e6b1SAndroid Build Coastguard Worker binary_ext = "", 298*5225e6b1SAndroid Build Coastguard Worker default_edition = "2021", 299*5225e6b1SAndroid Build Coastguard Worker dylib_ext = ".so", 300*5225e6b1SAndroid Build Coastguard Worker exec_triple = "x86_64-unknown-linux-gnu", 301*5225e6b1SAndroid Build Coastguard Worker global_allocator_library = None, 302*5225e6b1SAndroid Build Coastguard Worker rust_doc = "@rust_prebuilts//:bin/rustdoc", 303*5225e6b1SAndroid Build Coastguard Worker rust_std = "@rust_prebuilts//:prebuilt_stdlibs", 304*5225e6b1SAndroid Build Coastguard Worker rustc = "@rust_prebuilts//:bin/rustc", 305*5225e6b1SAndroid Build Coastguard Worker staticlib_ext = ".a", 306*5225e6b1SAndroid Build Coastguard Worker stdlib_linkflags = [], 307*5225e6b1SAndroid Build Coastguard Worker target_triple = "x86_64-unknown-linux-gnu", 308*5225e6b1SAndroid Build Coastguard Worker) 309*5225e6b1SAndroid Build Coastguard Worker 310*5225e6b1SAndroid Build Coastguard Workertoolchain( 311*5225e6b1SAndroid Build Coastguard Worker name = "x86_64_unknown_linux_gnu_toolchain", 312*5225e6b1SAndroid Build Coastguard Worker exec_compatible_with = ["@platforms//os:linux"], 313*5225e6b1SAndroid Build Coastguard Worker target_settings = [":gbl_rust_host_x86_64"], 314*5225e6b1SAndroid Build Coastguard Worker toolchain = ":x86_64_unknown_linux_gnu", 315*5225e6b1SAndroid Build Coastguard Worker toolchain_type = "@rules_rust//rust:toolchain", 316*5225e6b1SAndroid Build Coastguard Worker) 317*5225e6b1SAndroid Build Coastguard Worker 318*5225e6b1SAndroid Build Coastguard Worker# x86_64 UEFI toolchain 319*5225e6b1SAndroid Build Coastguard Workerrust_toolchain( 320*5225e6b1SAndroid Build Coastguard Worker name = "x86_64-unknown-uefi", 321*5225e6b1SAndroid Build Coastguard Worker allocator_library = None, 322*5225e6b1SAndroid Build Coastguard Worker binary_ext = ".efi", 323*5225e6b1SAndroid Build Coastguard Worker default_edition = "2021", 324*5225e6b1SAndroid Build Coastguard Worker dylib_ext = ".so", 325*5225e6b1SAndroid Build Coastguard Worker exec_triple = "x86_64-unknown-linux-gnu", 326*5225e6b1SAndroid Build Coastguard Worker extra_rustc_flags = common_lint_opts + [ 327*5225e6b1SAndroid Build Coastguard Worker # The linker options generated by rustc assumes `lld` as the linker. For windows platforms, 328*5225e6b1SAndroid Build Coastguard Worker # the lld args style is different than that of clang++, i.e. for library search path, lld 329*5225e6b1SAndroid Build Coastguard Worker # uses "/L<path>" while clang++ uses "-L<path>". Thus we need to use lld directly instead 330*5225e6b1SAndroid Build Coastguard Worker # of `clang++`. 331*5225e6b1SAndroid Build Coastguard Worker "--codegen=linker={}".format(gbl_llvm_tool_path("lld")), 332*5225e6b1SAndroid Build Coastguard Worker # Disable default sysroot. We'll pass sysroot explicitly via the `rust_std` field below. 333*5225e6b1SAndroid Build Coastguard Worker "--sysroot", 334*5225e6b1SAndroid Build Coastguard Worker "/dev/null", 335*5225e6b1SAndroid Build Coastguard Worker ], 336*5225e6b1SAndroid Build Coastguard Worker global_allocator_library = None, 337*5225e6b1SAndroid Build Coastguard Worker rust_doc = "@rust_prebuilts//:bin/rustdoc", 338*5225e6b1SAndroid Build Coastguard Worker rust_std = "@rust_prebuilts//:x86_64-unknown-uefi_prebuilt_stdlibs", 339*5225e6b1SAndroid Build Coastguard Worker rustc = "@rust_prebuilts//:bin/rustc", 340*5225e6b1SAndroid Build Coastguard Worker staticlib_ext = ".a", 341*5225e6b1SAndroid Build Coastguard Worker stdlib_linkflags = [], 342*5225e6b1SAndroid Build Coastguard Worker target_triple = "x86_64-unknown-uefi", 343*5225e6b1SAndroid Build Coastguard Worker) 344*5225e6b1SAndroid Build Coastguard Worker 345*5225e6b1SAndroid Build Coastguard Workertoolchain( 346*5225e6b1SAndroid Build Coastguard Worker name = "x86_64-unknown-uefi_toolchain", 347*5225e6b1SAndroid Build Coastguard Worker exec_compatible_with = ["@platforms//os:linux"], 348*5225e6b1SAndroid Build Coastguard Worker target_settings = [":gbl_rust_uefi_x86_64"], 349*5225e6b1SAndroid Build Coastguard Worker toolchain = ":x86_64-unknown-uefi", 350*5225e6b1SAndroid Build Coastguard Worker toolchain_type = "@rules_rust//rust:toolchain", 351*5225e6b1SAndroid Build Coastguard Worker) 352*5225e6b1SAndroid Build Coastguard Worker 353*5225e6b1SAndroid Build Coastguard Worker# i686 UEFI toolchain 354*5225e6b1SAndroid Build Coastguard Workerrust_toolchain( 355*5225e6b1SAndroid Build Coastguard Worker name = "i686-unknown-uefi", 356*5225e6b1SAndroid Build Coastguard Worker allocator_library = None, 357*5225e6b1SAndroid Build Coastguard Worker binary_ext = ".efi", 358*5225e6b1SAndroid Build Coastguard Worker default_edition = "2021", 359*5225e6b1SAndroid Build Coastguard Worker dylib_ext = ".so", 360*5225e6b1SAndroid Build Coastguard Worker exec_triple = "x86_64-unknown-linux-gnu", 361*5225e6b1SAndroid Build Coastguard Worker extra_rustc_flags = common_lint_opts + [ 362*5225e6b1SAndroid Build Coastguard Worker "--codegen=linker={}".format(gbl_llvm_tool_path("lld")), 363*5225e6b1SAndroid Build Coastguard Worker # Disable default sysroot. We'll pass sysroot explicitly via the `rust_std` field below. 364*5225e6b1SAndroid Build Coastguard Worker "--sysroot", 365*5225e6b1SAndroid Build Coastguard Worker "/dev/null", 366*5225e6b1SAndroid Build Coastguard Worker ], 367*5225e6b1SAndroid Build Coastguard Worker global_allocator_library = None, 368*5225e6b1SAndroid Build Coastguard Worker rust_doc = "@rust_prebuilts//:bin/rustdoc", 369*5225e6b1SAndroid Build Coastguard Worker # Need to use our own sysroot because we have a custom patch that needs to be applied for std 370*5225e6b1SAndroid Build Coastguard Worker # in order to enable compiler builtin for chkstk(), alloca(). Once the fix is upstreamed, we 371*5225e6b1SAndroid Build Coastguard Worker # can use the prebuilt. 372*5225e6b1SAndroid Build Coastguard Worker rust_std = select({ 373*5225e6b1SAndroid Build Coastguard Worker ":rust_no_sysroot_true": ":rust_stdlib_empty", 374*5225e6b1SAndroid Build Coastguard Worker "//conditions:default": ":rust_std_source_build", 375*5225e6b1SAndroid Build Coastguard Worker }), 376*5225e6b1SAndroid Build Coastguard Worker #rust_std = "@rust_prebuilts//:i686-unknown-uefi_prebuilt_stdlibs", 377*5225e6b1SAndroid Build Coastguard Worker rustc = "@rust_prebuilts//:bin/rustc", 378*5225e6b1SAndroid Build Coastguard Worker staticlib_ext = ".a", 379*5225e6b1SAndroid Build Coastguard Worker stdlib_linkflags = [], 380*5225e6b1SAndroid Build Coastguard Worker target_triple = "i686-unknown-uefi", 381*5225e6b1SAndroid Build Coastguard Worker) 382*5225e6b1SAndroid Build Coastguard Worker 383*5225e6b1SAndroid Build Coastguard Workertoolchain( 384*5225e6b1SAndroid Build Coastguard Worker name = "i686-unknown-uefi_toolchain", 385*5225e6b1SAndroid Build Coastguard Worker exec_compatible_with = ["@platforms//os:linux"], 386*5225e6b1SAndroid Build Coastguard Worker target_settings = [":gbl_rust_uefi_x86_32"], 387*5225e6b1SAndroid Build Coastguard Worker toolchain = ":i686-unknown-uefi", 388*5225e6b1SAndroid Build Coastguard Worker toolchain_type = "@rules_rust//rust:toolchain", 389*5225e6b1SAndroid Build Coastguard Worker) 390*5225e6b1SAndroid Build Coastguard Worker 391*5225e6b1SAndroid Build Coastguard Worker# aarch64 UEFI toolchain 392*5225e6b1SAndroid Build Coastguard Workerrust_toolchain( 393*5225e6b1SAndroid Build Coastguard Worker name = "aarch64-unknown-uefi", 394*5225e6b1SAndroid Build Coastguard Worker allocator_library = None, 395*5225e6b1SAndroid Build Coastguard Worker binary_ext = ".efi", 396*5225e6b1SAndroid Build Coastguard Worker default_edition = "2021", 397*5225e6b1SAndroid Build Coastguard Worker dylib_ext = ".so", 398*5225e6b1SAndroid Build Coastguard Worker exec_triple = "x86_64-unknown-linux-gnu", 399*5225e6b1SAndroid Build Coastguard Worker extra_rustc_flags = common_lint_opts + [ 400*5225e6b1SAndroid Build Coastguard Worker "--codegen=linker={}".format(gbl_llvm_tool_path("lld")), 401*5225e6b1SAndroid Build Coastguard Worker # Disable default sysroot. We'll pass sysroot explicitly via the `rust_std` field below. 402*5225e6b1SAndroid Build Coastguard Worker "--sysroot", 403*5225e6b1SAndroid Build Coastguard Worker "/dev/null", 404*5225e6b1SAndroid Build Coastguard Worker ], 405*5225e6b1SAndroid Build Coastguard Worker global_allocator_library = None, 406*5225e6b1SAndroid Build Coastguard Worker rust_doc = "@rust_prebuilts//:bin/rustdoc", 407*5225e6b1SAndroid Build Coastguard Worker rust_std = "@rust_prebuilts//:aarch64-unknown-uefi_prebuilt_stdlibs", 408*5225e6b1SAndroid Build Coastguard Worker rustc = "@rust_prebuilts//:bin/rustc", 409*5225e6b1SAndroid Build Coastguard Worker staticlib_ext = ".a", 410*5225e6b1SAndroid Build Coastguard Worker stdlib_linkflags = [], 411*5225e6b1SAndroid Build Coastguard Worker target_triple = "aarch64-unknown-uefi", 412*5225e6b1SAndroid Build Coastguard Worker) 413*5225e6b1SAndroid Build Coastguard Worker 414*5225e6b1SAndroid Build Coastguard Workertoolchain( 415*5225e6b1SAndroid Build Coastguard Worker name = "aarch64-unknown-uefi_toolchain", 416*5225e6b1SAndroid Build Coastguard Worker exec_compatible_with = ["@platforms//os:linux"], 417*5225e6b1SAndroid Build Coastguard Worker target_settings = [":gbl_rust_uefi_aarch64"], 418*5225e6b1SAndroid Build Coastguard Worker toolchain = ":aarch64-unknown-uefi", 419*5225e6b1SAndroid Build Coastguard Worker toolchain_type = "@rules_rust//rust:toolchain", 420*5225e6b1SAndroid Build Coastguard Worker) 421*5225e6b1SAndroid Build Coastguard Worker 422*5225e6b1SAndroid Build Coastguard Worker# riscv64 PIE ELF toolchain 423*5225e6b1SAndroid Build Coastguard Workerrust_toolchain( 424*5225e6b1SAndroid Build Coastguard Worker name = "riscv64gc-unknown-none-pie_elf", 425*5225e6b1SAndroid Build Coastguard Worker allocator_library = None, 426*5225e6b1SAndroid Build Coastguard Worker binary_ext = "", 427*5225e6b1SAndroid Build Coastguard Worker default_edition = "2021", 428*5225e6b1SAndroid Build Coastguard Worker dylib_ext = ".so", 429*5225e6b1SAndroid Build Coastguard Worker exec_triple = "x86_64-unknown-linux-gnu", 430*5225e6b1SAndroid Build Coastguard Worker extra_rustc_flags = common_lint_opts + [ 431*5225e6b1SAndroid Build Coastguard Worker "--codegen=linker={}".format(gbl_llvm_tool_path("lld")), 432*5225e6b1SAndroid Build Coastguard Worker # Disable default sysroot. We'll pass sysroot explicitly via the `rust_std` field below. 433*5225e6b1SAndroid Build Coastguard Worker "--sysroot", 434*5225e6b1SAndroid Build Coastguard Worker "/dev/null", 435*5225e6b1SAndroid Build Coastguard Worker ], 436*5225e6b1SAndroid Build Coastguard Worker global_allocator_library = None, 437*5225e6b1SAndroid Build Coastguard Worker rust_doc = "@rust_prebuilts//:bin/rustdoc", 438*5225e6b1SAndroid Build Coastguard Worker # Need to use our own built sysroot because we are using a custom spec below. 439*5225e6b1SAndroid Build Coastguard Worker rust_std = select({ 440*5225e6b1SAndroid Build Coastguard Worker ":rust_no_sysroot_true": ":rust_stdlib_empty", 441*5225e6b1SAndroid Build Coastguard Worker "//conditions:default": ":rust_std_source_build", 442*5225e6b1SAndroid Build Coastguard Worker }), 443*5225e6b1SAndroid Build Coastguard Worker rustc = "@rust_prebuilts//:bin/rustc", 444*5225e6b1SAndroid Build Coastguard Worker staticlib_ext = ".a", 445*5225e6b1SAndroid Build Coastguard Worker stdlib_linkflags = [], 446*5225e6b1SAndroid Build Coastguard Worker # The custom spec is based on builtin target "riscv64gc-unknown-none-elf" but with the 447*5225e6b1SAndroid Build Coastguard Worker # following changes for enabling PIE: 448*5225e6b1SAndroid Build Coastguard Worker # 449*5225e6b1SAndroid Build Coastguard Worker # 1. "relocation-model" config entry changed from "static" to "pic". 450*5225e6b1SAndroid Build Coastguard Worker # 2. Added "position-independent-executables": true. 451*5225e6b1SAndroid Build Coastguard Worker # 452*5225e6b1SAndroid Build Coastguard Worker # The original spec can be obtained by: 453*5225e6b1SAndroid Build Coastguard Worker # 454*5225e6b1SAndroid Build Coastguard Worker # rustc +nightly -Z unstable-options --print target-spec-json \ 455*5225e6b1SAndroid Build Coastguard Worker # --target riscv64gc-unknown-none-elf 456*5225e6b1SAndroid Build Coastguard Worker target_json = """ 457*5225e6b1SAndroid Build Coastguard Worker { 458*5225e6b1SAndroid Build Coastguard Worker "arch": "riscv64", 459*5225e6b1SAndroid Build Coastguard Worker "code-model": "medium", 460*5225e6b1SAndroid Build Coastguard Worker "cpu": "generic-rv64", 461*5225e6b1SAndroid Build Coastguard Worker "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", 462*5225e6b1SAndroid Build Coastguard Worker "eh-frame-header": false, 463*5225e6b1SAndroid Build Coastguard Worker "emit-debug-gdb-scripts": false, 464*5225e6b1SAndroid Build Coastguard Worker "features": "+m,+a,+f,+d,+c", 465*5225e6b1SAndroid Build Coastguard Worker "is-builtin": false, 466*5225e6b1SAndroid Build Coastguard Worker "linker": "rust-lld", 467*5225e6b1SAndroid Build Coastguard Worker "linker-flavor": "ld.lld", 468*5225e6b1SAndroid Build Coastguard Worker "llvm-abiname": "lp64d", 469*5225e6b1SAndroid Build Coastguard Worker "llvm-target": "riscv64-unknown-linux", 470*5225e6b1SAndroid Build Coastguard Worker "max-atomic-width": 64, 471*5225e6b1SAndroid Build Coastguard Worker "os": "none", 472*5225e6b1SAndroid Build Coastguard Worker "panic-strategy": "abort", 473*5225e6b1SAndroid Build Coastguard Worker "relocation-model": "pic", 474*5225e6b1SAndroid Build Coastguard Worker "position-independent-executables": true, 475*5225e6b1SAndroid Build Coastguard Worker "supported-sanitizers": [ 476*5225e6b1SAndroid Build Coastguard Worker "kernel-address" 477*5225e6b1SAndroid Build Coastguard Worker ], 478*5225e6b1SAndroid Build Coastguard Worker "target-pointer-width": "64" 479*5225e6b1SAndroid Build Coastguard Worker } 480*5225e6b1SAndroid Build Coastguard Worker""", 481*5225e6b1SAndroid Build Coastguard Worker) 482*5225e6b1SAndroid Build Coastguard Worker 483*5225e6b1SAndroid Build Coastguard Workertoolchain( 484*5225e6b1SAndroid Build Coastguard Worker name = "riscv64gc-unknown-none-pie_elf_toolchain", 485*5225e6b1SAndroid Build Coastguard Worker exec_compatible_with = ["@platforms//os:linux"], 486*5225e6b1SAndroid Build Coastguard Worker target_settings = ["@gbl//toolchain:gbl_rust_elf_riscv64"], 487*5225e6b1SAndroid Build Coastguard Worker toolchain = ":riscv64gc-unknown-none-pie_elf", 488*5225e6b1SAndroid Build Coastguard Worker toolchain_type = "@rules_rust//rust:toolchain", 489*5225e6b1SAndroid Build Coastguard Worker) 490*5225e6b1SAndroid Build Coastguard Worker 491*5225e6b1SAndroid Build Coastguard Worker# rustfmt toolchain 492*5225e6b1SAndroid Build Coastguard Workerrustfmt_toolchain( 493*5225e6b1SAndroid Build Coastguard Worker name = "rustfmt", 494*5225e6b1SAndroid Build Coastguard Worker rustfmt = "@rust_prebuilts//:bin/rustfmt", 495*5225e6b1SAndroid Build Coastguard Worker) 496*5225e6b1SAndroid Build Coastguard Worker 497*5225e6b1SAndroid Build Coastguard Workertoolchain( 498*5225e6b1SAndroid Build Coastguard Worker name = "rustfmt_toolchain", 499*5225e6b1SAndroid Build Coastguard Worker exec_compatible_with = ["@platforms//os:linux"], 500*5225e6b1SAndroid Build Coastguard Worker toolchain = ":rustfmt", 501*5225e6b1SAndroid Build Coastguard Worker toolchain_type = "@rules_rust//rust/rustfmt:toolchain_type", 502*5225e6b1SAndroid Build Coastguard Worker) 503*5225e6b1SAndroid Build Coastguard Worker 504*5225e6b1SAndroid Build Coastguard Worker# Rust bindgen toolchain 505*5225e6b1SAndroid Build Coastguard Worker 506*5225e6b1SAndroid Build Coastguard Workerprebuilt_binary( 507*5225e6b1SAndroid Build Coastguard Worker name = "bindgen_prebuilt", 508*5225e6b1SAndroid Build Coastguard Worker bin = "@bindgen//:bindgen", 509*5225e6b1SAndroid Build Coastguard Worker) 510*5225e6b1SAndroid Build Coastguard Worker 511*5225e6b1SAndroid Build Coastguard Workerrust_bindgen_toolchain( 512*5225e6b1SAndroid Build Coastguard Worker name = "bindgen_toolchain_impl", 513*5225e6b1SAndroid Build Coastguard Worker bindgen = ":bindgen_prebuilt", 514*5225e6b1SAndroid Build Coastguard Worker clang = "@gbl_llvm_prebuilts//:clang-bin", 515*5225e6b1SAndroid Build Coastguard Worker libclang = "@gbl_llvm_prebuilts//:libclang", 516*5225e6b1SAndroid Build Coastguard Worker libstdcxx = "@gbl_llvm_prebuilts//:libc++", 517*5225e6b1SAndroid Build Coastguard Worker) 518*5225e6b1SAndroid Build Coastguard Worker 519*5225e6b1SAndroid Build Coastguard Workertoolchain( 520*5225e6b1SAndroid Build Coastguard Worker name = "bindgen_toolchain", 521*5225e6b1SAndroid Build Coastguard Worker toolchain = "bindgen_toolchain_impl", 522*5225e6b1SAndroid Build Coastguard Worker toolchain_type = "@rules_rust//bindgen:toolchain_type", 523*5225e6b1SAndroid Build Coastguard Worker) 524