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.
-
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,
then the only dependency is the build tool:
make
make bsc.exe
If you do want to change the JS IR, you also need 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
cd ./runtime; make all
cd ./stdlib; make all
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
The directory containing unit-test files, some unit tests are copied from OCaml distribution(4.02)