# Build from source

Build a TensorFlow *pip* package from source and install it on Ubuntu Linux and
macOS. While the instructions might work for other systems, it is only tested
and supported for Ubuntu and macOS.

> [!NOTE]
> **Note:** Well-tested, pre-built [TensorFlow packages](https://www.tensorflow.org/install/pip) for Linux and macOS systems are already provided.

## Setup for Linux and macOS

Install the following build tools to configure your development environment.

### Install Python and the TensorFlow package dependencies

<br />

### Ubuntu

    sudo apt install python3-dev python3-pip

### macOS

Requires Xcode 9.2 or later.

Install using the [Homebrew](https://brew.sh/) package manager:

    brew install python

<br />

Install the TensorFlow *pip* package dependencies (if using a virtual
environment, omit the `--user` argument):

    pip install -U --user pip

> [!NOTE]
> **Note:** A `pip` version \>19.0 is required to install the TensorFlow 2 `.whl` package. Additional required dependencies are listed in the [`setup.py.tpl`](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/pip_package/setup.py.tpl) file under `REQUIRED_PACKAGES`.

### Install Bazel

To build TensorFlow, you will need to install Bazel.
[Bazelisk](https://github.com/bazelbuild/bazelisk) is an easy way to install
Bazel and automatically downloads the correct Bazel version for TensorFlow. For
ease of use, add Bazelisk as the `bazel` executable in your `PATH`.

If Bazelisk is not available, you can manually
[install Bazel](https://bazel.build/install). Make
sure to install the correct Bazel version from TensorFlow's
[.bazelversion](https://github.com/tensorflow/tensorflow/blob/master/.bazelversion)
file.

### Install Clang (recommended, Linux only)

Clang is a C/C++/Objective-C compiler that is compiled in C++ based on LLVM. It
is the default compiler to build TensorFlow starting with TensorFlow 2.13. The
current supported version is LLVM/Clang 17.

[LLVM Debian/Ubuntu nightly packages](https://apt.llvm.org) provide an automatic
installation script and packages for manual installation on Linux. Make sure you
run the following command if you manually add llvm apt repository to your
package sources:

    sudo apt-get update && sudo apt-get install -y llvm-17 clang-17

Now that `/usr/lib/llvm-17/bin/clang` is the actual path to clang in this case.

Alternatively, you can download and unpack the pre-built
[Clang + LLVM 17](https://github.com/llvm/llvm-project/releases/tag/llvmorg-17.0.2).

Below is an example of steps you can take to set up the downloaded Clang + LLVM
17 binaries on Debian/Ubuntu operating systems:

1. Change to the desired destination directory: `cd <desired directory>`

2. Load and extract an archive file...(suitable to your architecture):

       wget https://github.com/llvm/llvm-project/releases/download/llvmorg-17.0.2/clang+llvm-17.0.2-x86_64-linux-gnu-ubuntu-22.04.tar.xz

       tar -xvf clang+llvm-17.0.2-x86_64-linux-gnu-ubuntu-22.04.tar.xz

   <br />

3. Copy the extracted contents (directories and files) to `/usr` (you may need
   sudo permissions, and the correct directory may vary by distribution). This
   effectively installs Clang and LLVM, and adds it to the path. You should not
   have to replace anything, unless you have a previous installation, in which
   case you should replace the files:

       cp -r clang+llvm-17.0.2-x86_64-linux-gnu-ubuntu-22.04/* /usr

   <br />

4. Check the obtained Clang + LLVM 17 binaries version:

       clang --version

   <br />

5. Now that `/usr/bin/clang` is the actual path to your new clang. You can run
   the `./configure` script or manually set environment variables `CC` and
   `BAZEL_COMPILER` to this path.

### Install GPU support (optional, Linux only)

There is *no* GPU support for macOS.

Read the [GPU support](https://www.tensorflow.org/install/pip) guide to install the drivers and additional
software required to run TensorFlow on a GPU.

> [!NOTE]
> **Note:** It is easier to set up one of TensorFlow's GPU-enabled [Docker images](https://www.tensorflow.org/install/source#docker_linux_builds).

### Download the TensorFlow source code

Use [Git](https://git-scm.com/) to clone the
[TensorFlow repository](https://github.com/tensorflow/tensorflow):

    git clone https://github.com/tensorflow/tensorflow.git
    cd tensorflow

The repo defaults to the `master` development branch. You can also check out a
[release branch](https://github.com/tensorflow/tensorflow/releases)
to build:

```bash
git checkout branch_name  # r2.2, r2.3, etc.
```

## Configure the build

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

Please run the `./configure` script from the repository's root directory. This
script will prompt you for the location of TensorFlow dependencies and asks for
additional build configuration options (compiler flags, for example). Refer to
the *Sample session* section for details.

```
./configure
```

There is also a python version of this script, `./configure.py`. If using a
virtual environment, `python configure.py` prioritizes paths
within the environment, whereas `./configure` prioritizes paths outside
the environment. In both cases you can change the default.

### Sample session

The following shows a sample run of `./configure` script (your
session may differ):

#### View sample configuration session

```
./configure
You have bazel 6.1.0 installed.
Please specify the location of python. [Default is /Library/Frameworks/Python.framework/Versions/3.9/bin/python3]: 


Found possible Python library paths:
  /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages
Please input the desired Python library path to use.  Default is [/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages]

Do you wish to build TensorFlow with ROCm support? [y/N]:
No ROCm support will be enabled for TensorFlow.

Do you wish to build TensorFlow with CUDA support? [y/N]:
No CUDA support will be enabled for TensorFlow.

Do you want to use Clang to build TensorFlow? [Y/n]:
Clang will be used to compile TensorFlow.

Please specify the path to clang executable. [Default is /usr/lib/llvm-16/bin/clang]:

You have Clang 16.0.4 installed.

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -Wno-sign-compare]:


Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: n
Not configuring the WORKSPACE for Android builds.

Do you wish to build TensorFlow with iOS support? [y/N]: n
No iOS support will be enabled for TensorFlow.

Preconfigured Bazel build configs. You can use any of the below by adding "--config=<>" to your build command. See .bazelrc for more details.
    --config=mkl            # Build with MKL support.
    --config=mkl_aarch64    # Build with oneDNN and Compute Library for the Arm Architecture (ACL).
    --config=monolithic     # Config for mostly static monolithic build.
    --config=numa           # Build with NUMA support.
    --config=dynamic_kernels    # (Experimental) Build kernels into separate shared objects.
    --config=v1             # Build with TensorFlow 1 API instead of TF 2 API.
Preconfigured Bazel build configs to DISABLE default on features:
    --config=nogcp          # Disable GCP support.
    --config=nonccl         # Disable NVIDIA NCCL support.

```

### Configuration options

#### GPU support

##### from v.2.18.0

For [GPU support](https://www.tensorflow.org/install/pip), set `cuda=Y` during configuration and specify the
versions of CUDA and cuDNN if required. Bazel will download CUDA and CUDNN
packages automatically or point to CUDA/CUDNN/NCCL redistributions on local file
system if required.

##### before v.2.18.0

For [GPU support](https://www.tensorflow.org/install/pip), set `cuda=Y` during configuration and specify the
versions of CUDA and cuDNN. If your system has multiple versions of CUDA or
cuDNN installed, explicitly set the version instead of relying on the default.
`./configure` creates symbolic links to your system's CUDA libraries---so if you
update your CUDA library paths, this configuration step must be run again before
building.

#### Optimizations

For compilation optimization flags, the default (`-march=native`) optimizes the
generated code for your machine's CPU type. However, if building TensorFlow for
a different CPU type, consider a more specific optimization flag. Check the
[GCC manual](https://gcc.gnu.org/onlinedocs/gcc-4.5.3/gcc/i386-and-x86_002d64-Options.html)
for examples.

#### Preconfigured configurations

There are some preconfigured build configs available that can be added to the
`bazel build` command, for example:

- `--config=dbg` ---Build with debug info. See [CONTRIBUTING.md](https://github.com/tensorflow/tensorflow/blob/master/CONTRIBUTING.md) for details.
- `--config=mkl` ---Support for the [Intel® MKL-DNN](https://github.com/intel/mkl-dnn).
- `--config=monolithic` ---Configuration for a mostly static, monolithic build.

## Build and install the pip package

#### Bazel build options

Refer to the Bazel
[command-line reference](https://bazel.build/reference/command-line-reference)
for
[build options](https://bazel.build/reference/command-line-reference#build-options).

Building TensorFlow from source can use a lot of RAM. If your system is
memory-constrained, limit Bazel's RAM usage with: `--local_ram_resources=2048`.

The [official TensorFlow packages](https://www.tensorflow.org/install/pip) are built with a Clang toolchain
that complies with the manylinux2014 package standard.

### Build the package

To build pip package, you need to specify `--repo_env=WHEEL_NAME` flag.
depending on the provided name, package will be created, e.g:

To build tensorflow CPU package:

```
bazel build //tensorflow/tools/pip_package:wheel --repo_env=USE_PYWRAP_RULES=1 --repo_env=WHEEL_NAME=tensorflow_cpu
```

<br />

To build tensorflow GPU package:

```
bazel build //tensorflow/tools/pip_package:wheel --repo_env=USE_PYWRAP_RULES=1 --repo_env=WHEEL_NAME=tensorflow --config=cuda --config=cuda_wheel
```

<br />

To build tensorflow TPU package:

```
bazel build //tensorflow/tools/pip_package:wheel --repo_env=USE_PYWRAP_RULES=1 --repo_env=WHEEL_NAME=tensorflow_tpu --config=tpu
```

<br />

To build nightly package, set `tf_nightly` instead of `tensorflow`, e.g.
to build CPU nightly package:

```
bazel build //tensorflow/tools/pip_package:wheel --repo_env=USE_PYWRAP_RULES=1 --repo_env=WHEEL_NAME=tf_nightly_cpu
```

<br />

As a result, generated wheel will be located in

```
bazel-bin/tensorflow/tools/pip_package/wheel_house/
```

<br />

### Install the package

The filename of the generated `.whl` file depends on the TensorFlow version and
your platform. Use `pip install` to install the package, for example:

```bash
pip install bazel-bin/tensorflow/tools/pip_package/wheel_house/tensorflow-version-tags.whl
```

> [!TIP]
> **Success:** TensorFlow is now installed.

## Docker Linux builds

TensorFlow's Docker development images are an easy way to set up an environment
to build Linux packages from source. These images already contain the source
code and dependencies required to build TensorFlow. Go to the TensorFlow
[Docker guide](https://www.tensorflow.org/install/docker) for installation instructions and the
[list of available image tags](https://hub.docker.com/r/tensorflow/tensorflow/tags/).

### CPU-only

The following example uses the `:devel` image to build a CPU-only package from
the latest TensorFlow source code. Check the [Docker guide](https://www.tensorflow.org/install/docker) for
available TensorFlow `-devel` tags.

Download the latest development image and start a Docker container that you'll
use to build the *pip* package:

    docker pull tensorflow/tensorflow:devel
    docker run -it -w /tensorflow_src -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \
        tensorflow/tensorflow:devel bash

    git pull  # within the container, download the latest source code

The above `docker run` command starts a shell in the `/tensorflow_src`
directory---the root of the source tree. It mounts the host's current directory in
the container's `/mnt` directory, and passes the host user's information to the
container through an environmental variable (used to set permissions---Docker can
make this tricky).

Alternatively, to build a host copy of TensorFlow within a container, mount the
host source tree at the container's `/tensorflow` directory:

```bash
docker run -it -w /tensorflow -v /path/to/tensorflow:/tensorflow -v $PWD:/mnt \
    -e HOST_PERMS="\\((id -u):\\)(id -g)" tensorflow/tensorflow:devel bash
```

With the source tree set up, build the TensorFlow package within the container's
virtual environment:

1. Optional: Configure the build---this prompts the user to answer build configuration questions.
2. Build the *pip* package.
3. Adjust the ownership permissions of the file for outside the container.

    ./configure  # if necessary


    bazel build //tensorflow/tools/pip_package:wheel \
    --repo_env=USE_PYWRAP_RULES=1 --repo_env=WHEEL_NAME=tensorflow_cpu --config=opt

    `
    chown $HOST_PERMS bazel-bin/tensorflow/tools/pip_package/wheel_house/tensorflow-version-tags.whl

Install and verify the package within the container:

    pip uninstall tensorflow  # remove current version

    pip install bazel-bin/tensorflow/tools/pip_package/wheel_house/tensorflow-version-tags.whl
    cd /tmp  # don't import from source directory
    python -c "import tensorflow as tf; print(tf.__version__)"

> [!TIP]
> **Success:** TensorFlow is now installed.

On your host machine, the TensorFlow *pip* package is in the current directory
(with host user permissions):
`./tensorflow-version-tags.whl`

### GPU support

> [!NOTE]
> **Note:** Starting from Tensorflow v.2.18.0 the wheels can be built from source on a machine without GPUs and without NVIDIA driver installed.

Docker is the easiest way to build GPU support for TensorFlow since the *host*
machine only requires the
[NVIDIA® driver](https://github.com/NVIDIA/nvidia-docker/wiki/Frequently-Asked-Questions#how-do-i-install-the-nvidia-driver)
(the *NVIDIA® CUDA® Toolkit* doesn't have to be installed). Refer to the
[GPU support guide](https://www.tensorflow.org/install/pip) and the TensorFlow [Docker guide](https://www.tensorflow.org/install/docker) to
set up [nvidia-docker](https://github.com/NVIDIA/nvidia-docker)
(Linux only).

The following example downloads the TensorFlow `:devel-gpu` image and uses
`nvidia-docker` to run the GPU-enabled container. This development image is
configured to build a *pip* package with GPU support:

    docker pull tensorflow/tensorflow:devel-gpu
    docker run --gpus all -it -w /tensorflow -v $PWD:/mnt -e HOST_PERMS="$(id -u):$(id -g)" \
        tensorflow/tensorflow:devel-gpu bash
    git pull  # within the container, download the latest source code

Then, within the container's virtual environment, build the TensorFlow package
with GPU support:

    ./configure  # if necessary


    bazel build //tensorflow/tools/pip_package:wheel \
    --repo_env=USE_PYWRAP_RULES=1 --repo_env=WHEEL_NAME=tensorflow --config=cuda \
    --config=cuda_wheel --config=opt


    chown $HOST_PERMS bazel-bin/tensorflow/tools/pip_package/wheel_house/tensorflow-version-tags.whl

Install and verify the package within the container and check for a GPU:

    pip uninstall tensorflow  # remove current version

    pip install bazel-bin/tensorflow/tools/pip_package/wheel_house/tensorflow-version-tags.whl
    cd /tmp  # don't import from source directory
    python -c "import tensorflow as tf; print(\"Num GPUs Available: \", len(tf.config.list_physical_devices('GPU')))"

> [!TIP]
> **Success:** TensorFlow is now installed.

## Tested build configurations

### Linux

#### CPU

| Version | Python version | Compiler | Build tools |
|---|---|---|---|
| tensorflow-2.21.0 | 3.10-3.13 | Clang 18.1.8 | Bazel 7.4.1 |
| tensorflow-2.20.0 | 3.9-3.13 | Clang 18.1.8 | Bazel 7.4.1 |
| tensorflow-2.19.0 | 3.9-3.12 | Clang 18.1.8 | Bazel 6.5.0 |
| tensorflow-2.18.0 | 3.9-3.12 | Clang 17.0.6 | Bazel 6.5.0 |
| tensorflow-2.17.0 | 3.9-3.12 | Clang 17.0.6 | Bazel 6.5.0 |
| tensorflow-2.16.1 | 3.9-3.12 | Clang 17.0.6 | Bazel 6.5.0 |
| tensorflow-2.15.0 | 3.9-3.11 | Clang 16.0.0 | Bazel 6.1.0 |
| tensorflow-2.14.0 | 3.9-3.11 | Clang 16.0.0 | Bazel 6.1.0 |
| tensorflow-2.13.0 | 3.8-3.11 | Clang 16.0.0 | Bazel 5.3.0 |
| tensorflow-2.12.0 | 3.8-3.11 | GCC 9.3.1 | Bazel 5.3.0 |
| tensorflow-2.11.0 | 3.7-3.10 | GCC 9.3.1 | Bazel 5.3.0 |
| tensorflow-2.10.0 | 3.7-3.10 | GCC 9.3.1 | Bazel 5.1.1 |
| tensorflow-2.9.0 | 3.7-3.10 | GCC 9.3.1 | Bazel 5.0.0 |
| tensorflow-2.8.0 | 3.7-3.10 | GCC 7.3.1 | Bazel 4.2.1 |
| tensorflow-2.7.0 | 3.7-3.9 | GCC 7.3.1 | Bazel 3.7.2 |
| tensorflow-2.6.0 | 3.6-3.9 | GCC 7.3.1 | Bazel 3.7.2 |
| tensorflow-2.5.0 | 3.6-3.9 | GCC 7.3.1 | Bazel 3.7.2 |
| tensorflow-2.4.0 | 3.6-3.8 | GCC 7.3.1 | Bazel 3.1.0 |
| tensorflow-2.3.0 | 3.5-3.8 | GCC 7.3.1 | Bazel 3.1.0 |
| tensorflow-2.2.0 | 3.5-3.8 | GCC 7.3.1 | Bazel 2.0.0 |
| tensorflow-2.1.0 | 2.7, 3.5-3.7 | GCC 7.3.1 | Bazel 0.27.1 |
| tensorflow-2.0.0 | 2.7, 3.3-3.7 | GCC 7.3.1 | Bazel 0.26.1 |
| tensorflow-1.15.0 | 2.7, 3.3-3.7 | GCC 7.3.1 | Bazel 0.26.1 |
| tensorflow-1.14.0 | 2.7, 3.3-3.7 | GCC 4.8 | Bazel 0.24.1 |
| tensorflow-1.13.1 | 2.7, 3.3-3.7 | GCC 4.8 | Bazel 0.19.2 |
| tensorflow-1.12.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.15.0 |
| tensorflow-1.11.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.15.0 |
| tensorflow-1.10.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.15.0 |
| tensorflow-1.9.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.11.0 |
| tensorflow-1.8.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.10.0 |
| tensorflow-1.7.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.10.0 |
| tensorflow-1.6.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.9.0 |
| tensorflow-1.5.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.8.0 |
| tensorflow-1.4.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.5.4 |
| tensorflow-1.3.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.5 |
| tensorflow-1.2.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.5 |
| tensorflow-1.1.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.2 |
| tensorflow-1.0.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.2 |

#### GPU

| Version | Python version | Compiler | Build tools | cuDNN | CUDA |
|---|---|---|---|---|---|
| tensorflow-2.21.0 | 3.10-3.13 | Clang 18.1.8 | Bazel 7.4.1 | 9.3 | 12.5 |
| tensorflow-2.20.0 | 3.9-3.13 | Clang 18.1.8 | Bazel 7.4.1 | 9.3 | 12.5 |
| tensorflow-2.19.0 | 3.9-3.12 | Clang 18.1.8 | Bazel 6.5.0 | 9.3 | 12.5 |
| tensorflow-2.18.0 | 3.9-3.12 | Clang 17.0.6 | Bazel 6.5.0 | 9.3 | 12.5 |
| tensorflow-2.17.0 | 3.9-3.12 | Clang 17.0.6 | Bazel 6.5.0 | 8.9 | 12.3 |
| tensorflow-2.16.1 | 3.9-3.12 | Clang 17.0.6 | Bazel 6.5.0 | 8.9 | 12.3 |
| tensorflow-2.15.0 | 3.9-3.11 | Clang 16.0.0 | Bazel 6.1.0 | 8.9 | 12.2 |
| tensorflow-2.14.0 | 3.9-3.11 | Clang 16.0.0 | Bazel 6.1.0 | 8.7 | 11.8 |
| tensorflow-2.13.0 | 3.8-3.11 | Clang 16.0.0 | Bazel 5.3.0 | 8.6 | 11.8 |
| tensorflow-2.12.0 | 3.8-3.11 | GCC 9.3.1 | Bazel 5.3.0 | 8.6 | 11.8 |
| tensorflow-2.11.0 | 3.7-3.10 | GCC 9.3.1 | Bazel 5.3.0 | 8.1 | 11.2 |
| tensorflow-2.10.0 | 3.7-3.10 | GCC 9.3.1 | Bazel 5.1.1 | 8.1 | 11.2 |
| tensorflow-2.9.0 | 3.7-3.10 | GCC 9.3.1 | Bazel 5.0.0 | 8.1 | 11.2 |
| tensorflow-2.8.0 | 3.7-3.10 | GCC 7.3.1 | Bazel 4.2.1 | 8.1 | 11.2 |
| tensorflow-2.7.0 | 3.7-3.9 | GCC 7.3.1 | Bazel 3.7.2 | 8.1 | 11.2 |
| tensorflow-2.6.0 | 3.6-3.9 | GCC 7.3.1 | Bazel 3.7.2 | 8.1 | 11.2 |
| tensorflow-2.5.0 | 3.6-3.9 | GCC 7.3.1 | Bazel 3.7.2 | 8.1 | 11.2 |
| tensorflow-2.4.0 | 3.6-3.8 | GCC 7.3.1 | Bazel 3.1.0 | 8.0 | 11.0 |
| tensorflow-2.3.0 | 3.5-3.8 | GCC 7.3.1 | Bazel 3.1.0 | 7.6 | 10.1 |
| tensorflow-2.2.0 | 3.5-3.8 | GCC 7.3.1 | Bazel 2.0.0 | 7.6 | 10.1 |
| tensorflow-2.1.0 | 2.7, 3.5-3.7 | GCC 7.3.1 | Bazel 0.27.1 | 7.6 | 10.1 |
| tensorflow-2.0.0 | 2.7, 3.3-3.7 | GCC 7.3.1 | Bazel 0.26.1 | 7.4 | 10.0 |
| tensorflow_gpu-1.15.0 | 2.7, 3.3-3.7 | GCC 7.3.1 | Bazel 0.26.1 | 7.4 | 10.0 |
| tensorflow_gpu-1.14.0 | 2.7, 3.3-3.7 | GCC 4.8 | Bazel 0.24.1 | 7.4 | 10.0 |
| tensorflow_gpu-1.13.1 | 2.7, 3.3-3.7 | GCC 4.8 | Bazel 0.19.2 | 7.4 | 10.0 |
| tensorflow_gpu-1.12.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
| tensorflow_gpu-1.11.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
| tensorflow_gpu-1.10.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.15.0 | 7 | 9 |
| tensorflow_gpu-1.9.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.11.0 | 7 | 9 |
| tensorflow_gpu-1.8.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.10.0 | 7 | 9 |
| tensorflow_gpu-1.7.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.9.0 | 7 | 9 |
| tensorflow_gpu-1.6.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.9.0 | 7 | 9 |
| tensorflow_gpu-1.5.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.8.0 | 7 | 9 |
| tensorflow_gpu-1.4.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.5.4 | 6 | 8 |
| tensorflow_gpu-1.3.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.5 | 6 | 8 |
| tensorflow_gpu-1.2.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.5 | 5.1 | 8 |
| tensorflow_gpu-1.1.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.2 | 5.1 | 8 |
| tensorflow_gpu-1.0.0 | 2.7, 3.3-3.6 | GCC 4.8 | Bazel 0.4.2 | 5.1 | 8 |

### macOS

#### CPU

| Version | Python version | Compiler | Build tools |
|---|---|---|---|
| tensorflow-2.16.1 | 3.9-3.12 | Clang from Xcode 13.6 | Bazel 6.5.0 |
| tensorflow-2.15.0 | 3.9-3.11 | Clang from xcode 10.15 | Bazel 6.1.0 |
| tensorflow-2.14.0 | 3.9-3.11 | Clang from xcode 10.15 | Bazel 6.1.0 |
| tensorflow-2.13.0 | 3.8-3.11 | Clang from xcode 10.15 | Bazel 5.3.0 |
| tensorflow-2.12.0 | 3.8-3.11 | Clang from xcode 10.15 | Bazel 5.3.0 |
| tensorflow-2.11.0 | 3.7-3.10 | Clang from xcode 10.14 | Bazel 5.3.0 |
| tensorflow-2.10.0 | 3.7-3.10 | Clang from xcode 10.14 | Bazel 5.1.1 |
| tensorflow-2.9.0 | 3.7-3.10 | Clang from xcode 10.14 | Bazel 5.0.0 |
| tensorflow-2.8.0 | 3.7-3.10 | Clang from xcode 10.14 | Bazel 4.2.1 |
| tensorflow-2.7.0 | 3.7-3.9 | Clang from xcode 10.11 | Bazel 3.7.2 |
| tensorflow-2.6.0 | 3.6-3.9 | Clang from xcode 10.11 | Bazel 3.7.2 |
| tensorflow-2.5.0 | 3.6-3.9 | Clang from xcode 10.11 | Bazel 3.7.2 |
| tensorflow-2.4.0 | 3.6-3.8 | Clang from xcode 10.3 | Bazel 3.1.0 |
| tensorflow-2.3.0 | 3.5-3.8 | Clang from xcode 10.1 | Bazel 3.1.0 |
| tensorflow-2.2.0 | 3.5-3.8 | Clang from xcode 10.1 | Bazel 2.0.0 |
| tensorflow-2.1.0 | 2.7, 3.5-3.7 | Clang from xcode 10.1 | Bazel 0.27.1 |
| tensorflow-2.0.0 | 2.7, 3.5-3.7 | Clang from xcode 10.1 | Bazel 0.27.1 |
| tensorflow-2.0.0 | 2.7, 3.3-3.7 | Clang from xcode 10.1 | Bazel 0.26.1 |
| tensorflow-1.15.0 | 2.7, 3.3-3.7 | Clang from xcode 10.1 | Bazel 0.26.1 |
| tensorflow-1.14.0 | 2.7, 3.3-3.7 | Clang from xcode | Bazel 0.24.1 |
| tensorflow-1.13.1 | 2.7, 3.3-3.7 | Clang from xcode | Bazel 0.19.2 |
| tensorflow-1.12.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.15.0 |
| tensorflow-1.11.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.15.0 |
| tensorflow-1.10.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.15.0 |
| tensorflow-1.9.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.11.0 |
| tensorflow-1.8.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.10.1 |
| tensorflow-1.7.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.10.1 |
| tensorflow-1.6.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.8.1 |
| tensorflow-1.5.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.8.1 |
| tensorflow-1.4.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.5.4 |
| tensorflow-1.3.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.4.5 |
| tensorflow-1.2.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.4.5 |
| tensorflow-1.1.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.4.2 |
| tensorflow-1.0.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.4.2 |

#### GPU

| Version | Python version | Compiler | Build tools | cuDNN | CUDA |
|---|---|---|---|---|---|
| tensorflow_gpu-1.1.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.4.2 | 5.1 | 8 |
| tensorflow_gpu-1.0.0 | 2.7, 3.3-3.6 | Clang from xcode | Bazel 0.4.2 | 5.1 | 8 |