1313 lines
38 KiB
Bash
1313 lines
38 KiB
Bash
#!/bin/bash
|
|
########################################################################
|
|
# build-avr-gnu-toolchain.sh
|
|
#
|
|
# This script builds the GNU toolchain for the AVR target.
|
|
#
|
|
# Copyright (C) 2006-2010 Atmel Corporation
|
|
#
|
|
# This script is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU Lesser General Public License as published by
|
|
# the Free Software Foundation version 2.1.
|
|
#
|
|
# This script is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Lesser General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public License
|
|
# along with this script; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
#
|
|
########################################################################
|
|
#
|
|
# $Id: build-avr8-gnu-toolchain.sh 119628 2012-08-03 10:12:23Z vidhya.praveen $
|
|
#
|
|
########################################################################
|
|
|
|
usage="\
|
|
Usage: `basename $0` [OPTIONS] <package...>
|
|
|
|
This script builds the GNU toolchain for the AVR target.
|
|
|
|
Packages can be given as arguments. The order they are given defines the
|
|
build order. Use option '-l' to list default packages.
|
|
|
|
The script build the tools in the 'build' folder based on the sources in the
|
|
'source' folder. The tools are installed in the 'prefix' folder.
|
|
Default 'build' folder is a '<current>/build'. Change it with option '-b <folder>'.
|
|
Default 'source' folder is '<current>'. Change it with option 's <folder>'.
|
|
Default 'prefix' folder is '/usr/local'. Change it by setting enviroment 'AVR_PREFIX',
|
|
or use option '-p <prefix>'.
|
|
|
|
Options:
|
|
-b <folder> Defines build folder
|
|
-h Prints this help message
|
|
-k Keep old build folder
|
|
-l Lists default packages
|
|
-p <prefix> Sets the installation prefix
|
|
-P <password> The password for executing sudo command
|
|
-s <folder> Defines source folder
|
|
|
|
-B <target> sets build platform for 'configure'
|
|
-H <target> sets host platform for 'configure'
|
|
|
|
Enviroment:
|
|
AVR_PREFIX Installation prefix
|
|
AVR_8_GNU_TOOLCHAIN_VERSION Gives the version number of the toochain
|
|
BUILD_NUMBER Adds a build number to the version string if set"
|
|
|
|
######## General helper functions ###############################
|
|
function task_start () {
|
|
printf "%-52s" "$1"
|
|
}
|
|
|
|
function task_success () {
|
|
echo OK
|
|
}
|
|
|
|
function task_error () {
|
|
echo FAILED
|
|
echo $1
|
|
exit 1
|
|
}
|
|
|
|
function wipe_directory () {
|
|
if [ -e "$1" ]; then
|
|
task_start "Wiping $1 ($2)... "
|
|
rm -rf "$1" && task_success || task_error
|
|
fi
|
|
}
|
|
|
|
function do_make () {
|
|
make $MAKEOPTS > make.out 2>&1 || task_error "$1"
|
|
}
|
|
|
|
function do_make_install () {
|
|
if test -z ${SUDO_PASSWORD}
|
|
then
|
|
make install > make.install.out 2>&1 || task_error "$1"
|
|
else
|
|
echo ${SUDO_PASSWORD}| sudo -S -E PATH=${PATH}:${PREFIX}/bin \
|
|
make install > make.install.out 2>&1 || task_error "$1"
|
|
fi
|
|
}
|
|
|
|
function do_pushd () {
|
|
pushd $1 > /dev/null
|
|
}
|
|
|
|
function do_popd () {
|
|
popd $1 > /dev/null
|
|
}
|
|
|
|
function do_mkpushd () {
|
|
mkdir -p $1
|
|
do_pushd $1
|
|
}
|
|
|
|
function start_timer () {
|
|
begin_time=`date +%s`
|
|
}
|
|
|
|
function end_timer () {
|
|
end_time=`date +%s`
|
|
}
|
|
|
|
function report_time() {
|
|
elapsed=$[$end_time - $begin_time]
|
|
hours=$[$elapsed/3600]
|
|
mins=$[($elapsed%3600)/60]
|
|
secs=$[$elapsed%60]
|
|
echo "Finished at `date`"
|
|
echo "Task completed in $hours hours, $mins minutes and $secs seconds."
|
|
}
|
|
|
|
######## Functions for avr gnu toolchain ###############################
|
|
function remove_build_folder()
|
|
{
|
|
# arg1 = the package subfolder in builddir
|
|
if test -d ${builddir}/$1 -a ${KEEP_BUILD_FOLDER} != "YES" ; then
|
|
rm -rf ${builddir}/$1 || task_error "Could not remove $1 build folder."
|
|
fi
|
|
}
|
|
|
|
|
|
#Tries to set platform types
|
|
# $1 = package
|
|
function set_platform_variables()
|
|
{
|
|
build_platform=${srcdir}/${1}/config.guess
|
|
if test -z ${host_platform}; then
|
|
host_platform=${build_platform}
|
|
fi
|
|
}
|
|
|
|
|
|
function unpack_upstream_source()
|
|
{
|
|
local workdir=$1
|
|
local archive_name=$2
|
|
local archive_tar_flag=""
|
|
|
|
case $archive_name in
|
|
*.tar.gz|*.tgz)
|
|
archive_tar_flag='--gzip';;
|
|
*.tar.bz2|*.tbz2)
|
|
archive_tar_flag='--bzip2';;
|
|
*.tar)
|
|
archive_tar_flag="";;
|
|
*)
|
|
task_error "Unknown archive format."
|
|
esac
|
|
|
|
if ! tar --directory ${workdir} ${archive_tar_flag} -x -f ${archive_name}; then
|
|
task_error "Corrupt file ${archive_name}"
|
|
fi
|
|
}
|
|
|
|
|
|
function apply_patches()
|
|
{
|
|
local workdir=$1
|
|
local archivedir=$2
|
|
|
|
do_pushd ${workdir}
|
|
|
|
# Patch Categories
|
|
# 0x = Distribution specific (distro names and versions)
|
|
# 1x = Host platform specific
|
|
# 2x = Build system specific
|
|
# 3x = New target features
|
|
# 4x = Patches to fix target bugs
|
|
# 5x = New devices
|
|
|
|
if test -z "$(ls ${archivedir}/*.patch)"; then
|
|
echo "No patch files, skipping patch"
|
|
do_popd
|
|
return
|
|
fi
|
|
|
|
for i in ${archivedir}/*.patch ; do
|
|
echo "Patch: $i" >> patch.log
|
|
patch --verbose --strip=0 --input="$i" >> patch.log || task_error "Patching failed."
|
|
done
|
|
do_popd
|
|
}
|
|
|
|
|
|
############ Define functions used for the different tasks ########
|
|
function set_binutils_parameters()
|
|
{
|
|
if test -f "${srcdir}/binutils/bfd/ATMEL-VER"; then
|
|
read binutils_version_atmel < ${srcdir}/binutils/bfd/ATMEL-VER
|
|
else
|
|
binutils_version_atmel="atmel-$(date +%Y%m%d%H%M%Z)"
|
|
fi
|
|
}
|
|
|
|
function binutils_prep()
|
|
{
|
|
if test -f ${srcdir}/binutils/.prep_done
|
|
then
|
|
set_binutils_parameters
|
|
return
|
|
fi
|
|
|
|
task_start "Preparing Binutils... "
|
|
if [ ! -d ${srcdir}/binutils-*-patches ] ; then
|
|
echo "Can't find binutils source."
|
|
exit 1
|
|
fi
|
|
do_pushd ${srcdir}
|
|
rm -rf binutils binutils-[0-9]\.[0-9][0-9]* || task_error "Removing old binutils folders failed"
|
|
upstream_source=$(ls ./binutils-*-patches/binutils-*.*)
|
|
unpack_upstream_source ${srcdir} ${upstream_source}
|
|
|
|
# Link the unpacked folder to a generic folder for future work.
|
|
ln -s $(ls -d binutils-[0-9]\.[0-9][0-9]*) binutils || task_error "Error linking binutils folder"
|
|
|
|
# Apply patches to source.
|
|
apply_patches ${srcdir}/binutils $(ls -d ${srcdir}/binutils-*-patches)
|
|
|
|
# Prepare for configuration.
|
|
if [ ! -d ${srcdir}/binutils ] ; then
|
|
echo "Can't find binutils source."
|
|
exit 1
|
|
fi
|
|
|
|
set_binutils_parameters
|
|
cd binutils
|
|
|
|
# Some sed magic to make autotools work on platforms with different autotools version
|
|
# Works for binutils 2.20.1. May work for other versions.
|
|
sed -i 's/AC_PREREQ(2.64)/AC_PREREQ(2.63)/g' ./configure.ac || task_error "sed failed"
|
|
sed -i 's/AC_PREREQ(2.64)/AC_PREREQ(2.63)/g' ./libiberty/configure.ac || task_error "sed failed"
|
|
sed -i 's/ \[m4_fatal(\[Please use exactly Autoconf \]/ \[m4_errprintn(\[Please use exactly Autoconf \]/g' ./config/override.m4 || task_error "sed failed"
|
|
|
|
# This one is necessary for 2.21 (but not for 2.21.2
|
|
sed -i 's/\@include gnu-oids.texi//' ./etc/standards.texi
|
|
|
|
autoconf || task_error "autoconf failed"
|
|
for d in ld ; do
|
|
do_pushd ${d}
|
|
autoreconf || task_error "autoreconf in $d failed."
|
|
do_popd
|
|
done
|
|
|
|
do_popd
|
|
task_success
|
|
touch ${srcdir}/binutils/.prep_done
|
|
}
|
|
|
|
|
|
function binutils_build()
|
|
{
|
|
local binutils_target=${1}
|
|
local binutils_extra_opts=""
|
|
local binutils_doc_opts=""
|
|
local binutils_extra_config=""
|
|
|
|
task_start "Building Binutils for ${binutils_target}... "
|
|
remove_build_folder "${binutils_target}-binutils"
|
|
OLD_MAKEOPTS=$MAKEOPTS
|
|
MAKEOPTS=""
|
|
do_mkpushd ${builddir}/${binutils_target}-binutils
|
|
case "${host_platform}" in
|
|
i[3456]86*-linux*)
|
|
binutils_extra_config="LDFLAGS=-all-static"
|
|
;;
|
|
x86_64*-linux*)
|
|
binutils_extra_config="LDFLAGS=-all-static"
|
|
;;
|
|
i[3456789]86*-mingw32*)
|
|
binutils_extra_config=""
|
|
;;
|
|
*)
|
|
binutils_extra_config=""
|
|
esac
|
|
|
|
# Configure.
|
|
${srcdir}/binutils/configure \
|
|
--target=${binutils_target} \
|
|
--host=${host_platform} \
|
|
--build=${build_platform} \
|
|
--prefix=$PREFIX \
|
|
--with-pkgversion="AVR_8_bit_GNU_Toolchain_${avr_8_gnu_toolchain_version}_${BUILD_NUMBER}" \
|
|
--with-bugurl="http://www.atmel.com" \
|
|
--disable-nls \
|
|
--enable-doc \
|
|
--libdir=${PREFIX}/${LIB_DIR} \
|
|
--infodir=${PREFIX}/info \
|
|
--mandir=${PREFIX}/man \
|
|
--docdir=${PREFIX}/doc/binutils \
|
|
--disable-werror \
|
|
--enable-install-libiberty \
|
|
--enable-install-libbfd \
|
|
> configure.out 2>&1 || task_error "configure failed. See configure.out."
|
|
|
|
MAKEOPTS="all-bfd TARGET-bfd=headers"
|
|
do_make "make bfd headers failed. See make.out."
|
|
|
|
# Force reconfiguring.
|
|
rm bfd/Makefile || task_error "Can't remove bfd/Makefile"
|
|
MAKEOPTS=""
|
|
|
|
# Build.
|
|
make configure-host >> make.out 2>&1 || task_error "make configure-host failed. See make.out"
|
|
make ${binutils_extra_config} all html >> make.out 2>&1 || task_error "make failed. See make.out."
|
|
task_success
|
|
|
|
# Install.
|
|
task_start "Installing binutils for ${binutils_target}... "
|
|
#do_make_install "make install failed. See make.install.out."
|
|
# Do not call do_make_install() as binutils needs extra make targets.
|
|
if test -z ${SUDO_PASSWORD}
|
|
then
|
|
make install install-html > make.install.out 2>&1 || task_error "make install failed. See make.install.out."
|
|
else
|
|
echo ${SUDO_PASSWORD}| sudo -S -E PATH=${PATH}:${PREFIX}/bin \
|
|
make install install-html > make.install.out 2>&1 || task_error "make install failed. See make.install.out."
|
|
fi
|
|
|
|
do_popd
|
|
MAKEOPTS=$OLD_MAKEOPTS
|
|
|
|
task_success
|
|
}
|
|
|
|
|
|
function set_gcc_parameters()
|
|
{
|
|
if test -f "${srcdir}/gcc/gcc/BASE-VER"; then
|
|
gcc_version_base=$(cat ${srcdir}/gcc/gcc/BASE-VER)
|
|
case ${gcc_version_base} in
|
|
4.[3456].*)
|
|
read gcc_version_atmel < ${srcdir}/gcc/gcc/ATMEL-VER
|
|
;;
|
|
4.[12].*)
|
|
# GCC 4.1.x or 4.2.x
|
|
gcc_version_atmel=`grep -E "define[[:space:]]{1,}VERSUFFIX" "${srcdir}/gcc/gcc/version.c" | sed -e 's/.*"\([^"]*\)".*/\1/'`
|
|
|
|
# Add some version specific info for certain platforms
|
|
case ${host_platform} in
|
|
i68[3456]-*mingw32 )
|
|
sed 's/\(.*VERSUFFIX "\)\([^"]*\)/\1\2 (mingw32 special)/' ${srcdir}/gcc/gcc/version.c > ${srcdir}/gcc/gcc/version.c.new \
|
|
|| task_error "error adding '(mingw32 special)' to gcc/version.c"
|
|
mv -f ${srcdir}/gcc/gcc/version.c.new ${srcdir}/gcc/gcc/version.c || task_error "error renaming gcc/version.c"
|
|
;;
|
|
i68[3456]-*mingw64 )
|
|
sed 's/\(.*VERSUFFIX "\)\([^"]*\)/\1\2 (mingw64 special)/' ${srcdir}/gcc/gcc/version.c > ${srcdir}/gcc/gcc/version.c.new \
|
|
|| task_error "error adding '(mingw64 special)' to gcc/version.c"
|
|
mv -f ${srcdir}/gcc/gcc/version.c.new ${srcdir}/gcc/gcc/version.c || task_error "error renaming gcc/version.c"
|
|
;;
|
|
* )
|
|
;;
|
|
esac
|
|
;;
|
|
4.0.*)
|
|
# GCC 4.0.x
|
|
gcc_version_atmel=`grep version_string "gcc/version.c" | sed -e 's/.*"\([^"]*\)".*/\1/'`
|
|
# Add some version specific info for certain platforms
|
|
case ${host_platform} in
|
|
i68[3456]-*mingw32 )
|
|
sed 's/\(.*VERSUFFIX "\)\([^"]*\)/\1\2 (mingw32 special)/' ${srcdir}/gcc/gcc/version.c > ${srcdir}/gcc/gcc/version.c.new \
|
|
|| task_error "error adding '(mingw32 special)' to gcc/version.c"
|
|
mv -f ${srcdir}/gcc/gcc/version.c.new ${srcdir}/gcc/gcc/version.c || task_error "error renaming gcc/version.c"
|
|
;;
|
|
i68[3456]-*mingw64 )
|
|
sed 's/\(.*VERSUFFIX "\)\([^"]*\)/\1\2 (mingw64 special)/' ${srcdir}/gcc/gcc/version.c > ${srcdir}/gcc/gcc/version.c.new \
|
|
|| task_error "error adding '(mingw64 special)' to gcc/version.c"
|
|
mv -f ${srcdir}/gcc/gcc/version.c.new ${srcdir}/gcc/gcc/version.c || task_error "error renaming gcc/version.c"
|
|
;;
|
|
* )
|
|
;;
|
|
esac
|
|
;;
|
|
*)
|
|
echo "unsupported GCC Version ${gcc_version_base}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
else
|
|
# Cant't get gcc version, just set something usefull.
|
|
gcc_version_base="4.3.2"
|
|
gcc_version_atmel="atmel-$(date +%Y%m%d%H%M%Z)"
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
function gcc_prep()
|
|
{
|
|
if test -f ${srcdir}/gcc/.prep_done
|
|
then
|
|
set_gcc_parameters
|
|
return
|
|
fi
|
|
|
|
|
|
task_start "Preparing GCC... "
|
|
do_pushd ${srcdir}
|
|
|
|
rm -rf gcc gcc-[0-9]\.[0-9]\.[0-9] || task_error "Removing old gcc folders failed"
|
|
|
|
upstream_source=$(ls ${srcdir}/gcc-*-patches/gcc-*.*.*)
|
|
|
|
unpack_upstream_source ${srcdir} ${upstream_source}
|
|
|
|
# Link the unpacked folder to a generic folder for futhure work
|
|
ln -s $(ls -d gcc-[0-9]\.[0-9]\.[0-9]) gcc || task_error "Error linking gcc folder"
|
|
apply_patches ${srcdir}/gcc $(ls -d ${srcdir}/gcc-*-patches)
|
|
|
|
# Prepare for configuration.
|
|
if [ ! -d ${srcdir}/gcc ] ; then
|
|
echo "Can't find gcc source."
|
|
exit 1
|
|
fi
|
|
set_gcc_parameters
|
|
|
|
cd gcc
|
|
case ${gcc_version_base} in
|
|
4.[3456].*)
|
|
# Some sed magic to make autotools work on platforms with different autotools version
|
|
sed -i 's/m4_copy(\[AC_PREREQ\]/m4_copy_force(\[AC_PREREQ\]/g' ./config/override.m4 || task_error "sed failed"
|
|
sed -i 's/m4_copy(\[_AC_PREREQ\]/m4_copy_force(\[_AC_PREREQ\]/g' ./config/override.m4 || task_error "sed failed"
|
|
sed -i 's/ \[m4_fatal(\[Please use exactly Autoconf \]/ \[m4_errprintn(\[Please use exactly Autoconf \]/g' ./config/override.m4 || task_error "sed failed"
|
|
autoconf || task_error "autoconf failed"
|
|
# Running autoreconf in libstdc++ does not seem to be necessary in 4.3.x
|
|
# and it causes some problems on platform with auto-tool >2.61
|
|
;;
|
|
4.[012].*)
|
|
${AUTOCONF213_EXE} || task_error "autoconf failed"
|
|
# TODO: Check if this autoreconf is necessary?
|
|
# I do not remember why we have to do this in libstdc++
|
|
# Its here because it has "always" been here.
|
|
do_pushd libstdc++-v3
|
|
autoreconf || task_error "libstdc++-v3 autoreconf failed"
|
|
do_popd
|
|
;;
|
|
*)
|
|
echo "Unsupported GCC version ${gcc_version_base}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
do_popd
|
|
task_success
|
|
touch ${srcdir}/gcc/.prep_done
|
|
}
|
|
|
|
|
|
# First step building GCC.
|
|
# arg1 = target
|
|
function gcc_build_bootstrap()
|
|
{
|
|
local gcc_target=${1}
|
|
local gcc_extra_opts=""
|
|
local gcc_doc_opts=""
|
|
local gcc_extra_config=""
|
|
local gcc_ldflags=""
|
|
local gcc_cppflags=""
|
|
|
|
task_start "Building bootstrap GCC for ${gcc_target}... "
|
|
remove_build_folder "${gcc_target}-gcc-bootstrap"
|
|
OLD_MAKEOPTS=$MAKEOPTS
|
|
MAKEOPTS=""
|
|
do_mkpushd ${builddir}/${gcc_target}-gcc-bootstrap
|
|
|
|
# Are we doing a canadian cross?
|
|
if ${canadian_cross}; then
|
|
gcc_extra_opts=""
|
|
else
|
|
gcc_extra_opts=""
|
|
fi
|
|
|
|
case ${gcc_version_base} in
|
|
4.[3456].*)
|
|
gcc_extra_opts="${gcc_extra_opts} \
|
|
--with-pkgversion="AVR_Toolchain_3.0_$(date +%Y%m%d%H%M)" \
|
|
--with-bugurl="http://www.atmel.com"
|
|
"
|
|
;;
|
|
|
|
*)
|
|
# Do nothing
|
|
;;
|
|
esac
|
|
|
|
gcc_ldflags="-L${PREFIX}/${LIB_DIR}"
|
|
|
|
# Configure.
|
|
${srcdir}/gcc/configure \
|
|
"LDFLAGS=${gcc_ldflags}" "CPPFLAGS=${gcc_cppflags}" \
|
|
--target=${gcc_target} \
|
|
--host=${host_platform} \
|
|
--build=${build_platform} \
|
|
--prefix=${PREFIX} \
|
|
--libdir=${PREFIX}/${LIB_DIR} \
|
|
--enable-languages="c" \
|
|
${gcc_extra_opts} \
|
|
--with-dwarf2 \
|
|
--enable-doc \
|
|
--disable-shared \
|
|
--disable-libada \
|
|
--disable-libssp \
|
|
--disable-nls \
|
|
--with-mpfr=${PREFIX} \
|
|
--with-gmp=${PREFIX} \
|
|
--with-mpc=${PREFIX} \
|
|
> configure.out 2>&1 || task_error "configure failed. See configure.out."
|
|
|
|
# Build.
|
|
do_make "Building failed. See make.out."
|
|
task_success
|
|
|
|
# Install.
|
|
task_start "Installing bootstrap GCC for ${gcc_target}... "
|
|
do_make_install "Installing failed. See make.install.out."
|
|
|
|
do_popd
|
|
MAKEOPTS=$OLD_MAKEOPTS
|
|
task_success
|
|
}
|
|
|
|
|
|
# Build GCC again, after avr-libc has been built.
|
|
# arg1 = target
|
|
function gcc_build_full()
|
|
{
|
|
local gcc_target=${1}
|
|
local gcc_extra_opts=""
|
|
local gcc_doc_opts=""
|
|
local gcc_extra_config=""
|
|
local gcc_ldflags=""
|
|
local gcc_cppflags=""
|
|
|
|
task_start "Building full GCC for $1... "
|
|
remove_build_folder "${1}-gcc-full"
|
|
OLD_MAKEOPTS=$MAKEOPTS
|
|
MAKEOPTS=""
|
|
do_mkpushd ${builddir}/${1}-gcc-full
|
|
# Are we doing a canadian cross?
|
|
if ${canadian_cross}; then
|
|
case ${host_platform} in
|
|
i68[3456]-*mingw32 )
|
|
gcc_extra_opts="--enable-win32-registry=avrtoolchain"
|
|
#export LDFLAGS="-L ${PREFIX}/lib"
|
|
#export CPPFLAGS="-I ${PREFIX}/include"
|
|
|
|
;;
|
|
* )
|
|
gcc_extra_opts=""
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
case ${gcc_version_base} in
|
|
4.[456].*)
|
|
gcc_extra_opts="${gcc_extra_opts} \
|
|
--enable-fixed-point
|
|
"
|
|
gcc_extra_opts="${gcc_extra_opts} \
|
|
--with-pkgversion="AVR_8_bit_GNU_Toolchain_${avr_8_gnu_toolchain_version}_${BUILD_NUMBER}" \
|
|
--with-bugurl="http://www.atmel.com"
|
|
"
|
|
;;
|
|
4.[3].*)
|
|
gcc_extra_opts="${gcc_extra_opts} \
|
|
--with-pkgversion="AVR_8_bit_GNU_Toolchain_${avr_8_gnu_toolchain_version}_${BUILD_NUMBER}" \
|
|
--with-bugurl="http://www.atmel.com"
|
|
"
|
|
;;
|
|
|
|
*)
|
|
# Do nothing
|
|
;;
|
|
esac
|
|
|
|
# Make sure we always include the correct library folder when linking
|
|
gcc_ldflags="-L${PREFIX}/${LIB_DIR}"
|
|
|
|
# Add extra configs to be used when running make
|
|
case "${host_platform}" in
|
|
i[3456]86*-linux*)
|
|
gcc_extra_config="LDFLAGS=-static"
|
|
|
|
;;
|
|
x86_64*-linux*)
|
|
gcc_extra_config="LDFLAGS=-static"
|
|
;;
|
|
i[3456789]86*-mingw32*)
|
|
gcc_extra_config=""
|
|
# Commented out by pablaasmo due to problemes setting docdir for GCC 4.4.x
|
|
# gcc_doc_opts="--infodir=${PREFIX}/info \
|
|
# --mandir=${PREFIX}/man \
|
|
# --docdir=${PREFIX}/doc/gcc/${gcc_version_base}"
|
|
;;
|
|
*)
|
|
gcc_extra_config=""
|
|
esac
|
|
|
|
# Configure.
|
|
${srcdir}/gcc/configure \
|
|
"LDFLAGS=${gcc_ldflags}" "CPPFLAGS=${gcc_cppflags}" \
|
|
--target=$1 \
|
|
--host=${host_platform} \
|
|
--build=${build_platform} \
|
|
--prefix=${PREFIX} \
|
|
--libdir=${PREFIX}/${LIB_DIR} \
|
|
--enable-languages="c,c++" \
|
|
--with-dwarf2 \
|
|
--enable-doc \
|
|
--disable-shared \
|
|
--disable-libada \
|
|
--disable-libssp \
|
|
--disable-nls \
|
|
--with-mpfr=${PREFIX} \
|
|
--with-gmp=${PREFIX} \
|
|
--with-mpc=${PREFIX} \
|
|
${gcc_extra_opts} \
|
|
${gcc_doc_opts} \
|
|
> configure.out 2>&1 || task_error "configure failed. See configure.out."
|
|
|
|
# Build.
|
|
make ${gcc_extra_config} all html >> make.out 2>&1 || task_error "make failed. See make.out."
|
|
task_success
|
|
|
|
# Install.
|
|
task_start "Installing full GCC for $1..."
|
|
#do_make_install "make install failed. See make.install.out."
|
|
# Do not call do_make_install() as gcc needs extra make targets.
|
|
if test -z ${SUDO_PASSWORD}
|
|
then
|
|
make install install-html > make.install.out 2>&1 || task_error "make install failed. See make.install.out."
|
|
else
|
|
echo ${SUDO_PASSWORD}| sudo -S -E PATH=${PATH}:${PREFIX}/bin \
|
|
make install install-html > make.install.out 2>&1 || task_error "make install failed. See make.install.out."
|
|
fi
|
|
|
|
do_popd
|
|
MAKEOPTS=$OLD_MAKEOPTS
|
|
task_success
|
|
}
|
|
|
|
function prep_headers () {
|
|
task_start "Preparing Headers..."
|
|
|
|
# Checking if headers exist. Error is it does not
|
|
|
|
HEADER=$(ls -1 ${srcdir}/headers/ | tail -n 1)
|
|
if test -z "$HEADER"
|
|
then
|
|
echo "No file present in the directory"
|
|
exit 1
|
|
fi
|
|
|
|
# Unzipping the latest header in the
|
|
unzip -o ${srcdir}/headers/$HEADER -d ${srcdir}/avr-headers-latest/
|
|
|
|
# Copying non public header files to the avr location.
|
|
for i in `find ${srcdir}/avr-headers-latest/avr/nonpublic -name *.h`
|
|
do
|
|
cp $i ${srcdir}/avr-headers-latest/avr/ -v
|
|
done
|
|
|
|
task_success
|
|
}
|
|
|
|
function replace_avr_headers()
|
|
{
|
|
avr_headers_dir=$1
|
|
avr_libc_srcdir=$2
|
|
for i in ${avr_headers_dir}/avr/io[0-9a-zA-Z]*.h
|
|
do
|
|
# Copy the avr-headers generated header files but do not replace legacy headers
|
|
# header_name=`basename $i`
|
|
# if ! test -a ${avr_libc_srcdir}/include/avr/$header_name; then
|
|
cp --verbose --force $i ${avr_libc_srcdir}/include/avr/ || task_error "Replacing avr-libc headers with avr-headers"
|
|
# else
|
|
# echo "skipping: $header_name"
|
|
# fi
|
|
done
|
|
}
|
|
|
|
function avr_libc_prep()
|
|
{
|
|
if test -f ${srcdir}/avr-libc/.prep_done
|
|
then
|
|
return
|
|
fi
|
|
|
|
task_start "Preparing avr-libc... "
|
|
do_pushd ${srcdir}
|
|
|
|
|
|
rm -rf avr-libc avr-libc-[0-9]\.[0-9]*\.[0-9] || task_error "Removing old avr-libc folders failed"
|
|
|
|
upstream_source=$(ls ${srcdir}/avr-libc-*-patches/avr-libc-*.*.*)
|
|
|
|
unpack_upstream_source ${srcdir} ${upstream_source}
|
|
|
|
# Link the unpacked folder to a generic folder for futhure work
|
|
ln -s $(ls -d avr-libc-[0-9]\.[0-9]*\.[0-9]) avr-libc || task_error "Error linking avr-libc folder"
|
|
apply_patches ${srcdir}/avr-libc $(ls -d ${srcdir}/avr-libc-*-patches)
|
|
|
|
if [ ! -d ${srcdir}/avr-libc ] ; then
|
|
echo "Can't find avr-libc source."
|
|
exit 1
|
|
fi
|
|
|
|
# Prepare the headers before replacing
|
|
prep_headers
|
|
# Replace the AVR-libc headers with the header files from avr-headers
|
|
replace_avr_headers ${srcdir}/avr-headers-latest ${srcdir}/avr-libc
|
|
|
|
# Run the bootstrap script.
|
|
cd ${srcdir}/avr-libc
|
|
./bootstrap > preparation.out 2>&1
|
|
|
|
do_popd
|
|
task_success
|
|
touch ${srcdir}/avr-libc/.prep_done
|
|
}
|
|
|
|
|
|
function avr_libc_build()
|
|
{
|
|
task_start "Building avr-libc ... "
|
|
remove_build_folder "avr-libc"
|
|
OLD_MAKEOPTS=$MAKEOPTS
|
|
MAKEOPTS=""
|
|
do_mkpushd ${builddir}/avr-libc
|
|
|
|
${srcdir}/avr-libc/configure \
|
|
--host=avr \
|
|
--prefix="$PREFIX" \
|
|
--libdir=${PREFIX}/${LIB_DIR} \
|
|
--enable-doc \
|
|
--disable-versioned-doc \
|
|
--enable-html-doc \
|
|
--enable-pdf-doc \
|
|
--enable-man-doc \
|
|
--mandir="$PREFIX"/man \
|
|
--datadir="$PREFIX" \
|
|
> configure.out 2>&1 || \
|
|
task_error "configure failed. See configure.out"
|
|
|
|
make >make.out 2>&1 || task_error "Building failed. See make.out."
|
|
task_success
|
|
|
|
# Installing.
|
|
task_start "Installing avr-libc ... "
|
|
make install >make-install.out 2>&1 || task_error "Installing avr-libc failed. See make.install.out."
|
|
|
|
# todo: Convert line endings in examples, if host=mingw.
|
|
# find $installdir/doc/avr-libc/examples -name '*.*' -print -exec $startdir/utils/bin/todos -o '{}' ';'
|
|
|
|
|
|
# todo: Move man pages.
|
|
# cp -rf "$PREFIX"/doc/avr-libc/man "$PREFIX"/man
|
|
# rm -rf "$PREFIX"/doc/avr-libc/man
|
|
|
|
|
|
do_popd
|
|
MAKEOPTS=$OLD_MAKEOPTS
|
|
task_success
|
|
}
|
|
|
|
|
|
function set_gdb_parameters()
|
|
{
|
|
if test -f "${srcdir}/gdb/bfd/ATMEL-VER"; then
|
|
read gdb_version_atmel < ${srcdir}/gdb/bfd/ATMEL-VER
|
|
else
|
|
gdb_version_atmel="atmel-$(date +%Y%m%d%H%M%Z)"
|
|
fi
|
|
}
|
|
|
|
|
|
function gdb_prep()
|
|
{
|
|
if test -f ${srcdir}/gdb/.prep_done
|
|
then
|
|
set_gdb_parameters
|
|
return
|
|
fi
|
|
|
|
task_start "Preparing GDB... "
|
|
|
|
do_pushd ${srcdir}
|
|
rm -rf gdb gdb-[0-9]\.[0-9]* || task_error "Removing old gdb folders failed"
|
|
upstream_source=$(ls ${srcdir}/gdb-*-patches/gdb-*.*)
|
|
unpack_upstream_source ${srcdir} ${upstream_source}
|
|
|
|
# Link the unpacked folder to a generic folder for futhure work
|
|
ln -s $(ls -d gdb-[0-9]\.[0-9]*) gdb || task_error "Error linking gcc folder"
|
|
apply_patches ${srcdir}/gdb $(ls -d ${srcdir}/gdb-*-patches)
|
|
|
|
if [ ! -d ${srcdir}/gdb ] ; then
|
|
echo "Can't find gdb source."
|
|
exit 1
|
|
fi
|
|
set_gdb_parameters
|
|
|
|
do_popd
|
|
task_success
|
|
touch ${srcdir}/gdb/.prep_done
|
|
}
|
|
|
|
|
|
function gdb_build()
|
|
{
|
|
task_start "Building GDB for $1... "
|
|
remove_build_folder "${1}-gdb"
|
|
OLD_MAKEOPTS=$MAKEOPTS
|
|
MAKEOPTS=""
|
|
do_mkpushd ${builddir}/${1}-gdb
|
|
|
|
# Are we doing a canadian cross?
|
|
if ${canadian_cross}; then
|
|
case ${host_platform} in
|
|
i[3456]86-*mingw32 )
|
|
export LDFLAGS="-L${PREFIX}/lib"
|
|
export CPPFLAGS="-I${PREFIX}/include"
|
|
;;
|
|
i[3456]86*-linux*)
|
|
export LDFLAGS="-static"
|
|
;;
|
|
* )
|
|
;;
|
|
esac
|
|
else
|
|
export LDFLAGS="-static"
|
|
fi
|
|
|
|
|
|
# only from version 7.0 is --with-pkgversion and bugurls supported
|
|
# LDFLAGS='-static' \
|
|
CFLAGS="-I${PREFIX}/include -L${PREFIX}/lib" \
|
|
${srcdir}/gdb/configure \
|
|
--with-pkgversion="AVR_8_bit_GNU_Toolchain_${avr_8_gnu_toolchain_version}_${BUILD_NUMBER}"\
|
|
--with-bugurl="http://www.atmel.com"\
|
|
--target=$1 \
|
|
--host=${host_platform} \
|
|
--build=${build_platform} \
|
|
--libdir=${PREFIX}/${LIB_DIR} \
|
|
--prefix="$PREFIX" \
|
|
--disable-nls \
|
|
--disable-werror \
|
|
> configure.out 2>&1 \
|
|
|| task_error "configure for $1 failed. See configure.out"
|
|
|
|
# Build.
|
|
do_make "Building for $1 failed. See make.out."
|
|
task_success
|
|
|
|
# Install.
|
|
task_start "Installing GBD for $1... "
|
|
do_make_install "Installing GDB for $1 failed. See make.install.out."
|
|
do_popd
|
|
|
|
|
|
MAKEOPTS=$OLD_MAKEOPTS
|
|
task_success
|
|
}
|
|
function mpfr_prep() {
|
|
task_start "Unpacking mpfr... "
|
|
tar --extract --ungzip --directory ${srcdir} --file ${srcdir}/mpfr/mpfr*.tar.gz ||\
|
|
task_error "Failed to unpack mpfr"
|
|
task_success
|
|
}
|
|
|
|
|
|
function mpfr_build() {
|
|
|
|
task_start "Building libmpfr ..."
|
|
remove_build_folder "mpfr"
|
|
do_mkpushd ${builddir}/mpfr
|
|
|
|
CFLAGS="-fPIC" $(ls -d ${srcdir}/mpfr-*)/configure \
|
|
--build=${build_platform} \
|
|
--host=${host_platform} \
|
|
--prefix=${PREFIX} \
|
|
--libdir=${PREFIX}/${LIB_DIR} \
|
|
--with-gmp=${PREFIX} \
|
|
--disable-shared \
|
|
--enable-static \
|
|
> configure.out 2>&1 || task_error "configure failed. See configure.out."
|
|
|
|
do_make "Failed building libmphr. See make.out"
|
|
task_success
|
|
task_start "Installing mpfr ..."
|
|
do_make_install "make install failed. See make.install.out."
|
|
do_popd
|
|
task_success
|
|
|
|
}
|
|
|
|
function gmp_prep() {
|
|
task_start "Unpacking gmp... "
|
|
upstream_source=$(ls ${srcdir}/gmp/gmp*)
|
|
unpack_upstream_source ${srcdir} ${upstream_source}
|
|
task_success
|
|
}
|
|
|
|
|
|
function gmp_build() {
|
|
|
|
task_start "Building libgmp ..."
|
|
remove_build_folder "gmp"
|
|
do_mkpushd ${builddir}/gmp
|
|
|
|
CC_FOR_BUILD="gcc" CFLAGS="-fPIC" $(ls -d ${srcdir}/gmp-[0-9].*)/configure \
|
|
--build=${build_platform} \
|
|
--host=${host_platform} \
|
|
--libdir=${PREFIX}/${LIB_DIR} \
|
|
--prefix=${PREFIX} \
|
|
--disable-shared \
|
|
--enable-static \
|
|
> configure.out 2>&1 || task_error "configure failed. See configure.out."
|
|
|
|
do_make "Failed building libgmp. See make.out"
|
|
task_success
|
|
task_start "Installing gmp ..."
|
|
do_make_install "make install failed. See make.install.out."
|
|
do_popd
|
|
task_success
|
|
|
|
}
|
|
|
|
function mpc_prep() {
|
|
task_start "Unpacking mpc... "
|
|
upstream_source=$(ls ${srcdir}/mpc/mpc*)
|
|
unpack_upstream_source ${srcdir} ${upstream_source}
|
|
task_success
|
|
}
|
|
|
|
|
|
function mpc_build() {
|
|
|
|
task_start "Building libmpc ..."
|
|
remove_build_folder "mpc"
|
|
do_mkpushd ${builddir}/mpc
|
|
|
|
CFLAGS="-fPIC" $(ls -d ${srcdir}/mpc-[0-9].[0-9]*)/configure \
|
|
--build=${build_platform} \
|
|
--host=${host_platform} \
|
|
--libdir=${PREFIX}/${LIB_DIR} \
|
|
--disable-shared \
|
|
--enable-static \
|
|
--prefix=${PREFIX} \
|
|
--with-mpfr=${PREFIX} \
|
|
--with-gmp=${PREFIX} \
|
|
> configure.out 2>&1 || task_error "configure failed. See configure.out."
|
|
|
|
do_make "Failed building libmpc. See make.out"
|
|
task_success
|
|
task_start "Installing mpc ..."
|
|
do_make_install "make install failed. See make.install.out."
|
|
do_popd
|
|
task_success
|
|
|
|
}
|
|
|
|
function ncurses_prep() {
|
|
task_start "Unpacking ncurses... "
|
|
upstream_source=$(ls ${srcdir}/ncurses/ncurses*)
|
|
unpack_upstream_source ${srcdir} ${upstream_source}
|
|
task_success
|
|
}
|
|
|
|
|
|
function ncurses_build() {
|
|
task_start "Building ncurses ..."
|
|
remove_build_folder "ncurses"
|
|
do_mkpushd ${builddir}/ncurses
|
|
|
|
CFLAGS="-fPIC" $(ls -d ${srcdir}/ncurses-[0-9].*)/configure \
|
|
--build=${build_platform} \
|
|
--host=${host_platform} \
|
|
--libdir=${PREFIX}/${LIB_DIR} \
|
|
--without-shared \
|
|
--without-sysmouse \
|
|
--without-progs \
|
|
--enable-termcap \
|
|
--prefix=${PREFIX} \
|
|
> configure.out 2>&1 || task_error "configure failed. See configure.out."
|
|
|
|
do_make "Failed building ncurses. See make.out"
|
|
task_success
|
|
task_start "Installing ncurses ..."
|
|
do_make_install "make install failed. See make.install.out."
|
|
do_popd
|
|
task_success
|
|
}
|
|
|
|
############# Start of main program. ####################
|
|
start_timer
|
|
|
|
############ Set up some usable variables #######################
|
|
SUDO_PASSWORD=
|
|
KEEP_BUILD_FOLDER="NO"
|
|
TIMESTAMP=$(date +%Y%m%d%H%M)
|
|
binutils_version_atmel="atmel-$(date +%Y%m%d%H%M%Z)"
|
|
gcc_version_atmel="atmel-$(date +%Y%m%d%H%M%Z)"
|
|
gdb_version_atmel="atmel-$(date +%Y%m%d%H%M%Z)"
|
|
platform_version=""
|
|
srcdir=
|
|
builddir=
|
|
execdir=`pwd`
|
|
|
|
# Set Toolchain version number
|
|
# Use env variable AVR_GNU_TOOLCHAIN_VERSION if set
|
|
avr_8_gnu_toolchain_version=${AVR_8_GNU_TOOLCHAIN_VERSION:-"3.2.0"}
|
|
|
|
# Set BUILD_NUMBER
|
|
# BUILD_NUMBER is set by Hudson build server or can be set before running this script
|
|
# If not set we use the date
|
|
BUILD_NUMBER=${BUILD_NUMBER:-$(date +%Y%m%d%H%M)}
|
|
|
|
# Set defaults
|
|
canadian_cross=false
|
|
build_platform=$(uname -i)-pc-linux-gnu
|
|
host_platform=$(uname -i)-pc-linux-gnu
|
|
distribution="unknown"
|
|
|
|
# Set up the packages to build
|
|
# The order gives the build order and is significant
|
|
#packages="avr-binutils avr-gcc-bootstrap avr-libc avr-gcc-full avr-gdb"
|
|
# avr-gdb is removed from package (binutils-2.22's bfd causes avr-gdb to fail)
|
|
packages="avr-binutils avr-gcc-bootstrap avr-libc avr-gcc-full"
|
|
|
|
# See if we need to change or set some defaults
|
|
if test "${OSTYPE}" = "cygwin"
|
|
then
|
|
build_platform=i686-pc-cygwin
|
|
host_platform=i686-pc-cygwin
|
|
elif test "${OSTYPE}" = "msys"
|
|
then
|
|
build_platform=i686-pc-mingw32
|
|
host_platform=i686-pc-mingw32
|
|
else
|
|
distribution=`lsb_release -i | cut -f2` || echo "WARNING: Couldn't determine which distribution"
|
|
fi
|
|
|
|
# Ubuntu has some strange naming of old autoconf-2.13
|
|
if test ${distribution} = "Ubuntu"
|
|
then
|
|
AUTOCONF213_EXE=autoconf2.13
|
|
else
|
|
AUTOCONF213_EXE=autoconf-2.13
|
|
fi
|
|
|
|
|
|
############ Get and decode options given #########################
|
|
while getopts "B:b:klhH:p:P:s:T:" options; do
|
|
case $options in
|
|
B ) build_platform=$OPTARG
|
|
;;
|
|
b ) builddir=$OPTARG
|
|
;;
|
|
H ) host_platform=$OPTARG
|
|
;;
|
|
k )
|
|
KEEP_BUILD_FOLDER="YES"
|
|
;;
|
|
l )
|
|
echo "Default packages and build order:"
|
|
for package in $packages
|
|
do
|
|
echo $package
|
|
done
|
|
exit 1
|
|
;;
|
|
p ) AVR_PREFIX=$OPTARG
|
|
;;
|
|
P ) SUDO_PASSWORD=$OPTARG
|
|
;;
|
|
s ) srcdir=$OPTARG
|
|
;;
|
|
h ) echo "$usage"
|
|
exit 1;;
|
|
\? ) echo "$usage"
|
|
exit 1;;
|
|
* ) echo "$usage"
|
|
exit 1;;
|
|
|
|
esac
|
|
done
|
|
|
|
shift $(($OPTIND - 1)) ## no need for expr in bash or other POSIX shell
|
|
|
|
|
|
######### Set packages to arguments given or to default ###########
|
|
if test $# -ne 0
|
|
then
|
|
packages="$@"
|
|
fi
|
|
|
|
|
|
############ Check for source directory ###########################
|
|
if test -z $srcdir
|
|
then
|
|
echo "Using current directory as source folder."
|
|
srcdir=$(pwd)
|
|
else
|
|
echo "Using '${srcdir}' as source folder."
|
|
fi
|
|
|
|
if [ -d ${srcdir} ]
|
|
then
|
|
# Convert path to absolute path
|
|
srcdir=$(cd ${srcdir}; pwd)
|
|
else
|
|
echo "Error: Can't find source folder!"
|
|
exit 1
|
|
fi
|
|
|
|
|
|
############ Make the build dir ###################################
|
|
builddir="${builddir:-build}"
|
|
mkdir -p ${builddir} || task_error "Cannot create build folder"
|
|
|
|
# Get absolute path for builddir
|
|
builddir=$(cd ${builddir}; pwd)
|
|
|
|
############# Set correct libdir #################################
|
|
case "${host_platform}" in
|
|
i[3456]86-*-linux-gnu*)
|
|
LIB_DIR=lib
|
|
;;
|
|
x86_64*-linux*)
|
|
LIB_DIR=lib
|
|
;;
|
|
*)
|
|
LIB_DIR=lib
|
|
;;
|
|
esac
|
|
|
|
######### Check for crosscompile ###############
|
|
|
|
# If build_platform != host_platform != target_platform
|
|
# then we are doing canadian cross
|
|
# since target always is avr32 or avr32-linux we check only
|
|
# the build and host platforms
|
|
if test ${host_platform} != ${build_platform}
|
|
then
|
|
canadian_cross=true;
|
|
fi
|
|
|
|
# Set some platform variables
|
|
case "${host_platform}" in
|
|
i[3456]86*-linux*)
|
|
platform_version="\(linux32_special\)"
|
|
;;
|
|
x86_64*-linux*)
|
|
platform_version="\(linux64_special\)"
|
|
;;
|
|
i[3456]86*-cygwin*)
|
|
platform_version="\(cygwin_special\)"
|
|
;;
|
|
i[3456789]86*-mingw32*)
|
|
# Maybe check for some prerequisite?
|
|
export CFLAGS="-D__USE_MINGW_ACCESS"
|
|
platform_version="\(mingw32_special\)"
|
|
;;
|
|
sparc*-sun-solaris2.[56789]*)
|
|
;;
|
|
sparc*-sun-solaris*)
|
|
;;
|
|
mips*-*-elf*)
|
|
;;
|
|
* )
|
|
echo "Unknown host platform: ${host_platform}"
|
|
;;
|
|
esac
|
|
|
|
|
|
############ Set PREFIX ############################
|
|
PREFIX="${AVR_PREFIX:-/usr/local}"
|
|
# Make sure it is absolute path
|
|
PREFIX=$(cd ${PREFIX}; pwd)
|
|
|
|
PATH=$PATH:$PREFIX/bin
|
|
export PATH
|
|
|
|
############# Check if user has write access to prefix folder ####
|
|
if test ! -w ${PREFIX} -a -z "${SUDO_PASSWORD}"
|
|
then
|
|
echo "WARNING! You do not have write access to the $PREFIX folder! Installation will fail."
|
|
fi
|
|
|
|
|
|
############# Check for necessary programs #######################
|
|
for PREREQ in autoconf make gcc tar patch \
|
|
pdflatex pngtopnm epstopdf
|
|
do
|
|
RUN=`type -ap $PREREQ |sort |uniq |wc -l`
|
|
if [ $RUN -eq 0 ]
|
|
then
|
|
echo "$PREREQ is not found in command path. Can't continue"
|
|
exit 1
|
|
elif [ $RUN -gt 1 ]
|
|
then
|
|
echo -n "Found multiple versions of $PREREQ, using the one at "
|
|
type -p $PREREQ
|
|
fi
|
|
done
|
|
|
|
|
|
############# First we make necessary preparations ###############
|
|
for part in ${packages}
|
|
do
|
|
case ${part} in
|
|
"avr-binutils" )
|
|
binutils_prep
|
|
;;
|
|
"avr-gcc-bootstrap" | "avr-gcc-full" )
|
|
gmp_prep
|
|
mpfr_prep
|
|
mpc_prep
|
|
gcc_prep
|
|
;;
|
|
"avr-libc" )
|
|
avr_libc_prep
|
|
;;
|
|
"avr-gdb" )
|
|
ncurses_prep
|
|
gdb_prep
|
|
;;
|
|
* )
|
|
echo "Error: Unknown package ${part}."
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
|
|
############# Building and installing ###########
|
|
# The order of building is given by the order in the packages variable
|
|
for part in ${packages}
|
|
do
|
|
case ${part} in
|
|
"avr-binutils" )
|
|
binutils_build "avr"
|
|
;;
|
|
"avr-gcc-bootstrap" )
|
|
gmp_build
|
|
mpfr_build
|
|
mpc_build
|
|
gcc_build_bootstrap "avr"
|
|
;;
|
|
"avr-libc" )
|
|
avr_libc_build
|
|
;;
|
|
"avr-gcc-full" )
|
|
case ${host_platform} in
|
|
i68[3456]-*mingw32 )
|
|
# we asume gmp and mpfr binaries is preinstalled.
|
|
gmp_build
|
|
mpfr_build
|
|
;;
|
|
*linux* )
|
|
gmp_build
|
|
mpfr_build
|
|
;;
|
|
* )
|
|
;;
|
|
esac
|
|
mpc_build
|
|
gcc_build_full "avr"
|
|
;;
|
|
"avr-gdb" )
|
|
case ${host_platform} in
|
|
i68[3456]-*mingw32 )
|
|
# we asume libtermcap binaries is preinstalled.
|
|
;;
|
|
*linux* )
|
|
ncurses_build
|
|
;;
|
|
* )
|
|
;;
|
|
esac
|
|
gdb_build "avr"
|
|
;;
|
|
* )
|
|
echo "Error: Unknown package ${part}."
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
|
|
|
|
end_timer
|
|
report_time
|
|
exit 0
|
|
|
|
|
|
##################################################################
|
|
# Now you should have a complete development enviroment for avr
|
|
# installed at 'prefix' location.
|