Building Bazel on Windows

Warning: Windows support on Bazel is still at a very early stage, many things will not work.

Since Bazel is written in Java, you will need a recent JDK.

The Windows build process uses MSYS2, a POSIX-like environment on Windows. Grab the installer or an archived version and install.

Next, open an MSYS2 shell (not the mingw32 or the mingw64 shell) either through a shortcut or by running the msys2_shell.bat. Install the dependencies:

pacman -S libarchive-devel gcc mingw-w64-x86_64-gcc zip unzip git

The msys2 gcc will be used for building Bazel itself, the mingw-w64 gcc will be used by Bazel for building C++.

Grab the Bazel source code:

git clone https://github.com/google/bazel.git

Then, to build:

cd bazel && ./compile.sh

If all goes well, you should find the binary in output/bazel.

Running Bazel on Windows

Running Bazel on Windows requires a few additional steps due to the differences between the native POSIX environment and the Windows environment.

First, since Blaze uses symlinks, the current Windows user needs to have the permission to create symlinks. This permission is off by default for non-administrator users. The easiest workaround is to run the msys2 shell as administrator (right click shortcut -> Run As Administrator).

Second, you need to set some environment variables:

export MSYS=winsymlinks:nativestrict  # Enable symlink support in msys2.
export BAZEL_SH="C:/msys64/usr/bin/bash"
export JAVA_HOME="$(ls -d C:/Program\ Files/Java/jdk* | sort | tail -n 1)"

Third, you need to set some Bazel options. It's easiest to put them into your .bazelrc:

cat > ~/.bazelrc << EOF
startup --batch  # Server mode is not yet supported on Windows
build --compiler=windows_msys64_mingw64
build --nobuild_runfile_links  # Not ported to Windows yet.
EOF

This should be enough to run Bazel:

cd base_workspace &&
../output/bazel build //cpp:hello-world