Provided by: avr-libc_2.2.1-1_all bug

NAME

       install_tools - Building and Installing the GNU Tool Chain

       This chapter shows how to build and install, from source code, a complete development environment for the
       AVR processors using the GNU toolset. There are two main sections, one for Linux, FreeBSD, and other
       Unix-like operating systems, and another section for Windows.

       • Required AVR ToolsOptional AVR ToolsBuilding and Installing under Linux, FreeBSD, and OthersPreparationsInstall LocationDirectory LayoutGNU BinutilsGCCAVR-LibCAVRDUDESimulAVRAVaRICEBuilding and Installing under WindowsRequired ToolsBuildingCanadian Cross BuildsUsing Git

Required AVR Tools

       GNU Binutils
           Project Home: https://sourceware.org/binutils
            Source Downloads: https://sourceware.org/pub/binutils/releases
            FTP: anonymous@ftp.gnu.org/gnu/binutils
            Git: git://sourceware.org/git/binutils-gdb.git
            GitHub Mirror: https://github.com/bminor/binutils-gdb
            Installation

       GCC
           Project Home https://gcc.gnu.org
            Mirrors Site: https://gcc.gnu.org/mirrors.html
            FTP: anonymous@ftp.gnu.org/gnu/gcc
            Git: git://gcc.gnu.org/git/gcc.git
            GitHub Mirror: https://github.com/gcc-mirror/gcc
            Installation: https://gcc.gnu.org/install
            Installation

       AVR-LibC
           Project Home: http://savannah.gnu.org/projects/avr-libc
            Source Downloads: https://download-mirror.savannah.gnu.org/releases/avr-libc
            Git: https://github.com/avrdudes/avr-libc.git
            GitHub: https://github.com/avrdudes/avr-libc
            Installation

Optional AVR Tools

       You  can  develop programs for AVR devices without the following tools. They may or may not be of use for
       you.

       AVRDUDE
           Project Home: http://savannah.nongnu.org/projects/avrdude
            Git: https://github.com/avrdudes/avrdude.git
            GitHub: https://github.com/avrdudes/avrdude
            Installation
            Usage Notes

       GDB
           The GNU Debugger GDB is hosted together with GNU Binutils. When you don't want or need GDB,  you  can
           configure Binutils with --disable-gdb.

       SimulAVR
           http://savannah.gnu.org/projects/simulavr
            Installation

       AVaRICE
           GitHub: https://github.com/avrdudes/avarice
            Installation

