jscjs_sys

Crates.iojscjs_sys
lib.rsjscjs_sys
version0.0.3
sourcesrc
created_at2020-09-01 21:30:42.896878
updated_at2020-09-22 07:17:49.156787
descriptionSystem crate providing bindings to the Webkit JavsScript engine, JavaScriptCore
homepage
repositoryhttps://github.com/drtychai/jsc-sys
max_upload_size
id283654
size82,696
bynx (drtychai)

documentation

README

jscjs-sys

A *-sys crate of raw bindings to the JavaScriptCore low-level C API.

crates.io-badge docs.rs-badge gnu-badge musl-badge darwin-badge license

Usage

Add the following to your Cargo.toml:

[dependencies]
jscjs_sys = "0.0.3"

All necessary definitions are provided to easily interoperate with the JSC API on all x86_64 *nix architectures supported by Rust. This crate explicity exports:

libJavaScriptCore jscjs_sys
JSContextGroupRef jscjs_sys::VM
JSGlobalContextRef jscjs_sys::Context
JSString jscjs_sys::Sting
JSValueRef jscjs_sys::Value
JSObjectref jscjs_sys::Object

These bindings are designed to be a fairly straightforward translation to the low-level C API, while taking advantage of Rust's memory safety. For more about the JavaScriptCore API, see the API source and the documentation.

Provided below are some practical examples of what functionalities this crate allows:

  • Create a global scripting context, used to create and execute JavaScript objects and code
  • Work natively with objects, parameters
  • Build JavaScript functions out of strings
  • Associate C callbacks to user-definted "classes" of objects
  • Attach C callbacks to "classes", handles responses to an action (e.g., getters/setters, promises, fn cals)
  • Load JavaScript files based on designated names and starting line-numbers

Development

Prerequisites

  • LLVM toolchain (llvm-dev or clang-dev)
  • cmake and make utilities
  • WebKit dependencies (GNU/Linux specific)
    • cd /path/to/WebKit && Tools/gtk/install-dependencies

Get Source

Clone crate and WebKit source (included as a submodule):

➜ git clone https://github.com/drtychai/jsc-sys
➜ cd jsc-sys && \
  git submodule update --remote --init --recursive

Building

No special caveats to builds:

➜ cargo build [-vv] [--target <TRIPLE>]

                 [ ... ]

Packaging

Packaging requires a runtime clone of WebKit unless the SRC_DIR environment variable is set:

➜ export SRC_DIR=/abs/path/to/webkit && \
  cargo package [-vv] [--target <TRIPLE>]

                 [ ... ]
Commit count: 31

cargo fmt