Why Another Build System?
=========================
We don't think of mazel as a build system, but rather an enhancement to allow using the extremely powerful GNU Make to work more effectively in monorepos.
We had two problems using Make alone:
1. Ability to compute cross-package dependencies and ensure upstream and/or downstream packages are built.
2. Ability to run :command:`make` easily against other packages in the workspace or from subdirectories of the package.
Our first attempt was to use `bazel `_ for our monorepo. bazel is an incredibly powerful tool, but in order take advantage of it, we ran into several problems (in 2020):
* Requires tossing out standard packaging tools, replaced by bazel's specific ``rules_*``. We ran into issues on MacOS cross compiling with rules_python and rules_docker
* Requires a dedicated team to manage.
Our goal was to create a tool that would be easy to someday migrate into bazel (so the :ref:`mazel Labels ` and command options are heavily inspired by bazel).
Alternatives
------------
* `bazel `_
* `pants `_
* `Nx `_
* `lerna `_ - Javascript only
* `Turborepo `_ - Javascript only
* `Make `_
* `Meson `_