From af4040476e92e0a68abd9981e2011655798ce5cf Mon Sep 17 00:00:00 2001 From: David 'Digit' Turner Date: Mon, 16 Nov 2009 11:26:06 -0800 Subject: [PATCH] Add a script to download and package the toolchain sources. download-toolchain-sources.sh will download the current toolchain sources from our git repositories then finely package them into a compressed tarball that will later be used to rebuild the prebuilt binaries properly. Due to the way our sources are stored in the git repository, the sources in the tarball are laid out slightly differently than in the original toolchain source archive used for NDK 1.6. An upcoming patch will modify build-toolchain.sh to deal with the difference and also allow the build of gcc-4.4.0 and gdb-6.8. --- ndk/build/tools/download-toolchain-sources.sh | 202 ++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100755 ndk/build/tools/download-toolchain-sources.sh 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