# emscripten-rs-sys
[](https://crates.io/crates/emscripten-rs-sys)
[](https://img.shields.io/docsrs/emscripten_rs_sys)

Low-level Rust FFI bindings to the [Emscripten](https://emscripten.org/) C API, generated using [bindgen](https://github.com/rust-lang/rust-bindgen).
This crate provides raw, unsafe bindings to the C API of Emscripten, allowing Rust code to interface directly with the Emscripten runtime.
⚠️ The only supported target is `wasm32-unknown-emscripten`.
## Prerequisites
You must have the **Emscripten SDK (emsdk)** installed and activated on your system before building.
Follow the official installation instructions here: [Emscripten SDK Installation Guide](https://emscripten.org/docs/getting_started/downloads.html)
After installing, ensure the `emcc` tool is on your PATH, because the create relies on it to locate the SDK.
## Linker setup
Some APIs of Emscripten only work at runtime if they are explicitly enabled at link time.
See the [settings Reference](https://emscripten.org/docs/tools_reference/settings_reference.html) for all `-s` options.
Ways to set linker settings:
- With the RUSTFLAG environment variable: `RUSTFLAGS='-C link-args=-sALLOW_MEMORY_GROWTH=1'`
- In the build script: `println!("cargo:rustc-link-arg=-sALLOW_MEMORY_GROWTH=1");`
- In the `.cargo/config.toml` with the `rustflags` field.
## Highlights
- The complete C API is covered.
- `EM_JS` support for inline JS functions.
## Example
```rust
js! {
fn compute_sum(n: c_int) -> c_int,
{
let sum = 0;
for(let i=1; i<n; i++)
{
sum += i;
}
return sum;
}
}
fn test_sum() {
assert_eq!(unsafe { compute_sum(100) }, 4950)
}
```