blob: 5d8332d0d3e4c88f910ed3934cd33d0310c2ec38 [file] [log] [blame]
#!/bin/sh
#
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# This shell script is used to download the sources of the Android NDK toolchain
# from the git server at android.git.kernel.org and package them in a nice tarball
# that can later be used with the 'built-toolchain.sh' script.
#
# include common function and variable definitions
. `dirname $0`/../core/ndk-common.sh
OPTION_HELP=no
OPTION_RELEASE=
OPTION_GIT=
OPTION_BRANCH=
# the default release name (use today's date)
RELEASE=`date +%Y%m%d`
# the default branch to use
BRANCH=eclair
GITCMD=git
VERBOSE=no
VERBOSE2=no
for opt do
optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
case "$opt" in
--help|-h|-\?) OPTION_HELP=yes
;;
--branch=*)
OPTION_BRANCH="$optarg"
;;
--git=*)
OPTION_GIT="$optarg"
;;
--verbose)
if [ "$VERBOSE" = "yes" ] ; then
VERBOSE2=yes
else
VERBOSE=yes
fi
;;
--release=*)
OPTION_RELEASE=$optarg
;;
*)
echo "unknown option '$opt', use --help"
exit 1
esac
done
if [ $OPTION_HELP = "yes" ] ; then
echo "Download the NDK toolchain sources from android.git.kernel.org and package them."
echo "You will need to run this script before being able to rebuild the NDK toolchain"
echo "binaries from scratch with build/tools/build-toolchain.sh"
echo ""
echo "options (defaults in brackets):"
echo ""
echo " --help print this message"
echo " --branch=<name> specify release branch [$BRANCH]"
echo " --release=<name> specify release name [$RELEASE]"
echo " --git=<executable> use this version of the git tool [$GITCMD]"
echo " --verbose increase verbosity"
echo ""
exit 0
fi
TMPLOG=/tmp/android-ndk-download-toolchain-$$.log
rm -rf $TMPLOG
if [ $VERBOSE = yes ] ; then
run ()
{
echo "##### NEW COMMAND"
echo $@
$@ 2>&1 | tee $TMPLOG
}
log ()
{
echo "LOG: $@"
}
else
echo "To follow download, please use in another terminal: tail -F $TMPLOG"
run ()
{
echo "##### NEW COMMAND" >> $TMPLOG
echo "$@" >> $TMPLOG
$@ 1>$TMPLOG 2>&1
}
log ()
{
echo "$@" > /dev/null
}
fi
if [ -n "$OPTION_RELEASE" ] ; then
RELEASE="$OPTION_RELEASE"
log "Using release name $RELEASE"
else
log "Using default release name $RELEASE"
fi
# Check that 'git' works
if [ -n "$OPTION_GIT" ] ; then
GITCMD="$OPTION_GIT"
log "Using git tool command: '$GITCMD'"
else
log "Using default git tool command."
fi
$GITCMD --version > /dev/null 2>&1
if [ $? != 0 ] ; then
echo "The git tool doesn't seem to work. Please check $GITCMD"
exit 1
fi
log "Git seems to work ok."
if [ -n "$OPTION_BRANCH" ] ; then
BRANCH="$OPTION_BRANCH"
log "Using branch named $BRANCH"
else
log "Using default branch name $BRANCH"
fi
# Create temp directory where everything will be copied
#
PKGNAME=android-ndk-toolchain-$RELEASE
TMPDIR=/tmp/$PKGNAME
log "Creating temporary directory $TMPDIR"
rm -rf $TMPDIR && mkdir $TMPDIR
if [ $? != 0 ] ; then
echo "Could not create temporary directory: $TMPDIR"
fi
# prefix used for all clone operations
GITPREFIX=git://android.git.kernel.org/toolchain
toolchain_clone ()
{
echo "downloading sources for toolchain/$1"
log "cloning $GITPREFIX/$1.git"
run git clone $GITPREFIX/$1.git $1
if [ $? != 0 ] ; then
echo "Could not clone $GITPREFIX/$1.git ?"
exit 1
fi
log "checking out $BRANCH branch of $1.git"
cd $1
run git checkout -b $BRANCH origin/$BRANCH
if [ $? != 0 ] ; then
echo "Could not checkout $1 ?"
exit 1
fi
# get rid of .git directory, we won't need it.
cd ..
log "getting rid of .git directory for $1."
run rm -rf $1/.git
}
cd $TMPDIR
toolchain_clone binutils
toolchain_clone build
toolchain_clone gcc
toolchain_clone gdb
toolchain_clone gmp
#toolchain_clone gold # not sure about this one !
toolchain_clone mpfr
# We only keep one version of gcc and binutils
# we clearly don't need this
log "getting rid of obsolete sources: gcc-4.3.1 gdb-6.8"
rm -rf $TMPDIR/gcc/gcc-4.3.1
rm -rf $TMPDIR/gcc/gdb-6.8
# create the package
PACKAGE=/tmp/$PKGNAME.tar.bz2
echo "Creating package archive $PACKAGE"
cd `dirname $TMPDIR`
run tar cjvf $PACKAGE -C /tmp/$PKGNAME .
if [ $? != 0 ] ; then
echo "Could not package toolchain source archive ?. See $TMPLOG"
exit 1
fi
echo "Toolchain sources downloaded and packaged succesfully at $PACKAGE"
rm -f $TMPLOG