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 `_