blob: 3c5fb2d0979b203fc5e2c0cf6fb24127e5d99be7 [file] [log] [blame] [view]
---
layout: documentation
title: Compiling Bazel from Source
---
# <a name="compiling-from-source"></a>Compiling Bazel from Source (bootstrapping)
To build Bazel from source, you can do one of the following:
* Build it using an existing Bazel Binary
* Build it without an existing Bazel binary, which is known as _bootstraping_
This document describes how to bootstrap Bazel.
### 1. Install the prerequisites
#### Ubuntu Linux, macOS, and other Unix-like systems
Ensure you have installed:
* **Bash**
* **zip, unzip**
* **C++ build toolchain**
* **JDK 8.** You must install version 8 of the JDK. Versions other than 8 are
*not* supported.
* **Python**. Versions 2 and 3 are supported.
For example on Ubuntu Linux you can install these requirements using the following command:
```sh
sudo apt-get install build-essential openjdk-8-jdk python zip unzip
```
#### Windows
Ensure you have installed:
* [MSYS2 shell](https://msys2.github.io/)
* **The required MSYS2 packages.** Run the following command in the MSYS2
shell:
```
pacman -Syu zip unzip
```
* **The Visual C++ compiler.** Install the Visual C++ compiler either as part
of Visual Studio 2015 or newer, or by installing the latest [Build Tools
for Visual Studio 2017](https://aka.ms/BuildTools).
* **JDK 8.** You must install version 8 of the JDK. Versions other than 8 are
*not* supported.
* **Python**. Versions 2 and 3 are supported. You need the
Windows-native version (downloadable from [https://www.python.org](https://www.python.org)).
Versions installed via pacman in MSYS2 will not work.
### 2. Download and unpack Bazel's source files (distribution archive)
Download `bazel-<version>-dist.zip` from [GitHub](https://github.com/bazelbuild/bazel/releases)
(for example, `bazel-0.15.2-dist.zip`). If you want to build a development snapshot of
Bazel, download the archive for the latest release before the snapshot
you are interested in as you need to bootstrap that version of Bazel
first in order to build the snapshot version.
**Note:** There is a **single, architecture-independent** distribution archive. There are no architecture-specific or OS-specific distribution archives.
**Note:** You have to use the distribution archive to build Bazel from source.
You cannot use a source tree cloned from GitHub. (The distribution archive
contains generated source files that are required for bootstrapping and are not
part of the normal Git source tree.)
We recommend to also verify the signature made by our
[release key](https://bazel.build/bazel-release.pub.gpg) 48457EE0.
### 3. Bootstrap Bazel
#### Ubuntu Linux, macOS, and other Unix-like systems
1. Open a shell or Terminal window.
2. Change into the directory where you unpacked the distribution archive.
3. Run the compilation script: `bash ./compile.sh`.
The compiled output is placed into `output/bazel`. This is a self-contained
Bazel binary, without an embedded JDK. You can copy it to a directory in the
`PATH` variable (such as `/usr/local/bin` on Linux) or use it in-place.
#### Windows
1. Open the MSYS2 shell.
2. Set the following environment variables:
* Either `BAZEL_VS` or `BAZEL_VC` (they are *not* the same): Set to the
path to the Visual Studio directory (BAZEL\_V<b>S</b>) or to the Visual
C++ directory (BAZEL\_V<b>C</b>). Setting one of them is enough.
* `BAZEL_SH`: Path of the MSYS2 `bash.exe`. See the command in the
examples below.
Do not set this to `C:\Windows\System32\bash.exe`. (You have that file
if you installed Windows Subsystem for Linux.) Bazel does not support
this version of `bash.exe`.
* `PATH`: Add the Python directory.
* `JAVA_HOME`: Set to the JDK directory.
For example (using BAZEL\_V<b>S</b>):
export BAZEL_VS="C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools"
export BAZEL_SH="$(cygpath -m $(realpath $(which bash)))"
export PATH="/c/python27:$PATH"
export JAVA_HOME="C:/Program Files/Java/jdk1.8.0_112"
or (using BAZEL\_V<b>C</b>):
export BAZEL_VC="C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC"
export BAZEL_SH="$(cygpath -m $(realpath $(which bash)))"
export PATH="/c/python27:$PATH"
export JAVA_HOME="C:/Program Files/Java/jdk1.8.0_112"
3. Change into the directory where you unpacked the distribution archive.
4. Run the compilation script: `./compile.sh`
The compiled output is placed into `output/bazel.exe`. This is a self-contained
Bazel binary, without an embedded JDK. You can copy it to a directory within the
`%PATH%` variable or use it in-place.
You don't need to run Bazel from the MSYS2 shell. You can run Bazel from the
Command Prompt (`cmd.exe`) or PowerShell.
### 4. Development snapshots of Bazel
Once you have a reasonably new working `bazel` binary, you can also build
snapshot versions of Bazel by checking out the commit you're interested in
and build a new version of Bazel by `bazel build //src:bazel`.