Movatterモバイル変換


[0]ホーム

URL:


packagebinaryen

  1. Overview
  2. Docs

You can search for identifiers within the package.

in-package search v0.2.0

OCaml bindings for Binaryen

Install

Dune Dependency

Authors

Maintainers

Sources

binaryen-archive-v0.24.0.tar.gz
md5=7983788fc30723512f95fa11b71a7d58
sha512=3e5d43c83d9db149e4b4accc390302838c545aca4ca5de8d0c9f84e1b2d482f4c75ed9942fbbab0d45331c6b4c7a87af78b68757852690028bbd67b784252b44

Description

Published:01 Nov 2023

README

Binaryen.ml

OCaml bindings forBinaryen.

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

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

open Binaryenlet 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.make wasm_mod 0 Type.int32let y = Expression.Local_get.make wasm_mod 1 Type.int32let add = Expression.Binary.make 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 [||] addlet _ = Module.print wasm_modlet _ = Module.dispose wasm_mod

Feature Parity

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

  • SIMD instructions

  • Tags

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

MacOS C++ Compiler

When including this library in yourdune MacOS executables, you'll need to specify-cc clang++ in your(ocamlopt_flags) stanza. This is required because Binaryen will throw errors for itself to catch and usingclang++ is the only way to handle them correctly. You can find more info on thisocaml issue.

Your stanza could look something like this:

 (executable  (name example)  (public_name example)  (package example)+ (ocamlopt_flags -cc clang++)  (modules example)  (libraries binaryen))

These flags likely won't work on other operating systems, so you'll probably need to usedune-configurator to vary the flags per platform. You can see an example of this in ourtests/.

Static Linking

If you are planning to create portable binaries for Windows, it will try to find Cygwin/MinGW locations in yourPATH. To avoid this, you probably want to add this to your(executable) stanzas:

 (executable  (name example)  (public_name example)  (package example)+ (flags (:standard -ccopt -- -ccopt -static))  (modules example)  (libraries binaryen))

These flags might not work on other operating systems (like MacOS), so you'll probably need to usedune-configurator to vary the flags per platform.

Contributing

You'll need Node.js andesy to build this project.

dune will take care of 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 (5)

  1. libbinaryen>= "114.0.0" & < "115.0.0"
  2. js_of_ocaml-compiler>= "4.1.0" & < "6.0.0"
  3. dune-configurator>= "3.0.0"
  4. dune>= "3.0.0"
  5. ocaml>= "4.12.0"

Dev Dependencies

None

Used by

None

Conflicts

None


[8]ページ先頭

©2009-2025 Movatter.jp