1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
= How to build a toplevel =
First, initialize the toplevel using {{{Js_of_ocaml_toplevel.JsooTop.initialize}}}.
Then, build your bytecode program with debug enabled (**-g**) and linkall (**-linkall**). You should obviously link in all the libraries you want accessible in the final toplevel.
Finaly, compile your toplevel to JavaScript passing the {{{--toplevel}}} flags to the js_of_ocaml compiler.
If you want to limit the set of modules available in the toplevel, you can explicitly pass a list of compilation units that should be accessible using the {{{--export FILE}}} flag.
**FILE** must contain names of compilation unit to export - one per line. The **jsoo_listunits** tool, provided by the **js_of_ocaml-toplevel** opam package, can be used to generate this list
from a set of findlib libraries.
For example, the following command will create a file **FILE** containing all compilation unit names provided by the findlib libraries **stdlib** and **str**.
{{{
jsoo_listunits -o FILE stdlib str
}}}
Note that toplevels currently cannot be built using separate compilation.
= How to build a program using the **Dynlink** library =
OCaml supports dynlink of bytecode files using the **dynlink** library. In order to work when compiled to JavaScript, one need to follow the following steps:
First, make sure to link **js_of_ocaml-compiler.dynlink** to initialize the support for dynlink (the initialization is done automatically by side-effect).
Then, build your bytecode program with debug enabled (**-g**) and linkall (**-linkall**).
Finaly, compile your program to JavaScript passing the {{{--dynlink}}} flags to the js_of_ocaml compiler.
Here is an example showing how to compile and use a program using Dynlink:
{{{
# cat main.ml
let () = Dynlink.loadfile "./plugin.cmo"
# Compiling main program
ocamlfind ocamlc -linkpkg -package dynlink -package js_of_ocaml-compiler.dynlink main.ml -o main.bc
js_of_ocaml main.bc --dynlink
# Compiling plugin
ocamlfind ocamlc -c plugin.ml
# Test
node ./main.js
}}}
|