.. _building: Building ======== The Envoy build system uses `Bazel `_. In order to ease initial building and for a quick start, we provide an Ubuntu 16 and a Windows based docker containers that have everything needed inside of it to build and *statically link* Envoy, see :repo:`ci/README.md`. In order to build without using the Docker container, follow the instructions at :repo:`bazel/README.md`. .. _install_requirements: Linux/Mac Target Requirements ----------------------------- Envoy was initially developed and deployed on Ubuntu 14.04 LTS. It should work on any reasonably recent Linux including Ubuntu 18.04 LTS. Building Envoy has the following requirements: * GCC 7+ or Clang/LLVM 7+ (for C++14 support). Clang/LLVM 9+ preferred where Clang is used (see below). * About 2GB of RAM per core (so 32GB of RAM for 8 cores with hyperthreading). See :ref:`this FAQ entry ` for more information on build performance. * These :repo:`Bazel native ` dependencies. Please note that for Clang/LLVM 8 and lower, Envoy may need to be built with ``--define tcmalloc=gperftools`` as the new tcmalloc code is not guaranteed to compile with lower versions of Clang. Windows Target Requirements --------------------------- Envoy now suports Windows as a target platform. The requirements below only apply if you want to build the Windows native executable. If you want to build the Linux version of Envoy on Windows either with WSL or Linux containers please see the Linux requirements above. Building Envoy for Windows has the following requirements: * A Windows (virtual) machine running on version 1903 (10.0.18362.1) and above. * The Windows 10 SDK, version 1803 (10.0.17134.12). Some features may require a newer SDK. * `Build Tools for Visual Studio 2019 `_ * The `MSYS2 toolchain `_ * These :repo:`Bazel native ` dependencies. Detailed instructions --------------------- Please see :repo:`developer use of CI Docker images ` and :repo:`building Envoy with Bazel ` documentation for more information on performing manual builds. Modifying Envoy --------------- If you're interested in modifying Envoy and testing your changes, one approach is to use Docker. This guide will walk through the process of building your own Envoy binary, and putting the binary in an Ubuntu container. .. toctree:: :maxdepth: 2 building/local_docker_build