Skip to content

grain-lang/libiwasm

Repository files navigation

libiwasm

The iwasm core from wasm-micro-runtime packaged for OCaml.

This is just the low-level C library. If you are looking for OCaml bindings to WAMR, keep an eye out for our bindings!

Usage

Inside your dune file, you can depend on libiwasm as such:

(library
 (name wamr)
 (public_name wamr)
 (libraries libiwasm)
 (foreign_stubs
  (language c)
  (names wamr_stubs)
  (flags :standard)))

We also support the new dune ctypes stanza:

(library
 (name wamr)
 (libraries libiwasm)
 (flags
  (:standard -w -9-27-33))
 (ctypes
  (external_library_name wamr)
  (build_flags_resolver
   (vendored
    (c_flags :standard)
    (c_library_flags :standard)))
  (headers
   (preamble "#include \"%{lib:libiwasm:wasm_export.h}\""))
  (type_description
   (instance Type)
   (functor Wamr_type_description))
  (function_description
   (concurrency sequential)
   (instance Functions)
   (functor Wamr_function_description))
  (generated_types Types_generated)
  (generated_entry_point Wamr)))

Configuration

This project currently configures iwasm to support the needs of Grain, but we plan to support configuration through the substs field of our opam file once esy supports it.

The current configuration can be found in our CMakeLists file.

Contributing

You'll need Node.js and esy to build this project. You should be able to use Opam if you are more comfortable with it, but the core team does all development using esy.

dune will take care of compiling WAMR, 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