1*7594170eSAndroid Build Coastguard Worker# Copyright (C) 2023 The Android Open Source Project 2*7594170eSAndroid Build Coastguard Worker# 3*7594170eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*7594170eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*7594170eSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*7594170eSAndroid Build Coastguard Worker# 7*7594170eSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*7594170eSAndroid Build Coastguard Worker# 9*7594170eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*7594170eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*7594170eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*7594170eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*7594170eSAndroid Build Coastguard Worker# limitations under the License. 14*7594170eSAndroid Build Coastguard Worker 15*7594170eSAndroid Build Coastguard Workerload("@bazel_skylib//rules:common_settings.bzl", "bool_setting") 16*7594170eSAndroid Build Coastguard Workerload("@env//:env.bzl", "env") 17*7594170eSAndroid Build Coastguard Workerload("@rules_rust//rust:defs.bzl", "rust_stdlib_filegroup") 18*7594170eSAndroid Build Coastguard Workerload("@rules_rust//rust:toolchain.bzl", "rust_toolchain") 19*7594170eSAndroid Build Coastguard Workerload("@soong_injection//rust_toolchain:constants.bzl", "constants") 20*7594170eSAndroid Build Coastguard Workerload("//build/bazel/toolchains/rust:flags.bzl", "flags") 21*7594170eSAndroid Build Coastguard Workerload("//build/bazel/toolchains/rust:platforms.bzl", "platforms") 22*7594170eSAndroid Build Coastguard Workerload(":defs.bzl", "toolchain_sysroot", "with_base_transition") 23*7594170eSAndroid Build Coastguard Worker 24*7594170eSAndroid Build Coastguard Workerpackage(default_visibility = ["//build/bazel/toolchains/rust:__subpackages__"]) 25*7594170eSAndroid Build Coastguard Worker 26*7594170eSAndroid Build Coastguard Workerrust_version = env.get( 27*7594170eSAndroid Build Coastguard Worker "RUST_PREBUILTS_VERSION", 28*7594170eSAndroid Build Coastguard Worker constants.RUST_DEFAULT_VERSION, 29*7594170eSAndroid Build Coastguard Worker) 30*7594170eSAndroid Build Coastguard Worker 31*7594170eSAndroid Build Coastguard Workerrust_prebuilts_path = "//prebuilts/rust/linux-x86/" + rust_version 32*7594170eSAndroid Build Coastguard Worker 33*7594170eSAndroid Build Coastguard Worker[ 34*7594170eSAndroid Build Coastguard Worker rust_toolchain( 35*7594170eSAndroid Build Coastguard Worker name = "rust_toolchain_" + os + "_" + arch + "_base_impl", 36*7594170eSAndroid Build Coastguard Worker binary_ext = "", 37*7594170eSAndroid Build Coastguard Worker clippy_driver = rust_prebuilts_path + ":bin/clippy-driver", 38*7594170eSAndroid Build Coastguard Worker default_edition = "2018", 39*7594170eSAndroid Build Coastguard Worker dylib_ext = ".so", 40*7594170eSAndroid Build Coastguard Worker exec_triple = "x86_64-unknown-linux-gnu", 41*7594170eSAndroid Build Coastguard Worker extra_rustc_flags = rustc_flags + flags.device_global_rustc_flags + flags.global_rustc_flags, 42*7594170eSAndroid Build Coastguard Worker rust_doc = rust_prebuilts_path + ":bin/rustdoc", 43*7594170eSAndroid Build Coastguard Worker rust_std = rust_prebuilts_path + ":prebuilt_stdlibs", 44*7594170eSAndroid Build Coastguard Worker rustc = rust_prebuilts_path + ":bin/rustc", 45*7594170eSAndroid Build Coastguard Worker rustfmt = rust_prebuilts_path + ":bin/rustfmt", 46*7594170eSAndroid Build Coastguard Worker staticlib_ext = ".a", 47*7594170eSAndroid Build Coastguard Worker stdlib_linkflags = [], 48*7594170eSAndroid Build Coastguard Worker target_triple = target_triple, 49*7594170eSAndroid Build Coastguard Worker ) 50*7594170eSAndroid Build Coastguard Worker for (target_triple, os, arch, rustc_flags) in platforms 51*7594170eSAndroid Build Coastguard Worker] 52*7594170eSAndroid Build Coastguard Worker 53*7594170eSAndroid Build Coastguard Worker[ 54*7594170eSAndroid Build Coastguard Worker toolchain( 55*7594170eSAndroid Build Coastguard Worker name = "rust_toolchain_" + os + "_" + arch + "_base", 56*7594170eSAndroid Build Coastguard Worker exec_compatible_with = ["//build/bazel_common_rules/platforms/os:linux"], 57*7594170eSAndroid Build Coastguard Worker target_compatible_with = [ 58*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/arch:" + arch, 59*7594170eSAndroid Build Coastguard Worker "//build/bazel_common_rules/platforms/os:" + os, 60*7594170eSAndroid Build Coastguard Worker ], 61*7594170eSAndroid Build Coastguard Worker target_settings = [":base_toolchain_enabled"], 62*7594170eSAndroid Build Coastguard Worker toolchain = ":rust_toolchain_" + os + "_" + arch + "_base_impl", 63*7594170eSAndroid Build Coastguard Worker toolchain_type = "@rules_rust//rust:toolchain_type", 64*7594170eSAndroid Build Coastguard Worker ) 65*7594170eSAndroid Build Coastguard Worker for (_, os, arch, __) in platforms 66*7594170eSAndroid Build Coastguard Worker] 67*7594170eSAndroid Build Coastguard Worker 68*7594170eSAndroid Build Coastguard Workerbool_setting( 69*7594170eSAndroid Build Coastguard Worker name = "enable_base_toolchain", 70*7594170eSAndroid Build Coastguard Worker build_setting_default = False, 71*7594170eSAndroid Build Coastguard Worker visibility = ["//visibility:private"], 72*7594170eSAndroid Build Coastguard Worker) 73*7594170eSAndroid Build Coastguard Worker 74*7594170eSAndroid Build Coastguard Workerconfig_setting( 75*7594170eSAndroid Build Coastguard Worker name = "base_toolchain_enabled", 76*7594170eSAndroid Build Coastguard Worker flag_values = { 77*7594170eSAndroid Build Coastguard Worker ":enable_base_toolchain": "True", 78*7594170eSAndroid Build Coastguard Worker }, 79*7594170eSAndroid Build Coastguard Worker) 80*7594170eSAndroid Build Coastguard Worker 81*7594170eSAndroid Build Coastguard Workerwith_base_transition( 82*7594170eSAndroid Build Coastguard Worker name = "stdlibs", 83*7594170eSAndroid Build Coastguard Worker srcs = [rust_prebuilts_path + ":stdlib_sources"], 84*7594170eSAndroid Build Coastguard Worker) 85*7594170eSAndroid Build Coastguard Worker 86*7594170eSAndroid Build Coastguard Worker# TODO: b/295918553 - See whether this is actually needed given that 87*7594170eSAndroid Build Coastguard Worker# rust_toolchain already generates a sysroot with stdlibs and tools internally 88*7594170eSAndroid Build Coastguard Worker# https://github.com/bazelbuild/rules_rust/blob/ca750fa83d75a2408be93519e9c4d1a2b8b2a087/rust/toolchain.bzl#L495 89*7594170eSAndroid Build Coastguard Workertoolchain_sysroot( 90*7594170eSAndroid Build Coastguard Worker name = "sysroot_with_stdlibs", 91*7594170eSAndroid Build Coastguard Worker srcs = [":stdlibs"], 92*7594170eSAndroid Build Coastguard Worker dirname = "sysroot_with_stdlibs", 93*7594170eSAndroid Build Coastguard Worker target_triple = "aarch64-linux-android", 94*7594170eSAndroid Build Coastguard Worker) 95*7594170eSAndroid Build Coastguard Worker 96*7594170eSAndroid Build Coastguard Workerrust_stdlib_filegroup( 97*7594170eSAndroid Build Coastguard Worker name = "rust_stdlibs", 98*7594170eSAndroid Build Coastguard Worker srcs = [":sysroot_with_stdlibs"], 99*7594170eSAndroid Build Coastguard Worker) 100