Files
android_development/ndk/build/tools/make-release.sh
David 'Digit' Turner 854f820c24 Add --prebuilt-ndk=FILE and --no-git options to build/tools/make-release.sh script.
This is used to help people easily package experimental versions of the NDK to
test and distribute fixes and improvements. The main idea is to allow external
contributors to play with it in interesting way and share the result easily.
2009-10-14 15:39:58 -07:00

245 lines
7.7 KiB
Bash
Executable File

#!/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 script is used to build complete Android NDK release packages
# from the git repository and a set of prebuilt cross-toolchain tarballs
#
# location of the root ndk directory. we assume this script is under build/tools
NDK_ROOT_DIR=`dirname $0`/../..
NDK_ROOT_DIR=`cd $NDK_ROOT_DIR && pwd`
. $NDK_ROOT_DIR/build/core/ndk-common.sh
force_32bit_binaries
# the default release name (use today's date)
RELEASE=`date +%Y%m%d`
# the package prefix
PREFIX=android-ndk
# the directory containing the prebuilt toolchain tarballs
PREBUILT_DIR=
# the prefix of prebuilt toolchain tarballs in $PREBUILT_DIR
PREBUILT_PREFIX=android-ndk-prebuilt-20090323
# the list of supported host development systems
PREBUILT_SYSTEMS="linux-x86 darwin-x86 windows"
# a prebuilt NDK archive (.zip file). empty means don't use any
PREBUILT_NDK=
# set to 'yes' if we should use 'git ls-files' to list the files to
# be copied into the archive.
USE_GIT_FILES=yes
OPTION_HELP=no
for opt do
optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
case "$opt" in
--help|-h|-\?) OPTION_HELP=yes
;;
--verbose)
if [ "$VERBOSE" = "yes" ] ; then
VERBOSE2=yes
else
VERBOSE=yes
fi
;;
--release=*) RELEASE=$optarg
;;
--prefix=*) PREFIX=$optarg
;;
--prebuilt-ndk=*) PREBUILT_NDK=$optarg
;;
--prebuilt-prefix=*) PREBUILT_PREFIX=$optarg
;;
--prebuilt-path=*) PREBUILT_DIR=$optarg
;;
--systems=*) PREBUILT_SYSTEMS=$optarg
;;
--no-git) USE_GIT_FILES=no
;;
*)
echo "unknown option '$opt', use --help"
exit 1
esac
done
if [ $OPTION_HELP = yes ] ; then
echo "Usage: make-release.sh [options]"
echo ""
echo "Package a new set of release packages for the Android NDK."
echo "You will need to specify the path of a directory containing"
echo "prebuilt toolchain tarballs with the --prebuilt-path option."
echo ""
echo "Alternatively, you can specify an existing NDK release package"
echo "with the --prebuilt-ndk option."
echo ""
echo "Options: [defaults in brackets after descriptions]"
echo ""
echo " --help Print this help message"
echo " --prefix=PREFIX Package prefix name [$PREFIX]"
echo " --release=NAME Specify release name [$RELEASE]"
echo " --systems=SYSTEMS List of host system packages [$PREBUILT_SYSTEMS]"
echo " --prebuilt-ndk=FILE Specify a previous NDK package [$PREBUILT_NDK]"
echo " --prebuilt-path=PATH Location of prebuilt binary tarballs [$PREBUILT_DIR]"
echo " --prebuilt-prefix=PREFIX Prefix of prebuilt binary tarballs [$PREBUILT_PREFIX]"
echo " --no-git Don't use git to list input files, take all of them."
echo ""
exit 1
fi
# Check the prebuilt path
#
if [ -n "$PREBUILD_NDK" -a -n "$PREBUILT_DIR" ] ; then
echo "ERROR: You cannot use both --prebuilt-ndk and --prebuilt-path at the same time."
exit 1
fi
if [ -z "$PREBUILT_DIR" -a -z "$PREBUILT_NDK" ] ; then
echo "ERROR: You must use --prebuilt-path=PATH to specify the path of prebuilt binary tarballs."
echo " Or --prebuilt-ndk=FILE to specify an existing NDK release archive."
exit 1
fi
if [ -n "$PREBUILT_DIR" ] ; then
if [ ! -d "$PREBUILT_DIR" ] ; then
echo "ERROR: the --prebuilt-path argument is not a directory path: $PREBUILT_DIR"
exit 1
fi
if [ -z "$PREBUILT_PREFIX" ] ; then
echo "ERROR: Your prebuilt prefix is empty; use --prebuilt-prefix=PREFIX."
exit 1
fi
if [ -z "$PREBUILT_SYSTEMS" ] ; then
echo "ERROR: Your systems list is empty, use --system=LIST to specify a different one."
exit 1
fi
# Check the systems
#
for SYS in $PREBUILT_SYSTEMS; do
if [ ! -f $PREBUILT_DIR/$PREBUILT_PREFIX-$SYS.tar.bz2 ] ; then
echo "ERROR: It seems there is no prebuilt binary tarball for the '$SYS' system"
echo "Please check the content of $PREBUILT_DIR for a file named $PREBUILT_PREFIX-$SYS.tar.bz2."
exit 1
fi
done
else
if [ ! -f "$PREBUILT_NDK" ] ; then
echo "ERROR: the --prebuilt-ndk argument is not a file: $PREBUILT_NDK"
exit 1
fi
# Check that the name ends with the proper host tag
HOST_NDK_SUFFIX="$HOST_TAG.zip"
echo "$PREBUILT_NDK" | grep -q "$HOST_NDK_SUFFIX"
if [ $? != 0 ] ; then
echo "ERROR: the name of the prebuilt NDK must end in $HOST_NDK_SUFFIX"
exit 1
fi
PREBUILT_SYSTEMS=$HOST_TAG
fi
# The list of git files to copy into the archives
if [ "$USE_GIT_FILES" = "yes" ] ; then
echo "Collecting sources from git (use --no-git to copy all files instead)."
GIT_FILES=`cd $NDK_ROOT_DIR && git ls-files`
else
echo "Collecting all sources files under tree."
# Cleanup everything that is likely to not be part of the final NDK
# i.e. generated files...
rm -rf $NDK_ROOT_DIR/out
rm -rf $NDK_ROOT_DIR/apps/*/project/libs/armeabi
# Get all files under the NDK root
GIT_FILES=`cd $NDK_ROOT_DIR && find .`
GIT_FILES=`echo $GIT_FILES | sed -e "s!\./!!g"`
fi
# temporary directory used for packaging
TMPDIR=/tmp/ndk-release
RELEASE_PREFIX=$PREFIX-$RELEASE
rm -rf $TMPDIR && mkdir -p $TMPDIR
# first create the reference ndk directory from the git reference
echo "Creating reference from source files"
REFERENCE=$TMPDIR/reference &&
mkdir -p $REFERENCE &&
(cd $NDK_ROOT_DIR && tar cf - $GIT_FILES) | (cd $REFERENCE && tar xf -) &&
rm -f $REFERENCE/Android.mk
if [ $? != 0 ] ; then
echo "Could not create reference. Aborting."
exit 2
fi
# now, for each system, create a package
#
for SYSTEM in $PREBUILT_SYSTEMS; do
echo "Preparing package for system $SYSTEM."
BIN_RELEASE=$RELEASE_PREFIX-$SYSTEM
PREBUILT=$PREBUILT_DIR/$PREBUILT_PREFIX-$SYSTEM
DSTDIR=$TMPDIR/$RELEASE_PREFIX
rm -rf $DSTDIR && mkdir -p $DSTDIR &&
cp -rp $REFERENCE/* $DSTDIR
if [ $? != 0 ] ; then
echo "Could not copy reference. Aborting."
exit 2
fi
if [ -n "$PREBUILT_NDK" ] ; then
echo "Unpacking prebuilt toolchain from $PREBUILT_NDK"
UNZIP_DIR=$TMPDIR/prev-ndk
rm -rf $UNZIP_DIR && mkdir -p $UNZIP_DIR
if [ $? != 0 ] ; then
echo "Could not create temporary directory: $UNZIP_DIR"
exit 1
fi
cd $UNZIP_DIR && unzip -q $PREBUILT_NDK 1>/dev/null 2>&1
if [ $? != 0 ] ; then
echo "ERROR: Could not unzip NDK package $PREBUILT_NDK"
exit 1
fi
cd android-ndk-* && cp -rP build/prebuilt $DSTDIR/build
else
echo "Unpacking $PREBUILT.tar.bz2"
(cd $DSTDIR && tar xjf $PREBUILT.tar.bz2) 2>/dev/null 1>&2
if [ $? != 0 ] ; then
echo "Could not unpack prebuilt for system $SYSTEM. Aborting."
exit 1
fi
fi
ARCHIVE=$BIN_RELEASE.zip
echo "Creating $ARCHIVE"
(cd $TMPDIR && zip -9qr $ARCHIVE $RELEASE_PREFIX && rm -rf $DSTDIR) 2>/dev/null 1>&2
if [ $? != 0 ] ; then
echo "Could not create zip archive. Aborting."
exit 1
fi
chmod a+r $TMPDIR/$ARCHIVE
done
echo "Cleaning up."
rm -rf $TMPDIR/reference
rm -rf $TMPDIR/prev-ndk
echo "Done, please see packages in $TMPDIR:"
ls -l $TMPDIR