layout: documentation title: Compile Bazel from Source

Compile Bazel from source

You can build Bazel from source following these steps:

  1. Ensure that JDK 8, Python, bash, zip, and the usual C build toolchain are installed on your system.

    • On systems based on Debian packages (Debian, Ubuntu): you can install OpenJDK 8 and Python by running the following command in a terminal:

      sudo apt-get install build-essential openjdk-8-jdk python zip
      
    • On Windows: you need additional software. See the requirements page.

  2. Download and unpack Bazel's distribution archive.

    Download bazel-<version>-dist.zip from the release page. We recommend to also verify the signature made by our release key 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. Build Bazel using ./compile.sh.

    • On Unix-like systems (e.g. Ubuntu, macOS), do the following steps in a shell session:
      1. cd into the directory where you unpacked the distribution archive
      2. run bash ./compile.sh
    • On Windows, do following steps in the msys2 shell:
      1. cd into the directory where you unpacked the distribution archive
      2. run ./compile.sh

    The output will be output/bazel on Unix-like systems (e.g. Ubuntu, macOS) and output/bazel.exe on Windows. This is a self-contained Bazel binary. You can copy it to a directory on the PATH (such as /usr/local/bin on Linux) or use it in-place.

Note to Windows users

Make sure your machine meets the requirements and that you use the latest version of the sources (bazel-0.X.Y-dist.zip).

There's a bug in the compilation scripts in bazel-0.6.0-dist.zip and in bazel-0.6.1-dist.zip:

To fix it:

  • either apply the changes in e79a110 to the source tree,

  • or just replace the following line in src/main/native/windows/build_windows_jni.sh:

    @CL /O2 /EHsc /LD /Fe:"$(cygpath -a -w ${DLL})" /I "${VSTEMP}" /I . ${WINDOWS_SOURCES[*]}
    

    with this line:

    @CL /O2 /EHsc /LD /Fe:"$(cygpath -a -w ${DLL})" /I "%TMP%" /I . ${WINDOWS_SOURCES[*]}
    

It suffices to do one of these to bootstrap Bazel. We however recommend applying the full commit (e79a110) because it also adds extra environment checks to ./compile.sh.