emscripten_rs_sys

Crates.ioemscripten_rs_sys
lib.rsemscripten_rs_sys
version0.1.3
created_at2025-09-13 14:24:51.835506+00
updated_at2025-09-15 20:14:05.183793+00
descriptionBindgen-generated bindings to all public emscripten functions
homepagehttps://github.com/sutajo/emscripten-rs-sys
repository
max_upload_size
id1837724
size203,519
Suhajda Tamás (sutajo)

documentation

README

emscripten-rs-sys

Crates.io Docs.rs License

Low-level Rust FFI bindings to the Emscripten C API, generated using 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

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 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

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)
}
Commit count: 0

cargo fmt