Cranelift and Rust code in Spidermonkey
Benjamin Bouvier <[email protected]> Mon, 1 Oct 2018 11:01:45 +0200
| Newsgroups | gmane.comp.mozilla.devel.jseng |
|---|---|
| Message-ID | <CAGXKBOBRM18AC3OgHngvJvD4o9gyPqyuAkXdzdskk7KmbDGThQ@mail.gmail.com> |
TL;DR: - a Rust toolchain is needed to build Spidermonkey (i.e. from version 63); - experimental support for Cranelift (new wasm code generator) has landed in Spidermonkey; - anyone can easily add Rust code in Spidermonkey now. Support for Cranelift, a new code generator written in Rust, has landed today on mozilla-inbound. It means that experimental support for WebAssembly compilation using the Cranelift backend can now be enabled using the javascript.options.wasm_cranelift about:config pref (or --wasm-force-cranelift in the JS shell). It is enabled by default on Nightly *only*, and can be configured with --enable-cranelift / --disable-cranelift. More notably, since the code itself is written in Rust, building the shell now requires Rust / Cargo et al. to build Spidermonkey. Running the toplevel `./mach bootstrap` in a Gecko tree should get you all the required dependencies. The tarball package contains all the necessary Rust dependencies pinned to a specific version, to make sure they're correct and match our expectations. Moreover, if you wish to add new Rust code to Spidermonkey, you have to: - create a new *lib* crate (with crate-type="rlib") and include it in the top-level Cargo.toml workspace - add it as a dependency of jsrust_shared in js/src/rust/shared/Cargo.toml - reference it as an extern crate in js/src/rust/shared/lib.rs - make sure the jsrust/ directory gets conditionally included in moz.build - run `./mach vendor rust` to vendor in the Rust dependencies - add your bindgen bindings (this is a bit hard at the moment to provide all the right flags for every compiler/architecture, but could be improved in the future) - (safe) fun and profit! Thanks to the build peers who provided a lot of help during the last few weeks and gave insightful reviews. Cheers, Benjamin