In release mode, assume you have NodeJS and OCaml compiler with the right version installed:
node scripts/install.js
The build process will generate configure file with correct LIBDIR
path,
build all binaries and libraries and
install the binaries into bin
and lib files into lib
.
First it will try to generate bin/config_whole_compiler.ml
based on existing
OCaml installation, if it fails, it will try to invoke buildocaml.sh
to
install an OCaml compiler from scratch, and retry again
In dev mode, BuckleScript reuses OCaml’s compiler-libs, in that case, LIBDIR
maybe incorrect, but it is okay in dev environment, since all paths are specified
explicitly.
Several useful targets
-
make check
-
make bin/bsc.exe
-
make bin/bsb
-
make libs
The binaries depend on whether we really need it during dev time. # Publish process
-
Bump the compiler version
-
Build the JS playground
-
Generate js_compiler.ml
-
Generate cmj data sets
-
Generate preload.js
-
Make sure AMDJS are up to date
-
The highlevel architecture is illustrated as below:
Lambda IR (OCaml compiler libs) ---+
| ^ |
| | Lambda Passes (lam_* files)
| | Optimization/inlining/dead code elimination
| \ |
| \ --------------------------+
|
| Self tail call elimination
| Constant folding + propagation
V
JS IR (J.ml) ---------------------+
| ^ |
| | JS Passes (js_* files)
| | Optimization/inlining/dead code elimination
| \ |
| \ -------------------------+
|
| Smart printer includes scope analysis
|
V
Javascript Code
Note that there is one design goal to keep in mind, never introduce any meaningless symbol unless real necessary, we do optimizations, however, it should also compile readable output code.
If you don’t change the type definition of JS IR, i.e, [j.ml](./j.ml), then the only dependency is the build tool: [ocamlbuild](http://caml.inria.fr/pub/docs/manual-ocaml-400/manual032.html)
ocamlbuild -no-hygiene -cflags -g,-w,-40-30,-warn-error,+a-40-30,-keep-locs,-I,+compiler-libs compiler.cmxa
make bin/bsc.exe
If you do want to change the JS IR, you also need [camlp4](https://github.com/ocaml/camlp4), note that the version does not need match the exact the same version of compiler.
so you need run commands below whenver you change the type definition of JS IR.
make js_map.ml js_fold.ml
A copy of standard library from OCaml distribution(4.02) for fast development, so that we don’t need bootstrap compiler, everytime we deliver a new feature.
-
Files copied
-
sources
-
Makefile.shared Compflags .depend Makefile
-
Patches Most in [Makefile.shared](./stdlib/Makefile.shared)