Building and Installing under Linux, FreeBSD, and Others

       The  default  behaviour for most of these tools is to install every thing under the /usr/local directory.
       In order to keep the AVR tools separate from the base system, it is usually better to install  everything
       into  /usr/local/avr.  If the /usr/local/avr directory does not exist, you should create it before trying
       to install anything. You will need root access to install there. If you don't have or want root access to
       the system, you can alternatively install in your home directory, for example, in $HOME/local/avr.  Where
       you install is a completely arbitrary decision, but should be consistent for all the tools.

       Warning
           If  you have CC set to anything other than avr-gcc in your environment, this will cause the configure
           script to fail. It is best to not have CC set at all.

       Note
           It is usually the best to use the latest released version of each of the tools.

   Preparations
   Install Location
       You specify the installation directory by using the --prefix=dir option with the configure script. It  is
       important  to  install  all  the  AVR  tools  in  the  same  directory or some of the tools will not work
       correctly. To ensure consistency and simplify the discussion, we will use $PREFIX to  refer  to  whatever
       directory  you wish to install in. You can set this as an environment variable if you wish as such (using
       a Bourne-like shell):

       $ PREFIX=$HOME/local/avr
       $ export PREFIX

       Note
           Be sure that you have your PATH  environment  variable  set  to  search  the  directory  you  install
           everything  in  before  you  start installing anything. For example, if you use --prefix=$PREFIX, you
           must have $PREFIX/bin in your exported PATH. As such:

       $ PATH=$PATH:$PREFIX/bin
       $ export PATH

   Directory Layout
       The instructions below build Binutils, GCC and AVR-LibC outside of the source tree, because:

       • When something goes wrong, you can just remove the build directory and start  all  over  again  with  a
         fresh build folder.

       • You may want to build the tools with different configure options, e.g. build the tools for a Linux host
         and then build a Canadian cross to run on a Windows host.

       • GCC  does  not  support  configuring anywhere in the source tree, so we'll have to use a separate build
         folder outside the source tree, anyway.

       The instructions below assume that you have set up a directory tree like

       +--source
       +--build

        in some place where you have write access, like in your home directory.

       After successful downloads and builds, the tree will be something like:

       +--source
       |   +--gcc-<version>
       |   +--binutils-<version>
       |   +--avr-libc-<version>
       +-- build
           +--gcc-<version>-avr
           +--binutils-<version>-avr
           +--avr-libc-<version>

   GNU Binutils for the AVR target
       The Binutils package provides all the low-level utilities needed  in  building  and  manipulating  object
       files.  Once  installed,  your  environment  will  have  an  AVR assembler (avr-as), linker (avr-ld), and
       librarian (avr-ar and avr-ranlib). In addition, you get tools which extract data from object files  (avr-
       objcopy),  dissassemble  object  file  information (avr-objdump), and strip information from object files
       (avr-strip). Before we can build the C compiler, these tools need to be in place.

       Download and unpack the source files:

       $ # in ./source
       $ tar xfj binutils-<version>.tar.bz2

       Replace <version> with the version of the package you downloaded.

       If you obtained a gzip compressed file (.tar.gz or .tgz), use gunzip  instead  of  bunzip2,  or  tar  xfz
       file.tar.gz.

       The  next  step is to configure and build the tools. This is done by supplying arguments to the configure
       script that enable the AVR-specific options. When you also want GDB, just drop --disable-gdb.

       $ # in ./build
       $ mkdir binutils-<version>-avr
       $ cd binutils-<version>-avr
       $ ../../source/binutils-<version>/configure --prefix=$PREFIX --target=avr \
           --disable-nls --disable-sim --disable-gdb --disable-werror

       When configure is run, it generates a lot of messages while it  determines  what  is  available  on  your
       operating  system.  When  it finishes, it will have created several Makefiles that are custom tailored to
       your platform and that are run with the make command.

       $ make

       Note
           BSD users should note that the project's Makefile uses GNU make syntax. This means FreeBSD users  may
           need to build the tools by using gmake.

       If  the  tools  compiled cleanly, you're ready to install them. If you specified a destination that isn't
       owned by your account, you'll need root access to install them. To install:

       $ make install

       You should now have the programs from Binutils installed into $PREFIX/bin. Don't forget to set your  PATH
       environment variable before going to build avr-gcc. To check that the correct assembler is found, run

       $ avr-as --version

        which should print the <version> of the used Binutils sources.

   GCC for the AVR target
       Warning
           You must install avr-binutils and make sure your path is set properly before installing avr-gcc.

       Before  we  can configure the compiler, we have to prepare the sources. GCC depends on some external host
       libraries, namely GMP, MPFR, MPC and ISL. You can build and  install  the  appropriate  versions  of  the
       required  prerequisites  by  hand  and provide their location by means of --with-gmp= etc. Though in most
       situations it is easier to let GCC download and build these libraries as part of the configure and  build
       process. All what's needed is an internet connection when running ./contrib/download_prerequisites:

       $ # in ./source
       $ tar xfj gcc-<version>.tar.bz2
       $ cd gcc-<version>
       $ ./contrib/download_prerequisites

       $ # in ./build
       $ mkdir gcc-<version>-avr
       $ cd gcc-<version>-avr
       $ ../../source/gcc-<version>/configure --prefix=$PREFIX --target=avr --enable-languages=c,c++ \
           --disable-nls --disable-libssp --disable-libcc1 \
           --with-gnu-as --with-gnu-ld --with-dwarf2
       $ make
       $ make install # or make install-strip

       The  GCC  binaries may consume quite some disc space. In most cases, you don't need the debug information
       in the compiler proper, and installing with

       $ make install-strip

        can save you some space.

   AVR-LibC
       Warning
           You must install avr-binutils, avr-gcc and make sure your path is set properly before installing AVR-
           LibC.

       Note
           If you have obtained the latest AVR-LibC from git, you will have to run the ./bootstrap script before
           using either of the build methods described below.

       To build and install AVR-LibC:

       $ # in ./source
       $ tar xfz avr-libc-<version>.tar.gz

       $ # in ./build
       $ mkdir avr-libc-<version>
       $ cd avr-libc-<version>
       $ ../../source/avr-libc-<version>/configure --prefix=$PREFIX \
           --build=x86_64-pc-linux-gnu --host=avr
       $ make
       $ make install

       Where the --build platform can be guessed by running

       $ ./source/avr-libc-<version>/config.guess

   AVRDUDE
       Note
           It has been ported to windows (via MinGW or cygwin), Linux and Solaris. Other Unix systems should  be
           trivial to port to.

       avrdude is part of the FreeBSD ports system. To install it, simply do the following:

       # cd /usr/ports/devel/avrdude
       # make install

       Note
           Installation  into  the  default  location  usually  requires  root permissions. However, running the
           program only requires access permissions to the appropriate ppi(4) device.

       Building and installing on other systems should use the configure system, as such:

       $ gunzip -c avrdude-<version>.tar.gz | tar xf -
       $ cd avrdude-<version>
       $ mkdir obj-avr
       $ cd obj-avr
       $ ../configure --prefix=$PREFIX
       $ make
       $ make install

   SimulAVR
       SimulAVR also uses the configure system, so to build and install:

       $ gunzip -c simulavr-<version>.tar.gz | tar xf -
       $ cd simulavr-<version>
       $ mkdir obj-avr
       $ cd obj-avr
       $ ../configure --prefix=$PREFIX
       $ make
       $ make install

       Note
           You might want to have already installed avr-binutils, avr-gcc and AVR-LibC if you want to  have  the
           test programs built in the simulavr source.

   AVaRICE
       Note
           These  install  notes  are  not  applicable  to  avarice-1.5 or older. You probably don't want to use
           anything that old anyways since there have been  many  improvements  and  bug  fixes  since  the  1.5
           release.

       AVaRICE also uses the configure system, so to build and install:

       $ gunzip -c avarice-<version>.tar.gz | tar xf -
       $ cd avarice-<version>
       $ mkdir obj-avr
       $ cd obj-avr
       $ ../configure --prefix=$PREFIX
       $ make
       $ make install

       Note
           AVaRICE  uses  the  BFD  library  for accessing various binary file formats. You may need to tell the
           configure script where to find the lib and headers for the link to work.  This  is  usually  done  by
           invoking  the  configure script like this (Replace <hdr_path> with the path to the bfd.h file on your
           system. Replace <lib_path> with the path to libbfd.a on your system.):

       $ CPPFLAGS=-I<hdr_path> LDFLAGS=-L<lib_path> ../configure --prefix=$PREFIX

