Build from source

This document describes how to build XLA components.

If you did not clone the XLA repository or install Bazel, check out the initial sections of the XLA Developer Guide.

Linux

Configure

XLA builds are configured by the .bazelrc file in the repository's root directory. The ./configure.py script can be used to adjust common settings.

If you need to change the configuration, run the ./configure.py script from the repository's root directory. This script has flags for the location of XLA dependencies and additional build configuration options (compiler flags, for example). Refer to the Sample session section for details.

CPU support

We recommend using a suitable docker container to build/test XLA, such as TensorFlow's docker container:

docker run --name xla -w /xla -it -d --rm -v $PWD:/xla tensorflow/build:latest-python3.9 bash

Using a docker container you can build XLA with CPU support using the following commands:

docker exec xla ./configure.py --backend=CPU
docker exec xla bazel build //xla/...  --spawn_strategy=sandboxed --test_output=all

If you want to build XLA targets with CPU support without Docker you need to install clang. XLA currently builds on CI with clang-17, but earlier versions should also work:

apt install clang

Then configure and build targets using the following commands:

./configure.py --backend=CPU
bazel build --test_output=all --spawn_strategy=sandboxed //xla/...

GPU support

We recommend using the same docker container as above to build XLA with GPU support:

docker run --name xla_gpu -w /xla -it -d --rm -v $PWD:/xla tensorflow/build:latest-python3.9 bash

To build XLA with GPU support use the following command:

docker exec xla_gpu ./configure.py --backend=CUDA
docker exec xla_gpu bazel build --test_output=all --spawn_strategy=sandboxed //xla/...

For more details regarding TensorFlow's GPU docker images you can check out this document.

You can build XLA targets with GPU support without Docker as well. Configure and build targets using the following commands:

./configure.py --backend=CUDA

bazel build --test_output=all --spawn_strategy=sandboxed //xla/...

For more details regarding hermetic CUDA you can check out this document.