package binaryen

  1. Overview
  2. Docs
OCaml bindings for Binaryen

Install

Dune Dependency

Authors

Maintainers

Sources

binaryen-archive-v0.3.0.tar.gz
md5=357870883104f04fafe1f045b6e93382
sha512=408d5562805b79762a44a88d150efcde5661d409ce3d731b64875cb3665499f876bbde6b28078f33011b64a231eac263f9ab4baee1885772f1dae483e188de54

Description

Published: 10 Sep 2020

README

Binaryen.ml

OCaml bindings for Binaryen.

Binaryen is a compiler and toolchain infrastructure for WebAssembly. It makes compilation to WebAssembly pretty darn easy.

Here's Binaryen's hello world test in OCaml form:

open Binaryen

let wasm_mod = Module.create ()

(* Create function type for i32 (i32, i32) *)
let params = Type.create [| Type.int32; Type.int32 |]
let results = Type.int32

(* Get arguments 0 and 1, add them *)
let x = Expression.local_get wasm_mod 0 Type.int32
let y = Expression.local_get wasm_mod 1 Type.int32
let add = Expression.binary wasm_mod Op.add_int32 x y

(* Create the add function *)
(* Note: no additional local variables *)
let adder = Function.add_function wasm_mod "adder" params results [||] add

let _ = Module.print wasm_mod
let _ = Module.dispose wasm_mod

Feature Parity

This project aims to provide full feature parity with the Binaryen C API. It's fairly complete, but a few things still need bindings:

  • SIMD instructions

  • Events

  • Atomics

  • Query operations on expressions

  • Query operations on functions

None of these are particularly challenging to create bindings for—they just haven't been written yet. If you need anything that's missing, feel free to open a PR.

Contributing

After cloning the repository, be sure to initialize the Binaryen submodule:

git submodule update --init

You'll need Node.js and esy to build this project, as well as cmake to build Binaryen.

dune will take care of building Binaryen and compiling the C stubs, so to build the project you'll only need to run:

esy

This will take a while. Once it's done, you can run the tests:

esy test

Dependencies (7)

  1. js_of_ocaml-compiler >= "3.6.0"
  2. js_of_ocaml-ppx >= "3.6.0"
  3. js_of_ocaml >= "3.6.0"
  4. conf-python-3 build
  5. conf-cmake build
  6. dune = "2.6.1"
  7. ocaml >= "4.08"

Dev Dependencies

None

Used by

None

Conflicts

None