xref: /aosp_15_r20/build/bazel/toolchains/rust/bootstrap/BUILD.bazel (revision 7594170e27e0732bc44b93d1440d87a54b6ffe7c)
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