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

How to build rust_proc_macro with musl toolchain? #2

Open
nickdecooman opened this issue Jan 28, 2022 · 0 comments
Open

How to build rust_proc_macro with musl toolchain? #2

nickdecooman opened this issue Jan 28, 2022 · 0 comments

Comments

@nickdecooman
Copy link

First of of all, huge thank you for putting this project example online, it has been a tremendous help! 🙌

I am now able to successfully cross-compile basic Linux targets from MacOS. However, when my binary contains more advanced external crates, I get some platform errors. The postgres crate is one example.

In this case the error is:

bazel build //cargo:postgres --platforms //build/platform:musl

can't find crate for futures_macro
--> external/raze__futures_util__0_3_19/src/async_await/stream_select_mod.rs:6:9
|
6 | pub use futures_macro::stream_select_internal;
| ^^^^^^^^^^^^^ can't find crate
|
= note: extern location for futures_macro is of an unknown type: bazel-out/darwin-opt-exec-2B5CBBC6/bin/external/raze__futures_macro__0_3_19/libfutures_macro-152066848.dylib
= help: file name should be lib*.rlib or lib*..so

The error is caused because, for the futures_macro crate, a .dylib file was generated instead of a .rlib file.

I tried to reproduce the error by creating my own macro and use the rust_proc_macro rule.

Let's say I have this src/lib.rs

use proc_macro::TokenStream;

#[proc_macro_derive(HelloWorld)]
pub fn hello_world(_input: TokenStream) -> TokenStream {
    TokenStream::new()
}

and BUILD.bazel like this:

load("@rules_rust//rust:defs.bzl", "rust_proc_macro")

rust_proc_macro(
    name = "macro",
    srcs = [
        "src/lib.rs",
    ],
    edition = "2018",
)

Running bazel build //:macro now builds a valid .dylib file. However, bazel build //:macro --platforms //build/platform:musl fails with the following error:

note: /usr/local/bin/x86_64-linux-musl-ld: cannot find -lgcc

Any idea on how to extend the musl toolchain for rust_proc_macro to work? 🙏

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