Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dev_components in rust_register_toolchains doesn't work for all toolchains #2543

Open
Ngoguey42 opened this issue Mar 5, 2024 · 0 comments

Comments

@Ngoguey42
Copy link

When using rust_register_toolchains, if I use dev_components = True and ios (or android) in extra_target_triples, I get this error during a bazel build:

ERROR: An error occurred during the fetch of repository 'rust_linux_x86_64__aarch64-linux-android__nightly_tools':
   Traceback (most recent call last):
  File "/home/runner/.cache/bazel/_bazel_runner/1fa4b8b6e5f813a6f30004917b5fca72/external/rules_rust/rust/repositories.bzl", line 374, column 31, in _rust_toolchain_tools_repository_impl
    load_rustc_dev_nightly(ctx, target_triple)
  File "/home/runner/.cache/bazel/_bazel_runner/1fa4b8b6e5f813a6f30004917b5fca72/external/rules_rust/rust/private/repository_utils.bzl", line 582, column 24, in load_rustc_dev_nightly
    load_arbitrary_tool(
  File "/home/runner/.cache/bazel/_bazel_runner/1fa4b8b6e5f813a6f30004917b5fca72/external/rules_rust/rust/private/repository_utils.bzl", line 733, column 42, in load_arbitrary_tool
    result = ctx.download_and_extract(
Error in download_and_extract: java.io.IOException: Error downloading [https://static.rust-lang.org/dist/2024-02-22/rustc-dev-nightly-aarch64-linux-android.tar.xz] to /home/runner/.cache/bazel/_bazel_runner/1fa4b8b6e5f813a6f30004917b5fca72/external/rust_linux_x86_64__aarch64-linux-android__nightly_tools/temp11823504000632298494/rustc-dev-nightly-aarch64-linux-android.tar.xz: GET returned 404 Not Found

Here is how I use rust_rules:

http_archive(
    name = "rules_rust",
    integrity = "sha256-ZQGWDD5NoySV0eEAfe0HaaU0yxlcMN6jaqVPnYo/A2E=",
    urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.38.0/rules_rust-v0.38.0.tar.gz"],
)

load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies", "rust_register_toolchains")

rules_rust_dependencies()

rust_register_toolchains(
    edition = "2021",
    extra_target_triples = [
        "aarch64-apple-ios-sim",
        "aarch64-apple-ios",
        "aarch64-linux-android",
        "x86_64-unknown-linux-gnu",
        "x86_64-apple-ios",
        "wasm32-unknown-unknown",
    ],
    rustfmt_version = "nightly/2024-02-22",
    versions = ["nightly/2024-02-22"],
    dev_components=True,
)

I added some prints in rust/repositories.bzl and I discovered that 49 toolchains were being declared:

rust_darwin_aarch64__aarch64-apple-darwin__nightly
rust_darwin_aarch64__aarch64-apple-ios-sim__nightly
rust_darwin_aarch64__aarch64-apple-ios__nightly
rust_darwin_aarch64__aarch64-linux-android__nightly
rust_darwin_aarch64__x86_64-unknown-linux-gnu__nightly
rust_darwin_aarch64__x86_64-apple-ios__nightly
rust_darwin_aarch64__wasm32-unknown-unknown__nightly
rust_windows_aarch64__aarch64-pc-windows-msvc__nightly
rust_windows_aarch64__aarch64-apple-ios-sim__nightly
rust_windows_aarch64__aarch64-apple-ios__nightly
rust_windows_aarch64__aarch64-linux-android__nightly
rust_windows_aarch64__x86_64-unknown-linux-gnu__nightly
rust_windows_aarch64__x86_64-apple-ios__nightly
rust_windows_aarch64__wasm32-unknown-unknown__nightly
rust_linux_aarch64__aarch64-unknown-linux-gnu__nightly
rust_linux_aarch64__aarch64-apple-ios-sim__nightly
rust_linux_aarch64__aarch64-apple-ios__nightly
rust_linux_aarch64__aarch64-linux-android__nightly
rust_linux_aarch64__x86_64-unknown-linux-gnu__nightly
rust_linux_aarch64__x86_64-apple-ios__nightly
rust_linux_aarch64__wasm32-unknown-unknown__nightly
rust_darwin_x86_64__x86_64-apple-darwin__nightly
rust_darwin_x86_64__aarch64-apple-ios-sim__nightly
rust_darwin_x86_64__aarch64-apple-ios__nightly
rust_darwin_x86_64__aarch64-linux-android__nightly
rust_darwin_x86_64__x86_64-unknown-linux-gnu__nightly
rust_darwin_x86_64__x86_64-apple-ios__nightly
rust_darwin_x86_64__wasm32-unknown-unknown__nightly
rust_windows_x86_64__x86_64-pc-windows-msvc__nightly
rust_windows_x86_64__aarch64-apple-ios-sim__nightly
rust_windows_x86_64__aarch64-apple-ios__nightly
rust_windows_x86_64__aarch64-linux-android__nightly
rust_windows_x86_64__x86_64-unknown-linux-gnu__nightly
rust_windows_x86_64__x86_64-apple-ios__nightly
rust_windows_x86_64__wasm32-unknown-unknown__nightly
rust_freebsd_x86_64__x86_64-unknown-freebsd__nightly
rust_freebsd_x86_64__aarch64-apple-ios-sim__nightly
rust_freebsd_x86_64__aarch64-apple-ios__nightly
rust_freebsd_x86_64__aarch64-linux-android__nightly
rust_freebsd_x86_64__x86_64-unknown-linux-gnu__nightly
rust_freebsd_x86_64__x86_64-apple-ios__nightly
rust_freebsd_x86_64__wasm32-unknown-unknown__nightly
rust_linux_x86_64__x86_64-unknown-linux-gnu__nightly
rust_linux_x86_64__aarch64-apple-ios-sim__nightly
rust_linux_x86_64__aarch64-apple-ios__nightly
rust_linux_x86_64__aarch64-linux-android__nightly
rust_linux_x86_64__x86_64-unknown-linux-gnu__nightly
rust_linux_x86_64__x86_64-apple-ios__nightly
rust_linux_x86_64__wasm32-unknown-unknown__nightly

Which is the cartesian product between my extra_target_triples and rules_rust's DEFAULT_TOOLCHAIN_TRIPLES

I was able to fix my problem by patching the rules_rust http_archive this way:

diff --git a/rust/repositories.bzl b/rust/repositories.bzl
index 610baa79..d50b303d 100644
--- a/rust/repositories.bzl
+++ b/rust/repositories.bzl
@@ -978,13 +978,17 @@ def rust_repository_set(
         elif type(extra_target_triples) == "dict":
             target_compatible_with = extra_target_triples.get(toolchain.target_triple)
 
+        dev_components_for_toolchain = dev_components
+        if '-ios_' in toolchain.name or '-android_' in toolchain.name:
+            dev_components_for_toolchain = False
+
         all_toolchain_names.append(rust_toolchain_repository(
             name = toolchain.name,
             allocator_library = allocator_library,
             global_allocator_library = global_allocator_library,
             auth = auth,
             channel = toolchain.channel.name,
-            dev_components = dev_components,
+            dev_components = dev_components_for_toolchain,
             edition = edition,
             exec_triple = exec_triple,
             extra_exec_rustc_flags = extra_exec_rustc_flags,

Is there a way for me to avoid that problem without relying on a rules_rust patch?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant