# Module Ocamlbuild_js_of_ocaml

    module Ocamlbuild_js_of_ocaml: sig .. end

Ocamlbuild plugin to build with js_of_ocaml

Js_of_ocaml comes with a support for OCamlbuild.

## Initialize

Initialize the js_of_ocaml ocamlbuild plugin with the following code in myocamlbuild.ml:

         let _ = Ocamlbuild_plugin.dispatch Ocamlbuild_js_of_ocaml.dispatcher

Side note: `Ocamlbuild_plugin.dispatch` should be used only once. The last call will override previous ones.

### With Oasis

If you use oasis, myocamlbuild.ml should look like:

         let _ =

           Ocamlbuild_plugin.dispatch

             (fun hook ->

                dispatch_default hook;

                Ocamlbuild_js_of_ocaml.dispatcher

                  ~oasis_executables:["src/yourprogram.byte"]

                  hook;

             )

## Build

Build a JavaScript program myprog.js by calling the command:

         ocamlbuild -use-ocamlfind -plugin-tag "package(js_of_ocaml.ocamlbuild)" myprog.js

It will first build the bytecode myprog.byte and finally produce myprog.js (in _build).

## Options

One can pass option to the Js_of_ocaml compiler using tags. See <<a_manual chapter="options" |Options>>.

Available tags:

- pretty: Pretty print the generated javascript.
- debuginfo: Output debug information.
- noinline: Disable inlining
- sourcemap: Generate sourcemap
- tailcall(none): Set the tailcall optimisation (default "trampoline")
- opt(3): Set the compilation profile (default 1)
- debug: enables pretty, debuginfo, sourcemap

### Exemples

In the _tags file:

         <myprog.js>:pretty, opt(3)

## Dispatchers

    val dispatcher : ?oasis_executables:Ocamlbuild_plugin.Pathname.t list ->
           Ocamlbuild_plugin.hook -> unit

The main dispatcher

`?oasis_executables` is the paths of the executables (having the .byte extension) you want to compile as a javascript executable. The former executables are still compiled.

Side note: `Ocamlbuild_plugin.dispatch` should be used only once as it record only one function for an ocamlbuild module.

## Low level functions

    val oasis_support : executables:Ocamlbuild_plugin.Pathname.t list -> unit

Map each targets given as argument to ocamlbuild and replace each element that exists in `~executables` by its corresponding .js target.