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