9

Part of my Cargo.toml for my crate:

[features]
wasm = ["ed25519-dalek/nightly", "rand/wasm-bindgen", "js-sys"]

This works, when the crate is used in another project, and the "wasm" feature is explicitly chosen.

I want to automatically enable this feature only when the target arch is WASM. I tried adding this:

#[cfg(target_arch = "wasm32")]
default = ["wasm"]

When I compile for a target other than WASM, "wasm" is included as the default, how can I make "wasm" the default only when the target is WASM?

Boiethios
  • 38,438
  • 19
  • 134
  • 183
user964375
  • 2,201
  • 3
  • 26
  • 27

1 Answers1

7

You can only have target-specific dependencies, not target-specific features. This is a known bug that is unfortunately opened since 2015.

People expects this syntax to be supported, but right now there is nothing scheduled to make this work:

[target.'cfg(target_arch = "wasm32")'.features]
default = ["ed25519-dalek/nightly", "rand/wasm-bindgen", "js-sys"]

As a ugly workaround, you can create another crate that depends on your crate and let the user use this new crate:

[target.'cfg(target_arch = "wasm32")'.dependencies.your_crate]
version = "1.0.0"
features = ["wasm"]
Boiethios
  • 38,438
  • 19
  • 134
  • 183