Building and Installing under Windows

       Building and installing the toolchain under Windows  requires  more  effort  because  all  of  the  tools
       required  for  building,  and  the  programs  themselves,  are  mainly designed for running under a POSIX
       environment such as Unix and Linux. Windows does not natively provide such an environment.

       There are two projects available that provide such an environment, Cygwin and MinGW. There are advantages
       and disadvantages to both. Cygwin provides a very complete POSIX environment that  allows  one  to  build
       many  Linux  based  tools  from  source  with  very  little  or  no  source modifications. However, POSIX
       functionality is provided in the form of a DLL that is linked to the application.  This  DLL  has  to  be
       redistributed  with  your  application  and  there  are  issues  if  the Cygwin DLL already exists on the
       installation system and different versions of the DLL. On the other  hand,  MinGW  can  compile  code  as
       native  Win32  applications. However, this means that programs designed for Unix and Linux (i.e. that use
       POSIX functionality) will not compile as MinGW does not provide that POSIX layer for you. Therefore  most
       programs  that compile on both types of host systems, usually must provide some sort of abstraction layer
       to allow an application to be built cross-platform.

       MinGW does provide somewhat of a POSIX environment, called MSYS, that allows you to build Unix and  Linux
       applications  as they would normally do, with a configure step and a make step. Cygwin also provides such
       an environment. This means that building the AVR toolchain is very similar to how it is built  in  Linux,
       described  above.  The  main  differences are in what the PATH environment variable gets set to, pathname
       differences, and the tools that are required to build the projects under Windows. We'll take  a  look  at
       the tools next.

   Tools Required for Building the Toolchain for Windows
       These  are the tools that are currently used to build an AVR tool chain. This list may change, either the
       version of the tools, or the tools themselves, as improvements are made.

       MinGW
           Download      the      MinGW       Automated       Installer,       2013-10-04       (or       later)
           https://sourceforge.net/projects/mingw/files

       • Run mingw-get-setup.exe

       • In the installation wizard, keep the default values and press the 'Next' button for all installer pages
         except for the pages explicitly listed below.

       • In the installer page 'Repository Catalogues', select the 'Download latest
             repository catalogues' radio button, and press the 'Next' button

       • In the installer page 'License Agreement', select the 'I accept
             the agreement' radio button, and press the 'Next' button

       • In the installer page 'Select Components', be sure to select these items:

         • C compiler (default checked)

         • C++ compiler

         • Ada compiler

         • MinGW Developer Toolkit (which includes 'MSYS Basic System').

       • Install.

       Install Cygwin
           Install  everything, all users, UNIX line endings. This will take a long time. A fat internet pipe is
           highly recommended. It is also recommended that you download all  to  a  directory  first,  and  then
           install from that directory to your machine.

       Note
           GMP,  MPFR,  MPC  and ISL are required to build GCC. By far the easiest way to use them is by letting
           GCC download the sources locally by means of  running  the  ./contrib/download_prewrequisites  script
           from the GCC top source. GCC will configure and build these libs during configure and make.

           Doxygen is required to build AVR-LibC documentation.

           • Install Doxygen

             • Version 1.7.2

             • https://www.doxygen.nl

             • Download and install.

           NetPBM is required to build graphics in the AVR-LibC documentation.

           • Install NetPBM

             • Version 10.27.0

             • From the GNUWin32 project: http://gnuwin32.sourceforge.net/packages.html

             • Download and install.

           fig2dev is required to build graphics in the AVR-LibC documentation.

           • Install fig2dev

             • Version 3.2 patchlevel 5c

             • From WinFig 4.62: http://winfig.com/downloads

             • Download the zip file version of WinFig

             • Unzip  the  download  file and install fig2dev.exe in a location of your choice, somewhere in the
               PATH.

             • You may have to unzip and install related DLL files for fig2dev. In the version above,  you  have
               to install QtCore4.dll and QtGui4.dll.

           MikTeX is required to build various documentation.

           • Install MiKTeX

             • Version 2.9

             • https://miktex.org

             • Download and install.

           Ghostscript is required to build various documentation.

           • Install Ghostscript

             • Version 9.00

             • https://www.ghostscript.com

             • Download and install.

             • In the \bin subdirectory of the installaion, copy gswin32c.exe to gs.exe.

           • Set the TEMP and TMP environment variables to c:\\temp or to the short filename version. This helps
             to avoid NTVDM errors during building.

   Building the Toolchain for Windows
       All  directories  in  the  PATH environment variable should be specified using their short filename (8.3)
       version. This will also help to avoid NTVDM errors during building. These short filenames can be specific
       to each machine.

       Build the tools below in MinGW/MSYS.

       • Binutils

         • Open source code package and patch as necessary.

         • Configure and build in a directory outside of the source code tree.

         • Set PATH, in order:

           • <MikTex executables>

           • <ghostscript executables>

           • /usr/local/bin/usr/bin/bin

           • /mingw/bin

           • c:/cygwin/bin

           • <install directory>/bin

         • Configure

       CFLAGS=-D__USE_MINGW_ACCESS  \
       ../$archivedir/configure \
           --prefix=$installdir \
           --target=avr \
           --disable-nls \
           --enable-doc \
           --datadir=$installdir/doc/binutils \
           2>&1 | tee binutils-configure.log

         • Make

       make all html install install-html 2>&1 | tee binutils-make.log

         • Manually change documentation location.

       • GCC

         • Open source code pacakge and patch as necessary.

         • Configure and build in a directory outside of the source code tree.

         • Set PATH, in order:

           • <MikTex executables>

           • <ghostscript executables>

           • /usr/local/bin/usr/bin/bin

           • /mingw/bin

           • c:/cygwin/bin

           • <install directory>/bin

         • Configure

       LDFLAGS='-L /usr/local/lib -R /usr/local/lib' \
       CFLAGS='-D__USE_MINGW_ACCESS'  \
       ../gcc-$version/configure \
           --prefix=$installdir \
           --target=$target \
           --enable-languages=c,c++ \
           --with-dwarf2 \
           --enable-doc \
           --with-docdir=$installdir/doc/$project \
           --disable-shared \
           --disable-libada \
           --disable-libssp \
           --disable-libcc1 \
           --disable-nls \
           2>&1 | tee $project-configure.log

         • Make

       make all html install 2>&1 | tee $package-make.log

       • AVR-LibC

         • Open source code package.

         • Configure and build at the top of the source code tree.

         • Set PATH, in order:

           • /usr/local/bin

           • /mingw/bin

           • /bin

           • <MikTex executables>

           • <install directory>/bin

           • <Doxygen executables>

           • <NetPBM executables>

           • <fig2dev executable>

           • <Ghostscript executables>

           • c:/cygwin/bin

         • Configure

       ./configure \
           --host=avr \
           --prefix=$installdir \
           --enable-doc \
           --disable-versioned-doc \
           --enable-html-doc \
           --enable-pdf-doc \
           --enable-man-doc \
           --mandir=$installdir/man \
           --datadir=$installdir \
           2>&1 | tee $package-configure.log

         • Make

       make all install 2>&1 | tee $package-make.log

         • Manually change location of man page documentation.

         • Move the examples to the top level of the install tree.

         • Convert line endings in examples to Windows line endings.

         • Convert line endings in header files to Windows line endings.

       • AVRDUDE

         • Open source code package.

         • Configure and build at the top of the source code tree.

         • Set PATH, in order:

           • <MikTex executables>

           • /usr/local/bin/usr/bin/bin

           • /mingw/bin

           • c:/cygwin/bin

           • <install directory>/bin

         • Set location of LibUSB headers and libraries

       export CPPFLAGS='-I../../libusb-win32-device-bin-$libusb_version/include'
       export CFLAGS='-I../../libusb-win32-device-bin-$libusb_version/include'
       export LDFLAGS='-L../../libusb-win32-device-bin-$libusb_version/lib/gcc'

         • Configure

       ./configure \
           --prefix=$installdir \
           --datadir=$installdir \
           --sysconfdir=$installdir/bin \
           --enable-doc \
           --disable-versioned-doc \
           2>&1 | tee $package-configure.log

         • Make

       make -k all install 2>&1 | tee $package-make.log

         • Convert line endings in avrdude config file to Windows line endings.

         • Delete backup copy of avrdude config file in install directory if exists.

       • Insight/GDB

         • Open source code pacakge and patch as necessary.

         • Configure and build in a directory outside of the source code tree.

         • Set PATH, in order:

           • <MikTex executables>

           • /usr/local/bin/usr/bin/bin

           • /mingw/bin

           • c:/cygwin/bin

           • <install directory>/bin

         • Configure

       CFLAGS=-D__USE_MINGW_ACCESS  \
       LDFLAGS='-static' \
       ../$archivedir/configure \
           --prefix=$installdir \
           --target=avr \
            --with-gmp=/usr/local \
            --with-mpfr=/usr/local \
            --enable-doc \
            2>&1 | tee insight-configure.log

         • Make

       make all install 2>&1 | tee $package-make.log

       • SRecord

         • Open source code package.

         • Configure and build at the top of the source code tree.

         • Set PATH, in order:

           • <MikTex executables>

           • /usr/local/bin/usr/bin/bin

           • /mingw/bin

           • c:/cygwin/bin

           • <install directory>/bin

         • Configure

       ./configure \
           --prefix=$installdir \
           --infodir=$installdir/info \
           --mandir=$installdir/man \
           2>&1 | tee $package-configure.log

         • Make

       make all install 2>&1 | tee $package-make.log

       Build the tools below in Cygwin.

       • AVaRICE

         • Open source code package.

         • Configure and build in a directory outside of the source code tree.

         • Set PATH, in order:

           • <MikTex executables>

           • /usr/local/bin/usr/bin/bin

           • <install directory>/bin

         • Set location of LibUSB headers and libraries

       export CPPFLAGS=-I$startdir/libusb-win32-device-bin-$libusb_version/include
       export CFLAGS=-I$startdir/libusb-win32-device-bin-$libusb_version/include
       export LDFLAGS='-static -L$startdir/libusb-win32-device-bin-$libusb_version/lib/gcc '

         • Configure

       ../$archivedir/configure \
           --prefix=$installdir \
           --datadir=$installdir/doc \
           --mandir=$installdir/man \
           --infodir=$installdir/info \
           2>&1 | tee avarice-configure.log

         • Make

       make all install 2>&1 | tee avarice-make.log

       • SimulAVR

         • Open source code package.

         • Configure and build in a directory outside of the source code tree.

         • Set PATH, in order:

           • <MikTex executables>

           • /usr/local/bin/usr/bin/bin

           • <install directory>/bin

         • Configure

       export LDFLAGS='-static'
       ../$archivedir/configure \
           --prefix=$installdir \
           --datadir=$installdir \
           --disable-tests \
           --disable-versioned-doc \
           2>&1 | tee simulavr-configure.log

         • Make

       make -k all install 2>&1 | tee simulavr-make.log
       make pdf install-pdf 2>&1 | tee simulavr-pdf-make.log

