4 ms·
They are quite different, speaking of Bazel it’s designed to be an all inclusive build system for any language at essentially infinite scale. Which means it:
by Game_Ender 8y ago
They are quite different, speaking of Bazel it’s designed to be an all inclusive build system for any language at essentially infinite scale. Which means it:
- Has nice Python based DSL
- Strongly encourages 100% explicit dependency specification
- Has built in caching (local and remote)
- Built in test result caching
- a fully featured build graph query language
- Built in distributed execution support (for any build step)
- All work scales by part of tree you are building not it’s absolute size
- Support for fetching external source code and binary deps
- Has first class support for executing and testing containers
- Has first class support for code gen (ie you can build a compiler use it to generate code, then build its output,and everything works, no hacks in one build system)
The downsides:
- Works best if you all your code is built with Bazel, which makes deps hard
- Support for Python is weak, Ruby non existent, and Node is beta quality
- Has essentially zero convention, everything must be explicitly configured (ie explicitly describing go deps)
- Has a memory hungry local java daemon
- Has a more overhead than ninja (but is more accurate because of hashing and isolation)
- ecnahc515 8y agoOne downside I found: it makes heavy use of symlinking which doesn't always play well with other tools (in particular: Go tools) and I found made things particularly annoying when I used Bazel from inside docker and outside docker (the symlinks left don't match what's on my host).