B0_buildSourceB0 builds.
Centralizes the information to run and orchestrate a B0 build.
The type for builds.
memo b the memoizer for the build.
must_build b are the units in b that must build.
may_build b are all the units in b that may build, i.e. that can be required. This includes the elements in must_build b.
require b u asks to build unit u in b. This fails the memo if b is u is not in may_build.
current b is b's current unit. In the procedure of a build unit this is the unit itself.
FIXME Unify the directory story with B0_cmdlet and B0_unit.Action. We likely want to get rid of a few of the functions below.
scope_dir b u is the directory of the B0 file in which u was defined. This is were unit relative paths like source files should be resolved.
build_dir b u is the build directory for the build unit u. This is where u should write is build artefacts.
shared_build_dir is a build directory shared by all units of the build. This is used by computations shared by units, most of the time one should rather use current_build_dir.
current_scope_dir b is root_dir b current.
current_unit_build_dir b is build_dir b current.
in_build_dir b p is Fpath.(build_dir b current // p)).
in_scope_dir b p is Fpath.(scope_dir b current // p)).
in_shared_build_dir b p is Fpath.(shared_build_dir b // p)).
store b is the store for the build. Note that b itself can be found in store via the self key.
get b k is B00.Store.get (store b) k.
self is a store key that holds the build itself. The store returned by store has this key bound to the build.
val create :
root_dir:B0_std.Fpath.t ->
b0_dir:B0_std.Fpath.t ->
variant:string ->
B00.Memo.t ->
may_build:B0_unit.Set.t ->
must_build:B0_unit.Set.t ->
tcreate ~root_dir ~b0_dir m ~may_build ~must_build
must_build are the build units that must be build by b.may_build are the build units that may build in b. must units are automatically added to this set.