wasm-bindgen/guide/src/reference/rust-targets.md

73 lines
1.9 KiB
Markdown
Raw Normal View History

# Supported Rust Targets
> **Note**: This section is about Rust target triples, not targets like node/web
> workers/browsers. More information on that coming soon!
The `wasm-bindgen` project is designed to target the `wasm32-unknown-unknown`
target in Rust. This target is a "bare bones" target for Rust which emits
WebAssembly as output. The standard library is largely inert as modules like
`std::fs` and `std::net` will simply return errors.
## Non-wasm targets
Note that `wasm-bindgen` also aims to compile on all targets. This means that it
should be safe, if you like, to use `#[wasm_bindgen]` even when compiling for
Windows (for example). For example:
```rust
#[wasm_bindgen]
pub fn add(a: u32, b: u32) -> u32 {
a + b
}
#[cfg(not(target_arch = "wasm32"))]
fn main() {
println!("1 + 2 = {}", add(1, 2));
}
```
This program will compile and work on all platforms, not just
`wasm32-unknown-unknown`. Note that imported functions with `#[wasm_bindgen]`
will unconditionally panic on non-wasm targets. For example:
```rust
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen(js_namespace = console)]
fn log(s: &str);
}
fn main() {
log("hello!");
}
```
This program will unconditionally panic on all platforms other than
`wasm32-unknown-unknown`.
For better compile times, however, you likely want to only use `#[wasm_bindgen]`
on the `wasm32-unknown-unknown` target. You can have a target-specific
dependency like so:
```toml
[target.'cfg(target_arch = "wasm32")'.dependencies]
wasm-bindgen = "0.2"
```
And in your code you can use:
```rust
#[cfg(target_arch = "wasm32")]
#[wasm_bindgen]
pub fn only_on_the_wasm_target() {
// ...
}
```
## Other Web Targets
The `wasm-bindgen` target does not support the `wasm32-unknown-emscripten` nor
the `asmjs-unknown-emscripten` targets. There are currently no plans to support
these targets either. All annotations work like other platforms on the targets,
retaining exported functions and causing all imports to panic.