diff --git a/ndk/build/tools/download-toolchain-sources.sh b/ndk/build/tools/download-toolchain-sources.sh new file mode 100755 index 000000000..38baf08bc --- /dev/null +++ b/ndk/build/tools/download-toolchain-sources.sh @@ -0,0 +1,202 @@ +#!/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= specify release branch [$BRANCH]" + echo " --release= specify release name [$RELEASE]" + echo " --git= 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 gcc 4.3.1 sources" +rm -rf $TMPDIR/gcc/gcc-4.3.1 + +# 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