File: build-toplevel.wiki

package info (click to toggle)
js-of-ocaml 5.9.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 32,020 kB
  • sloc: ml: 91,250; javascript: 57,289; ansic: 315; makefile: 271; lisp: 23; sh: 6; perl: 4
file content (46 lines) | stat: -rw-r--r-- 2,048 bytes parent folder | download
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
}}}