js/rust/README.md
author Chris Manchester <cmanchester@mozilla.com>
Wed, 25 Oct 2017 15:11:54 -0700
changeset 388385 f11039e7ba7a394f4d186f29d0e586ac65f4b874
parent 378332 8ee31bf579fc706108c963f6be90b6e6334d6d6f
child 498709 a92020c2ec43f3b3a66b142e36456e2849c0217b
permissions -rw-r--r--
Bug 1403346 - Use AC_SUBST_LIST for various configure variables containing compile flags. r=glandium MozReview-Commit-ID: 6BjKBSVGAw4

# The `js` Crate: Rust Bindings to SpiderMonkey

[User Documentation](http://doc.servo.org/js/)

## Building

To build a release version of SpiderMonkey and the Rust code with optimizations
enabled:

```
$ cargo build --release
```

To build with SpiderMonkey's DEBUG checks and assertions:

```
$ cargo build --features debugmozjs
```

Raw FFI bindings to JSAPI are machine generated with
[`rust-lang-nursery/rust-bindgen`][bindgen], and requires libclang >= 3.9. See
`./build.rs` for details.

[bindgen]: https://github.com/rust-lang-nursery/rust-bindgen

## Cargo Features

* `debugmozjs`: Create a DEBUG build of SpiderMonkey with many extra assertions
  enabled. This is decoupled from whether the crate and its Rust code is built
  in debug or release mode.

* `promises`: Enable SpiderMonkey native promises.

* `nonzero`: Leverage the unstable `NonZero` type. Requires nightly Rust.

## Testing

Make sure to test both with and without the `debugmozjs` feature because various
structures have different sizes and get passed through functions differently at
the ABI level! At minimum, you should test with `debugmozjs` to get extra
assertions and checking.

```
$ cargo test
$ cargo test --features debugmozjs
```