/* Copyright (c) 2002,2005, Theodore Roth Copyright (c) 2006, Joerg Wunsch Copyright (c) 2007, Eric B. Weddington All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* $Id: tools-install.dox,v 1.17 2007/12/20 14:17:56 joerg_wunsch Exp $ */ /** \page install_tools Building and Installing the GNU Tool Chain \addindex installation 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. \section install_unix Building and Installing under Linux, FreeBSD, and Others The default behaviour for most of these tools is to install every thing under the \c /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 \c /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 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. You specify the installation directory by using the --prefix=dir option with the \c 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 \c $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): \addindex $PREFIX \addindex --prefix \verbatim $ PREFIX=$HOME/local/avr $ export PREFIX \endverbatim \addindex $PATH \anchor path \note Be sure that you have your \c PATH environment variable set to search the directory you install everything in \e before you start installing anything. For example, if you use --prefix=$PREFIX, you must have \c $PREFIX/bin in your exported PATH. As such: \verbatim $ PATH=$PATH:$PREFIX/bin $ export PATH \endverbatim \warning If you have \c CC set to anything other than \c avr-gcc in your environment, this will cause the configure script to fail. It is best to not have \c CC set at all. \note It is usually the best to use the latest released version of each of the tools. \section required_tools Required Tools \addindex tools, required - GNU Binutils
http://sources.redhat.com/binutils/
\ref install_avr_binutils "Installation" - GCC
http://gcc.gnu.org/
\ref install_avr_gcc "Installation" - AVR Libc
http://savannah.gnu.org/projects/avr-libc/
\ref install_avr_libc "Installation"
\section optional_tools Optional Tools \addindex tools, optional You can develop programs for AVR devices without the following tools. They may or may not be of use for you. - AVRDUDE
http://savannah.nongnu.org/projects/avrdude/
\ref install_avrprog "Installation"
\ref using_avrprog "Usage Notes" - GDB
http://sources.redhat.com/gdb/
\ref install_gdb "Installation"
- SimulAVR
http://savannah.gnu.org/projects/simulavr/
\ref install_simulavr "Installation" - AVaRICE
http://avarice.sourceforge.net/
\ref install_avarice "Installation"
\section install_avr_binutils GNU Binutils for the AVR target \addindex installation, binutils 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: \verbatim $ bunzip2 -c binutils-.tar.bz2 | tar xf - $ cd binutils- \endverbatim \note Replace \c <version> with the version of the package you downloaded. \note If you obtained a gzip compressed file (.gz), use gunzip instead of bunzip2. It is usually a good idea to configure and build binutils in a subdirectory so as not to pollute the source with the compiled files. This is recommended by the binutils developers. \verbatim $ mkdir obj-avr $ cd obj-avr \endverbatim 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. \verbatim $ ../configure --prefix=$PREFIX --target=avr --disable-nls \endverbatim If you don't specify the --prefix option, the tools will get installed in the \c /usr/local hierarchy (i.e. the binaries will get installed in /usr/local/bin, the info pages get installed in /usr/local/info, etc.) Since these tools are changing frequently, It is preferrable to put them in a location that is easily removed. 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. At this point, you can build the project. \verbatim $ make \endverbatim \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: \verbatim $ make install \endverbatim You should now have the programs from binutils installed into $PREFIX/bin. Don't forget to \ref path "set your PATH" environment variable before going to build avr-gcc. \note The official version of binutils might lack support for recent AVR devices. A patch that adds more AVR types can be found at http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-binutils/files/patch-newdevices \section install_avr_gcc GCC for the AVR target \addindex installation, gcc \warning You must install \ref install_avr_binutils "avr-binutils" and make sure your \ref path "path is set" properly before installing avr-gcc. The steps to build \c avr-gcc are essentially same as for \ref install_avr_binutils "binutils": \verbatim $ bunzip2 -c gcc-.tar.bz2 | tar xf - $ cd gcc- $ mkdir obj-avr $ cd obj-avr $ ../configure --prefix=$PREFIX --target=avr --enable-languages=c,c++ \ --disable-nls --disable-libssp --with-dwarf2 $ make $ make install \endverbatim To save your self some download time, you can alternatively download only the gcc-core-\.tar.bz2 and gcc-c++-\.tar.bz2 parts of the gcc. Also, if you don't need C++ support, you only need the core part and should only enable the C language support. \note Early versions of these tools did not support C++. \note The stdc++ libs are not included with C++ for AVR due to the size limitations of the devices. \note The official version of GCC might lack support for recent AVR devices. A patch that adds more AVR types can be found at http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-gcc/files/patch-newdevices \section install_avr_libc AVR Libc \addindex installation, avr-libc \warning You must install \ref install_avr_binutils "avr-binutils", \ref install_avr_gcc "avr-gcc" and make sure your \ref path "path is set" properly before installing avr-libc. \note If you have obtained the latest avr-libc from cvs, you will have to run the \c bootstrap script before using either of the build methods described below. To build and install avr-libc: \verbatim $ gunzip -c avr-libc-.tar.gz | tar xf - $ cd avr-libc- $ ./configure --prefix=$PREFIX --build=`./config.guess` --host=avr $ make $ make install \endverbatim \section install_avrprog AVRDUDE \addindex installation, avrprog \addindex installation, 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: \verbatim # cd /usr/ports/devel/avrdude # make install \endverbatim \note Installation into the default location usually requires root permissions. However, running the program only requires access permissions to the appropriate \c ppi(4) device. Building and installing on other systems should use the \c configure system, as such: \verbatim $ gunzip -c avrdude-.tar.gz | tar xf - $ cd avrdude- $ mkdir obj-avr $ cd obj-avr $ ../configure --prefix=$PREFIX $ make $ make install \endverbatim \section install_gdb GDB for the AVR target \addindex Installation, gdb GDB also uses the \c configure system, so to build and install: \verbatim $ bunzip2 -c gdb-.tar.bz2 | tar xf - $ cd gdb- $ mkdir obj-avr $ cd obj-avr $ ../configure --prefix=$PREFIX --target=avr $ make $ make install \endverbatim \note If you are planning on using avr-gdb, you will probably want to install either \ref install_simulavr "simulavr" or \ref install_avarice "avarice" since avr-gdb needs one of these to run as a a remote target backend. \section install_simulavr SimulAVR \addindex installation, simulavr SimulAVR also uses the \c configure system, so to build and install: \verbatim $ gunzip -c simulavr-.tar.gz | tar xf - $ cd simulavr- $ mkdir obj-avr $ cd obj-avr $ ../configure --prefix=$PREFIX $ make $ make install \endverbatim \note You might want to have already installed \ref install_avr_binutils "avr-binutils", \ref install_avr_gcc "avr-gcc" and \ref install_avr_libc "avr-libc" if you want to have the test programs built in the simulavr source. \section install_avarice AVaRICE \addindex installation, 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 \c configure system, so to build and install: \verbatim $ gunzip -c avarice-.tar.gz | tar xf - $ cd avarice- $ mkdir obj-avr $ cd obj-avr $ ../configure --prefix=$PREFIX $ make $ make install \endverbatim \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 \ with the path to the \c bfd.h file on your system. Replace \ with the path to \c libbfd.a on your system.): \verbatim $ CPPFLAGS=-I LDFLAGS=-L ../configure --prefix=$PREFIX \endverbatim \section install_windows 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/MSYS. 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/MSYS 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/MSYS 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/MSYS does provide somewhat of a POSIX environment that allows you to build Unix and Linux applications as they woud normally do, with a \c configure step and a \c 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. \section install_windows_tools Tools Required for Building the Toolchain for Windows These are the tools that are currently used to build WinAVR 20070525 (or later). This list may change, either the version of the tools, or the tools themselves, as improvements are made. - MinGW/MSYS
- Put MinGW-5.1.3.exe in it's own directory (for example: C:\\MinGWSetup) - Run MinGW-5.1.3.exe - Select "Download and install" - Select "Current" package. - Select type of install: Full. - Install MSYS-1.0.10.exe package.
- Default selections - Batch file will ask: - "Do you wish to continue with the post install?" Press "y" and press enter. - "Do you have MinGW installed?" Press "y" and press enter. - "Where is your MinGW installation?" Type in "c:/mingw" (without quotes) and press enter - "Do you wish for me to add mount bindings for c:/mingw to /mingw?" Press "y" and press enter. - It will display some messages on the screen, then it will display: "Press any key to continue . . .". Press any key. - Edit c:\\msys\\1.0\\msys.bat
Change line (should be line 41): \verbatim if EXIST rxvt.exe goto startrxvt \endverbatim to: \verbatim rem if EXIST rxvt.exe goto startrxvt \endverbatim to remark out this line. Doing this will cause MSYS to always use the bash shell and not the rxvt shell. \note The order of the next three is important. Install MSYS Developer toolkit before the autotools. - MSYS Developer Toolkit version 1.0.1
- This is needed to build avr-libc in MinGW. - - Single file installer executable. Install. - autoconf 2.59 from the "MSYS Developer Toolkit" release
- autoconf 2.59/2.60 is needed to build avr-libc in MinGW. - - Extract to c:\\msys\\1.0 - automake 1.8.2
- automake 1.8/1.9 is needed to build avr-libc in MinGW. - - Extract to c:\\msys\\1.0 - 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 MPFR requires GMP, so build it first. - Build GMP for MinGW
- Version 4.2.1 - - Build script: \verbatim ./configure 2>&1 | tee gmp-configure.log make 2>&1 | tee gmp-make.log make check 2>&1 | tee gmp-make-check.log make install 2>&1 | tee gmp-make-install.log \endverbatim - GMP headers will be installed under /usr/local/include and library installed under /usr/local/lib. - Build MPFR for MinGW
- Version 2.2.1 - - Build script: \verbatim ./configure --with-gmp=/usr/local 2>&1 | tee mpfr-configure.log make 2>&1 | tee mpfr-make.log make check 2>&1 | tee mpfr-make-check.log make install 2>&1 | tee mpfr-make-install.log \endverbatim - MPFR headers will be installed under /usr/local/include and library installed under /usr/local/lib. - Install Doxygen
- Version 1.4.7 - - Download and install. - Install NetPBM
- Version 10.27.0 - From the GNUWin32 project: - Download and install. - Install fig2dev
- Version 3.2 Patchlevel 5-alpha7 - From WinFig 1.71: - Unzip the download file and install in a location of your choice. - Install MiKTex
- Version 2.5 - - Download and install. - Install Ghostscript
- Version 8.54 - - Download and install. - Set the TEMP and TMP environment variables to c:\\temp or to the short filename version. This helps to avoid NTVDM errors during building. \section install_windows_building Building the Toolchain for Windows All directories in the PATH enviornment 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 MSYS. - Binutils
- Open source code pacakge and patch as necessary. - Configure and build in a directory outside of the source code tree. - Set PATH, in order: - \ - /usr/local/bin - /usr/bin - /bin - /mingw/bin - c:/cygwin/bin - \/bin - Configure \verbatim CFLAGS=-D__USE_MINGW_ACCESS \ ../$archivedir/configure \ --prefix=$installdir \ --target=avr \ --disable-nls \ --enable-doc \ --datadir=$installdir/doc/binutils \ --with-gmp=/usr/local \ --with-mpfr=/usr/local \ 2>&1 | tee binutils-configure.log \endverbatim - Make \verbatim make all html install install-html 2>&1 | tee binutils-make.log \endverbatim - 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: - \ - /usr/local/bin - /usr/bin - /bin - /mingw/bin - c:/cygwin/bin - \/bin - Configure \verbatim CFLAGS=-D__USE_MINGW_ACCESS \ ../gcc-$version/configure \ --prefix=$installdir \ --target=$target \ --enable-languages=c,c++ \ --with-dwarf2 \ --enable-win32-registry=WinAVR-$release \ --disable-nls \ --with-gmp=/usr/local \ --with-mpfr=/usr/local \ --enable-doc \ --disable-libssp \ 2>&1 | tee $package-configure.log \endverbatim - Make \verbatim make all html install 2>&1 | tee $package-make.log \endverbatim - Manually copy the HTML documentation from the source code tree to the installation tree. - 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 - \ - \/bin - \ - \ - \ - \ - c:/cygwin/bin - Configure \verbatim ./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 \endverbatim - Make \verbatim make all install 2>&1 | tee $package-make.log \endverbatim - 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: - \ - /usr/local/bin - /usr/bin - /bin - /mingw/bin - c:/cygwin/bin - \/bin - Set location of LibUSB headers and libraries \verbatim 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" \endverbatim - Configure \verbatim ./configure \ --prefix=$installdir \ --datadir=$installdir \ --sysconfdir=$installdir/bin \ --enable-doc \ --disable-versioned-doc \ 2>&1 | tee $package-configure.log \endverbatim - Make \verbatim make -k all install 2>&1 | tee $package-make.log \endverbatim - 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: - \ - /usr/local/bin - /usr/bin - /bin - /mingw/bin - c:/cygwin/bin - \/bin - Configure \verbatim 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 \endverbatim - Make \verbatim make all install 2>&1 | tee $package-make.log \endverbatim - SRecord
- Open source code package. - Configure and build at the top of the source code tree. - Set PATH, in order: - \ - /usr/local/bin - /usr/bin - /bin - /mingw/bin - c:/cygwin/bin - \/bin - Configure \verbatim ./configure \ --prefix=$installdir \ --infodir=$installdir/info \ --mandir=$installdir/man \ 2>&1 | tee $package-configure.log \endverbatim - Make \verbatim make all install 2>&1 | tee $package-make.log \endverbatim 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: - \ - /usr/local/bin - /usr/bin - /bin - \/bin - Set location of LibUSB headers and libraries \verbatim 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 " \endverbatim - Configure \verbatim ../$archivedir/configure \ --prefix=$installdir \ --datadir=$installdir/doc \ --mandir=$installdir/man \ --infodir=$installdir/info \ 2>&1 | tee avarice-configure.log \endverbatim - Make \verbatim make all install 2>&1 | tee avarice-make.log \endverbatim - SimulAVR
- Open source code package. - Configure and build in a directory outside of the source code tree. - Set PATH, in order: - \ - /usr/local/bin - /usr/bin - /bin - \/bin - Configure \verbatim export LDFLAGS="-static" ../$archivedir/configure \ --prefix=$installdir \ --datadir=$installdir \ --disable-tests \ --disable-versioned-doc \ 2>&1 | tee simulavr-configure.log \endverbatim - Make \verbatim make -k all install 2>&1 | tee simulavr-make.log make pdf install-pdf 2>&1 | tee simulavr-pdf-make.log \endverbatim */