1 #!/bin/sh 2 # 3 # Copyright (C) 2011 The Android Open Source Project 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # you may not use this file except in compliance with the License. 7 # You may obtain a copy of the License at 8 # 9 # http://www.apache.org/licenses/LICENSE-2.0 10 # 11 # Unless required by applicable law or agreed to in writing, software 12 # distributed under the License is distributed on an "AS IS" BASIS, 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # See the License for the specific language governing permissions and 15 # limitations under the License. 16 # 17 # This shell script is used to rebuild the prebuilt GNU libsupc++ and 18 # libstdc++ binaries from their sources. It requires an NDK installation 19 # that contains valid plaforms files and toolchain binaries. 20 # 21 22 # include common function and variable definitions 23 . $NDK_BUILDTOOLS_PATH/prebuilt-common.sh 24 25 STL_DIR=sources/cxx-stl 26 GNUSTL_DIR=gnu-libstdc++ 27 28 PROGRAM_PARAMETERS="<src-dir>" 29 30 PROGRAM_DESCRIPTION=\ 31 "Rebuild the prebuilt GNU libsupc++ / libstdc++ binaries for the Android NDK. 32 33 This script is called when packaging a new NDK release. It will simply 34 rebuild the GNU libsupc++ and libstdc++ static and shared libraries from 35 sources. 36 37 This requires a temporary NDK installation containing platforms and 38 toolchain binaries for all target architectures, as well as the path to 39 the corresponding gcc source tree. 40 41 By default, this will try with the current NDK directory, unless 42 you use the --ndk-dir=<path> option. 43 44 The output will be placed in appropriate sub-directories of 45 <ndk>/$GNUSTL_SUBDIR, but you can override this with the --out-dir=<path> 46 option. 47 " 48 49 GCC_VERSION_LIST= 50 register_var_option "--gcc-version-list=<vers>" GCC_VERSION_LIST "List of GCC versions" 51 52 PACKAGE_DIR= 53 register_var_option "--package-dir=<path>" PACKAGE_DIR "Put prebuilt tarballs into <path>." 54 55 NDK_DIR= 56 register_var_option "--ndk-dir=<path>" NDK_DIR "Specify NDK root path for the build." 57 58 BUILD_DIR= 59 OPTION_BUILD_DIR= 60 register_var_option "--build-dir=<path>" OPTION_BUILD_DIR "Specify temporary build dir." 61 62 OUT_DIR= 63 register_var_option "--out-dir=<path>" OUT_DIR "Specify output directory directly." 64 65 ABIS=$(spaces_to_commas $PREBUILT_ABIS) 66 register_var_option "--abis=<list>" ABIS "Specify list of target ABIs." 67 68 NO_MAKEFILE= 69 register_var_option "--no-makefile" NO_MAKEFILE "Do not use makefile to speed-up build" 70 71 VISIBLE_LIBGNUSTL_STATIC= 72 register_var_option "--visible-libgnustl-static" VISIBLE_LIBGNUSTL_STATIC "Do not use hidden visibility for libgnustl_static.a" 73 74 WITH_DEBUG_INFO= 75 register_var_option "--with-debug-info" WITH_DEBUG_INFO "Build with -g. STL is still built with optimization but with debug info" 76 77 WITH_LIBSUPPORT= 78 register_var_option "--with-libsupport" WITH_LIBSUPPORT "Build with -landroid_support." 79 80 register_jobs_option 81 register_try64_option 82 83 extract_parameters "$@" 84 85 # set compiler version to any even earlier than default 86 EXPLICIT_COMPILER_VERSION=1 87 if [ -z "$GCC_VERSION_LIST" ]; then 88 EXPLICIT_COMPILER_VERSION= 89 GCC_VERSION_LIST=$DEFAULT_GCC_VERSION_LIST 90 fi 91 92 SRCDIR=$(echo $PARAMETERS | sed 1q) 93 check_toolchain_src_dir "$SRCDIR" 94 95 ABIS=$(commas_to_spaces $ABIS) 96 97 # Handle NDK_DIR 98 if [ -z "$NDK_DIR" ] ; then 99 NDK_DIR=$ANDROID_NDK_ROOT 100 log "Auto-config: --ndk-dir=$NDK_DIR" 101 else 102 if [ ! -d "$NDK_DIR" ] ; then 103 echo "ERROR: NDK directory does not exists: $NDK_DIR" 104 exit 1 105 fi 106 fi 107 108 if [ -z "$OPTION_BUILD_DIR" ]; then 109 BUILD_DIR=$NDK_TMPDIR/build-gnustl 110 else 111 BUILD_DIR=$OPTION_BUILD_DIR 112 fi 113 114 HOST_TAG_LIST="$HOST_TAG $HOST_TAG32" 115 116 rm -rf "$BUILD_DIR" 117 mkdir -p "$BUILD_DIR" 118 fail_panic "Could not create build directory: $BUILD_DIR" 119 120 # $1: ABI name 121 # $2: Build directory 122 # $3: "static" or "shared" 123 # $4: GCC version 124 # $5: optional "thumb" 125 build_gnustl_for_abi () 126 { 127 local ARCH BINPREFIX SYSROOT GNUSTL_SRCDIR 128 local ABI=$1 129 local BUILDDIR="$2" 130 local LIBTYPE="$3" 131 local GCC_VERSION="$4" 132 local THUMB="$5" 133 local DSTDIR=$NDK_DIR/$GNUSTL_SUBDIR/libs/$ABI/$THUMB 134 local PREBUILT_NDK=$ANDROID_BUILD_TOP/prebuilts/ndk/current 135 local SRC OBJ OBJECTS CFLAGS CXXFLAGS CPPFLAGS 136 137 prepare_target_build $ABI $PLATFORM $NDK_DIR 138 fail_panic "Could not setup target build." 139 140 INSTALLDIR=$BUILDDIR/install-$ABI-$GCC_VERSION/$THUMB 141 BUILDDIR=$BUILDDIR/$LIBTYPE-${ABI}${THUMB}-$GCC_VERSION 142 143 mkdir -p $DSTDIR 144 145 ARCH=$(convert_abi_to_arch $ABI) 146 for TAG in $HOST_TAG_LIST; do 147 BINPREFIX=$ANDROID_BUILD_TOP/prebuilts/ndk/current/$(get_toolchain_binprefix_for_arch $ARCH $GCC_VERSION $TAG) 148 if [ -f ${BINPREFIX}gcc ]; then 149 break; 150 fi 151 done 152 GNUSTL_SRCDIR=$SRCDIR/gcc/gcc-$GCC_VERSION/libstdc++-v3 153 # Sanity check 154 if [ ! -d "$GNUSTL_SRCDIR" ]; then 155 echo "ERROR: Not a valid toolchain source tree." 156 echo "Can't find: $GNUSTL_SRCDIR" 157 exit 1 158 fi 159 160 if [ ! -f "$GNUSTL_SRCDIR/configure" ]; then 161 echo "ERROR: Configure script missing: $GNUSTL_SRCDIR/configure" 162 exit 1 163 fi 164 165 SYSROOT=$PREBUILT_NDK/$(get_default_platform_sysroot_for_arch $ARCH) 166 LDIR=$SYSROOT"/usr/"$(get_default_libdir_for_arch $ARCH) 167 # Sanity check 168 if [ ! -f "$LDIR/libc.a" ]; then 169 echo "ERROR: Empty sysroot! you probably need to run gen-platforms.sh before this script." 170 exit 1 171 fi 172 if [ ! -f "$LDIR/libc.so" ]; then 173 echo "ERROR: Sysroot misses shared libraries! you probably need to run gen-platforms.sh" 174 echo "*without* the --minimal flag before running this script." 175 exit 1 176 fi 177 178 EXTRA_CFLAGS="-ffunction-sections -fdata-sections" 179 EXTRA_LDFLAGS= 180 if [ -n "$THUMB" ] ; then 181 EXTRA_CFLAGS="$EXTRA_CFLAGS -mthumb" 182 EXTRA_LDFLAGS="$EXTRA_LDFLAGS -mthumb" 183 fi 184 185 case $ARCH in 186 arm) 187 BUILD_HOST=arm-linux-androideabi 188 ;; 189 arm64) 190 BUILD_HOST=aarch64-linux-android 191 ;; 192 x86) 193 BUILD_HOST=i686-linux-android 194 # ToDo: remove the following once all x86-based device call JNI function with 195 # stack aligned to 16-byte 196 EXTRA_CFLAGS="$EXTRA_CFLAGS -mstackrealign" 197 ;; 198 x86_64) 199 BUILD_HOST=x86_64-linux-android 200 # ToDo: remove the following once all x86-based device call JNI function with 201 # stack aligned to 16-byte 202 EXTRA_CFLAGS="$EXTRA_CFLAGS -mstackrealign" 203 ;; 204 mips) 205 BUILD_HOST=mipsel-linux-android 206 ;; 207 mips64) 208 BUILD_HOST=mips64el-linux-android 209 ;; 210 esac 211 212 CFLAGS="-fPIC $CFLAGS --sysroot=$SYSROOT -fexceptions -funwind-tables -D__BIONIC__ -O2 $EXTRA_CFLAGS" 213 CXXFLAGS="-fPIC $CXXFLAGS --sysroot=$SYSROOT -fexceptions -frtti -funwind-tables -D__BIONIC__ -O2 $EXTRA_CFLAGS" 214 CPPFLAGS="$CPPFLAGS --sysroot=$SYSROOT" 215 if [ "$WITH_DEBUG_INFO" ]; then 216 CFLAGS="$CFLAGS -g" 217 CXXFLAGS="$CXXFLAGS -g" 218 fi 219 if [ "$WITH_LIBSUPPORT" ]; then 220 CFLAGS="$CFLAGS -I$NDK_DIR/$SUPPORT_SUBDIR/include" 221 CXXFLAGS="$CXXFLAGS -I$NDK_DIR/$SUPPORT_SUBDIR/include" 222 EXTRA_LDFLAGS="$EXTRA_LDFLAGS -L$NDK_DIR/$SUPPORT_SUBDIR/libs/$ABI -landroid_support" 223 fi 224 export CFLAGS CXXFLAGS CPPFLAGS 225 226 export CC=${BINPREFIX}gcc 227 export CXX=${BINPREFIX}g++ 228 export AS=${BINPREFIX}as 229 export LD=${BINPREFIX}ld 230 export AR=${BINPREFIX}ar 231 export RANLIB=${BINPREFIX}ranlib 232 export STRIP=${BINPREFIX}strip 233 234 setup_ccache 235 236 export LDFLAGS="$EXTRA_LDFLAGS -lc" 237 238 case $ABI in 239 armeabi-v7a|armeabi-v7a-hard) 240 CXXFLAGS=$CXXFLAGS" -march=armv7-a -mfpu=vfpv3-d16" 241 LDFLAGS=$LDFLAGS" -Wl,--fix-cortex-a8" 242 if [ "$ABI" != "armeabi-v7a-hard" ]; then 243 CXXFLAGS=$CXXFLAGS" -mfloat-abi=softfp" 244 else 245 CXXFLAGS=$CXXFLAGS" -mhard-float -D_NDK_MATH_NO_SOFTFP=1" 246 LDFLAGS=$LDFLAGS" -Wl,--no-warn-mismatch -lm_hard" 247 fi 248 ;; 249 arm64-v8a) 250 CFLAGS="$CFLAGS -mfix-cortex-a53-835769" 251 CXXFLAGS=$CXXFLAGS" -mfix-cortex-a53-835769" 252 ;; 253 esac 254 255 if [ "$ABI" = "armeabi" -o "$ABI" = "armeabi-v7a" -o "$ABI" = "armeabi-v7a-hard" ]; then 256 CFLAGS=$CFLAGS" -minline-thumb1-jumptable" 257 CXXFLAGS=$CXXFLAGS" -minline-thumb1-jumptable" 258 fi 259 260 LIBTYPE_FLAGS= 261 if [ $LIBTYPE = "static" ]; then 262 # Ensure we disable visibility for the static library to reduce the 263 # size of the code that will be linked against it. 264 if [ -z "$VISIBLE_LIBGNUSTL_STATIC" ] ; then 265 LIBTYPE_FLAGS="--enable-static --disable-shared" 266 LIBTYPE_FLAGS=$LIBTYPE_FLAGS" --disable-libstdcxx-visibility" 267 CXXFLAGS=$CXXFLAGS" -fvisibility=hidden -fvisibility-inlines-hidden" 268 fi 269 else 270 LIBTYPE_FLAGS="--disable-static --enable-shared" 271 #LDFLAGS=$LDFLAGS" -lsupc++" 272 fi 273 274 if [ "$ARCH" = "x86_64" -o "$ARCH" = "mips64" -o "$ARCH" = "mips" ] ; then 275 MULTILIB_FLAGS= 276 else 277 MULTILIB_FLAGS=--disable-multilib 278 fi 279 280 PROJECT="gnustl_$LIBTYPE gcc-$GCC_VERSION $ABI $THUMB" 281 echo "$PROJECT: configuring" 282 mkdir -p $BUILDDIR && rm -rf $BUILDDIR/* && 283 cd $BUILDDIR && 284 run $GNUSTL_SRCDIR/configure \ 285 --prefix=$INSTALLDIR \ 286 --host=$BUILD_HOST \ 287 $LIBTYPE_FLAGS \ 288 --enable-libstdcxx-time \ 289 --disable-symvers \ 290 $MULTILIB_FLAGS \ 291 --disable-nls \ 292 --disable-sjlj-exceptions \ 293 --disable-tls \ 294 --disable-libstdcxx-pch \ 295 --with-gxx-include-dir=$INSTALLDIR/include/c++/$GCC_VERSION 296 297 fail_panic "Could not configure $PROJECT" 298 299 echo "$PROJECT: compiling" 300 run make -j$NUM_JOBS 301 fail_panic "Could not build $PROJECT" 302 303 echo "$PROJECT: installing" 304 run make install 305 fail_panic "Could not create $ABI $THUMB prebuilts for GNU libsupc++/libstdc++" 306 } 307 308 309 HAS_COMMON_HEADERS= 310 311 # $1: ABI 312 # $2: Build directory 313 # $3: GCC_VERSION 314 copy_gnustl_libs () 315 { 316 local ABI="$1" 317 local BUILDDIR="$2" 318 local ARCH=$(convert_abi_to_arch $ABI) 319 local GCC_VERSION="$3" 320 local PREFIX=$(get_default_toolchain_prefix_for_arch $ARCH) 321 PREFIX=${PREFIX%%-} 322 323 local SDIR="$BUILDDIR/install-$ABI-$GCC_VERSION" 324 local DDIR="$NDK_DIR/$GNUSTL_SUBDIR" 325 326 local GCC_VERSION_NO_DOT=$(echo $GCC_VERSION|sed 's/\./_/g') 327 # Copy the common headers only once per gcc version 328 if [ -z `var_value HAS_COMMON_HEADERS_$GCC_VERSION_NO_DOT` ]; then 329 copy_directory "$SDIR/include/c++/$GCC_VERSION" "$DDIR/include" 330 rm -rf "$DDIR/include/$PREFIX" 331 eval HAS_COMMON_HEADERS_$GCC_VERSION_NO_DOT=true 332 fi 333 334 rm -rf "$DDIR/libs/$ABI" && 335 mkdir -p "$DDIR/libs/$ABI/include" 336 337 # Copy the ABI-specific headers 338 copy_directory "$SDIR/include/c++/$GCC_VERSION/$PREFIX/bits" "$DDIR/libs/$ABI/include/bits" 339 case "$ARCH" in 340 x86_64) 341 copy_directory "$SDIR/include/c++/$GCC_VERSION/$PREFIX/32/bits" "$DDIR/libs/$ABI/include/32/bits" 342 copy_directory "$SDIR/include/c++/$GCC_VERSION/$PREFIX/x32/bits" "$DDIR/libs/$ABI/include/x32/bits" 343 ;; 344 mips64) 345 copy_directory "$SDIR/include/c++/$GCC_VERSION/$PREFIX/32/mips-r1/bits" "$DDIR/libs/$ABI/include/32/mips-r1/bits" 346 copy_directory "$SDIR/include/c++/$GCC_VERSION/$PREFIX/32/mips-r2/bits" "$DDIR/libs/$ABI/include/32/mips-r2/bits" 347 copy_directory "$SDIR/include/c++/$GCC_VERSION/$PREFIX/32/mips-r6/bits" "$DDIR/libs/$ABI/include/32/mips-r6/bits" 348 ;; 349 mips) 350 copy_directory "$SDIR/include/c++/$GCC_VERSION/$PREFIX/mips-r2/bits" "$DDIR/libs/$ABI/include/mips-r2/bits" 351 copy_directory "$SDIR/include/c++/$GCC_VERSION/$PREFIX/mips-r6/bits" "$DDIR/libs/$ABI/include/mips-r6/bits" 352 ;; 353 esac 354 355 LDIR=lib 356 if [ "$ABI" = "mips32r6" ]; then 357 LDIR=libr6 358 elif [ "$ARCH" != "${ARCH%%64*}" ]; then 359 #Can't call $(get_default_libdir_for_arch $ARCH) which contain hack for arm64 360 LDIR=lib64 361 fi 362 363 # Copy the ABI-specific libraries 364 # Note: the shared library name is libgnustl_shared.so due our custom toolchain patch 365 copy_file_list "$SDIR/$LDIR" "$DDIR/libs/$ABI" libsupc++.a libgnustl_shared.so 366 # Note: we need to rename libgnustl_shared.a to libgnustl_static.a 367 cp "$SDIR/$LDIR/libgnustl_shared.a" "$DDIR/libs/$ABI/libgnustl_static.a" 368 case "$ARCH" in 369 # for multilib we copy full set. Keep native libs in $ABI dir for compatibility. 370 # TODO: remove it in $ABI top directory 371 x86_64) 372 copy_file_list "$SDIR/lib" "$DDIR/libs/$ABI/lib" libsupc++.a libgnustl_shared.so 373 copy_file_list "$SDIR/lib64" "$DDIR/libs/$ABI/lib64" libsupc++.a libgnustl_shared.so 374 copy_file_list "$SDIR/libx32" "$DDIR/libs/$ABI/libx32" libsupc++.a libgnustl_shared.so 375 cp "$SDIR/lib/libgnustl_shared.a" "$DDIR/libs/$ABI/lib/libgnustl_static.a" 376 cp "$SDIR/lib64/libgnustl_shared.a" "$DDIR/libs/$ABI/lib64/libgnustl_static.a" 377 cp "$SDIR/libx32/libgnustl_shared.a" "$DDIR/libs/$ABI/libx32/libgnustl_static.a" 378 ;; 379 mips64) 380 copy_file_list "$SDIR/lib" "$DDIR/libs/$ABI/lib" libsupc++.a libgnustl_shared.so 381 copy_file_list "$SDIR/libr2" "$DDIR/libs/$ABI/libr2" libsupc++.a libgnustl_shared.so 382 copy_file_list "$SDIR/libr6" "$DDIR/libs/$ABI/libr6" libsupc++.a libgnustl_shared.so 383 copy_file_list "$SDIR/lib64" "$DDIR/libs/$ABI/lib64" libsupc++.a libgnustl_shared.so 384 cp "$SDIR/lib/libgnustl_shared.a" "$DDIR/libs/$ABI/lib/libgnustl_static.a" 385 cp "$SDIR/libr2/libgnustl_shared.a" "$DDIR/libs/$ABI/libr2/libgnustl_static.a" 386 cp "$SDIR/libr6/libgnustl_shared.a" "$DDIR/libs/$ABI/libr6/libgnustl_static.a" 387 cp "$SDIR/lib64/libgnustl_shared.a" "$DDIR/libs/$ABI/lib64/libgnustl_static.a" 388 ;; 389 mips) 390 copy_file_list "$SDIR/lib" "$DDIR/libs/$ABI/lib" libsupc++.a libgnustl_shared.so 391 copy_file_list "$SDIR/libr2" "$DDIR/libs/$ABI/libr2" libsupc++.a libgnustl_shared.so 392 copy_file_list "$SDIR/libr6" "$DDIR/libs/$ABI/libr6" libsupc++.a libgnustl_shared.so 393 cp "$SDIR/lib/libgnustl_shared.a" "$DDIR/libs/$ABI/lib/libgnustl_static.a" 394 cp "$SDIR/libr2/libgnustl_shared.a" "$DDIR/libs/$ABI/libr2/libgnustl_static.a" 395 cp "$SDIR/libr6/libgnustl_shared.a" "$DDIR/libs/$ABI/libr6/libgnustl_static.a" 396 ;; 397 esac 398 399 if [ -d "$SDIR/thumb" ] ; then 400 copy_file_list "$SDIR/thumb/$LDIR" "$DDIR/libs/$ABI/thumb" libsupc++.a libgnustl_shared.so 401 cp "$SDIR/thumb/$LDIR/libgnustl_shared.a" "$DDIR/libs/$ABI/thumb/libgnustl_static.a" 402 fi 403 } 404 405 GCC_VERSION_LIST=$(commas_to_spaces $GCC_VERSION_LIST) 406 for ABI in $ABIS; do 407 ARCH=$(convert_abi_to_arch $ABI) 408 FIRST_GCC_VERSION=$(get_first_gcc_version_for_arch $ARCH) 409 for VERSION in $GCC_VERSION_LIST; do 410 # Only build for this GCC version if it on or after FIRST_GCC_VERSION 411 if [ -z "$EXPLICIT_COMPILER_VERSION" ] && ! version_is_at_least "${VERSION%%l}" "$FIRST_GCC_VERSION"; then 412 continue 413 fi 414 415 build_gnustl_for_abi $ABI "$BUILD_DIR" static $VERSION 416 build_gnustl_for_abi $ABI "$BUILD_DIR" shared $VERSION 417 # build thumb version of libraries for 32-bit arm 418 if [ "$ABI" != "${ABI%%arm*}" -a "$ABI" = "${ABI%%64*}" ] ; then 419 build_gnustl_for_abi $ABI "$BUILD_DIR" static $VERSION thumb 420 build_gnustl_for_abi $ABI "$BUILD_DIR" shared $VERSION thumb 421 fi 422 copy_gnustl_libs $ABI "$BUILD_DIR" $VERSION 423 done 424 done 425 426 # If needed, package files into tarballs 427 if [ -n "$PACKAGE_DIR" ] ; then 428 for VERSION in $GCC_VERSION_LIST; do 429 FILES="$GNUSTL_DIR/Android.mk $GNUSTL_DIR/include" 430 for ABI in $ABIS; do 431 if [ ! -d "$NDK_DIR/$GNUSTL_SUBDIR/libs/$ABI" ]; then 432 continue 433 fi 434 case "$ABI" in 435 x86_64) 436 MULTILIB="include/32/bits include/x32/bits 437 lib/libsupc++.a lib/libgnustl_static.a lib/libgnustl_shared.so 438 libx32/libsupc++.a libx32/libgnustl_static.a libx32/libgnustl_shared.so 439 lib64/libsupc++.a lib64/libgnustl_static.a lib64/libgnustl_shared.so" 440 ;; 441 mips64) 442 MULTILIB="include/32/mips-r1/bits include/32/mips-r2/bits include/32/mips-r6/bits include/bits 443 lib/libsupc++.a lib/libgnustl_static.a lib/libgnustl_shared.so 444 libr2/libsupc++.a libr2/libgnustl_static.a libr2/libgnustl_shared.so 445 libr6/libsupc++.a libr6/libgnustl_static.a libr6/libgnustl_shared.so 446 lib64/libsupc++.a lib64/libgnustl_static.a lib64/libgnustl_shared.so" 447 ;; 448 mips|mips32r6) 449 MULTILIB="include/mips-r2/bits include/mips-r6/bits include/bits 450 lib/libsupc++.a lib/libgnustl_static.a lib/libgnustl_shared.so 451 libr2/libsupc++.a libr2/libgnustl_static.a libr2/libgnustl_shared.so 452 libr6/libsupc++.a libr6/libgnustl_static.a libr6/libgnustl_shared.so" 453 ;; 454 *) 455 MULTILIB= 456 ;; 457 esac 458 for LIB in include/bits $MULTILIB libsupc++.a libgnustl_static.a libgnustl_shared.so; do 459 FILES="$FILES $GNUSTL_DIR/libs/$ABI/$LIB" 460 THUMB_FILE="$GNUSTL_DIR/libs/$ABI/thumb/$LIB" 461 if [ -f "$NDK_DIR/sources/cxx-stl/$THUMB_FILE" ]; then 462 FILES="$FILES $THUMB_FILE" 463 fi 464 done 465 done 466 467 make_repo_prop "$NDK_DIR/$STL_DIR/$GNUSTL_DIR" 468 FILES="$FILES $GNUSTL_DIR/repo.prop" 469 470 cp "$ANDROID_BUILD_TOP/toolchain/gcc/gcc-4.9/COPYING" \ 471 "$NDK_DIR/$STL_DIR/$GNUSTL_DIR/NOTICE" 472 FILES="$FILES $GNUSTL_DIR/NOTICE" 473 474 PACKAGE="$PACKAGE_DIR/gnustl-${VERSION}.zip" 475 dump "Packaging: $PACKAGE" 476 pack_archive "$PACKAGE" "$NDK_DIR/$STL_DIR" "$FILES" 477 fail_panic "Could not package GNU libstdc++ binaries!" 478 done 479 fi 480 481 if [ -z "$OPTION_BUILD_DIR" ]; then 482 log "Cleaning up..." 483 rm -rf $BUILD_DIR 484 else 485 log "Don't forget to cleanup: $BUILD_DIR" 486 fi 487 488 log "Done!" 489