Release of the Bazel 1.0 build system

Submitted by release of open assembly tools Basel 1.0, developed by Google engineers and used to assemble most of the company's internal projects. Release 1.0 marked the transition to semantic release versioning and is also notable for a large number of changes that break backwards compatibility. Project code spreads licensed under Apache 2.0.

Bazel builds the project by running the necessary compilers and tests. The build system is designed from the ground up to build Google projects optimally, including building very large projects and projects containing code in multiple programming languages, requiring extensive testing, and building for multiple platforms. It supports building and testing code in Java, C++, Objective-C, Python, Rust, Go and many other languages, as well as building mobile applications for Android and iOS. The use of single assembly files for different platforms and architectures is supported, for example, one assembly file without changes can be used both for a server system and for a mobile device.

Among the distinguishing features of Bazel stand out high speed, reliability and repeatability of the assembly process. To achieve high build speed, Bazel actively uses caching and parallelization techniques for the build process. BUILD files must fully define all dependencies, on the basis of which decisions are made on rebuilding components after making changes (only changed files are rebuilt) and parallelizing the build process. The toolkit also guarantees assembly repeatability, i.e. the result of building the project on the developer's machine will completely match the build on third-party systems, such as continuous integration servers.

Unlike Make and Ninja, Bazel uses a higher-level approach to constructing build rules, in which, instead of defining the binding of commands to the files being built, more abstract ready-made blocks are used, such as “building an executable file in C ++”, “building a library in C++" or "test run for C++", as well as defining target and build platforms. In the BUILD text file, project components are described as a bunch of libraries, executable files and tests, without detailing at the level of individual files and compiler call commands. Additional functionality is implemented through the mechanism for connecting extensions.

Source: opennet.ru

Add a comment