#!/bin/sh
#
# Copyright (C) 2010 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 rebuild the prebuilt STLport binaries from
# their sources. It requires a working NDK installation.
#
# include common function and variable definitions
. `dirname $0`/prebuilt-common.sh
# Location of the test project we use to force the rebuild.
# This is relative to the current NDK directory.
PROJECT_SUBDIR=tests/build/prebuild-stlport
PROGRAM_PARAMETERS=""
PROGRAM_DESCRIPTION=\
"Rebuild the prebuilt STLport binaries for the Android NDK.
This script is called when packaging a new NDK release. It will simply
rebuild the STLport static and shared libraries from sources by using
the dummy project under $PROJECT_SUBDIR and a valid NDK installation.
By default, this will try with the current NDK directory, unless
you use the --ndk-dir=<path> option.
The output will be placed in appropriate sub-directories of
<ndk>/$STLPORT_SUBDIR, but you can override this with the --out-dir=<path>
option.
"
RELEASE=`date +%Y%m%d`
PACKAGE_DIR=/tmp/ndk-prebuilt/prebuilt-$RELEASE
register_var_option "--package-dir=<path>" PACKAGE_DIR "Put prebuilt tarballs into <path>."
NDK_DIR=
register_var_option "--ndk-dir=<path>" NDK_DIR "Don't package, put the files in target NDK dir."
TOOLCHAIN_PKG=
register_var_option "--toolchain-pkg=<path>" TOOLCHAIN_PKG "Use specific toolchain prebuilt package."
BUILD_DIR=
OPTION_BUILD_DIR=
register_var_option "--build-dir=<path>" OPTION_BUILD_DIR "Specify temporary build dir."
OUT_DIR=
register_var_option "--out-dir=<path>" OUT_DIR "Specify output directory directly."
ABIS="$STLPORT_ABIS"
register_var_option "--abis=<list>" ABIS "Specify list of target ABIs."
extract_parameters "$@"
if [ -n "$PACKAGE_DIR" -a -n "$NDK_DIR" ] ; then
echo "ERROR: You cannot use both --package-dir and --ndk-dir at the same time!"
exit 1
fi
if [ -n "$TOOLCHAIN_PKG" ] ; then
if [ ! -f "$TOOLCHAIN_PKG" ] ; then
dump "ERROR: Your toolchain package does not exist: $TOOLCHAIN_PKG"
exit 1
fi
case "$TOOLCHAIN_PKG" in
*.tar.bz2)
;;
*)
dump "ERROR: Toolchain package is not .tar.bz2 archive: $TOOLCHAIN_PKG"
exit 1
esac
fi
if [ -z "$NDK_DIR" ] ; then
mkdir -p "$PACKAGE_DIR"
if [ $? != 0 ] ; then
echo "ERROR: Could not create directory: $PACKAGE_DIR"
exit 1
fi
NDK_DIR=/tmp/ndk-toolchain/ndk-prebuilt-$$
mkdir -p $NDK_DIR &&
dump "Copying NDK files to temporary dir: $NDK_DIR"
run cp -rf $ANDROID_NDK_ROOT/* $NDK_DIR/
if [ -n "$TOOLCHAIN_PKG" ] ; then
dump "Extracting prebuilt toolchain binaries."
unpack_archive "$TOOLCHAIN_PKG" "$NDK_DIR"
fi
else
if [ ! -d "$NDK_DIR" ] ; then
echo "ERROR: NDK directory does not exists: $NDK_DIR"
exit 1
fi
PACKAGE_DIR=
fi
#
# Setup our paths
#
log "Using NDK root: $NDK_DIR"
BUILD_DIR="$OPTION_BUILD_DIR"
if [ -n "$BUILD_DIR" ] ; then
log "Using temporary build dir: $BUILD_DIR"
else
BUILD_DIR=`random_temp_directory`
log "Using random build dir: $BUILD_DIR"
fi
mkdir -p "$BUILD_DIR"
if [ -z "$OUT_DIR" ] ; then
OUT_DIR=$NDK_DIR/$STLPORT_SUBDIR
log "Using default output dir: $OUT_DIR"
else
log "Using usr output dir: $OUT_DIR"
fi
#
# Now build the fake project
#
# NOTE: We take the build project from this NDK's tree, not from
# the alternative one specified with --ndk=<dir>
#
PROJECT_DIR="$ANDROID_NDK_ROOT/$PROJECT_SUBDIR"
if [ ! -d $PROJECT_DIR ] ; then
dump "ERROR: Missing required project: $PROJECT_SUBDIR"
exit 1
fi
# cleanup required to avoid problems with stale dependency files
rm -rf "$PROJECT_DIR/libs"
rm -rf "$PROJECT_DIR/obj"
LIBRARIES="libstlport_static.a libstlport_shared.so"
for ABI in $ABIS; do
dump "Building $ABI STLport binaries..."
(run cd "$PROJECT_SUBDIR" && run "$NDK_DIR"/ndk-build -B APP_ABI=$ABI -j$BUILD_JOBS STLPORT_FORCE_REBUILD=true)
if [ $? != 0 ] ; then
dump "ERROR: Could not build $ABI STLport binaries!!"
exit 1
fi
if [ -z "$PACKAGE_DIR" ] ; then
# Copy files to target NDK
SRCDIR="$PROJECT_SUBDIR/obj/local/$ABI"
DSTDIR="$OUT_DIR/libs/$ABI"
copy_file_list "$SRCDIR" "$DSTDIR" "$LIBRARIES"
fi
done
# If needed, package files into tarballs
if [ -n "$PACKAGE_DIR" ] ; then
for ABI in $ABIS; do
FILES=""
for LIB in $LIBRARIES; do
SRCDIR="$PROJECT_SUBDIR/obj/local/$ABI"
DSTDIR="$STLPORT_SUBDIR/libs/$ABI"
copy_file_list "$SRCDIR" "$NDK_DIR/$DSTDIR" "$LIB"
log "Installing: $DSTDIR/$LIB"
FILES="$FILES $DSTDIR/$LIB"
done
PACKAGE="$PACKAGE_DIR/stlport-libs-$ABI.tar.bz2"
pack_archive "$PACKAGE" "$NDK_DIR" "$FILES"
fail_panic "Could not package $ABI STLport binaries!"
dump "Packaging: $PACKAGE"
done
fi
if [ -n "$PACKAGE_DIR" ] ; then
dump "Cleaning up..."
rm -rf $NDK_DIR
fi
dump "Done!"