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 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 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
$ PATH=$PATH:$PREFIX/bin $ export PATH
You can develop programs for AVR devices without the following tools. They may or may not be of use for you.
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:
$ bunzip2 -c binutils-<version>.tar.bz2 | tar xf - $ cd binutils-<version>
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.
$ mkdir obj-avr $ cd obj-avr
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.
$ ../configure --prefix=$PREFIX --target=avr --disable-nls
If you don't specify the --prefix option, the tools will get installed in the /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.
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.
The steps to build avr-gcc are essentially same as for binutils:
$ bunzip2 -c gcc-<version>.tar.bz2 | tar xf - $ cd gcc-<version> $ mkdir obj-avr $ cd obj-avr $ ../configure --prefix=$PREFIX --target=avr --enable-languages=c,c++ --disable-nls --disable-libssp --with-dwarf2 $ make $ make install
To save your self some download time, you can alternatively download only the gcc-core-<version>.tar.bz2 and gcc-c++-<version>.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.
The stdc++ libs are not included with C++ for AVR due to the size limitations of the devices.
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
To build and install avr-libc:
$ gunzip -c avr-libc-<version>.tar.gz | tar xf - $ cd avr-libc-<version> $ ./configure --prefix=$PREFIX --build=`./config.guess` --host=avr $ make $ make install
avrdude is part of the FreeBSD ports system. To install it, simply do the following:
# cd /usr/ports/devel/avrdude # make install
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
GDB also uses the configure system, so to build and install:
$ bunzip2 -c gdb-<version>.tar.bz2 | tar xf - $ cd gdb-<version> $ mkdir obj-avr $ cd obj-avr $ ../configure --prefix=$PREFIX --target=avr $ make $ make install
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
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
$ CPPFLAGS=-I<hdr_path> LDFLAGS=-L<lib_path> ../configure --prefix=$PREFIX
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 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.
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.
if EXIST rxvt.exe goto startrxvt
rem if EXIST rxvt.exe goto startrxvt
to remark out this line. Doing this will cause MSYS to always use the bash shell and not the rxvt shell.
./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
./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
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.
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
make all html install install-html 2>&1 | tee binutils-make.log
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
make all html install 2>&1 | tee $package-make.log
./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 all install 2>&1 | tee $package-make.log
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 --prefix=$installdir --datadir=$installdir --sysconfdir=$installdir/bin --enable-doc --disable-versioned-doc 2>&1 | tee $package-configure.log
make -k all install 2>&1 | tee $package-make.log
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 all install 2>&1 | tee $package-make.log
./configure --prefix=$installdir --infodir=$installdir/info --mandir=$installdir/man 2>&1 | tee $package-configure.log
make all install 2>&1 | tee $package-make.log
Build the tools below in Cygwin.
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 "
../$archivedir/configure --prefix=$installdir --datadir=$installdir/doc --mandir=$installdir/man --infodir=$installdir/info 2>&1 | tee avarice-configure.log
make all install 2>&1 | tee avarice-make.log
export LDFLAGS="-static" ../$archivedir/configure --prefix=$installdir --datadir=$installdir --disable-tests --disable-versioned-doc 2>&1 | tee simulavr-configure.log
make -k all install 2>&1 | tee simulavr-make.log make pdf install-pdf 2>&1 | tee simulavr-pdf-make.log