xref: /aosp_15_r20/build/bazel/toolchains/rust/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("@env//:env.bzl", "env")
16*7594170eSAndroid Build Coastguard Workerload("@rules_rust//proto/protobuf:toolchain.bzl", "rust_proto_toolchain")
17*7594170eSAndroid Build Coastguard Workerload("@rules_rust//rust:toolchain.bzl", "rust_toolchain")
18*7594170eSAndroid Build Coastguard Workerload("@soong_injection//rust_toolchain:constants.bzl", "constants")
19*7594170eSAndroid Build Coastguard Workerload("//build/bazel/toolchains/rust:flags.bzl", "flags")
20*7594170eSAndroid Build Coastguard Workerload("//build/bazel/toolchains/rust:platforms.bzl", "platforms")
21*7594170eSAndroid Build Coastguard Worker
22*7594170eSAndroid Build Coastguard Workerpackage(default_visibility = ["//visibility:public"])
23*7594170eSAndroid Build Coastguard Worker
24*7594170eSAndroid Build Coastguard Workerrust_version = env.get(
25*7594170eSAndroid Build Coastguard Worker    "RUST_PREBUILTS_VERSION",
26*7594170eSAndroid Build Coastguard Worker    constants.RUST_DEFAULT_VERSION,
27*7594170eSAndroid Build Coastguard Worker)
28*7594170eSAndroid Build Coastguard Worker
29*7594170eSAndroid Build Coastguard Workerrust_prebuilts_path = "//prebuilts/rust/linux-x86/" + rust_version
30*7594170eSAndroid Build Coastguard Worker
31*7594170eSAndroid Build Coastguard Workergenrule(
32*7594170eSAndroid Build Coastguard Worker    name = "no_op_file",
33*7594170eSAndroid Build Coastguard Worker    outs = ["no_op_file.txt"],
34*7594170eSAndroid Build Coastguard Worker    cmd = "touch $(OUTS)",
35*7594170eSAndroid Build Coastguard Worker)
36*7594170eSAndroid Build Coastguard Worker
37*7594170eSAndroid Build Coastguard Workerrust_proto_toolchain(
38*7594170eSAndroid Build Coastguard Worker    name = "proto-toolchain-impl",
39*7594170eSAndroid Build Coastguard Worker    edition = "2021",
40*7594170eSAndroid Build Coastguard Worker    grpc_compile_deps = [],
41*7594170eSAndroid Build Coastguard Worker    # TODO: GRPC-providing rust_protobuf_host modules still use protobuf2
42*7594170eSAndroid Build Coastguard Worker    # so that grpc_rust_plugin still depend son deprecated protobuf modules
43*7594170eSAndroid Build Coastguard Worker    # Fix libbt_facade_proto and libbt_topshim_facade_protobuf to use protobuf3
44*7594170eSAndroid Build Coastguard Worker    # and upgrade grpc_rust_plugin to use new protobuf modules like protoc-gen-rust
45*7594170eSAndroid Build Coastguard Worker    grpc_plugin = ":no_op_file",
46*7594170eSAndroid Build Coastguard Worker    proto_compile_deps = ["//external/rust/crates/protobuf:libprotobuf"],
47*7594170eSAndroid Build Coastguard Worker    proto_plugin = "//external/rust/crates/protobuf-codegen:protoc-gen-rust",
48*7594170eSAndroid Build Coastguard Worker    protoc = "//external/protobuf:aprotoc",
49*7594170eSAndroid Build Coastguard Worker)
50*7594170eSAndroid Build Coastguard Worker
51*7594170eSAndroid Build Coastguard Workertoolchain(
52*7594170eSAndroid Build Coastguard Worker    name = "proto-toolchain",
53*7594170eSAndroid Build Coastguard Worker    toolchain = ":proto-toolchain-impl",
54*7594170eSAndroid Build Coastguard Worker    toolchain_type = "@rules_rust//proto/protobuf:toolchain_type",
55*7594170eSAndroid Build Coastguard Worker)
56*7594170eSAndroid Build Coastguard Worker
57*7594170eSAndroid Build Coastguard Workerrust_toolchain(
58*7594170eSAndroid Build Coastguard Worker    name = "rust_toolchain_x86_64_unknown-linux-gnu_impl",
59*7594170eSAndroid Build Coastguard Worker    binary_ext = "",
60*7594170eSAndroid Build Coastguard Worker    default_edition = "2018",
61*7594170eSAndroid Build Coastguard Worker    dylib_ext = ".so",
62*7594170eSAndroid Build Coastguard Worker    exec_triple = "x86_64-unknown-linux-gnu",
63*7594170eSAndroid Build Coastguard Worker    extra_rustc_flags = flags.global_rustc_flags + flags.linux_host_rustc_flags,
64*7594170eSAndroid Build Coastguard Worker    rust_doc = rust_prebuilts_path + ":bin/rustdoc",
65*7594170eSAndroid Build Coastguard Worker    rust_std = rust_prebuilts_path + ":prebuilt_stdlibs",
66*7594170eSAndroid Build Coastguard Worker    rustc = rust_prebuilts_path + ":bin/rustc",
67*7594170eSAndroid Build Coastguard Worker    staticlib_ext = ".a",
68*7594170eSAndroid Build Coastguard Worker    stdlib_linkflags = [],
69*7594170eSAndroid Build Coastguard Worker    target_triple = "x86_64-unknown-linux-gnu",
70*7594170eSAndroid Build Coastguard Worker)
71*7594170eSAndroid Build Coastguard Worker
72*7594170eSAndroid Build Coastguard Workertoolchain(
73*7594170eSAndroid Build Coastguard Worker    name = "rust_toolchain_x86_64_unknown-linux-gnu",
74*7594170eSAndroid Build Coastguard Worker    exec_compatible_with = ["//build/bazel_common_rules/platforms/os:linux"],
75*7594170eSAndroid Build Coastguard Worker    target_compatible_with = ["//build/bazel_common_rules/platforms/os:linux"],
76*7594170eSAndroid Build Coastguard Worker    toolchain = ":rust_toolchain_x86_64_unknown-linux-gnu_impl",
77*7594170eSAndroid Build Coastguard Worker    toolchain_type = "@rules_rust//rust:toolchain_type",
78*7594170eSAndroid Build Coastguard Worker)
79*7594170eSAndroid Build Coastguard Worker
80*7594170eSAndroid Build Coastguard Worker[
81*7594170eSAndroid Build Coastguard Worker    rust_toolchain(
82*7594170eSAndroid Build Coastguard Worker        name = "rust_toolchain_" + os + "_" + arch + "_impl",
83*7594170eSAndroid Build Coastguard Worker        binary_ext = "",
84*7594170eSAndroid Build Coastguard Worker        clippy_driver = rust_prebuilts_path + ":bin/clippy-driver",
85*7594170eSAndroid Build Coastguard Worker        default_edition = "2018",
86*7594170eSAndroid Build Coastguard Worker        dylib_ext = ".so",
87*7594170eSAndroid Build Coastguard Worker        exec_triple = "x86_64-unknown-linux-gnu",
88*7594170eSAndroid Build Coastguard Worker        # The system sysroot for the prebuilt compiler is prebuilts/rust/linux-x86/<rust_version>
89*7594170eSAndroid Build Coastguard Worker        # At runtime, rust rules set `-L <path-to-sysroot_with_stdlibs>/lib/rustlib/<target-triple>/lib`
90*7594170eSAndroid Build Coastguard Worker        # which is the directory of standard library built from source.
91*7594170eSAndroid Build Coastguard Worker        # We set --sysroot to /dev/null so that rustc does not error due
92*7594170eSAndroid Build Coastguard Worker        # to there being multiple candidates for stdlibs.
93*7594170eSAndroid Build Coastguard Worker        #
94*7594170eSAndroid Build Coastguard Worker        # error[E0464]: multiple candidates for `rlib` dependency `std` found
95*7594170eSAndroid Build Coastguard Worker        #   |
96*7594170eSAndroid Build Coastguard Worker        #   = note: candidate #1: bazel-built <OUR_DIR>/bin/prebuilts/rust/linux-x86/1.69.0/lib/rustlib/src/rust/libstd-1674459207.rlib
97*7594170eSAndroid Build Coastguard Worker        #   = note: candidate #2: prebuilt /prebuilts/rust/linux-x86/1.69.0/lib/rustlib/aarch64-linux-android/lib/libstd-33356ea78c96f310.so
98*7594170eSAndroid Build Coastguard Worker        #
99*7594170eSAndroid Build Coastguard Worker        # See https://doc.rust-lang.org/rustc/command-line-arguments.html#--sysroot-override-the-system-root
100*7594170eSAndroid Build Coastguard Worker        extra_rustc_flags = [
101*7594170eSAndroid Build Coastguard Worker            "--sysroot=/dev/null",
102*7594170eSAndroid Build Coastguard Worker        ] + rustc_flags + flags.device_global_rustc_flags + flags.global_rustc_flags,
103*7594170eSAndroid Build Coastguard Worker        rust_doc = rust_prebuilts_path + ":bin/rustdoc",
104*7594170eSAndroid Build Coastguard Worker        rust_std = "//build/bazel/toolchains/rust/bootstrap:rust_stdlibs",
105*7594170eSAndroid Build Coastguard Worker        rustc = rust_prebuilts_path + ":bin/rustc",
106*7594170eSAndroid Build Coastguard Worker        rustc_lib = "//build/bazel/toolchains/rust/bootstrap:sysroot_with_stdlibs",
107*7594170eSAndroid Build Coastguard Worker        rustfmt = rust_prebuilts_path + ":bin/rustfmt",
108*7594170eSAndroid Build Coastguard Worker        staticlib_ext = ".a",
109*7594170eSAndroid Build Coastguard Worker        stdlib_linkflags = [],
110*7594170eSAndroid Build Coastguard Worker        target_triple = target_triple,
111*7594170eSAndroid Build Coastguard Worker    )
112*7594170eSAndroid Build Coastguard Worker    for (target_triple, os, arch, rustc_flags) in platforms
113*7594170eSAndroid Build Coastguard Worker]
114*7594170eSAndroid Build Coastguard Worker
115*7594170eSAndroid Build Coastguard Worker[
116*7594170eSAndroid Build Coastguard Worker    toolchain(
117*7594170eSAndroid Build Coastguard Worker        name = "rust_toolchain_" + os + "_" + arch,
118*7594170eSAndroid Build Coastguard Worker        exec_compatible_with = ["//build/bazel_common_rules/platforms/os:linux"],
119*7594170eSAndroid Build Coastguard Worker        target_compatible_with = [
120*7594170eSAndroid Build Coastguard Worker            "//build/bazel_common_rules/platforms/arch:" + arch,
121*7594170eSAndroid Build Coastguard Worker            "//build/bazel_common_rules/platforms/os:" + os,
122*7594170eSAndroid Build Coastguard Worker        ],
123*7594170eSAndroid Build Coastguard Worker        toolchain = ":rust_toolchain_" + os + "_" + arch + "_impl",
124*7594170eSAndroid Build Coastguard Worker        toolchain_type = "@rules_rust//rust:toolchain_type",
125*7594170eSAndroid Build Coastguard Worker    )
126*7594170eSAndroid Build Coastguard Worker    for (target_triple, os, arch, _) in platforms
127*7594170eSAndroid Build Coastguard Worker]
128