This articleneeds additional citations forverification. Please helpimprove this article byadding citations to reliable sources. Unsourced material may be challenged and removed. Find sources: "Bazel" software – news ·newspapers ·books ·scholar ·JSTOR(February 2024) (Learn how and when to remove this message) |
| Bazel | |
|---|---|
| Developer | |
| Initial release | March 2015; 10 years ago (2015-03) |
| Stable release | |
| Written in | Java[2] |
| Operating system | Cross-platform |
| License | Apache License 2.0 |
| Website | bazel |
| Repository | |
Bazel (/ˈbeɪzəl/[3]) is afree and open-source software tool used for the automation of building and testing software.[2]
Similar to build tools likeMake,Apache Ant, andApache Maven,[2][4] Bazel builds software applications from source code using rules. Rules and macros are created in theStarlark language,[5] a dialect ofPython.[4] There are built-in rules for building software written inJava,Kotlin,Scala,C,C++,Go,Python,Rust,JavaScript,Objective-C, andbash scripts.[4][6] Bazel can produce software application packages suitable for deployment for theAndroid andiOSoperating systems.[7]
In 2006,[8]Google started the development of a build tool calledBlaze.[9] The motivation was to have a build system that provides both speed and correctness in a largemonorepo.[10]
Bazel was created as an open-source port of Blaze, using itsanagram as a name.[4] Bazel was first released in March 2015 and enteredbeta by September 2015.[6] Version 1.0 was released in October 2019.[11]
Bazel has been described as "one of the first openly available cloud build systems". It is able to save the history of previously run commands and share the results across multiple users.[12] To do so, Bazel requires that the inputs and outputs of build targets are fully specified.
Bazel is extensible with the Starlark programming language.[13] Starlark is an embedded language whose syntax is a subset of thePython syntax. However, it doesn't implement many of Python's language features, such as the ability to access the file I/O, in order to avoid extensions that could create side-effects or create build outputs not known to the build system itself. Such side-effects could potentially lead to incorrect analysis of the build dependency graph.
Bazel was designed as a multilanguage build system. It is able to build software combining multiple programming languages within the samerepository.
Many commonly used build systems are designed with a preference for a specific programming language. Examples of such systems include Ant and Maven for Java,Leiningen forClojure,sbt forScala, etc. In a repository with multiple languages, combining separate build systems and achieving the build speed and correctness benefits described above can be difficult and problematic.
Build systems most similar to Bazel are Pants,[14]Buck,[15] Please,[16] and the Brazil build system used internally atAmazon.[17] Pants and Buck both aim for similar technical design objectives as Bazel, with Pants being inspired by the Blaze build system used internally at Google.
Bazel, Pants, Buck, and Please adopted Starlark as a BUILD file parser, respective to its BUILD file syntax. Independently developed build systems with similar uses in efficient dependency graph analysis and automated build artifact tracking have been implemented in build systems such as tup.[18]
Bazel uses asandbox for compilation steps. When Bazel performs a separate compilation, it creates a new directory and fills it with symlinks to the explicit input dependencies for the rule. For languages like C or C++, this requires the user to be explicit about the dependencies and it prevents the unexpected inclusion of a similarly named header file from another including directory.
This sandbox approach leads to issues with common build tools, resulting in a number of workarounds required to correctly compile code under different architectures. For example, when performing separate compilation for Mac/Darwin architectures, the compiler writes the input paths into SO and OSO symbols in theMach-O binary, which can be seen with a command likenm -a mybinary | grep SO. These paths are needed for finding symbols during debugging. As a result, builds in Bazel must correct the compiled objects after the fact, trying to correct path-related issues that arose from the sandbox construction using flags like-fdebug-prefix-map and-oso_prefix, the latter having become available inXcode 11.0. Similar handling needs to take place in linking phases, rewriting the rpath values in shared object libraries with a command likeinstall_name_tool.[19]

Since Bazel's initial release the logo was a green letter "b" stylized into a stem of abasil plant with two leaves. On July 5, 2017, the Bazel Blog announced a new logo,[20] consisting of three green building blocks arranged to shape a heart.
Bazel is commonly used by companies.[21] A few notable users includeGoogle,SpaceX,[22]Stripe,[23]Tinder,[24] andUber.[25]
{{cite journal}}: CS1 maint: multiple names: authors list (link)