blob: 8f4dd0ccd136dc6a1a5f7761ad2924e1f8598325 [file] [log] [blame] [edit]
#! /usr/bin/env bash
# Copyright (c) 2011-2015, ARM Limited
# 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 Arm nor the names of its 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 HOLDER 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.
set -e
set -x
set -u
set -o pipefail
umask 022
exec < /dev/null
script_path=`cd $(dirname $0) && pwd -P`
. $script_path/build-common.sh
# This file contains the sequence of commands used to build the
# GNU Tools Arm Embedded toolchain.
usage ()
{
cat<<EOF
Usage: $0 [--build_type=...] [--skip_steps=...]
This script will build GNU Tools Arm Embedded toolchain.
OPTIONS:
--build_type=TYPE specify build type to either ppa or native.
If followed by keyword debug, the produced binaries
will be debuggable. The default case will be
non-debug native build.
Example usages are as:
--build_type=native
--build_type=ppa
--build_type=native,debug
--build_type=ppa,debug
--skip_steps=STEPS specify which build steps you want to skip. Concatenate
them with comma for skipping more than one steps. Available
steps are: gdb-with-python, mingw32, mingw32-gdb-with-python
and manual.
--threads=PROVIDER specify the threading and synchronization provider.
Supported providers:
--threads=no # Single-threaded mode (the default)
--threads=posix # Posix threads and clocks, aka pthreads
EOF
}
if [ $# -gt 3 ] ; then
usage
fi
skip_mingw32=no
DEBUG_BUILD_OPTIONS=
is_ppa_release=no
is_native_build=yes
skip_manual=no
skip_steps=
skip_gdb_with_python=no
skip_mingw32_gdb_with_python=no
build_type=
threads=
MULTILIB_LIST="--with-multilib-list=rmprofile"
POSIX_THREADS=("--enable-threads=posix" "--enable-tls" "--enable-libstdcxx-time=notimer")
NO_THREADS=("--disable-threads" "--disable_tls")
for ac_arg; do
case $ac_arg in
--skip_steps=*)
skip_steps=`echo $ac_arg | sed -e "s/--skip_steps=//g" -e "s/,/ /g"`
;;
--build_type=*)
build_type=`echo $ac_arg | sed -e "s/--build_type=//g" -e "s/,/ /g"`
;;
--threads=*)
threads=`echo $ac_arg | sed -e "s/--threads=//g" -e "s/,/ /g"`
;;
*)
usage
exit 1
;;
esac
done
if [ "x$build_type" != "x" ]; then
for bt in $build_type; do
case $bt in
ppa)
is_ppa_release=yes
is_native_build=no
skip_gdb_with_python=yes
;;
native)
is_native_build=yes
is_ppa_release=no
;;
debug)
DEBUG_BUILD_OPTIONS=" -O0 -g "
;;
*)
echo "Unknown build type: $bt" 1>&2
usage
exit 1
;;
esac
done
else
is_ppa_release=no
is_native_build=yes
fi
if [ "x$skip_steps" != "x" ]; then
for ss in $skip_steps; do
case $ss in
manual)
skip_manual=yes
;;
gdb-with-python)
skip_gdb_with_python=yes
;;
mingw32)
skip_mingw32=yes
skip_mingw32_gdb_with_python=yes
;;
mingw32-gdb-with-python)
skip_mingw32_gdb_with_python=yes
;;
*)
echo "Unknown build steps: $ss" 1>&2
usage
exit 1
;;
esac
done
fi
if [ "x$threads" != "x" ]; then
case $threads in
posix|pthreads)
THREAD_ARGUMENTS=("${POSIX_THREADS[@]}")
;;
no|none|single)
THREAD_ARGUMENTS=("${NO_THREADS[@]}")
;;
*)
echo "Unknown threads type: $threads" 1>&2
usage
exit 1
;;
esac
else
THREAD_ARGUMENTS=("${NO_THREADS[@]}")
fi
if [ "x$BUILD" == "xx86_64-apple-darwin10" ] || [ "x$is_ppa_release" == "xyes" ]; then
skip_mingw32=yes
skip_mingw32_gdb_with_python=yes
fi
#Building mingw gdb with python support requires python windows package and
#a special config file. If any of them is missing, we skip the build of
#mingw gdb with python support.
if [ ! -d $SRCDIR/$PYTHON_WIN ] \
|| [ ! -x $script_path/python-config.sh ]; then
skip_mingw32_gdb_with_python=yes
fi
if [ "x$is_ppa_release" != "xyes" ]; then
ENV_CFLAGS=" -I$BUILDDIR_NATIVE/host-libs/zlib/include -O2 "
ENV_CPPFLAGS=" -I$BUILDDIR_NATIVE/host-libs/zlib/include "
ENV_LDFLAGS=" -L$BUILDDIR_NATIVE/host-libs/zlib/lib
-L$BUILDDIR_NATIVE/host-libs/usr/lib "
if [ -d $SRCDIR/$PYTHON_WIN ]; then
ENV_LDFLAGS+=" -L$SRCDIR/$PYTHON_WIN/lib "
fi
GCC_CONFIG_OPTS=" --build=$BUILD --host=$HOST_NATIVE
--with-gmp=$BUILDDIR_NATIVE/host-libs/usr
--with-mpfr=$BUILDDIR_NATIVE/host-libs/usr
--with-mpc=$BUILDDIR_NATIVE/host-libs/usr
--with-isl=$BUILDDIR_NATIVE/host-libs/usr
--with-libelf=$BUILDDIR_NATIVE/host-libs/usr "
BINUTILS_CONFIG_OPTS=" --build=$BUILD --host=$HOST_NATIVE "
NEWLIB_CONFIG_OPTS=" --build=$BUILD --host=$HOST_NATIVE "
GDB_CONFIG_OPTS=" --build=$BUILD --host=$HOST_NATIVE
--with-libexpat-prefix=$BUILDDIR_NATIVE/host-libs/usr "
fi
mkdir -p $BUILDDIR_NATIVE
rm -rf $INSTALLDIR_NATIVE && mkdir -p $INSTALLDIR_NATIVE
if [ "x$skip_mingw32" != "xyes" ] ; then
mkdir -p $BUILDDIR_MINGW
rm -rf $INSTALLDIR_MINGW && mkdir -p $INSTALLDIR_MINGW
fi
rm -rf $PACKAGEDIR && mkdir -p $PACKAGEDIR
cd $SRCDIR
echo Task [III-00] Update Timestamps
(cd $SRCDIR/$GCC && contrib/gcc_update --touch)
echo Task [III-0] /$HOST_NATIVE/binutils/
rm -rf $BUILDDIR_NATIVE/binutils && mkdir -p $BUILDDIR_NATIVE/binutils
pushd $BUILDDIR_NATIVE/binutils
saveenv
saveenvvar CFLAGS "$ENV_CFLAGS"
saveenvvar CPPFLAGS "$ENV_CPPFLAGS"
saveenvvar LDFLAGS "$ENV_LDFLAGS"
$SRCDIR/$BINUTILS/configure \
${BINUTILS_CONFIG_OPTS} \
--target=$TARGET \
--prefix=$INSTALLDIR_NATIVE \
--infodir=$INSTALLDIR_NATIVE_DOC/info \
--mandir=$INSTALLDIR_NATIVE_DOC/man \
--htmldir=$INSTALLDIR_NATIVE_DOC/html \
--pdfdir=$INSTALLDIR_NATIVE_DOC/pdf \
--disable-nls \
--disable-werror \
--disable-sim \
--disable-gdb \
--enable-interwork \
--enable-plugins \
--with-sysroot=$INSTALLDIR_NATIVE/arm-none-eabi \
"--with-pkgversion=$PKGVERSION"
if [ "x$DEBUG_BUILD_OPTIONS" != "x" ] ; then
make CFLAGS="-I$BUILDDIR_NATIVE/host-libs/zlib/include $DEBUG_BUILD_OPTIONS" -j$JOBS
else
make -j$JOBS
fi
make install
if [ "x$skip_manual" != "xyes" ]; then
make install-html install-pdf
fi
copy_dir $INSTALLDIR_NATIVE $BUILDDIR_NATIVE/target-libs
restoreenv
popd
pushd $INSTALLDIR_NATIVE
rm -rf ./lib
popd
echo Task [III-1] /$HOST_NATIVE/gcc-first/
rm -rf $BUILDDIR_NATIVE/gcc-first && mkdir -p $BUILDDIR_NATIVE/gcc-first
pushd $BUILDDIR_NATIVE/gcc-first
$SRCDIR/$GCC/configure --target=$TARGET \
--prefix=$INSTALLDIR_NATIVE \
--libexecdir=$INSTALLDIR_NATIVE/lib \
--infodir=$INSTALLDIR_NATIVE_DOC/info \
--mandir=$INSTALLDIR_NATIVE_DOC/man \
--htmldir=$INSTALLDIR_NATIVE_DOC/html \
--pdfdir=$INSTALLDIR_NATIVE_DOC/pdf \
--enable-languages=c \
--disable-decimal-float \
--disable-libffi \
--disable-libgomp \
--disable-libmudflap \
--disable-libquadmath \
--disable-libssp \
--disable-libstdcxx-pch \
--disable-nls \
--disable-shared \
"${THREAD_ARGUMENTS[@]}" \
--with-newlib \
--without-headers \
--with-gnu-as \
--with-gnu-ld \
--with-python-dir=share/gcc-arm-none-eabi \
--with-sysroot=$INSTALLDIR_NATIVE/arm-none-eabi \
${GCC_CONFIG_OPTS} \
"${GCC_CONFIG_OPTS_LCPP}" \
"--with-pkgversion=$PKGVERSION" \
${MULTILIB_LIST}
make -j$JOBS all-gcc
make install-gcc
popd
pushd $INSTALLDIR_NATIVE
rm -rf bin/arm-none-eabi-gccbug
rm -rf ./lib/libiberty.a
rm -rf include
popd
echo Task [III-2] /$HOST_NATIVE/newlib/
saveenv
prepend_path PATH $INSTALLDIR_NATIVE/bin
saveenvvar CFLAGS_FOR_TARGET '-g -O2 -ffunction-sections -fdata-sections'
rm -rf $BUILDDIR_NATIVE/newlib && mkdir -p $BUILDDIR_NATIVE/newlib
pushd $BUILDDIR_NATIVE/newlib
$SRCDIR/$NEWLIB/configure \
$NEWLIB_CONFIG_OPTS \
--target=$TARGET \
--prefix=$INSTALLDIR_NATIVE \
--infodir=$INSTALLDIR_NATIVE_DOC/info \
--mandir=$INSTALLDIR_NATIVE_DOC/man \
--htmldir=$INSTALLDIR_NATIVE_DOC/html \
--pdfdir=$INSTALLDIR_NATIVE_DOC/pdf \
--enable-newlib-io-long-long \
--enable-newlib-register-fini \
--enable-newlib-retargetable-locking \
--disable-newlib-supplied-syscalls \
--disable-nls
make -j$JOBS
make install
if [ "x$skip_manual" != "xyes" ]; then
make pdf
mkdir -p $INSTALLDIR_NATIVE_DOC/pdf
cp $BUILDDIR_NATIVE/newlib/arm-none-eabi/newlib/libc/libc.pdf $INSTALLDIR_NATIVE_DOC/pdf/libc.pdf
cp $BUILDDIR_NATIVE/newlib/arm-none-eabi/newlib/libm/libm.pdf $INSTALLDIR_NATIVE_DOC/pdf/libm.pdf
make html
mkdir -p $INSTALLDIR_NATIVE_DOC/html
copy_dir $BUILDDIR_NATIVE/newlib/arm-none-eabi/newlib/libc/libc.html $INSTALLDIR_NATIVE_DOC/html/libc
copy_dir $BUILDDIR_NATIVE/newlib/arm-none-eabi/newlib/libm/libm.html $INSTALLDIR_NATIVE_DOC/html/libm
fi
popd
restoreenv
echo Task [III-3] /$HOST_NATIVE/newlib-nano/
saveenv
prepend_path PATH $INSTALLDIR_NATIVE/bin
saveenvvar CFLAGS_FOR_TARGET '-g -Os -ffunction-sections -fdata-sections'
rm -rf $BUILDDIR_NATIVE/newlib-nano && mkdir -p $BUILDDIR_NATIVE/newlib-nano
pushd $BUILDDIR_NATIVE/newlib-nano
$SRCDIR/$NEWLIB_NANO/configure \
$NEWLIB_CONFIG_OPTS \
--target=$TARGET \
--prefix=$BUILDDIR_NATIVE/target-libs \
--disable-newlib-supplied-syscalls \
--enable-newlib-reent-small \
--disable-newlib-fvwrite-in-streamio \
--disable-newlib-fseek-optimization \
--disable-newlib-wide-orient \
--enable-newlib-nano-malloc \
--disable-newlib-unbuf-stream-opt \
--enable-lite-exit \
--enable-newlib-global-atexit \
--enable-newlib-nano-formatted-io \
--disable-nls
make -j$JOBS
make install
popd
restoreenv
echo Task [III-4] /$HOST_NATIVE/gcc-final/
rm -f $INSTALLDIR_NATIVE/arm-none-eabi/usr
ln -s . $INSTALLDIR_NATIVE/arm-none-eabi/usr
rm -rf $BUILDDIR_NATIVE/gcc-final && mkdir -p $BUILDDIR_NATIVE/gcc-final
pushd $BUILDDIR_NATIVE/gcc-final
$SRCDIR/$GCC/configure --target=$TARGET \
--prefix=$INSTALLDIR_NATIVE \
--libexecdir=$INSTALLDIR_NATIVE/lib \
--infodir=$INSTALLDIR_NATIVE_DOC/info \
--mandir=$INSTALLDIR_NATIVE_DOC/man \
--htmldir=$INSTALLDIR_NATIVE_DOC/html \
--pdfdir=$INSTALLDIR_NATIVE_DOC/pdf \
--enable-languages=c,c++ \
--enable-plugins \
--disable-decimal-float \
--disable-libffi \
--disable-libgomp \
--disable-libmudflap \
--disable-libquadmath \
--disable-libssp \
--disable-libstdcxx-pch \
--disable-nls \
--disable-shared \
"${THREAD_ARGUMENTS[@]}" \
--with-gnu-as \
--with-gnu-ld \
--with-newlib \
--with-headers=yes \
--with-python-dir=share/gcc-arm-none-eabi \
--with-sysroot=$INSTALLDIR_NATIVE/arm-none-eabi \
$GCC_CONFIG_OPTS \
"${GCC_CONFIG_OPTS_LCPP}" \
"--with-pkgversion=$PKGVERSION" \
${MULTILIB_LIST}
# Passing USE_TM_CLONE_REGISTRY=0 via INHIBIT_LIBC_CFLAGS to disable
# transactional memory related code in crtbegin.o.
# This is a workaround. Better approach is have a t-* to set this flag via
# CRTSTUFF_T_CFLAGS
if [ "x$DEBUG_BUILD_OPTIONS" != "x" ]; then
make -j$JOBS CXXFLAGS="$DEBUG_BUILD_OPTIONS" \
INHIBIT_LIBC_CFLAGS="-DUSE_TM_CLONE_REGISTRY=0"
else
make -j$JOBS INHIBIT_LIBC_CFLAGS="-DUSE_TM_CLONE_REGISTRY=0"
fi
make install
if [ "x$skip_manual" != "xyes" ]; then
make install-html install-pdf
fi
pushd $INSTALLDIR_NATIVE
rm -rf bin/arm-none-eabi-gccbug
LIBIBERTY_LIBRARIES=`find $INSTALLDIR_NATIVE/arm-none-eabi/lib -name libiberty.a`
for libiberty_lib in $LIBIBERTY_LIBRARIES ; do
rm -rf $libiberty_lib
done
rm -rf ./lib/libiberty.a
rm -rf include
popd
rm -f $INSTALLDIR_NATIVE/arm-none-eabi/usr
popd
echo Task [III-5] /$HOST_NATIVE/gcc-size-libstdcxx/
rm -f $BUILDDIR_NATIVE/target-libs/arm-none-eabi/usr
ln -s . $BUILDDIR_NATIVE/target-libs/arm-none-eabi/usr
rm -rf $BUILDDIR_NATIVE/gcc-size-libstdcxx && mkdir -p $BUILDDIR_NATIVE/gcc-size-libstdcxx
pushd $BUILDDIR_NATIVE/gcc-size-libstdcxx
$SRCDIR/$GCC/configure --target=$TARGET \
--prefix=$BUILDDIR_NATIVE/target-libs \
--enable-languages=c,c++ \
--disable-decimal-float \
--disable-libffi \
--disable-libgomp \
--disable-libmudflap \
--disable-libquadmath \
--disable-libssp \
--disable-libstdcxx-pch \
--disable-libstdcxx-verbose \
--disable-nls \
--disable-shared \
"${THREAD_ARGUMENTS[@]}" \
--with-gnu-as \
--with-gnu-ld \
--with-newlib \
--with-headers=yes \
--with-python-dir=share/gcc-arm-none-eabi \
--with-sysroot=$BUILDDIR_NATIVE/target-libs/arm-none-eabi \
$GCC_CONFIG_OPTS \
"${GCC_CONFIG_OPTS_LCPP}" \
"--with-pkgversion=$PKGVERSION" \
${MULTILIB_LIST}
make -j$JOBS CXXFLAGS_FOR_TARGET="-g -Os -ffunction-sections -fdata-sections -fno-exceptions"
make install
copy_multi_libs src_prefix="$BUILDDIR_NATIVE/target-libs/arm-none-eabi/lib" \
dst_prefix="$INSTALLDIR_NATIVE/arm-none-eabi/lib" \
target_gcc="$BUILDDIR_NATIVE/target-libs/bin/arm-none-eabi-gcc"
# Copy the nano configured newlib.h file into the location that nano.specs
# expects it to be.
mkdir -p $INSTALLDIR_NATIVE/arm-none-eabi/include/newlib-nano
cp -f $BUILDDIR_NATIVE/target-libs/arm-none-eabi/include/newlib.h \
$INSTALLDIR_NATIVE/arm-none-eabi/include/newlib-nano/newlib.h
popd
echo Task [III-6] /$HOST_NATIVE/gdb/
build_gdb()
{
GDB_EXTRA_CONFIG_OPTS=$1
rm -rf $BUILDDIR_NATIVE/gdb && mkdir -p $BUILDDIR_NATIVE/gdb
pushd $BUILDDIR_NATIVE/gdb
saveenv
saveenvvar CFLAGS "$ENV_CFLAGS"
saveenvvar CPPFLAGS "$ENV_CPPFLAGS"
saveenvvar LDFLAGS "$ENV_LDFLAGS"
$SRCDIR/$GDB/configure \
--target=$TARGET \
--prefix=$INSTALLDIR_NATIVE \
--infodir=$INSTALLDIR_NATIVE_DOC/info \
--mandir=$INSTALLDIR_NATIVE_DOC/man \
--htmldir=$INSTALLDIR_NATIVE_DOC/html \
--pdfdir=$INSTALLDIR_NATIVE_DOC/pdf \
--disable-nls \
--disable-sim \
--disable-gas \
--disable-binutils \
--disable-ld \
--disable-gprof \
--with-libexpat \
--with-lzma=no \
--with-system-gdbinit=$INSTALLDIR_NATIVE/$HOST_NATIVE/arm-none-eabi/lib/gdbinit \
$GDB_CONFIG_OPTS \
$GDB_EXTRA_CONFIG_OPTS \
'--with-gdb-datadir='\''${prefix}'\''/arm-none-eabi/share/gdb' \
"--with-pkgversion=$PKGVERSION"
if [ "x$DEBUG_BUILD_OPTIONS" != "x" ] ; then
make CFLAGS="-I$BUILDDIR_NATIVE/host-libs/zlib/include $DEBUG_BUILD_OPTIONS" -j$JOBS
else
make -j$JOBS
fi
make install
if [ "x$skip_manual" != "xyes" ]; then
make install-html install-pdf
fi
restoreenv
popd
}
#Always enable python support in GDB for PPA build.
if [ "x$is_ppa_release" == "xyes" ]; then
build_gdb "--with-python=yes"
else
#First we build GDB without python support.
build_gdb "--with-python=no"
#Then build gdb with python support.
if [ "x$skip_gdb_with_python" == "xno" ]; then
build_gdb "--with-python=yes --program-prefix=$TARGET- --program-suffix=-py"
fi
fi
if [ "x$is_ppa_release" != "xyes" -a "x$skip_manual" != "xyes" ]; then
echo TASK [III-7] /$HOST_NATIVE/build-manual
rm -rf $BUILDDIR_NATIVE/build-manual && mkdir -p $BUILDDIR_NATIVE/build-manual
pushd $BUILDDIR_NATIVE/build-manual
cp -r $SRCDIR/$BUILD_MANUAL/* .
echo "@set VERSION_PACKAGE ($PKGVERSION)" > version.texi
echo "@set CURRENT_YEAR $release_year" >> version.texi
echo "@set CURRENT_MONTH $release_month" >> version.texi
echo "@set PKG_NAME $PACKAGE_NAME" >> version.texi
make clean
make
rm -rf $ROOT/How-to-build-toolchain.pdf
cp How-to-build-toolchain.pdf $ROOT
popd
fi
echo Task [III-8] /$HOST_NATIVE/pretidy/
rm -rf $INSTALLDIR_NATIVE/lib/libiberty.a
find $INSTALLDIR_NATIVE -name '*.la' -exec rm '{}' ';'
echo Task [III-9] /$HOST_NATIVE/strip_host_objects/
if [ "x$DEBUG_BUILD_OPTIONS" = "x" ] ; then
STRIP_BINARIES=`find $INSTALLDIR_NATIVE/bin/ -name arm-none-eabi-\*`
for bin in $STRIP_BINARIES ; do
strip_binary strip $bin
done
STRIP_BINARIES=`find $INSTALLDIR_NATIVE/arm-none-eabi/bin/ -maxdepth 1 -mindepth 1 -name \*`
for bin in $STRIP_BINARIES ; do
strip_binary strip $bin
done
if [ "x$BUILD" == "xx86_64-apple-darwin10" ]; then
STRIP_BINARIES=`find $INSTALLDIR_NATIVE/lib/gcc/arm-none-eabi/$GCC_VER/ -maxdepth 1 -name \* -perm +111 -and ! -type d`
else
STRIP_BINARIES=`find $INSTALLDIR_NATIVE/lib/gcc/arm-none-eabi/$GCC_VER/ -maxdepth 1 -name \* -perm /111 -and ! -type d`
fi
for bin in $STRIP_BINARIES ; do
strip_binary strip $bin
done
fi
echo Task [III-10] /$HOST_NATIVE/strip_target_objects/
saveenv
prepend_path PATH $INSTALLDIR_NATIVE/bin
TARGET_LIBRARIES=`find $INSTALLDIR_NATIVE/arm-none-eabi/lib -name \*.a`
for target_lib in $TARGET_LIBRARIES ; do
arm-none-eabi-objcopy -R .comment -R .note -R .debug_info -R .debug_aranges -R .debug_pubnames -R .debug_pubtypes -R .debug_abbrev -R .debug_line -R .debug_str -R .debug_ranges -R .debug_loc $target_lib || true
done
TARGET_OBJECTS=`find $INSTALLDIR_NATIVE/arm-none-eabi/lib -name \*.o`
for target_obj in $TARGET_OBJECTS ; do
arm-none-eabi-objcopy -R .comment -R .note -R .debug_info -R .debug_aranges -R .debug_pubnames -R .debug_pubtypes -R .debug_abbrev -R .debug_line -R .debug_str -R .debug_ranges -R .debug_loc $target_obj || true
done
TARGET_LIBRARIES=`find $INSTALLDIR_NATIVE/lib/gcc/arm-none-eabi/$GCC_VER -name \*.a`
for target_lib in $TARGET_LIBRARIES ; do
arm-none-eabi-objcopy -R .comment -R .note -R .debug_info -R .debug_aranges -R .debug_pubnames -R .debug_pubtypes -R .debug_abbrev -R .debug_line -R .debug_str -R .debug_ranges -R .debug_loc $target_lib || true
done
TARGET_OBJECTS=`find $INSTALLDIR_NATIVE/lib/gcc/arm-none-eabi/$GCC_VER -name \*.o`
for target_obj in $TARGET_OBJECTS ; do
arm-none-eabi-objcopy -R .comment -R .note -R .debug_info -R .debug_aranges -R .debug_pubnames -R .debug_pubtypes -R .debug_abbrev -R .debug_line -R .debug_str -R .debug_ranges -R .debug_loc $target_obj || true
done
restoreenv
# PPA release needn't following steps, so we exit here.
if [ "x$is_ppa_release" == "xyes" ] ; then
exit 0
fi
echo Task [III-11] /$HOST_NATIVE/package_tbz2/
# Copy release.txt, readme.txt and license.txt into share.
cp $ROOT/$RELEASE_FILE $INSTALLDIR_NATIVE_DOC/
cp $ROOT/$README_FILE $INSTALLDIR_NATIVE_DOC/
cp $ROOT/$LICENSE_FILE $INSTALLDIR_NATIVE_DOC/
# Copy the samples from src to make the final package.
copy_dir_clean $SRCDIR/$SAMPLES $INSTALLDIR_NATIVE/share/gcc-arm-none-eabi/$SAMPLES
# Cleanup any pre-existing state.
rm -f $PACKAGEDIR/$PACKAGE_NAME_NATIVE.tar.bz2
rm -f $BUILDDIR_NATIVE/$INSTALL_PACKAGE_NAME
# Start making the package.
pushd $BUILDDIR_NATIVE
ln -s $INSTALLDIR_NATIVE $INSTALL_PACKAGE_NAME
# Make the package tarball.
${TAR} cjf $PACKAGEDIR/$PACKAGE_NAME_NATIVE.tar.bz2 \
--owner=0 \
--group=0 \
--exclude=host-$HOST_NATIVE \
--exclude=host-$HOST_MINGW \
$INSTALL_PACKAGE_NAME/arm-none-eabi \
$INSTALL_PACKAGE_NAME/bin \
$INSTALL_PACKAGE_NAME/lib \
$INSTALL_PACKAGE_NAME/share
# Remove stale links.
rm -f $INSTALL_PACKAGE_NAME
popd
# skip building mingw32 toolchain if "--skip_mingw32" specified
# this huge if statement controls all $BUILDDIR_MINGW tasks till "task [IV-8]"
if [ "x$skip_mingw32" != "xyes" ] ; then
saveenv
saveenvvar CC_FOR_BUILD gcc
saveenvvar CC $HOST_MINGW_TOOL-gcc
saveenvvar CXX $HOST_MINGW_TOOL-g++
saveenvvar AR $HOST_MINGW_TOOL-ar
saveenvvar RANLIB $HOST_MINGW_TOOL-ranlib
saveenvvar STRIP $HOST_MINGW_TOOL-strip
saveenvvar NM $HOST_MINGW_TOOL-nm
echo Task [IV-0] /$HOST_MINGW/host_unpack/
rm -rf $BUILDDIR_MINGW/tools-$OBJ_SUFFIX_NATIVE && mkdir $BUILDDIR_MINGW/tools-$OBJ_SUFFIX_NATIVE
pushd $BUILDDIR_MINGW/tools-$OBJ_SUFFIX_NATIVE
ln -s . $INSTALL_PACKAGE_NAME
tar xf $PACKAGEDIR/$PACKAGE_NAME_NATIVE.tar.bz2 --bzip2
rm $INSTALL_PACKAGE_NAME
popd
echo Task [IV-1] /$HOST_MINGW/binutils/
prepend_path PATH $BUILDDIR_MINGW/tools-$OBJ_SUFFIX_NATIVE/bin
rm -rf $BUILDDIR_MINGW/binutils && mkdir -p $BUILDDIR_MINGW/binutils
pushd $BUILDDIR_MINGW/binutils
saveenv
saveenvvar CFLAGS "-I$BUILDDIR_MINGW/host-libs/zlib/include -O2"
saveenvvar CPPFLAGS "-I$BUILDDIR_MINGW/host-libs/zlib/include"
saveenvvar LDFLAGS "-L$BUILDDIR_MINGW/host-libs/zlib/lib -Wl,/usr/i686-w64-mingw32/lib/CRT_glob.o"
$SRCDIR/$BINUTILS/configure --build=$BUILD \
--host=$HOST_MINGW \
--target=$TARGET \
--prefix=$INSTALLDIR_MINGW \
--infodir=$INSTALLDIR_MINGW_DOC/info \
--mandir=$INSTALLDIR_MINGW_DOC/man \
--htmldir=$INSTALLDIR_MINGW_DOC/html \
--pdfdir=$INSTALLDIR_MINGW_DOC/pdf \
--disable-nls \
--disable-sim \
--disable-gdb \
--enable-plugins \
--with-sysroot=$INSTALLDIR_MINGW/arm-none-eabi \
"--with-pkgversion=$PKGVERSION"
if [ "x$DEBUG_BUILD_OPTIONS" != "x" ] ; then
make CFLAGS="-I$BUILDDIR_MINGW/host-libs/zlib/include $DEBUG_BUILD_OPTIONS" -j$JOBS
else
make -j$JOBS
fi
make install
if [ "x$skip_manual" != "xyes" ]; then
make install-html install-pdf
fi
restoreenv
popd
pushd $INSTALLDIR_MINGW
rm -rf ./lib
popd
echo Task [IV-2] /$HOST_MINGW/copy_libs/
if [ "x$skip_manual" != "xyes" ]; then
copy_dir $BUILDDIR_MINGW/tools-$OBJ_SUFFIX_NATIVE/share/doc/gcc-arm-none-eabi/html $INSTALLDIR_MINGW_DOC/html
copy_dir $BUILDDIR_MINGW/tools-$OBJ_SUFFIX_NATIVE/share/doc/gcc-arm-none-eabi/pdf $INSTALLDIR_MINGW_DOC/pdf
fi
copy_dir $BUILDDIR_MINGW/tools-$OBJ_SUFFIX_NATIVE/arm-none-eabi/lib $INSTALLDIR_MINGW/arm-none-eabi/lib
copy_dir $BUILDDIR_MINGW/tools-$OBJ_SUFFIX_NATIVE/arm-none-eabi/include $INSTALLDIR_MINGW/arm-none-eabi/include
copy_dir $BUILDDIR_MINGW/tools-$OBJ_SUFFIX_NATIVE/arm-none-eabi/include/c++ $INSTALLDIR_MINGW/arm-none-eabi/include/c++
copy_dir $BUILDDIR_MINGW/tools-$OBJ_SUFFIX_NATIVE/lib/gcc/arm-none-eabi $INSTALLDIR_MINGW/lib/gcc/arm-none-eabi
echo Task [IV-3] /$HOST_MINGW/gcc-final/
saveenv
saveenvvar AR_FOR_TARGET $TARGET-ar
saveenvvar NM_FOR_TARGET $TARGET-nm
saveenvvar OBJDUMP_FOR_TARET $TARGET-objdump
saveenvvar STRIP_FOR_TARGET $TARGET-strip
saveenvvar CC_FOR_TARGET $TARGET-gcc
saveenvvar GCC_FOR_TARGET $TARGET-gcc
saveenvvar CXX_FOR_TARGET $TARGET-g++
pushd $INSTALLDIR_MINGW/arm-none-eabi/
rm -f usr
ln -s . usr
popd
rm -rf $BUILDDIR_MINGW/gcc && mkdir -p $BUILDDIR_MINGW/gcc
pushd $BUILDDIR_MINGW/gcc
$SRCDIR/$GCC/configure --build=$BUILD --host=$HOST_MINGW --target=$TARGET \
--prefix=$INSTALLDIR_MINGW \
--libexecdir=$INSTALLDIR_MINGW/lib \
--infodir=$INSTALLDIR_MINGW_DOC/info \
--mandir=$INSTALLDIR_MINGW_DOC/man \
--htmldir=$INSTALLDIR_MINGW_DOC/html \
--pdfdir=$INSTALLDIR_MINGW_DOC/pdf \
--enable-languages=c,c++ \
--enable-mingw-wildcard \
--disable-decimal-float \
--disable-libffi \
--disable-libgomp \
--disable-libmudflap \
--disable-libquadmath \
--disable-libssp \
--disable-libstdcxx-pch \
--disable-nls \
--disable-shared \
"${THREAD_ARGUMENTS[@]}" \
--with-gnu-as \
--with-gnu-ld \
--with-headers=yes \
--with-newlib \
--with-python-dir=share/gcc-arm-none-eabi \
--with-sysroot=$INSTALLDIR_MINGW/arm-none-eabi \
--with-libiconv-prefix=$BUILDDIR_MINGW/host-libs/usr \
--with-gmp=$BUILDDIR_MINGW/host-libs/usr \
--with-mpfr=$BUILDDIR_MINGW/host-libs/usr \
--with-mpc=$BUILDDIR_MINGW/host-libs/usr \
--with-isl=$BUILDDIR_MINGW/host-libs/usr \
--with-libelf=$BUILDDIR_MINGW/host-libs/usr \
"--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm" \
"--with-pkgversion=$PKGVERSION" \
${MULTILIB_LIST}
if [ "x$DEBUG_BUILD_OPTIONS" != "x" ]; then
make -j$JOBS CXXFLAGS="$DEBUG_BUILD_OPTIONS" all-gcc
else
make -j$JOBS all-gcc
fi
make install-gcc
if [ "x$skip_manual" != "xyes" ]; then
make install-html-gcc install-pdf-gcc
fi
popd
pushd $INSTALLDIR_MINGW
rm -rf bin/arm-none-eabi-gccbug
rm -rf include
popd
copy_dir $BUILDDIR_MINGW/tools-$OBJ_SUFFIX_NATIVE/lib/gcc/arm-none-eabi $INSTALLDIR_MINGW/lib/gcc/arm-none-eabi
rm -rf $INSTALLDIR_MINGW/arm-none-eabi/usr
rm -rf $INSTALLDIR_MINGW/lib/gcc/arm-none-eabi/*/plugin
find $INSTALLDIR_MINGW -executable -and -not -type d -and -not -name \*.exe \
-and -not -name liblto_plugin-0.dll -exec rm -f \{\} \;
restoreenv
echo Task [IV-4] /$HOST_MINGW/gdb/
build_mingw_gdb()
{
MINGW_GDB_CONF_OPTS=$1
rm -rf $BUILDDIR_MINGW/gdb && mkdir -p $BUILDDIR_MINGW/gdb
pushd $BUILDDIR_MINGW/gdb
saveenv
saveenvvar CFLAGS "-I$BUILDDIR_MINGW/host-libs/zlib/include -O2"
saveenvvar CPPFLAGS "-I$BUILDDIR_MINGW/host-libs/zlib/include"
saveenvvar LDFLAGS "-L$BUILDDIR_MINGW/host-libs/zlib/lib -Wl,/usr/i686-w64-mingw32/lib/CRT_glob.o"
$SRCDIR/$GDB/configure --build=$BUILD \
--host=$HOST_MINGW \
--target=$TARGET \
--prefix=$INSTALLDIR_MINGW \
--infodir=$INSTALLDIR_MINGW_DOC/info \
--mandir=$INSTALLDIR_MINGW_DOC/man \
--htmldir=$INSTALLDIR_MINGW_DOC/html \
--pdfdir=$INSTALLDIR_MINGW_DOC/pdf \
--disable-nls \
--disable-sim \
--disable-gas \
--disable-binutils \
--disable-ld \
--disable-gprof \
--with-lzma=no \
$MINGW_GDB_CONF_OPTS \
--with-libexpat \
--with-libexpat-prefix=$BUILDDIR_MINGW/host-libs/usr \
--with-libiconv-prefix=$BUILDDIR_MINGW/host-libs/usr \
--with-system-gdbinit=$INSTALLDIR_MINGW/$HOST_MINGW/arm-none-eabi/lib/gdbinit \
'--with-gdb-datadir='\''${prefix}'\''/arm-none-eabi/share/gdb' \
"--with-pkgversion=$PKGVERSION"
if [ "x$DEBUG_BUILD_OPTIONS" != "x" ] ; then
make CFLAGS="-I$BUILDDIR_MINGW/host-libs/zlib/include $DEBUG_BUILD_OPTIONS" -j$JOBS
else
make -j$JOBS
fi
make install
if [ "x$skip_manual" != "xyes" ]; then
make install-html install-pdf
fi
restoreenv
popd
}
build_mingw_gdb "--with-python=no"
if [ "x$skip_mingw32_gdb_with_python" == "xno" ]; then
export GNURM_PYTHON_WIN_DIR=$SRCDIR/$PYTHON_WIN
build_mingw_gdb "--with-python=$script_path/python-config.sh --program-suffix=-py --program-prefix=$TARGET-"
fi
echo Task [IV-5] /$HOST_MINGW/pretidy/
pushd $INSTALLDIR_MINGW
rm -rf ./lib/libiberty.a
rm -rf $INSTALLDIR_MINGW_DOC/info
rm -rf $INSTALLDIR_MINGW_DOC/man
find $INSTALLDIR_MINGW -name '*.la' -exec rm '{}' ';'
echo Task [IV-6] /$HOST_MINGW/strip_host_objects/
STRIP_BINARIES=`find $INSTALLDIR_MINGW/bin/ -name arm-none-eabi-\*.exe`
if [ "x$DEBUG_BUILD_OPTIONS" = "x" ] ; then
for bin in $STRIP_BINARIES ; do
strip_binary $HOST_MINGW_TOOL-strip $bin
done
STRIP_BINARIES=`find $INSTALLDIR_MINGW/arm-none-eabi/bin/ -maxdepth 1 -mindepth 1 -name \*.exe`
for bin in $STRIP_BINARIES ; do
strip_binary $HOST_MINGW_TOOL-strip $bin
done
STRIP_BINARIES=`find $INSTALLDIR_MINGW/lib/gcc/arm-none-eabi/$GCC_VER/ -name \*.exe`
for bin in $STRIP_BINARIES ; do
strip_binary $HOST_MINGW_TOOL-strip $bin
done
fi
echo Task [IV-7] /$HOST_MINGW/installation/
rm -f $PACKAGEDIR/$PACKAGE_NAME_MINGW.exe
pushd $BUILDDIR_MINGW
rm -f $INSTALL_PACKAGE_NAME
cp $ROOT/$RELEASE_FILE $INSTALLDIR_MINGW_DOC/
cp $ROOT/$README_FILE $INSTALLDIR_MINGW_DOC/
cp $ROOT/$LICENSE_FILE $INSTALLDIR_MINGW_DOC/
copy_dir_clean $SRCDIR/$SAMPLES $INSTALLDIR_MINGW/share/gcc-arm-none-eabi/$SAMPLES
flip -m $INSTALLDIR_MINGW_DOC/$RELEASE_FILE
flip -m $INSTALLDIR_MINGW_DOC/$README_FILE
flip -m -b $INSTALLDIR_MINGW_DOC/$LICENSE_FILE
flip -m $INSTALLDIR_MINGW/share/gcc-arm-none-eabi/$SAMPLES_DOS_FILES
rm -rf $INSTALLDIR_MINGW/include
ln -s $INSTALLDIR_MINGW $INSTALL_PACKAGE_NAME
cp $SRCDIR/$INSTALLATION/gccvar.bat $INSTALLDIR_MINGW/bin
mkdir -p $SRCDIR/$INSTALLATION/output
makensis -DBaseDir=$INSTALLDIR_MINGW \
-DIncDir=$SRCDIR \
-DAppName="$APPNAME" \
-DAppRootNameStr="$PKGROOTNAME" \
-DAppNameStr="$PKGVERSION" \
-DPackageName=$PACKAGE_NAME_MINGW \
-DInstallDirBase="$INSTALLBASE" \
-DInstallDirVer="$GCC_VER_SHORT $RELEASEVER" \
"-XOutFile $SRCDIR/$INSTALLATION/output/$PACKAGE_NAME_MINGW.exe" \
$SRCDIR/$INSTALLATION/arm-none-eabi-gnu-tools.nsi
cp -rf $SRCDIR/$INSTALLATION/output/$PACKAGE_NAME_MINGW.exe $PACKAGEDIR/
rm -f $INSTALL_PACKAGE_NAME
popd
restoreenv
echo Task [IV-8] /Package toolchain in zip format/
pushd $INSTALLDIR_MINGW
rm -f $PACKAGEDIR/$PACKAGE_NAME_MINGW.zip
zip -r9 $PACKAGEDIR/$PACKAGE_NAME_MINGW.zip .
popd
fi #end of if [ "x$skip_mingw32" != "xyes" ] ;
echo Task [V-0] /package_sources/
pushd $PACKAGEDIR
rm -rf $PACKAGE_NAME && mkdir -p $PACKAGE_NAME/src
pack_dir_clean $SRCDIR $BINUTILS $PACKAGE_NAME/src/$BINUTILS.tar.bz2
pack_dir_clean $SRCDIR $GCC $PACKAGE_NAME/src/$GCC.tar.bz2
pack_dir_clean $SRCDIR $GDB $PACKAGE_NAME/src/$GDB.tar.bz2 \
--exclude="gdb/testsuite/config/qemu.exp" --exclude="sim"
pack_dir_clean $SRCDIR $NEWLIB $PACKAGE_NAME/src/$NEWLIB.tar.bz2
pack_dir_clean $SRCDIR $SAMPLES $PACKAGE_NAME/src/$SAMPLES.tar.bz2
pack_dir_clean $SRCDIR $BUILD_MANUAL $PACKAGE_NAME/src/$BUILD_MANUAL.tar.bz2
if [ "x$skip_mingw32" != "xyes" ] ; then
pack_dir_clean $SRCDIR $INSTALLATION \
$PACKAGE_NAME/src/$INSTALLATION.tar.bz2 \
--exclude=build.log --exclude=output
fi
cp $ROOT/$RELEASE_FILE $PACKAGE_NAME/
cp $ROOT/$README_FILE $PACKAGE_NAME/
cp $ROOT/$LICENSE_FILE $PACKAGE_NAME/
cp $ROOT/$BUILD_MANUAL_FILE $PACKAGE_NAME/
cp $script_path/install-sources.sh $PACKAGE_NAME/
cp $script_path/build-common.sh $PACKAGE_NAME/
cp $script_path/build-prerequisites.sh $PACKAGE_NAME/
cp $script_path/build-toolchain.sh $PACKAGE_NAME/
cp $script_path/python-config.sh $PACKAGE_NAME/
tar cjf $PACKAGE_NAME-src.tar.bz2 $PACKAGE_NAME
rm -rf $PACKAGE_NAME
popd
echo Task [V-1] /md5_checksum/
pushd $PACKAGEDIR
rm -rf md5.txt
$MD5 $PACKAGE_NAME_NATIVE.tar.bz2 >>md5.txt
if [ "x$skip_mingw32" != "xyes" ] ; then
$MD5 $PACKAGE_NAME_MINGW.exe >>md5.txt
$MD5 $PACKAGE_NAME_MINGW.zip >>md5.txt
fi
$MD5 $PACKAGE_NAME-src.tar.bz2 >>md5.txt
popd