rust-random / getrandom

A small cross-platform library for retrieving random data from (operating) system source
Apache License 2.0
264 stars 166 forks source link

Failed to build for wasm32-unknown-unknown with no_std #394

Closed gshep closed 4 months ago

gshep commented 4 months ago

Hi,

I was playing with plonky2 for wasm32-unknown-unknown target without default features and found out that getrandom erroneously pulls std in.

Here is an example reproducing the issue.

Cargo.toml

```toml [package] name = "getrandom-test" version = "0.1.0" edition = "2021" [lib] crate-type = ["lib", "cdylib"] [dependencies] sp-io = { version = "30.0.0", default-features = false } getrandom = { version = "0.2", default-features = false, features = ["js"] } [features] default = ["std"] std = ["sp-io/std", "getrandom/std"] ```

src/lib.rs

```rust #![cfg_attr(not(feature = "std"), no_std)] pub const ERROR: getrandom::Error = getrandom::Error::UNSUPPORTED; extern crate sp_io; ```

cargo b --target=wasm32-unknown-unknown --no-default-features

...

   Compiling getrandom-test v0.1.0 (/home/user/devel/gear-tech/getrandom-test)
error[E0152]: duplicate lang item in crate `std` (which `getrandom` depends on): `panic_impl`.
  |
  = note: the lang item is first defined in crate `sp_io` (which `getrandom_test` depends on)
  = note: first definition in `sp_io` loaded from /home/user/devel/gear-tech/getrandom-test/target/wasm32-unknown-unknown/debug/deps/libsp_io-27b44a1938535aab.rlib
  = note: second definition in `std` loaded from /home/user/.rustup/toolchains/nightly-2023-04-25-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-unknown/lib/libstd-bdf48c82ab858a37.rlib

For more information about this error, try `rustc --explain E0152`.
error: could not compile `getrandom-test` (lib) due to 1 previous error
newpavlov commented 4 months ago

If you work with sp-io, then you should not use the js feature, since it clearly not a "Web" target. Instead, you should define a custom backend, which probably should use user-space CSPRNG seeded by random_seed.