On 10 Mar 2018, at 20:10, jason wrote:
Any interest in trying out the Bazel build system?
It's really fast
ninja), and does not allow undeclared dependencies in C-language build
rules by design.
The ninja build system itself is a bit like make in that it’s just a
low-level DSL to describe the dependency graph.
There is a script that generates the graph, which is heavily customized
to the needs of TextMate (and myself). I have looked at other build
systems, and I also took a quick look at Bazel, but I do not see an
advantage in switching, as I would have to write a ton of custom code to
bring it up to what the current system does, and for this, it’s
actually best with a low-level build system rather than one that tries
to handle everything, since there are no standards for how to manage
multiple targets that can depend on each other, use each other’s
header files, resources, etc., which means all the free stuff you get
out of the box with these higher level build systems are often stuff
that is just in the way when you have a complex project…
For the dependency cycle that ninja “did not detect”, I do actually
have some (non-committed) code that improves on dependency detection
which would have caught this, but it’s not just a simple “source
depends on header” issue, but about link dependencies, which can be a
little tricky, as you can’t assume that including a header file means
you necessarily wants to link with the library to which the header
belongs, for example some sources may include oak/debug.h but do not
want to automatically link with my oak debug library, unless in debug
mode, and iirc that was the primary reason I didn’t yet push the code
that automatically figures out link dependencies.