Canadian Cross Builds

       It is also possible to build avr-gcc for host Windows on a Linux build system. Suppose you have installed
       a i686-w64-mingw32-gcc toolchain that can compile code to run on host=i686-w64-mingw32. Then the steps to
       build a toolchain for Windows are:

       1.  Build and install the AVR toolchain for the Linux build machine as explained above.  Make  sure  that
           running the command

       avr-gcc --version

        prints the compiler version according to the used GCC sources. The native AVR cross compiler is required
       during  configure  and to build the AVR target libraries like libgcc. Similarly, the version of the found
       AVR Binutils programs must match the version of the used Binutils sources.

       2.  Determine the name of the --build platform like  x86_64-pc-linux-gnu,  for  example  by  running  the
           config.guess  script  as  shipped with the top level GCC sources (and also with Binutils sources, and
           AVR-LibC sources after ./bootstrap).

       3.  Use different build and install directories,  e.g.  ./build/binutils-<version>-avr-mingw32  to  build
           Binutils and --prefix=$PREFIX-mingw32 as install path.

       4.  Configure,  build  and  install  Binutils  and  GCC  like for the native build, but add the following
           configure options:

       --build=x86_64-pc-linux-gnu --host=i686-w64-mingw32

        This assumes that the required host libraries like GMP are being built in one go with the compiler. This
       is accomplished by running the contrib/download_prerequisites script from the toplevel GCC sources,  just
       like with the native build.

       5.  There  is no need to build AVR-LibC again because it is a pure target library. It can be installed by
           means of running

       $ # in ./build/avr-libc-<version>
       $ make install prefix=$PREFIX-mingw32

       In order to 'install' the toolchain on Windows, the canadian cross installed in  $PREFIX-mingw32  can  be
       moved  to  the  desired  location  on the Windows computer. The compiler can be used by calling it by its
       absolute path, or by adding the $PREFIX-mingw32/bin directory to the PATH environment variable.

