2019-06-25 11:29:49 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								***** ***** ***** ***** ***** ***** ***** ***** **
  
						 
					
						
							
								
									
										
										
										
											2019-06-25 11:26:53 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Setup Linux Toolchain from Scratch
 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-25 11:29:49 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								***** ***** ***** ***** ***** ***** ***** ***** **
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-01-27 19:01:34 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								:link_to_translation:`zh_CN:[中文]` 
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-25 11:29:49 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								The following instructions are alternative to downloading binary toolchain from Espressif website. To quickly setup the binary toolchain, instead of compiling it yourself, backup and proceed to section :doc: `linux-setup` .
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-01-10 12:58:54 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								..  note ::  The reason you might need to build your own toolchain is to solve the Y2K38 problem (time_t expand to 64 bits instead of 32 bits).
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								Install Prerequisites
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								=====================
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								To compile with ESP-IDF you need to get the following packages:
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-25 11:29:49 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								-  CentOS 7::
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-06 16:41:44 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sudo yum install git wget ncurses-devel flex bison gperf python pyserial python-pyelftools cmake ninja-build ccache dfu-util
 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-25 11:29:49 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								-  Ubuntu and Debian::
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-06 16:41:44 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sudo apt-get install git wget libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-click python-cryptography python-future python-pyparsing python-pyelftools cmake ninja-build ccache libffi-dev libssl-dev dfu-util
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  Arch::
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-06 16:41:44 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sudo pacman -S --needed gcc git make ncurses flex bison gperf python-pyserial python-click python-cryptography python-future python-pyparsing python-pyelftools cmake ninja ccache dfu-util
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-08-15 09:52:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								..  note :: 
  
						 
					
						
							
								
									
										
										
										
											2019-06-25 11:29:49 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    CMake version 3.5 or newer is required for use with ESP-IDF. Older Linux distributions may require updating, enabling of a "backports" repository, or installing of a "cmake3" package rather than "cmake".
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Compile the Toolchain from Source
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								=================================
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  Install dependencies:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  CentOS 7::
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-25 11:29:49 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        sudo yum install gawk gperf grep gettext ncurses-devel python python-devel automake bison flex texinfo help2man libtool make
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  Ubuntu pre-16.04::
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-25 11:29:49 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        sudo apt-get install gawk gperf grep gettext libncurses-dev python python-dev automake bison flex texinfo help2man libtool make
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-01 10:50:16 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  -  Ubuntu 16.04 or newer::
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-25 11:29:49 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        sudo apt-get install gawk gperf grep gettext python python-dev automake bison flex texinfo help2man libtool libtool-bin make
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-05 10:48:35 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  -  Debian 9::
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-25 11:29:49 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        sudo apt-get install gawk gperf grep gettext libncurses-dev python python-dev automake bison flex texinfo help2man libtool libtool-bin make
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  -  Arch::
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        TODO
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-10-22 13:45:09 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Create the working directory and go into it::
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  mkdir -p ~/esp
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cd ~/esp
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-08-29 21:30:03 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Download `` crosstool-NG ``  and build it:
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-11-13 11:46:16 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								..  include-build-file ::  inc/scratch-build-code.inc
  
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-01-10 12:58:54 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								..  note ::  To create a toolchain with support for 64-bit time_t, you need to remove the `` --enable-newlib-long-time_t ``  option from the `` crosstool-NG/samples/xtensa-esp32-elf/crosstool.config ``  file in 33 and 43 lines.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								Build the toolchain::
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-12-09 11:01:09 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ./ct-ng xtensa-{IDF_TARGET_TOOLCHAIN_NAME}-elf
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    ./ct-ng build
 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-09 11:01:09 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    chmod -R u+w builds/xtensa-{IDF_TARGET_TOOLCHAIN_NAME}-elf
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-12-09 11:01:09 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Toolchain will be built in `` ~/esp/crosstool-NG/builds/xtensa-{IDF_TARGET_TOOLCHAIN_NAME}-elf `` .
 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-26 17:22:50 +11:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Add Toolchain to PATH
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								=====================
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The custom toolchain needs to be copied to a binary directory and added to the `` PATH `` .
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-12-09 11:01:09 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Choose a directory, for example `` ~/esp/xtensa-{IDF_TARGET_TOOLCHAIN_NAME}-elf/ `` , and copy the build output to this directory.
 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-26 17:22:50 +11:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-12-09 11:01:09 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								To use it, you will need to update your `` PATH ``  environment variable in `` ~/.profile ``  file. To make `` xtensa-{IDF_TARGET_TOOLCHAIN_NAME}-elf ``  available for all terminal sessions, add the following line to your `` ~/.profile ``  file::
 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-26 17:22:50 +11:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-12-09 11:01:09 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    export PATH="$HOME/esp/xtensa-{IDF_TARGET_TOOLCHAIN_NAME}-elf/bin:$PATH"
 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-26 17:22:50 +11:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								..  note :: 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    If you have `` /bin/bash ``  set as login shell, and both `` .bash_profile ``  and `` .profile ``  exist, then update `` .bash_profile ``  instead. In CentOS, `` alias ``  should set in `` .bashrc `` .
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Log off and log in back to make the `` .profile ``  changes effective. Run the following command to verify if `` PATH ``  is correctly set::
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    printenv PATH
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								You are looking for similar result containing toolchain's path at the beginning of displayed string::
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    $ printenv PATH
 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-09 11:01:09 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    /home/user-name/esp/xtensa-{IDF_TARGET_TOOLCHAIN_NAME}-elf/bin:/home/user-name/bin:/home/user-name/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
 
							 
						 
					
						
							
								
									
										
										
										
											2019-11-26 17:22:50 +11:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Instead of `` /home/user-name ``  there should be a home path specific to your installation.
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-27 00:01:52 +02:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Next Steps
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								==========
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-25 11:26:53 +10:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								To carry on with development environment setup, proceed to :ref: `get-started-get-esp-idf` .