| #!/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!" |