layout: documentation title: Windows

Windows support is highly experimental. Known issues are marked with label “Windows” on github issues.

We currently support only 64 bit Windows 7 or higher and we compile Bazel as a msys2 binary.

Installation

See instructions on the installation page.

Requirements

To run Bazel (even pre-built binaries), you will need:

  • Java JDK 8 or later
  • msys2 (need to be installed at C:\tools\msys64\). * We build against version 20160205, the newer versions should also work. Older versions are known to have issues.

To compile Bazel, in addition to the above you will need:

  • Visual C++ with Windows SDK installed (Community Edition is fine)
  • Several msys2 packages. Use the pacman command to install them: pacman -Syuu gcc git curl zip unzip zlib-devel

Before you can compile or run Bazel, you will need to set some environment variables:

export JAVA_HOME="$(ls -d C:/Program\ Files/Java/jdk* | sort | tail -n 1)"
export BAZEL_SH=c:/tools/msys64/usr/bin/bash.exe

If you run outside of bash, ensure that msys-2.0.dll is in your PATH (if you install msys2 to c:\tools\msys64, just add c:\tools\msys64\usr\bin to PATH).

If you have another tool that vendors msys2 (such as msysgit), then c:\tools\msys64\usr\bin must appear in your PATH before entries for those tools.

Similarly, if you have bash on Ubuntu on Windows installed, you should make sure c:\tools\msys64\usr\bin appears in PATH before c:\windows\system32, because otherwise Windows' bash.exe is used before msys2's.

Use where msys-2.0.dll to ensure your PATH is set up correctly.

Compiling Bazel on Windows

Ensure you have the requirements.

To build Bazel:

  • Open the msys2 shell.
  • Clone the Bazel git repository as normal.
  • Set the environment variables (see above)
  • Run compile.sh in Bazel directory.
  • If all works fine, bazel will be built at output\bazel.exe.

Using Bazel on Windows

Bazel now supports building C++, Java and Python targets on Windows.

Build C++

To build C++ targets, you will need:

  • Visual Studio
    We are using MSVC as the native C++ toolchain, so please ensure you have Visual Studio installed with the Visual C++ > Common Tools for Visual C++ and Visual C++ > Microsoft Foundation Classes for C++ features. (which is NOT the default installation type of Visual Studio). You can set BAZEL_VS environment variable to tell Bazel where Visual Studio is, otherwise Bazel will try to find the latest version installed.
    For example: export BAZEL_VS="C:/Program Files (x86)/Microsoft Visual Studio 14.0"

  • Python 2.7
    Currently, we use python wrapper scripts to call the actual MSVC compiler, so please make sure Python is installed and its location is added into PATH. It's also a good idea to set BAZEL_PYTHON environment variable to tell Bazel where python is.
    For example: export BAZEL_PYTHON=C:/Python27/python.exe

Bazel will auto-configure the location of Visual Studio and Python at the first time you build any target. If you need to auto-configure again, just run bazel clean then build a target.

If everything is set up, you can build C++ target now! However, since MSVC toolchain is not default on Windows yet, you should use flag --cpu=x64_windows_msvc to enable it like this:

$ bazel build --cpu=x64_windows_msvc examples/cpp:hello-world
$ ./bazel-bin/examples/cpp/hello-world.exe
$ bazel run --cpu=x64_windows_msvc examples/cpp:hello-world

Build Java

Building Java targets works well on Windows, no special configuration is needed. Just try:

$ bazel build examples/java-native/src/main/java/com/example/myproject:hello-world
$ ./bazel-bin/examples/java-native/src/main/java/com/example/myproject/hello-world
$ bazel run examples/java-native/src/main/java/com/example/myproject:hello-world

Build Python

On Windows, we build a self-extracting zip file for executable python targets, you can even use python ./bazel-bin/path/to/target to run it in native Windows command line (cmd.exe). See more details in this design doc.

$ bazel build examples/py_native:bin
$ ./bazel-bin/examples/py_native/bin
$ python ./bazel-bin/examples/py_native/bin    # This works in both msys and cmd.exe
$ bazel run examples/py_native:bin