Rubinius Builder

A build system with the following features:

  • written in C++ and distributed in a single header file;
  • processes a directed graph where the edge between any two nodes a, b is a function f such that f(a) = b, read as "f produced b from a";
  • dependencies between two nodes a, b are described equivalently as dep(a) = b, read as "b is derived from a";
  • all files generated by the build process either have an input source (possibly generated transitively) or a null input, in which case the function f(a) = b describes the generation of b, where a is null;
  • files that are produced by the build process are distinguished from files that statically exist;
  • for f(a) = b, where a statically exists, hash(a) is computed and cached and the cache is consulted for whether to compute f(a) to (re)create b;
  • all input files must be explicitly references, no automatic search is done;
  • each f(a) = b is described in a particular context which may include, for example, a compiler object, which in turn may describe header paths, compile flags, link flags, link libraries, link mode, etc.;
  • implicitly parallel utilizing CPUs + 1 workers (overridable by environmental variables or command line options);
  • intimately aware of C/C++ build requirements but as language agnostic as possible.

License

See the LICENSE file.