Skip to content

Instantly share code, notes, and snippets.

@NicoHood
Forked from facchinm/0001-gcc.patch
Last active March 19, 2016 07:18
Show Gist options
  • Save NicoHood/58e82f19c6b97463025e to your computer and use it in GitHub Desktop.
Save NicoHood/58e82f19c6b97463025e to your computer and use it in GitHub Desktop.
*.bz2
*.gz
*~
binutils-*/*
gcc-*/*
isl-*/*
cloog-*/*
gmp-*/*
mpfr-*/*
mpc-*/*
avr-libc-*/*
avrdude-*/*
#!/bin/bash -ex
# Copyright (c) 2014-2015 Arduino LLC
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# linux - ./build.all.new.bash
# windows - ./build.all.new.bash -h=i686-w64-mingw32"
# Changelog:
# Removed gcc patch (no longer required with gcc 5.3)
# Updated avr-libc download page
# Added -j --jobs option
# Added avrdude
# TODO
# Remove build paramater? http://airs.com/ian/configure/configure_6.html
# https://github.com/NicoHood/PinChangeInterrupt/commit/f81d538ce287561764811c9db3dee2fca9da0c66
# Download mirrors to lookup the latest version:
# ftp://ftp.gnu.org/gnu/binutils/
# ftp://gcc.gnu.org/pub/gcc/releases/
# http://isl.gforge.inria.fr/
# http://www.bastoul.net/cloog/pages/download/
# http://mirror.switch.ch/ftp/mirror/gnu/gmp/
# http://mirror.switch.ch/ftp/mirror/gnu/mpfr/
# ftp://ftp.gnu.org/gnu/mpc/
# http://download.savannah.gnu.org/releases/avr-libc/
# http://download.savannah.gnu.org/releases/avrdude/
export BINUTILS_VERSION=2.26
export GCC_VERSION=5.3.0
export ISL_VERSION=0.16.1
export CLOOG_VERSION=0.18.4
export GMP_VERSION=6.1.0
export MPFR_VERSION=3.1.3
export MPC_VERSION=1.0.3
export AVRLIBC_VERSION=2.0.0
export AVRDUDE_VERSION=6.3
for i in "$@"
do
case $i in
-h=*|--host=*)
export HOST="${i#*=}"
;;
-p=*|--path=*)
export PATH=$PATH:"${i#*=}"
;;
-cc=*)
export CC="${i#*=}"
;;
-cxx=*)
export CXX="${i#*=}"
;;
-cflags=*)
export CFLAGS="${i#*=}"
;;
-cxxflags=*)
export CXXFLAGS="${i#*=}"
;;
-ldflags=*)
export LDFLAGS="${i#*=}"
;;
-j=*|--jobs=*)
export JOBS="${i#*=}"
;;
clean)
rm -rf gcc-$GCC_VERSION
rm -rf binutils-$BINUTILS_VERSION
rm -rf avr-libc-$AVRLIBC_VERSION
rm -rf avrdude-$AVRDUDE_VERSION
rm -rf gcc-build
exit
;;
cleanall)
rm -rf gcc-$GCC_VERSION
rm -rf binutils-$BINUTILS_VERSION
rm -rf avr-libc-$AVRLIBC_VERSION
rm -rf avrdude-$AVRDUDE_VERSION
rm -rf gcc-build
rm *.tar.bz2
rm *.tar.gz
exit
;;
*)
# unknown option
;;
esac
done
export home=`pwd`
if [ "$JOBS" == "" ]; then
export JOBS=$(nproc)
fi
# On linux Elementary OS laptop:
# /binutils-2.26/config.guess x86_64-pc-linux-gnu
# /gcc-5.3.0/config.guess x86_64-unknown-linux-gnu
# /avr-libc-2.0.0/config.guess x86_64-unknown-linux-gnu
config_guess=`./binutils-$BINUTILS_VERSION/config.guess`
if [ "$HOST" == "" ]; then
export HOST=${config_guess}
fi
export pkgdir=${home}/pkg-$HOST/
export pkgdir_build=${home}/pkg-${config_guess}/
################################################################################
# binutils
################################################################################
# Download
if [ ! -f binutils-$BINUTILS_VERSION.tar.bz2 ]; then
wget ftp://ftp.gnu.org/gnu/binutils/binutils-$BINUTILS_VERSION.tar.bz2
fi
# Extract and enter directory
rm -rf binutils-$BINUTILS_VERSION
tar xf binutils-$BINUTILS_VERSION.tar.bz2
cd binutils-$BINUTILS_VERSION
# Patch and configure
curl https://projects.archlinux.org/svntogit/community.git/plain/trunk/avr-size.patch?h=packages/avr-binutils > 01-avr-size.patch
patch -Np0 < 01-avr-size.patch
sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" libiberty/configure
./configure \
--prefix=$pkgdir \
--with-bugurl=https://github.com/arduino/toolchain-avr/ \
--enable-gold \
--enable-ld=default \
--enable-plugins \
--enable-threads \
--with-pic \
--enable-lto \
--disable-shared \
--disable-werror \
--disable-multilib \
--host=$HOST \
--build=${config_guess} \
--target=avr
make configure-host
# Compile and Install
make -j$JOBS
make install
################################################################################
# gcc
################################################################################
cd $home
# Download gcc and dependencies
if [ ! -f gcc-$GCC_VERSION.tar.bz2 ]; then
wget ftp://gcc.gnu.org/pub/gcc/releases/gcc-$GCC_VERSION/gcc-$GCC_VERSION.tar.bz2
fi
if [ ! -f isl-$ISL_VERSION.tar.bz2 ]; then
wget http://isl.gforge.inria.fr/isl-$ISL_VERSION.tar.bz2
fi
if [ ! -f cloog-$CLOOG_VERSION.tar.gz ]; then
wget http://www.bastoul.net/cloog/pages/download/cloog-$CLOOG_VERSION.tar.gz
fi
if [ ! -f gmp-$GMP_VERSION.tar.bz2 ]; then
wget http://mirror.switch.ch/ftp/mirror/gnu/gmp/gmp-$GMP_VERSION.tar.bz2
fi
if [ ! -f mpfr-$MPFR_VERSION.tar.bz2 ]; then
wget http://mirror.switch.ch/ftp/mirror/gnu/mpfr/mpfr-$MPFR_VERSION.tar.bz2
fi
if [ ! -f mpc-$MPC_VERSION.tar.gz ]; then
wget http://www.multiprecision.org/mpc/download/mpc-$MPC_VERSION.tar.gz
fi
# Start with a fresh build
rm -rf gcc-$GCC_VERSION
# Extract
tar xf gcc-$GCC_VERSION.tar.bz2
tar xf isl-$ISL_VERSION.tar.bz2
tar xf cloog-$CLOOG_VERSION.tar.gz
tar xf gmp-$GMP_VERSION.tar.bz2
tar xf mpfr-$MPFR_VERSION.tar.bz2
tar xf mpc-$MPC_VERSION.tar.gz
# Remove builtin dependencies of gcc and and use our custom versions.
rm -rf gcc-$GCC_VERSION/cloog gcc-$GCC_VERSION/isl gcc-$GCC_VERSION/gmp gcc-$GCC_VERSION/mpfr gcc-$GCC_VERSION/mpc
# Copy our custom versions
mv cloog-$CLOOG_VERSION gcc-$GCC_VERSION/cloog
mv isl-$ISL_VERSION gcc-$GCC_VERSION/isl
mv gmp-$GMP_VERSION gcc-$GCC_VERSION/gmp
mv mpfr-$MPFR_VERSION gcc-$GCC_VERSION/mpfr
mv mpc-$MPC_VERSION gcc-$GCC_VERSION/mpc
cd gcc-$GCC_VERSION/
sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {libiberty,gcc}/configure
echo $GCC_VERSION > gcc/BASE-VER
export CFLAGS_FOR_TARGET='-O2 -pipe'
export CXXFLAGS_FOR_TARGET='-O2 -pipe'
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${pkgdir_build}/${config_guess}/avr/lib/
export PATH=$PATH:${pkgdir_build}/bin/
cd $home
rm -rf gcc-build
mkdir gcc-build && cd gcc-build
# Configure
$home/gcc-$GCC_VERSION/configure \
--disable-install-libiberty \
--disable-libssp \
--disable-libstdcxx-pch \
--disable-libunwind-exceptions \
--disable-nls \
--enable-fixed-point \
--enable-long-long \
--disable-werror \
--disable-__cxa_atexit \
--enable-checking=release \
--enable-clocale=gnu \
--enable-cloog-backend=isl \
--enable-gnu-unique-object \
--with-avrlibc=yes \
--with-dwarf2 \
--enable-languages=c,c++ \
--disable-libada \
--disable-doc \
--enable-lto \
--enable-gold \
--disable-plugin \
--prefix=$pkgdir \
--disable-shared \
--with-gnu-ld \
--host=$HOST \
--build=${config_guess} \
--target=avr
#remove __HAVE_MALLOC_H__ if cross compiling for OSX
#http://glaros.dtc.umn.edu/gkhome/node/694
# Compile and install
make -j$JOBS
make -j1 install-strip
find $pkgdir/lib -type f -name "*.a" -exec ${pkgdir_build}/bin/avr-strip --strip-debug '{}' \;
rm -rf $pkgdir/share/man/man7
rm -rf $pkgdir/share/info
################################################################################
# avr-libc
################################################################################
cd $home
# Download
if [ ! -f avr-libc-$AVRLIBC_VERSION.tar.bz2 ]; then
wget http://download.savannah.gnu.org/releases/avr-libc/avr-libc-$AVRLIBC_VERSION.tar.bz2
fi
# Extract and enter directory
rm -rf avr-libc-$AVRLIBC_VERSION
tar xf avr-libc-$AVRLIBC_VERSION.tar.bz2
cd avr-libc-$AVRLIBC_VERSION/
# Configure
./bootstrap --prefix=$pkgdir/
CC=${pkgdir_build}/bin/avr-gcc ./configure --prefix=$pkgdir/ --build=${config_guess} --host=avr
# Compile and install
make -j$JOBS
make install
################################################################################
# avrdude
################################################################################
cd $home
# Download
if [ ! -f avrdude-$AVRDUDE_VERSION.tar.gz ]; then
wget http://download.savannah.gnu.org/releases/avrdude/avrdude-$AVRDUDE_VERSION.tar.gz
fi
# Extract and enter directory
rm -rf avrdude-$AVRDUDE_VERSION
tar xf avrdude-$AVRDUDE_VERSION.tar.gz
cd avrdude-$AVRDUDE_VERSION
# Configure
mkdir obj-avr
cd obj-avr
../configure --prefix=$pkgdir/
# Compile and install
make -j$JOBS
make install
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment