Downloadable Tools
ESP-IDF build process relies on a number of tools: cross-compiler toolchains, CMake build system, and others.
Installing the tools using an OS-specific package manager (like apt, yum, brew, etc.) is the preferred method when the required version of the tool is available. This recommendation is reflected in the Getting Started guide. For example, on Linux and macOS it is recommended to install CMake using an OS package manager.
However, some of the tools are IDF-specific and are not available in OS package repositories. Furthermore, different versions of ESP-IDF require different versions of the tools to operate correctly. To solve these two problems, ESP-IDF provides a set of scripts for downloading and installing the correct versions of tools, and exposing them in the environment.
The rest of the document refers to these downloadable tools simply as “tools”. Other kinds of tools used in ESP-IDF are:
Python scripts bundled with ESP-IDF (such as
idf.py
)Python packages installed from PyPI.
The following sections explain the installation method, and provide the list of tools installed on each platform.
Note
This document is provided for advanced users who need to customize their installation, users who wish to understand the installation process, and ESP-IDF developers.
If you are looking for instructions on how to install the tools, see the Getting Started Guide.
Tools metadata file
The list of tools and tool versions required for each platform is located in tools/tools.json. The schema of this file is defined by tools/tools_schema.json.
This file is used by tools/idf_tools.py script when installing the tools or setting up the environment variables.
Tools installation directory
IDF_TOOLS_PATH
environment variable specifies the location where the tools are to be downloaded and installed. If not set, IDF_TOOLS_PATH
defaults to HOME/.espressif
on Linux and macOS, and %USER_PROFILE%\.espressif
on Windows.
Inside IDF_TOOLS_PATH
, the scripts performing tools installation create the following directories:
dist
— where the archives of the tools are downloaded.tools
— where the tools are extracted. The tools are extracted into subdirectories:tools/TOOL_NAME/VERSION/
. This arrangement allows different versions of tools to be installed side by side.
GitHub Assets Mirror
Most of the tools downloaded by the tools installer are GitHub Release Assets, which are files attached to a software release on GitHub.
If GitHub downloads are inaccessible or slow to access, it’s possible to configure a GitHub assets mirror.
To use Espressif’s download server, set the environment variable IDF_GITHUB_ASSETS
to dl.espressif.com/github_assets
. When the install process is downloading a tool from github.com
, the URL will be rewritten to use this server instead.
Any mirror server can be used provided the URL matches the github.com
download URL format: the install process will replace https://github.com
with https://${IDF_GITHUB_ASSETS}
for any GitHub asset URL that it downloads.
Note
The Espressif download server doesn’t currently mirror everything from GitHub, it only mirrors files attached as Assets to some releases as well as source archives for some releases.
idf_tools.py
script
tools/idf_tools.py script bundled with ESP-IDF performs several functions:
install
: Download the tool into${IDF_TOOLS_PATH}/dist
directory, extract it into${IDF_TOOLS_PATH}/tools/TOOL_NAME/VERSION
.install
command accepts the list of tools to install, inTOOL_NAME
orTOOL_NAME@VERSION
format. Ifall
is given, all the tools (required and optional ones) are installed. If no argument orrequired
is given, only the required tools are installed.download
: Similar toinstall
but doesn’t extract the tools. An optional--platform
argument may be used to download the tools for the specific platform.export
: Lists the environment variables which need to be set to use the installed tools. For most of the tools, settingPATH
environment variable is sufficient, but some tools require extra environment variables.The environment variables can be listed in either of
shell
orkey-value
formats, set by--format
parameter:shell
produces output suitable for evaluation in the shell. For example,export PATH="/home/user/.espressif/tools/tool/v1.0.0/bin:$PATH"
on Linux and macOS, and
set "PATH=C:\Users\user\.espressif\tools\v1.0.0\bin;%PATH%"
on Windows.
Note
Exporting environment variables in Powershell format is not supported at the moment.
key-value
format may be used instead.The output of this command may be used to update the environment variables, if the shell supports this. For example:
eval $($IDF_PATH/tools/idf_tools.py export)
key-value
produces output in VARIABLE=VALUE format, suitable for parsing by other scripts:PATH=/home/user/.espressif/tools/tool/v1.0.0:$PATH
Note that the script consuming this output has to perform expansion of
$VAR
or%VAR%
patterns found in the output.
list
: Lists the known versions of the tools, and indicates which ones are installed.check
: For each tool, checks whether the tool is available in the system path and inIDF_TOOLS_PATH
.
Install scripts
Shell-specific user-facing scripts are provided in the root of ESP-IDF repository to facilitate tools installation. These are:
install.bat
for Windows Command Promptinstall.ps1
for Powershellinstall.sh
for Bash
Aside from downloading and installing the tools into IDF_TOOLS_PATH
, these scripts prepare a Python virtual environment, and install the required packages into that environment.
Export scripts
Since the installed tools are not permanently added into the user or system PATH
environment variable, an extra step is required to use them in the command line. The following scripts modify the environment variables in the current shell to make the correct versions of the tools available:
export.bat
for Windows Command Promptexport.ps1
for Powershellexport.sh
for Bash
Note
To modify the shell environment in Bash, export.sh
must be “sourced”: . ./export.sh
(note the leading dot and space).
export.sh
may be used with shells other than Bash (such as zsh). However in this case the IDF_PATH
environment variable must be set before running the script. When used in Bash, the script will guess the IDF_PATH
value from its own location.
In addition to calling idf_tools.py
, these scripts list the directories which have been added to the PATH
.
Other installation methods
Depending on the environment, more user-friendly wrappers for idf_tools.py
are provided:
IDF Tools installer for Windows can download and install the tools. Internally the installer uses
idf_tools.py
.Eclipse plugin for ESP-IDF includes a menu item to set up the tools. Internally the plugin calls
idf_tools.py
.Visual Studio Code extension for ESP-IDF includes an onboarding flow. This flow helps setting up the tools. Although the extension does not rely on
idf_tools.py
, the same installation method is used.
Custom installation
Although the methods above are recommended for ESP-IDF users, they are not a must for building ESP-IDF applications. ESP-IDF build system expects that all the necessary tools are installed somewhere, and made available in the PATH
.
List of IDF Tools
xtensa-esp-elf-gdb
GDB for Xtensa
License: GPL-3.0-or-later
More info: https://github.com/espressif/binutils-gdb
Platform |
Required |
Download |
---|---|---|
linux-amd64 |
required |
SHA256: b5f7cc3e4b5a58db655754083ed9652e4953e71c3b4922fb624e7a034ec24a64 |
linux-arm64 |
required |
SHA256: 816acfae38b6b443f4f1590395f68f079243539259d19c7772ae6416c6519444 |
linux-armel |
required |
SHA256: 4dd1bace0633196fddfdcef3cebcc4bbfce22f5a0d2d1e3d618f3d8a6cbfcacc |
linux-armhf |
required |
SHA256: 53a142b9a508a8babe6b7edf3090bb49e3714380ba819b54052425fcf1ac6f9c |
linux-i686 |
required |
SHA256: 27744d09d171be2f55ec15fa7f2d7f8ff94d33f7e130d24ebe082cb6c438618b |
macos |
required |
SHA256: 1432faa12d7301133f6ee654d60751b57adcc6cf323ee1ecc393f06f0225eff4 |
macos-arm64 |
required |
SHA256: d0b542ef070ea72857f9cf554f176a0a9d868cd59e05ac293ad39402bcc5277d |
win32 |
required |
SHA256: 1678b06aa80b1d689d05548056635efde5b73b98f2c3de5d555bcfc6f374c5d0 |
win64 |
required |
SHA256: 7060df4b6aa133e282147c3651d50222d677d6a0fff92979c500353b099a3f41 |
riscv32-esp-elf-gdb
GDB for RISC-V
License: GPL-3.0-or-later
More info: https://github.com/espressif/binutils-gdb
Platform |
Required |
Download |
---|---|---|
linux-amd64 |
required |
SHA256: 6bf5b5d2d407e074af2a74fc826764934ac1625a1751c52fbc0d4d7772061f8f |
linux-arm64 |
required |
SHA256: e54ef67cdb5724fc2da8f0487f19b2c83c08b560fff317f5ffd98fbb230b397a |
linux-armel |
required |
SHA256: 86772c6aee8a05b2c75a6b04e9da630e35e8415b64da8ccde92a5fb2d3c7fcf4 |
linux-armhf |
required |
SHA256: 0893cbc6e987c9e2016775e364733f9c34eb1c6ba283d296d8ff503a5a054c59 |
linux-i686 |
required |
SHA256: 3463be3e24182b7f1bd0fb232020534445b2d0ea0e7093c1b4f4da102b3baf52 |
macos |
required |
SHA256: a9db1811ebb9271134eba2f7c303fc2587bd4b2a1ae33cd05ff2605cd2fb30d2 |
macos-arm64 |
required |
SHA256: c94fb6d726b8d97e65e23237f5126a41343bca8f22a0414df5f0e6777e36f51c |
win32 |
required |
SHA256: 20cdee8a1c01428363ef02f4cc8035c65508d6b43560c525733eae94b7c7bb50 |
win64 |
required |
SHA256: add72366485b784b66837ce263548980f1df144d0954c42d75a81f6acbd43cac |
xtensa-esp32-elf
Toolchain for Xtensa (ESP32) based on GCC
License: GPL-3.0-with-GCC-exception
More info: https://github.com/espressif/crosstool-NG
Platform |
Required |
Download |
---|---|---|
linux-amd64 |
required |
SHA256: 8ef14e0409c2011b41e504a30f70d3e35287313a795d1f2462ad2cd0e2052d37 |
linux-arm64 |
required |
SHA256: e7d217ac2ef52c746a41f8647840b2717edcd8afc15f081bc1c4505e10a189b7 |
linux-armel |
required |
SHA256: ea6631f8a5105ae90d7fc462c10ed4f9049924ea8c2f9391d90b339d5f881dac |
linux-armhf |
required |
SHA256: 883b010e4c42c5ab5c27439ba5709d05d53b663c38a810f57dfd30643b557bdb |
linux-i686 |
required |
SHA256: ecb90af9cede0982672234da0b1bd7b7f76eadde60aa5c82eefdf37d64ffe49f |
macos |
required |
SHA256: 19af109fda024a3a4c989f7ccaa104f9b1b74cfd6c9363e730bb8cb9b50d5dc4 |
macos-arm64 |
required |
SHA256: b14189772d70a96813895fff7731d0f2fec0c825cfc02e002d6d91a0cc4b6b1d |
win32 |
required |
SHA256: 9851c2cfa355e1fad8abfb643a1c945d27385b1851f3ae468915ea78fcbec940 |
win64 |
required |
SHA256: a328b3c55631846241bbe7999a309b20b797c8dc50b6e8dccf463e66a2da5fb4 |
xtensa-esp32s2-elf
Toolchain for Xtensa (ESP32-S2) based on GCC
License: GPL-3.0-with-GCC-exception
More info: https://github.com/espressif/crosstool-NG
Platform |
Required |
Download |
---|---|---|
linux-amd64 |
required |
SHA256: 19c77bd91fefab7c8c40a6334f9b985e2d9a1c7fac6d424b692110930dd3682f |
linux-arm64 |
required |
SHA256: bdcd24676ef2a65b670ca9e0a01768ece47f4dfcfb545a3307f76a054c33b522 |
linux-armel |
required |
SHA256: b26723b6ce1c35b90f204eb39e5ab06a6f80fb7895f000e16b6962e4c176ae32 |
linux-armhf |
required |
SHA256: afce6d3541ec616ff11e83181cc6b37948146d87129e93bc8a1b459107f10170 |
linux-i686 |
required |
SHA256: da3b5c45e4997d14269df1814c92dd7004902bb810608341bc3819c3e506fa0b |
macos |
required |
SHA256: 8eb63745b44083edef7cc6fdf3b06999f576b75134bc5e8b0ef881ca439b72d7 |
macos-arm64 |
required |
SHA256: 4cd38d6ec31076c0aa083f62ab84ab5c33aa07fafd0af61366186e5f553aa008 |
win32 |
required |
SHA256: c758062295804b082fbd77fcd59a356f62d4e76372aaa29589cc871603309cba |
win64 |
required |
SHA256: 1c1e168ff8bc460a9719f3b216d3c1125d29040389786d738244838499362c74 |
xtensa-esp32s3-elf
Toolchain for Xtensa (ESP32-S3) based on GCC
License: GPL-3.0-with-GCC-exception
More info: https://github.com/espressif/crosstool-NG
Platform |
Required |
Download |
---|---|---|
linux-amd64 |
required |
SHA256: 8aa17a6adf01efa5b1628c8ac578063a44d26ae9581d39486b92223a41ef262f |
linux-arm64 |
required |
SHA256: b218c11122e5565b6442376ebd21a652abdfcbf90981afa3e177ce978710225d |
linux-armel |
required |
SHA256: 967477434ad5483718915936a77ce915a10c5972a6b3fd02688a5c4e14182bfb |
linux-armhf |
required |
SHA256: 1ec952c3f72398565beac4fb14c4cbccefb2e299c2c095bc54e260d2d0f3487a |
linux-i686 |
required |
SHA256: 07671d01a63ebd389912787efb2b263677c7b351c07fe430ded733cdae95e81d |
macos |
required |
SHA256: 99b6d44cea5aebbedc8b6965e7bf551aa4a40ed83ddbe1c0e9b7cb255564ded5 |
macos-arm64 |
required |
SHA256: c64b05be25d26916c65dcfe11de9e60b96d58980b2df706d3074cb70b1ef6cb9 |
win32 |
required |
SHA256: 658d3036ffdf11ddad6f0a784c8829f6ffd4dbd7c252d7f61722256d0ad43975 |
win64 |
required |
SHA256: 9000be38d44bf79c39b93a2aeb99b42e956c593ccbc02fe31cb9c71ae1bbcb22 |
xtensa-clang
LLVM for Xtensa (ESP32, ESP32-S2) based on clang
License: Apache-2.0
More info: https://github.com/espressif/llvm-project
Platform |
Required |
Download |
---|---|---|
linux-amd64 |
optional |
SHA256: d62d9234c702a86ed510777125ee97458204e28877806a73f9de5e41d7b65716 |
macos |
optional |
SHA256: 6e7413e5fa515e403859ecf5301bdcdc3f8bf12c5de9aecaa11e9f17f32b05db |
macos-arm64 |
optional |
SHA256: 6e7413e5fa515e403859ecf5301bdcdc3f8bf12c5de9aecaa11e9f17f32b05db |
win64 |
optional |
SHA256: e056366959c722367e4144076c5383bd417ea199db5658bb7bb6c95b9aca014b |
riscv32-esp-elf
Toolchain for 32-bit RISC-V based on GCC
License: GPL-3.0-with-GCC-exception
More info: https://github.com/espressif/crosstool-NG
Platform |
Required |
Download |
---|---|---|
linux-amd64 |
required |
SHA256: f7d73e5f9e2df3ea6ca8e2c95d6ca6d23d6b38fd101ea5d3012f3cb3cd59f39f |
linux-arm64 |
required |
SHA256: cf520ae3a72f65b9758ea187524b105b8b7546566d738c32e60a0df9846ef1af |
linux-armel |
required |
SHA256: 2dc3536214caa1697f6834bb4701d05894ca55b53589fc5b54064b050ef93799 |
linux-armhf |
required |
SHA256: 8201acbf47c91bc34b5aa41f6fc7c306c34acb996528c2be9e73c517c6c6adc2 |
linux-i686 |
required |
SHA256: 165d6d53e76d79f5ade7e2b7ade54b2b495ecfda0d1184d84d6343659d0e3bdb |
macos |
required |
SHA256: d6d4cef216cbf28d6fbb88f3e127d4f42a376d9497c260bf8c1ad9cef440f839 |
macos-arm64 |
required |
SHA256: 6e03f2ab1f145be13f8890c6de77b53f52c7bffe3d9d5824549db20298f5ba91 |
win32 |
required |
SHA256: 1e0cfcfbc8f82c441261cadd21742f66d716ec18c18bf10ed7c7d5b0bee6752f |
win64 |
required |
SHA256: b08f568e8fe5069dd521b87da21b8e56117e5c2c3b492f73a51966a46d3379a4 |
esp32ulp-elf
Toolchain for ESP32 ULP coprocessor
License: GPL-3.0-or-later
More info: https://github.com/espressif/binutils-gdb
Platform |
Required |
Download |
---|---|---|
linux-amd64 |
required |
SHA256: b1f7801c3a16162e72393ebb772c0cbfe4d22d907be7c2c2dac168736e9195fd |
linux-arm64 |
required |
SHA256: d6671b31bab31b9b13aea25bb7d60f15484cb8bf961ddbf67a62867e5563eae5 |
linux-armel |
required |
SHA256: e107e7a9cd50d630b034f435a16a52db5a57388dc639a99c4c393c5e429711e9 |
linux-armhf |
required |
SHA256: 6c6dd25477b2e758d4669da3774bf664d1f012442c880f17dfdf0339e9c3dae9 |
linux-i686 |
required |
SHA256: beb9b6737c975369b6959007739c88f44eb5afbb220f40737071540b2c1a9064 |
macos |
required |
SHA256: 5a952087b621ced16af1e375feac1371a61cb51ab7e7b44cbefb5afda2d573de |
macos-arm64 |
required |
SHA256: 73bda8476ef92d4f4abee96519abbba40e5ee32f368427469447b83cc7bb9b42 |
win32 |
required |
SHA256: 77344715ea7d7a7a9fd0b27653f880efaf3bcc1ac843f61492d8a0365d91f731 |
win64 |
required |
SHA256: 525e5b4c8299869a3fdddb51baad76612c5c104bd96952ae6460ad7e5b5a4e21 |
cmake
CMake build system
On Linux and macOS, it is recommended to install CMake using the OS-specific package manager (like apt, yum, brew, etc.). However, for convenience it is possible to install CMake using idf_tools.py along with the other tools.
License: BSD-3-Clause
More info: https://github.com/Kitware/CMake
Platform |
Required |
Download |
---|---|---|
linux-amd64 |
optional |
https://github.com/Kitware/CMake/releases/download/v3.23.1/cmake-3.23.1-linux-x86_64.tar.gz SHA256: f3c654b2e226b9d43369e0bd8487c51618d4dbe5a1af929dd32af7e6ca432d60 |
linux-arm64 |
optional |
https://github.com/Kitware/CMake/releases/download/v3.23.1/cmake-3.23.1-linux-aarch64.tar.gz SHA256: 74062efddeb935bce3d33694a4db534cef9a650f77a9a153a9f217d9dc385c75 |
linux-armel |
optional |
https://dl.espressif.com/dl/cmake/cmake-3.23.1-Linux-armv7l.tar.gz SHA256: aa6079237e16cc3b389479b2f7279d07e57f6aedad520e2b3014ef97fb906466 |
linux-armhf |
optional |
https://dl.espressif.com/dl/cmake/cmake-3.23.1-Linux-armv7l.tar.gz SHA256: aa6079237e16cc3b389479b2f7279d07e57f6aedad520e2b3014ef97fb906466 |
macos |
optional |
https://github.com/Kitware/CMake/releases/download/v3.23.1/cmake-3.23.1-macos-universal.tar.gz SHA256: f794ed92ccb4e9b6619a77328f313497d7decf8fb7e047ba35a348b838e0e1e2 |
macos-arm64 |
optional |
https://github.com/Kitware/CMake/releases/download/v3.23.1/cmake-3.23.1-macos-universal.tar.gz SHA256: f794ed92ccb4e9b6619a77328f313497d7decf8fb7e047ba35a348b838e0e1e2 |
win32 |
required |
https://github.com/Kitware/CMake/releases/download/v3.23.1/cmake-3.23.1-windows-x86_64.zip SHA256: 9b509cc4eb7191dc128cfa3f2170036f9cbc7d9d5f93ff7fafc5b2d77b3b40dc |
win64 |
required |
https://github.com/Kitware/CMake/releases/download/v3.23.1/cmake-3.23.1-windows-x86_64.zip SHA256: 9b509cc4eb7191dc128cfa3f2170036f9cbc7d9d5f93ff7fafc5b2d77b3b40dc |
openocd-esp32
OpenOCD for ESP32
License: GPL-2.0-only
More info: https://github.com/espressif/openocd-esp32
Platform |
Required |
Download |
---|---|---|
linux-amd64 |
required |
SHA256: cf26c5cef4f6b04aa23cd2778675604e5a74a4ce4d8d17b854d05fbcb782d52c |
linux-arm64 |
required |
SHA256: 9b97a37aa2cab94424a778c25c0b4aa0f90d6ef9cda764a1d9289d061305f4b7 |
linux-armel |
required |
SHA256: b7e82776ec374983807d3389df09c632ad9bc8341f2075690b6b500319dfeaf4 |
linux-armhf |
required |
SHA256: 16f8f65f12e5ba034d328cda2567d6851a2aceb3c957d577f89401c2e1d3f93a |
macos |
required |
SHA256: b16c3082c94df1079367c44d99f7a8605534cd48aabc18898e46e94a2c8c57e7 |
macos-arm64 |
required |
SHA256: 534ec925ae6e35e869e4e4e6e4d2c4a1eb081f97ebcc2dd5efdc52d12f4c2f86 |
win32 |
required |
SHA256: d379329eba052435173ab0d69c9b15bc164a6ce489e2a67cd11169d2dabff633 |
win64 |
required |
SHA256: d379329eba052435173ab0d69c9b15bc164a6ce489e2a67cd11169d2dabff633 |
ninja
Ninja build system
On Linux and macOS, it is recommended to install ninja using the OS-specific package manager (like apt, yum, brew, etc.). However, for convenience it is possible to install ninja using idf_tools.py along with the other tools.
License: Apache-2.0
More info: https://github.com/ninja-build/ninja
Platform |
Required |
Download |
---|---|---|
linux-amd64 |
optional |
https://dl.espressif.com/dl/ninja-1.10.2-linux64.tar.gz SHA256: 32bb769de4d57aa7ee0e292cfcb7553e7cc8ea0961f7aa2b3aee60aa407c4033 |
macos |
optional |
https://dl.espressif.com/dl/ninja-1.10.2-osx.tar.gz SHA256: 847bb1ca4bc16d8dba6aeed3ecb5055498b86bc68c364c37583eb5738bb440f1 |
macos-arm64 |
optional |
https://dl.espressif.com/dl/ninja-1.10.2-osx.tar.gz SHA256: 847bb1ca4bc16d8dba6aeed3ecb5055498b86bc68c364c37583eb5738bb440f1 |
win64 |
required |
https://dl.espressif.com/dl/ninja-1.10.2-win64.zip SHA256: bbde850d247d2737c5764c927d1071cbb1f1957dcabda4a130fa8547c12c695f |
idf-exe
IDF wrapper tool for Windows
License: Apache-2.0
More info: https://github.com/espressif/idf_py_exe_tool
Platform |
Required |
Download |
---|---|---|
win32 |
required |
https://github.com/espressif/idf_py_exe_tool/releases/download/v1.0.3/idf-exe-v1.0.3.zip SHA256: 7c81ef534c562354a5402ab6b90a6eb1cc8473a9f4a7b7a7f93ebbd23b4a2755 |
win64 |
required |
https://github.com/espressif/idf_py_exe_tool/releases/download/v1.0.3/idf-exe-v1.0.3.zip SHA256: 7c81ef534c562354a5402ab6b90a6eb1cc8473a9f4a7b7a7f93ebbd23b4a2755 |
ccache
Ccache (compiler cache)
License: GPL-3.0-or-later
More info: https://github.com/ccache/ccache
Platform |
Required |
Download |
---|---|---|
win64 |
required |
https://github.com/ccache/ccache/releases/download/v4.3/ccache-4.3-windows-64.zip SHA256: a9cacae73c3906d8193456328bee74f7748cb1559a32eaced9ee78eadd416105 |
dfu-util
dfu-util (Device Firmware Upgrade Utilities)
License: GPL-2.0-only
More info: http://dfu-util.sourceforge.net/
Platform |
Required |
Download |
---|---|---|
win64 |
required |
https://dl.espressif.com/dl/dfu-util-0.9-win64.zip SHA256: 5816d7ec68ef3ac07b5ac9fb9837c57d2efe45b6a80a2f2bbe6b40b1c15c470e |