• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/sh
2#
3# Copyright (C) 2009-2010 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 script is used to package complete Android NDK release packages.
18#
19# You will need prebuilt toolchain binary tarballs or a previous
20# NDK release package to do that.
21#
22# See make-release.sh if you want to make a new release completely from
23# scratch.
24#
25
26. `dirname $0`/prebuilt-common.sh
27
28NDK_ROOT_DIR="$ANDROID_NDK_ROOT"
29
30# the list of platforms / API levels we want to package in
31# this release. This can be overriden with the --platforms
32# option, see below.
33#
34PLATFORMS="$API_LEVELS"
35
36# the default release name (use today's date)
37RELEASE=`date +%Y%m%d`
38register_var_option "--release=<name>" RELEASE "Specify release name"
39
40# the directory containing all prebuilts
41PREBUILT_DIR=
42register_var_option "--prebuilt-dir=<path>" PREBUILT_DIR "Specify prebuilt directory"
43
44# a prebuilt NDK archive (.zip file). empty means don't use any
45PREBUILT_NDK=
46register_var_option "--prebuilt-ndk=<file>" PREBUILT_NDK "Specify prebuilt ndk package"
47
48# the list of supported host development systems
49SYSTEMS=$DEFAULT_SYSTEMS
50register_var_option "--systems=<list>" SYSTEMS "Specify host systems"
51
52# ARCH to build for
53ARCHS=$DEFAULT_ARCHS
54register_var_option "--arch=<arch>" ARCHS "Specify target architecture(s)"
55
56# set to 'yes' if we should use 'git ls-files' to list the files to
57# be copied into the archive.
58NO_GIT=no
59register_var_option "--no-git" NO_GIT "Don't use git to list input files, take all of them."
60
61# set of toolchain prebuilts we need to package
62TOOLCHAINS=$(get_toolchain_name_list_for_arch arm)
63OPTION_TOOLCHAINS=$TOOLCHAINS
64register_var_option "--toolchains=<list>" OPTION_TOOLCHAINS "Specify list of toolchains."
65
66# set of platforms to package (all by default)
67register_var_option "--platforms=<list>" PLATFORMS "Specify API levels"
68
69# the package prefix
70PREFIX=android-ndk
71register_var_option "--prefix=<name>" PREFIX "Specify package prefix"
72
73# default location for generated packages
74OUT_DIR=/tmp/ndk-$USER/release
75OPTION_OUT_DIR=
76register_var_option "--out-dir=<path>" OPTION_OUT_DIR "Specify output package directory" "$OUT_DIR"
77
78# Find the location of the platforms root directory
79DEVELOPMENT_ROOT=`dirname $ANDROID_NDK_ROOT`/development/ndk
80register_var_option "--development-root=<path>" DEVELOPMENT_ROOT "Specify platforms/samples directory"
81
82LLVM_VERSION_LIST=$DEFAULT_LLVM_VERSION_LIST
83register_var_option "--llvm=<versions>" LLVM_VERSION_LIST "List of LLVM release versions"
84
85WITH_LIBCXX=
86register_var_option "--with-libcxx" WITH_LIBCXX "Package experimental Libc++ sources"
87
88register_try64_option
89
90SEPARATE_64=no
91register_option "--separate-64" do_SEPARATE_64 "Separate 64-bit host toolchain to its own package"
92do_SEPARATE_64 ()
93{
94    if [ "$TRY64" = "yes" ]; then
95        echo "ERROR: You cannot use both --try-64 and --separate-64 at the same time."
96        exit 1
97    fi
98    SEPARATE_64=yes;
99}
100
101PROGRAM_PARAMETERS=
102PROGRAM_DESCRIPTION=\
103"Package a new set of release packages for the Android NDK.
104
105You will need to have generated one or more prebuilt binary tarballs
106with the build/tools/rebuild-all-prebuilts.sh script. These files should
107be named like <toolname>-<system>.tar.bz2, where <toolname> is an arbitrary
108tool name, and <system> is one of: $SYSTEMS
109
110Use the --prebuilt-dir=<path> option to build release packages from the
111binary tarballs stored in <path>.
112
113Alternatively, you can use --prebuilt-ndk=<file> where <file> is the path
114to a previous NDK release package. It will be used to extract the toolchain
115binaries and copy them to your new release. Only use this for experimental
116package releases.
117
118The generated release packages will be stored in a temporary directory that
119will be printed at the end of the generation process.
120"
121
122extract_parameters "$@"
123
124# Ensure that SYSTEMS is space-separated
125SYSTEMS=$(commas_to_spaces $SYSTEMS)
126
127# Do we need to support x86?
128ARCHS=$(commas_to_spaces $ARCHS)
129echo "$ARCHS" | tr ' ' '\n' | grep -q x86
130if [ $? = 0 ] ; then
131    TRY_X86=yes
132else
133    TRY_X86=no
134fi
135# Do we need to support mips?
136echo "$ARCHS" | tr ' ' '\n' | grep -q mips
137if [ $? = 0 ] ; then
138    TRY_mips=yes
139else
140    TRY_mips=no
141fi
142
143# Compute ABIS from ARCHS
144ABIS=
145for ARCH in $ARCHS; do
146    DEFAULT_ABIS=$(get_default_abis_for_arch $ARCH)
147    if [ -z "$ABIS" ]; then
148        ABIS=$DEFAULT_ABIS
149    else
150        ABIS=$ABIS" $DEFAULT_ABIS"
151    fi
152done
153
154# Convert comma-separated list to space-separated list
155LLVM_VERSION_LIST=$(commas_to_spaces $LLVM_VERSION_LIST)
156
157# If --arch is used to list x86 as a target architecture, Add x86-4.6 to
158# the list of default toolchains to package. That is, unless you also
159# explicitely use --toolchains=<list>
160#
161# Ensure that TOOLCHAINS is space-separated after this.
162#
163if [ "$OPTION_TOOLCHAINS" != "$TOOLCHAINS" ]; then
164    TOOLCHAINS=$(commas_to_spaces $OPTION_TOOLCHAINS)
165else
166    if [ "$TRY_X86" = "yes" ]; then
167        TOOLCHAINS=$TOOLCHAINS" "$(get_toolchain_name_list_for_arch x86)
168    fi
169    if [ "$TRY_mips" = "yes" ]; then
170        TOOLCHAINS=$TOOLCHAINS" "$(get_toolchain_name_list_for_arch mips)
171    fi
172    TOOLCHAINS=$(commas_to_spaces $TOOLCHAINS)
173fi
174
175# Check the prebuilt path
176#
177if [ -n "$PREBUILT_NDK" -a -n "$PREBUILT_DIR" ] ; then
178    echo "ERROR: You cannot use both --prebuilt-ndk and --prebuilt-dir at the same time."
179    exit 1
180fi
181
182if [ -z "$PREBUILT_DIR" -a -z "$PREBUILT_NDK" ] ; then
183    echo "ERROR: You must use one of --prebuilt-dir or --prebuilt-ndk. See --help for details."
184    exit 1
185fi
186
187# Check the option directory.
188if [ -n "$OPTION_OUT_DIR" ] ; then
189    OUT_DIR="$OPTION_OUT_DIR"
190    mkdir -p $OUT_DIR
191    if [ $? != 0 ] ; then
192        echo "ERROR: Could not create output directory: $OUT_DIR"
193        exit 1
194    fi
195else
196    rm -rf $OUT_DIR && mkdir -p $OUT_DIR
197fi
198
199# Handle the prebuilt binaries now
200#
201if [ -n "$PREBUILT_DIR" ] ; then
202    if [ ! -d "$PREBUILT_DIR" ] ; then
203        echo "ERROR: the --prebuilt-dir argument is not a directory: $PREBUILT_DIR"
204        exit 1
205    fi
206    if [ -z "$SYSTEMS" ] ; then
207        echo "ERROR: Your systems list is empty, use --systems=LIST to specify a different one."
208        exit 1
209    fi
210else
211    if [ ! -f "$PREBUILT_NDK" ] ; then
212        echo "ERROR: the --prebuilt-ndk argument is not a file: $PREBUILT_NDK"
213        exit 1
214    fi
215    # Check that the name ends with the proper host tag
216    HOST_NDK_SUFFIX="$HOST_TAG.zip"
217    echo "$PREBUILT_NDK" | grep -q "$HOST_NDK_SUFFIX"
218    fail_panic "The name of the prebuilt NDK must end in $HOST_NDK_SUFFIX"
219    SYSTEMS=$HOST_TAG
220fi
221
222echo "Architectures: $ARCHS"
223echo "CPU ABIs: $ABIS"
224echo "Toolchains: $TOOLCHAINS"
225echo "Host systems: $SYSTEMS"
226
227
228# The list of git files to copy into the archives
229if [ "$NO_GIT" != "yes" ] ; then
230    echo "Collecting sources from git (use --no-git to copy all files instead)."
231    GIT_FILES=`cd $NDK_ROOT_DIR && git ls-files`
232else
233    echo "Collecting all sources files under tree."
234    # Cleanup everything that is likely to not be part of the final NDK
235    # i.e. generated files...
236    rm -rf $NDK_ROOT_DIR/samples/*/obj
237    rm -rf $NDK_ROOT_DIR/samples/*/libs
238    # Get all files under the NDK root
239    GIT_FILES=`cd $NDK_ROOT_DIR && find .`
240    GIT_FILES=`echo $GIT_FILES | sed -e "s!\./!!g"`
241fi
242
243# temporary directory used for packaging
244TMPDIR=$NDK_TMPDIR
245
246RELEASE_PREFIX=$PREFIX-$RELEASE
247
248# ensure that the generated files are ug+rx
249umask 0022
250
251# Translate name to 64-bit's counterpart
252# $1: prebuilt name
253name64 ()
254{
255    local NAME=$1
256    case $NAME in
257        *windows)
258            NAME=${NAME}-x86_64
259            ;;
260        *linux-x86|*darwin-x86)
261            NAME=${NAME}_64
262            ;;
263    esac
264    echo $NAME
265}
266
267# Unpack a prebuilt into specified destination directory
268# $1: prebuilt name, relative to $PREBUILT_DIR
269# $2: destination directory
270# $3: optional destination directory for 64-bit toolchain
271# $4: optional flag to use 32-bit prebuilt in place of 64-bit
272unpack_prebuilt ()
273{
274    local PREBUILT=
275    local PREBUILT64=null
276    local DDIR="$2"
277    local DDIR64="${3:-$DDIR}"
278    local USE32="${4:-no}"
279
280    if [ "$TRY64" = "yes" -a "$USE32" = "no" ]; then
281        PREBUILT=`name64 $1`
282    else
283        PREBUILT=$1
284        PREBUILT64=`name64 $1`
285    fi
286
287    PREBUILT=${PREBUILT}.tar.bz2
288    PREBUILT64=${PREBUILT64}.tar.bz2
289
290    echo "Unpacking $PREBUILT"
291    if [ -f "$PREBUILT_DIR/$PREBUILT" ] ; then
292        unpack_archive "$PREBUILT_DIR/$PREBUILT" "$DDIR"
293        fail_panic "Could not unpack prebuilt $PREBUILT. Aborting."
294        if [ -f "$PREBUILT_DIR/$PREBUILT64" ] ; then
295            echo "Unpacking $PREBUILT64"
296            unpack_archive "$PREBUILT_DIR/$PREBUILT64" "$DDIR64"
297            fail_panic "Could not unpack prebuilt $PREBUILT64. Aborting."
298        fi
299    else
300        echo "WARNING: Could not find $PREBUILT in $PREBUILT_DIR"
301    fi
302}
303
304# Copy a prebuilt directory from the previous
305# $1: Source directory relative to
306copy_prebuilt ()
307{
308    local SUBDIR="$1"
309    if [ -d "$1" ] ; then
310        echo "Copying: $SUBDIR"
311        copy_directory "$SUBDIR" "$DSTDIR/$2"
312    else
313        echo "Ignored: $SUBDIR"
314    fi
315}
316
317
318rm -rf $TMPDIR && mkdir -p $TMPDIR
319
320# Unpack the previous NDK package if any
321if [ -n "$PREBUILT_NDK" ] ; then
322    echo "Unpacking prebuilt toolchains from $PREBUILT_NDK"
323    UNZIP_DIR=$TMPDIR/prev-ndk
324    rm -rf $UNZIP_DIR && mkdir -p $UNZIP_DIR
325    fail_panic "Could not create temporary directory: $UNZIP_DIR"
326    unpack_archive "$PREBUILT_NDK" "$UNZIP_DIR"
327    fail_panic "Could not unzip NDK package $PREBUILT_NDK"
328fi
329
330# first create the reference ndk directory from the git reference
331echo "Creating reference from source files"
332REFERENCE=$TMPDIR/reference && rm -rf $REFERENCE/* &&
333copy_file_list "$NDK_ROOT_DIR" "$REFERENCE" $GIT_FILES &&
334rm -f $REFERENCE/Android.mk
335fail_panic "Could not create reference. Aborting."
336
337# Copy platform and sample files
338if [ "$PREBUILT_DIR" ]; then
339    echo "Unpacking platform files" &&
340    unpack_archive "$PREBUILT_DIR/platforms.tar.bz2" "$REFERENCE" &&
341    echo "Unpacking samples files" &&
342    unpack_archive "$PREBUILT_DIR/samples.tar.bz2" "$REFERENCE"
343    fail_panic "Could not unpack platform and sample files"
344elif [ "$PREBUILT_NDK" ]; then
345    echo "ERROR: NOT IMPLEMENTED!"
346    exit 1
347else
348    # copy platform and sample files
349    echo "Copying platform and sample files"
350    FLAGS="--src-dir=$DEVELOPMENT_ROOT --dst-dir=$REFERENCE"
351    if [ "$VERBOSE2" = "yes" ] ; then
352        FLAGS="$FLAGS --verbose"
353    fi
354
355    FLAGS="$FLAGS --platform=$(spaces_to_commas $PLATFORMS)"
356    FLAGS="$FLAGS --arch=$(spaces_to_commas $ARCHS)"
357    $NDK_ROOT_DIR/build/tools/gen-platforms.sh $FLAGS
358    fail_panic "Could not copy platform files. Aborting."
359fi
360
361# Remove the source for host tools to make the final package smaller
362rm -rf $REFERENCE/sources/host-tools
363
364# Remove leftovers, just in case...
365rm -rf $REFERENCE/samples/*/{obj,libs,build.xml,local.properties,Android.mk} &&
366rm -rf $REFERENCE/tests/build/*/{obj,libs} &&
367rm -rf $REFERENCE/tests/device/*/{obj,libs}
368
369if [ "$WITH_LIBCXX" ]; then
370    # Remove the libc++ test suite, it's large (28 MiB) and not useful for
371    # developers using the NDK.
372    rm -rf $REFERENCE/sources/cxx-stl/llvm-libc++/libcxx/test
373else
374    # Remove the libc++ sources, they're not ready for release.
375    # http://b.android.com/36496
376    rm -rf $REFERENCE/sources/cxx-stl/llvm-libc++
377fi
378
379# Regenerate HTML documentation, place the files under .../docs/
380$NDK_ROOT_DIR/build/tools/build-docs.sh \
381    --in-dir=$NDK_ROOT_DIR/docs/text \
382    --out-dir=$REFERENCE/docs
383
384# copy sources files
385if [ -d $DEVELOPMENT_ROOT/sources ] ; then
386    echo "Copying NDK sources files"
387    copy_file_list "$DEVELOPMENT_ROOT" "$REFERENCE" "sources"
388    fail_panic "Could not copy sources. Aborting."
389fi
390
391# Unpack prebuilt C++ runtimes headers and libraries
392if [ -z "$PREBUILT_NDK" ]; then
393    # Unpack gdbserver
394    for ARCH in $ARCHS; do
395        unpack_prebuilt $ARCH-gdbserver "$REFERENCE"
396    done
397    # Unpack C++ runtimes
398    for VERSION in $DEFAULT_GCC_VERSION_LIST; do
399        unpack_prebuilt gnu-libstdc++-headers-$VERSION "$REFERENCE"
400    done
401    for ABI in $ABIS; do
402        unpack_prebuilt gabixx-libs-$ABI "$REFERENCE"
403        unpack_prebuilt stlport-libs-$ABI "$REFERENCE"
404        if [ "$WITH_LIBCXX" ]; then
405            unpack_prebuilt libcxx-libs-$ABI "$REFERENCE"
406        fi
407        for VERSION in $DEFAULT_GCC_VERSION_LIST; do
408            unpack_prebuilt gnu-libstdc++-libs-$VERSION-$ABI "$REFERENCE"
409        done
410        unpack_prebuilt libportable-libs-$ABI "$REFERENCE"
411        unpack_prebuilt compiler-rt-libs-$ABI "$REFERENCE"
412    done
413fi
414
415# create a release file named 'RELEASE.TXT' containing the release
416# name. This is used by the build script to detect whether you're
417# invoking the NDK from a release package or from the development
418# tree.
419#
420if [ "$TRY64" = "yes" ]; then
421    echo "$RELEASE (64-bit)" > $REFERENCE/RELEASE.TXT
422else
423    echo "$RELEASE" > $REFERENCE/RELEASE.TXT
424fi
425
426# Remove un-needed files
427rm -f $REFERENCE/CleanSpec.mk
428
429# now, for each system, create a package
430#
431DSTDIR=$TMPDIR/$RELEASE_PREFIX
432DSTDIR64=${DSTDIR}
433if [ "$SEPARATE_64" = "yes" ] ; then
434    DSTDIR64=$TMPDIR/64/${RELEASE_PREFIX}
435fi
436
437for SYSTEM in $SYSTEMS; do
438    echo "Preparing package for system $SYSTEM."
439    BIN_RELEASE=$RELEASE_PREFIX-$SYSTEM
440    rm -rf "$DSTDIR" "$DSTDIR64" &&
441    mkdir -p "$DSTDIR" "$DSTDIR64" &&
442    copy_directory "$REFERENCE" "$DSTDIR"
443    fail_panic "Could not copy reference. Aborting."
444
445    if [ "$PREBUILT_NDK" ]; then
446        cd $UNZIP_DIR/android-ndk-* && cp -rP toolchains/* $DSTDIR/toolchains/
447        fail_panic "Could not copy toolchain files from $PREBUILT_NDK"
448
449        if [ -d "$DSTDIR/$GABIXX_SUBDIR" ]; then
450            GABIXX_ABIS=$PREBUILT_ABIS
451            for GABIXX_ABI in $GABIXX_ABIS; do
452                copy_prebuilt "$GABIXX_SUBDIR/libs/$GABIXX_ABI" "$GABIXX_SUBDIR/libs"
453            done
454        else
455            echo "WARNING: Could not find GAbi++ source tree!"
456        fi
457
458        if [ -d "$DSTDIR/$STLPORT_SUBDIR" ] ; then
459            STLPORT_ABIS=$PREBUILT_ABIS
460            for STL_ABI in $STLPORT_ABIS; do
461                copy_prebuilt "$STLPORT_SUBDIR/libs/$STL_ABI" "$STLPORT_SUBDIR/libs"
462            done
463        else
464            echo "WARNING: Could not find STLport source tree!"
465        fi
466
467        if [ "$WITH_LIBCXX" ]; then
468            if [ -d "$DSTDIR/$LIBCXX_SUBDIR" ]; then
469                LIBCXX_ABIS=$PREBUILT_ABIS
470                for STL_ABI in $LIBCXX_ABIS; do
471                    copy_prebuilt "$LIBCXX_SUBDIR/libs/$STL_ABI" "$LIBCXX_SUBDIR/libs"
472                done
473            else
474                echo "WARNING: Could not find Libc++ source tree!"
475            fi
476        fi
477
478        for VERSION in $DEFAULT_GCC_VERSION_LIST; do
479            copy_prebuilt "$GNUSTL_SUBDIR/$VERSION/include" "$GNUSTL_SUBDIR/$VERSION/"
480            for STL_ABI in $PREBUILT_ABIS; do
481                copy_prebuilt "$GNUSTL_SUBDIR/$VERSION/libs/$STL_ABI" "$GNUSTL_SUBDIR/$VERSION/libs"
482            done
483        done
484
485        if [ -d "$DSTDIR/$LIBPORTABLE_SUBDIR" ]; then
486            LIBPORTABLE_ABIS=$PREBUILT_ABIS
487            for LIBPORTABLE_ABI in $LIBPORTABLE_ABIS; do
488                copy_prebuilt "$LIBPORTABLE_SUBDIR/libs/$LIBPORTABLE_ABI" "$LIBPORTABLE_SUBDIR/libs"
489            done
490        else
491            echo "WARNING: Could not find libportable source tree!"
492        fi
493
494        if [ -d "$DSTDIR/$COMPILER_RT_SUBDIR" ]; then
495            COMPILER_RT_ABIS=$PREBUILT_ABIS
496            for COMPILER_RT_ABI in $COMPILER_RT_ABIS; do
497                copy_prebuilt "$COMPILER_RT_SUBDIR/libs/$COMPILER_RT_ABI" "$COMPILER_RT_SUBDIR/libs"
498            done
499        else
500            echo "WARNING: Could not find compiler-rt source tree!"
501        fi
502    else
503        # Unpack toolchains
504        for TC in $TOOLCHAINS; do
505            unpack_prebuilt $TC-$SYSTEM "$DSTDIR" "$DSTDIR64"
506            echo "Removing sysroot for $TC"
507            rm -rf $DSTDIR/toolchains/$TC/prebuilt/$SYSTEM/sysroot
508            rm -rf $DSTDIR64/toolchains/$TC/prebuilt/${SYSTEM}_64/sysroot
509            rm -rf $DSTDIR64/toolchains/$TC/prebuilt/${SYSTEM}-x86_64/sysroot
510        done
511        echo "Remove ld.mcld deployed/packaged earlier by accident "
512        find $DSTDIR/toolchains $DSTDIR64/toolchains  -name "*ld.mcld*" -exec rm -f {} \;
513
514        # Unpack llvm and clang
515        for LLVM_VERSION in $LLVM_VERSION_LIST; do
516            unpack_prebuilt llvm-$LLVM_VERSION-$SYSTEM "$DSTDIR" "$DSTDIR64"
517        done
518
519        unpack_prebuilt ld.mcld-$SYSTEM "$DSTDIR" "$DSTDIR64"
520
521        # Unpack prebuilt ndk-stack and other host tools
522        unpack_prebuilt ndk-stack-$SYSTEM "$DSTDIR" "$DSTDIR64" "yes"
523        unpack_prebuilt ndk-depends-$SYSTEM "$DSTDIR" "$DSTDIR64" "yes"
524        unpack_prebuilt ndk-make-$SYSTEM "$DSTDIR" "$DSTDIR64"
525        unpack_prebuilt ndk-sed-$SYSTEM "$DSTDIR" "$DSTDIR64"
526        unpack_prebuilt ndk-awk-$SYSTEM "$DSTDIR" "$DSTDIR64"
527        unpack_prebuilt ndk-perl-$SYSTEM "$DSTDIR" "$DSTDIR64"
528        unpack_prebuilt ndk-python-$SYSTEM "$DSTDIR" "$DSTDIR64"
529
530        if [ "$SYSTEM" = "windows" ]; then
531            unpack_prebuilt toolbox-$SYSTEM "$DSTDIR" "$DSTDIR64"
532        fi
533    fi
534
535    # Unpack other host tools
536    unpack_prebuilt scan-build-view "$DSTDIR" "$DSTDIR64"
537
538    # Create an archive for the final package. Extension depends on the
539    # host system.
540    ARCHIVE=$BIN_RELEASE
541    if [ "$TRY64" = "yes" ]; then
542        ARCHIVE=`name64 $ARCHIVE`
543    elif [ "$SYSTEM" = "windows" ]; then
544        ARCHIVE=$ARCHIVE-x86
545    fi
546    case "$SYSTEM" in
547        windows)
548            ARCHIVE64="$ARCHIVE-64bit-tools.zip"
549            ARCHIVE="$ARCHIVE.zip"
550            ;;
551        *)
552            ARCHIVE64="$ARCHIVE-64bit-tools.tar.bz2"
553            ARCHIVE="$ARCHIVE.tar.bz2"
554            ;;
555    esac
556    echo "Creating $ARCHIVE"
557    # make all file universally readable, and all executable (including directory)
558    # universally executable, punt intended
559    find $DSTDIR $DSTDIR64 -exec chmod a+r {} \;
560    find $DSTDIR $DSTDIR64 -executable -exec chmod a+x {} \;
561    pack_archive "$OUT_DIR/$ARCHIVE" "$TMPDIR" "$RELEASE_PREFIX"
562    fail_panic "Could not create archive: $OUT_DIR/$ARCHIVE"
563    if [ "$SEPARATE_64" = "yes" ] ; then
564        pack_archive "$OUT_DIR/$ARCHIVE64" "$TMPDIR/64" "${RELEASE_PREFIX}"
565        fail_panic "Could not create archive: $OUT_DIR/$ARCHIVE64"
566    fi
567done
568
569echo "Cleaning up."
570rm -rf $TMPDIR/reference
571rm -rf $TMPDIR/prev-ndk
572
573echo "Done, please see packages in $OUT_DIR:"
574ls -l $OUT_DIR
575