--- layout: documentation title: Compiling Bazel from Source --- # Compiling Bazel from Source (bootstrapping) You can build Bazel from source without using an existing Bazel binary. ### 1. Install the prerequisites #### 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 *must* install 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 distribution archive Download `bazel--dist.zip` from the [release page](https://github.com/bazelbuild/bazel/releases). **Note:** There is a **single, architecture-independent** distribution archive. There are no architecture-specific or OS-specific distribution archives. We recommend to also verify the signature made by our [release key](https://bazel.build/bazel-release.pub.gpg) 48457EE0. The distribution archive contains generated files in addition to the versioned sources, so this step _cannot_ be short cut by checking out the source tree. ### 3. Bootstrap Bazel #### Unix-like systems On Unix-like systems such as Ubuntu Linux or macOS, do the following: 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\_VS) or to the Visual C++ directory (BAZEL\_VC). Setting one of them is enough. * `BAZEL_SH`: Set to the path of the MSYS2 `bash.exe`. 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\_VS): export BAZEL_VS="C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools" export BAZEL_SH="C:/msys64/usr/bin/bash.exe" export PATH="/c/python27:$PATH" export JAVA_HOME="C:/Program Files/Java/jdk1.8.0_112" or (using BAZEL\_VC): export BAZEL_VC="C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC" export BAZEL_SH="c:/msys64/usr/bin/bash.exe" 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.