Using Git

       Most of the sources of the projects above are now managed with the git distributed version-control tools.
       When you want to build from the newest development branch, you can clone the repo, like with

       $ git clone <repo> [dirname]

        Replace <repo> with the URL of the Git  repository,  e.g.  https://github.com/avrdudes/avr-libc.git  for
       AVR-LibC.  Notice  that when building AVR-LibC from the repo source, you have to run ./bootstrap from the
       top level AVR-LibC sources prior to configure.

       Useful options for git clone:

       dirname
           Specify an optional directory name for the cloned repository, like:

       $ git clone https://github.com/avrdudes/avr-libc.git ./source/avr-libc-main

        Without dirname, the name of the git file like avr-libc is used.

       --depth 1
           An ordinary clone will clone the complete repository with all its  branches  and  their  history.  To
           speed  up  the  cloning  and  save some disc space, you can just clone the top of the history to some
           depth.

       --branch branch
           The default branch is the head of the latest development, which is master for GCC and  Binutils,  and
           main for AVR-LibC.

       When  you  want  a  different  ref,  like  GCC's  releases/gcc-14  for the head of the GCC v14 branch, or
       releases/gcc-14.1.0 for the GCC v14.1 release tag, then you can  specify  that  as  branch.  To  see  the
       available refs, you can use

       $ git ls-remote <repo>

AVR-LibC                                          Version 2.2.1                              install_tools(3avr)