Bazel (software)

(Redirected from Blaze (software))

Bazel (/ˈbzəl/[3]) is a free and open-source software tool used for the automation of building and testing software.[2]

Bazel
Developer(s)Google
Initial releaseMarch 2015; 9 years ago (2015-03)
Stable release
8.0.0 / 9 December 2024; 1 day ago (2024-12-09)[1]
Repository
Written inJava[2]
Operating systemCross-platform
LicenseApache License 2.0
Websitebazel.build Edit this on Wikidata

Similar to build tools like Make, Apache Ant, and Apache Maven,[2][4] Bazel builds software applications from source code using rules. Rules and macros are created in the Starlark language[5], a dialect of Python.[4] There are built-in rules for building software written in Java, Kotlin, Scala, C, C++, Go, Python, Rust, JavaScript, Objective-C, and bash scripts.[4][6] Bazel can produce software application packages suitable for deployment for the Android and iOS operating systems.[7]

History

edit

In 2006[8], Google started the development of a build tool called Blaze[9].

Bazel was created as an open-source port of the Blaze tool Bazel, named as an anagram of Blaze.[4] Bazel was first released in March 2015 and entered beta by September 2015.[6] Version 1.0 was released in October 2019.[10]

Rationale

edit

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[11]. To do so, Bazel requires that the inputs and outputs of build targets are fully specified.

Starlark language

edit

Bazel is extensible with the Starlark programming language. Starlark uses a syntax that is a subset of the syntax of the Python programming language. However, it doesn't implement many of Python's language features, such as the ability to mutate collections or 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 multi-language build system. 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 for Clojure, sbt for Scala, etc. In a multi-language project, 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,[12] Buck,[13], Please,[14] and the Brazil build system used internally at Amazon.[15]. 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. Blaze is also the predecessor to Bazel. 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.[16]

Sandbox

edit

Bazel uses a sandbox 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 the Mach-O binary, which can be seen with a command like nm -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 in Xcode 11.0. Similar handling needs to take place in linking phases, rewriting the rpath values in shared object libraries with a command like install_name_tool.[17]

edit
 
Old Bazel logo

Since Bazel's initial release the logo was a green letter "b" stylized into a stem of a basil plant with two leaves. On July 5, 2017, the Bazel Blog announced a new logo,[18] consisting of three green building blocks arranged to shape a heart.

See also

edit

References

edit
  1. ^ "Releases · bazelbuild/bazel". GitHub.
  2. ^ a b c Yegulalp, Serdar (Sep 11, 2015). "Google open-sources language-agnostic, scalable software tool". InfoWorld. Archived from the original on 25 October 2017. Retrieved 25 June 2016.
  3. ^ "FAQ - Bazel". bazel.build. Archived from the original on 2016-11-06.
  4. ^ a b c d Bolton, David (27 April 2015). "Bazel, Google's Open Source Build System - The New Stack". thenewstack.io. The New Stack. Archived from the original on 24 October 2017. Retrieved 25 June 2016.
  5. ^ "Starlark - Bazel". blog.bazel.build. Retrieved 2018-10-18.
  6. ^ a b Daws, Ryan (10 September 2015). "Google's software build tool Bazel heads into beta". www.developer-tech.com. Developer Tech. Archived from the original on 23 October 2017. Retrieved 25 June 2016.
  7. ^ "FAQ - Bazel". bazel.build. Retrieved 25 June 2016.
  8. ^ Vermeulen, Steve. "Bazel, From Blaze to Buck2 — A Brief History of Modern Monorepo Build Systems".
  9. ^ Beyer, Betsy; Jones, Chris; Petoff, Jennifer; Murphy, Niall Richard (23 March 2016). Site Reliability Engineering: How Google Runs Production Systems. "O'Reilly Media, Inc.". p. 90. ISBN 9781491951187. Retrieved 25 June 2016.
  10. ^ "Bazel 1.0". blog.bazel.build. Retrieved 2023-10-29.
  11. ^ Mokhov, Andrey and Mitchell, Neil and Peyton Jones, Simon (2018). "Build Systems à la Carte". Proceedings of the ACM on Programming Languages. 2 (ICFP).{{cite journal}}: CS1 maint: multiple names: authors list (link)
  12. ^ "Pants: A fast, scalable build system".
  13. ^ "Buck: A high-performance build tool".
  14. ^ Please FAQ
  15. ^ Amazon's Build System
  16. ^ Shal, Mike (2009). "Build System Rules and Algorithms" (PDF).
  17. ^ "tools/cpp/osx_cc_wrapper.sh". Github. 5 February 2022.
  18. ^ Giannini, Steren (5 July 2017). "A new logo and homepage for Bazel".
edit