• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (C) 2010 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#      http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14#
15
16# Create a standalone toolchain package for Android.
17
18. `dirname $0`/prebuilt-common.sh
19
20PROGRAM_PARAMETERS=""
21PROGRAM_DESCRIPTION=\
22"Generate a customized Android toolchain installation that includes
23a working sysroot. The result is something that can more easily be
24used as a standalone cross-compiler, e.g. to run configure and
25make scripts."
26
27# For now, this is the only toolchain that works reliably.
28TOOLCHAIN_NAME=
29register_var_option "--toolchain=<name>" TOOLCHAIN_NAME "Specify toolchain name"
30
31LLVM_VERSION=
32register_var_option "--llvm-version=<ver>" LLVM_VERSION "Specify LLVM version"
33
34STL=gnustl
35register_var_option "--stl=<name>" STL "Specify C++ STL"
36
37ARCH=
38register_option "--arch=<name>" do_arch "Specify target architecture" "arm"
39do_arch () { ARCH=$1; }
40
41NDK_DIR=`dirname $0`
42NDK_DIR=`dirname $NDK_DIR`
43NDK_DIR=`dirname $NDK_DIR`
44register_var_option "--ndk-dir=<path>" NDK_DIR "Take source files from NDK at <path>"
45
46if [ -d "$NDK_DIR/prebuilt/$HOST_TAG" ]; then
47  SYSTEM=$HOST_TAG
48else
49  SYSTEM=$HOST_TAG32
50fi
51register_var_option "--system=<name>" SYSTEM "Specify host system"
52
53PACKAGE_DIR=/tmp/ndk-$USER
54register_var_option "--package-dir=<path>" PACKAGE_DIR "Place package file in <path>"
55
56INSTALL_DIR=
57register_var_option "--install-dir=<path>" INSTALL_DIR "Don't create package, install files to <path> instead."
58
59PLATFORM=
60register_option "--platform=<name>" do_platform "Specify target Android platform/API level." "android-3"
61do_platform () { PLATFORM=$1; }
62
63extract_parameters "$@"
64
65# Check NDK_DIR
66if [ ! -d "$NDK_DIR/build/core" ] ; then
67    echo "Invalid source NDK directory: $NDK_DIR"
68    echo "Please use --ndk-dir=<path> to specify the path of an installed NDK."
69    exit 1
70fi
71
72# Check ARCH
73if [ -z "$ARCH" ]; then
74    case $TOOLCHAIN_NAME in
75        arm-*)
76            ARCH=arm
77            ;;
78        x86-*)
79            ARCH=x86
80            ;;
81        mips*)
82            ARCH=mips
83            ;;
84        *)
85            ARCH=arm
86            ;;
87    esac
88    ARCH_INC=$ARCH
89    log "Auto-config: --arch=$ARCH"
90else
91    ARCH_INC=$ARCH
92    case $ARCH in
93        *arm)
94            ARCH=arm
95            ;;
96        *x86)
97            ARCH=x86
98            ;;
99        *mips)
100            ARCH=mips
101            ;;
102        *)
103            ARCH=arm
104            ;;
105    esac
106fi
107test "$ARCH_INC" != "$ARCH" && ARCH_INC=$(find_ndk_unknown_archs)
108test -z "$ARCH_INC" && ARCH_INC="$ARCH"
109
110# Check toolchain name
111if [ -z "$TOOLCHAIN_NAME" ]; then
112    TOOLCHAIN_NAME=$(get_default_toolchain_name_for_arch $ARCH)
113    echo "Auto-config: --toolchain=$TOOLCHAIN_NAME"
114fi
115
116test "$ARCH_INC" != "$ARCH" && STL=stlport && TARGET_ABI=$(convert_arch_to_abi $ARCH | tr ',' '\n' | tail -n 1)
117test "$ARCH_INC" != "$ARCH" -a -z "$LLVM_VERSION" && LLVM_VERSION=$DEFAULT_LLVM_VERSION
118# Detect LLVM version from toolchain name
119if [ -z "$LLVM_VERSION" ]; then
120    LLVM_VERSION_EXTRACT=$(echo "$TOOLCHAIN_NAME" | grep 'clang[0-9]\.[0-9]$' | sed -e 's/.*-clang//')
121    if [ -n "$LLVM_VERSION_EXTRACT" ]; then
122        TOOLCHAIN_NAME=$(get_default_toolchain_name_for_arch $ARCH)
123        LLVM_VERSION=$LLVM_VERSION_EXTRACT
124        echo "Auto-config: --toolchain=$TOOLCHAIN_NAME, --llvm-version=$LLVM_VERSION"
125    fi
126fi
127
128# Check PLATFORM
129if [ -z "$PLATFORM" ]; then
130    case $ARCH in
131        arm) PLATFORM=android-3
132            ;;
133        x86)
134            PLATFORM=android-9
135            ;;
136        mips)
137            # Set it to android-9
138            PLATFORM=android-9
139            ;;
140    esac
141    log "Auto-config: --platform=$PLATFORM"
142fi
143
144if [ ! -d "$NDK_DIR/platforms/$PLATFORM" ] ; then
145    echo "Invalid platform name: $PLATFORM"
146    echo "Please use --platform=<name> with one of:" `(cd "$NDK_DIR/platforms" && ls)`
147    exit 1
148fi
149
150# Check toolchain name
151TOOLCHAIN_PATH="$NDK_DIR/toolchains/$TOOLCHAIN_NAME"
152if [ ! -d "$TOOLCHAIN_PATH" ] ; then
153    echo "Invalid toolchain name: $TOOLCHAIN_NAME"
154    echo "Please use --toolchain=<name> with the name of a toolchain supported by the source NDK."
155    echo "Try one of: " `(cd "$NDK_DIR/toolchains" && ls)`
156    exit 1
157fi
158
159# Extract architecture from platform name
160parse_toolchain_name $TOOLCHAIN_NAME
161
162# Check that there are any platform files for it!
163(cd $NDK_DIR/platforms && ls -d */arch-$ARCH_INC >/dev/null 2>&1 )
164if [ $? != 0 ] ; then
165    echo "Platform $PLATFORM doesn't have any files for this architecture: $ARCH_INC"
166    echo "Either use --platform=<name> or --toolchain=<name> to select a different"
167    echo "platform or arch-dependent toolchain name (respectively)!"
168    exit 1
169fi
170
171# Compute source sysroot
172SRC_SYSROOT_INC="$NDK_DIR/platforms/$PLATFORM/arch-$ARCH_INC/usr/include"
173SRC_SYSROOT_LIB="$NDK_DIR/platforms/$PLATFORM/arch-$ARCH/usr/lib"
174if [ ! -d "$SRC_SYSROOT_INC" -o ! -d "$SRC_SYSROOT_LIB" ] ; then
175    echo "No platform files ($PLATFORM) for this architecture: $ARCH"
176    exit 1
177fi
178
179# Check that we have any prebuilts GCC toolchain here
180if [ ! -d "$TOOLCHAIN_PATH/prebuilt" ] ; then
181    echo "Toolchain is missing prebuilt files: $TOOLCHAIN_NAME"
182    echo "You must point to a valid NDK release package!"
183    exit 1
184fi
185
186if [ ! -d "$TOOLCHAIN_PATH/prebuilt/$SYSTEM" ] ; then
187    echo "Host system '$SYSTEM' is not supported by the source NDK!"
188    echo "Try --system=<name> with one of: " `(cd $TOOLCHAIN_PATH/prebuilt && ls) | grep -v gdbserver`
189    exit 1
190fi
191
192TOOLCHAIN_PATH="$TOOLCHAIN_PATH/prebuilt/$SYSTEM"
193TOOLCHAIN_GCC=$TOOLCHAIN_PATH/bin/$ABI_CONFIGURE_TARGET-gcc
194
195if [ ! -f "$TOOLCHAIN_GCC" ] ; then
196    echo "Toolchain $TOOLCHAIN_GCC is missing!"
197    exit 1
198fi
199
200if [ -n "$LLVM_VERSION" ]; then
201    LLVM_TOOLCHAIN_PATH="$NDK_DIR/toolchains/llvm-$LLVM_VERSION"
202    # Check that we have any prebuilts LLVM toolchain here
203    if [ ! -d "$LLVM_TOOLCHAIN_PATH/prebuilt" ] ; then
204        echo "LLVM Toolchain is missing prebuilt files"
205        echo "You must point to a valid NDK release package!"
206        exit 1
207    fi
208
209    if [ ! -d "$LLVM_TOOLCHAIN_PATH/prebuilt/$SYSTEM" ] ; then
210        echo "Host system '$SYSTEM' is not supported by the source NDK!"
211        echo "Try --system=<name> with one of: " `(cd $LLVM_TOOLCHAIN_PATH/prebuilt && ls)`
212        exit 1
213    fi
214    LLVM_TOOLCHAIN_PATH="$LLVM_TOOLCHAIN_PATH/prebuilt/$SYSTEM"
215fi
216
217# Get GCC_BASE_VERSION.  Note that GCC_BASE_VERSION may be slightly different from GCC_VERSION.
218# eg. In gcc4.6 GCC_BASE_VERSION is "4.6.x-google"
219LIBGCC_PATH=`$TOOLCHAIN_GCC -print-libgcc-file-name`
220LIBGCC_BASE_PATH=${LIBGCC_PATH%/*}         # base path of libgcc.a
221GCC_BASE_VERSION=${LIBGCC_BASE_PATH##*/}   # stuff after the last /
222
223# Create temporary directory
224TMPDIR=$NDK_TMPDIR/standalone/$TOOLCHAIN_NAME
225
226dump "Copying prebuilt binaries..."
227# Now copy the GCC toolchain prebuilt binaries
228run copy_directory "$TOOLCHAIN_PATH" "$TMPDIR"
229
230# Replace soft-link mcld by real file
231ALL_LDS=`find $TMPDIR -name "*mcld"`
232for LD in $ALL_LDS; do
233  rm -f "$LD"
234  cp -a "$NDK_DIR/toolchains/llvm-$DEFAULT_LLVM_VERSION/prebuilt/$SYSTEM/bin/ld.mcld" "$LD"
235done
236
237# Copy python-related to for gdb.exe
238PYTHON=python
239PYTHON_x=python$(echo "$DEFAULT_PYTHON_VERSION" | cut -d . -f 1)
240PYTHON_xdotx=python$(echo "$DEFAULT_PYTHON_VERSION" | cut -d . -f 1).$(echo "$DEFAULT_PYTHON_VERSION" | cut -d . -f 2)
241copy_directory "$NDK_DIR/prebuilt/$SYSTEM/include/$PYTHON_xdotx" "$TMPDIR/include/$PYTHON_xdotx"
242copy_directory "$NDK_DIR/prebuilt/$SYSTEM/lib/$PYTHON_xdotx" "$TMPDIR/lib/$PYTHON_xdotx"
243copy_file_list "$NDK_DIR/prebuilt/$SYSTEM/bin" "$TMPDIR/bin" "$PYTHON$HOST_EXE" "$PYTHON_x$HOST_EXE" "$PYTHON_xdotx$HOST_EXE"
244if [ "$HOST_TAG32" = "windows" ]; then
245  copy_file_list "$NDK_DIR/prebuilt/$SYSTEM/bin" "$TMPDIR/bin" lib$PYTHON_xdotx.dll
246fi
247
248dump_extra_compile_commands () {
249  if [ "$ARCH_INC" = "$ARCH" ]; then
250    return
251  fi
252
253  if [ -z "$HOST_EXE" ]; then
254    echo '# Call bc2native if needed'
255    echo ''
256    echo 'if [ -n "`echo $@ | grep '\'\\ \\-c\''`" ] || [ "$1" = "-c" ]; then'
257    echo '  exit'
258    echo 'fi'
259
260    echo 'while [ -n "$1" ]; do'
261    echo '  if [ "$1" = "-o" ]; then'
262    echo '    output="$2"'
263    echo '    break'
264    echo '  fi'
265    echo '  shift'
266    echo 'done'
267    echo 'test -z "$output" && output=a.out'
268    echo 'export PYTHONPATH=`dirname $0`/../lib/python2.7/'
269    echo '`dirname $0`/python `dirname $0`/ndk-bc2native.py --sysroot=`dirname $0`/../sysroot --abi='$TARGET_ABI' --platform='$PLATFORM' --file $output $output'
270  else
271    echo 'rem Call bc2native if needed'
272    echo ''
273    echo '  if not "%1" == "-c" goto :keep_going'
274    echo '  echo %* | grep "\\ \\-c"'
275    echo '  if ERRORLEVEL 1 goto :keep_going'
276    echo '  exit'
277    echo ':keep_going'
278
279    echo ':keep_find_output'
280    echo '  if not "%1" == "-o" goto :check_next'
281    echo '  set output=%2'
282    echo ':check_next'
283    echo '  shift'
284    echo '  if "%1" == "" goto :keep_find_output'
285    echo '  if not "%output%" == "" goto :check_done'
286    echo '  set output=a.out'
287    echo ':check_done'
288    echo 'set PYTHONPATH=%~dp0\\..\\lib\\python2.7\\'
289    echo '%~dp0\\python'$HOST_EXE' %~dp0\\ndk-bc2native.py --sysroot=%~dp0\\..\\sysroot --abi='$TARGET_ABI' --platform='$PLATFORM' --file %output% %output%'
290  fi
291}
292
293if [ -n "$LLVM_VERSION" ]; then
294  # Copy the clang/llvm toolchain prebuilt binaries
295  run copy_directory "$LLVM_TOOLCHAIN_PATH" "$TMPDIR"
296
297  # Move clang and clang++ to clang${LLVM_VERSION} and clang${LLVM_VERSION}++,
298  # then create scripts linking them with predefined -target flag.  This is to
299  # make clang/++ easier drop-in replacement for gcc/++ in NDK standalone mode.
300  # Note that the file name of "clang" isn't important, and the trailing
301  # "++" tells clang to compile in C++ mode
302  LLVM_TARGET=
303  case "$ARCH" in
304      arm) # NOte: -target may change by clang based on the
305           #        presence of subsequent -march=armv7-a and/or -mthumb
306          LLVM_TARGET=armv5te-none-linux-androideabi
307          TOOLCHAIN_PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_arm
308          ;;
309      x86)
310          LLVM_TARGET=i686-none-linux-android
311          TOOLCHAIN_PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_x86
312          ;;
313      mips)
314          LLVM_TARGET=mipsel-none-linux-android
315          TOOLCHAIN_PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_mips
316          ;;
317      *)
318        dump "ERROR: Unsupported NDK architecture!"
319  esac
320  # Need to remove '.' from LLVM_VERSION when constructing new clang name,
321  # otherwise clang3.3++ may still compile *.c code as C, not C++, which
322  # is not consistent with g++
323  LLVM_VERSION_WITHOUT_DOT=$(echo "$LLVM_VERSION" | sed -e "s!\.!!")
324  mv "$TMPDIR/bin/clang${HOST_EXE}" "$TMPDIR/bin/clang${LLVM_VERSION_WITHOUT_DOT}${HOST_EXE}"
325  if [ -h "$TMPDIR/bin/clang++${HOST_EXE}" ] ; then
326    ## clang++ is a link to clang.  Remove it and reconstruct
327    rm "$TMPDIR/bin/clang++${HOST_EXE}"
328    ln -s "clang${LLVM_VERSION_WITHOUT_DOT}${HOST_EXE}" "$TMPDIR/bin/clang${LLVM_VERSION_WITHOUT_DOT}++${HOST_EXE}"
329  else
330    mv "$TMPDIR/bin/clang++${HOST_EXE}" "$TMPDIR/bin/clang$LLVM_VERSION_WITHOUT_DOT++${HOST_EXE}"
331  fi
332
333  EXTRA_CLANG_FLAGS=
334  EXTRA_CLANGXX_FLAGS=
335  if [ "$ARCH_INC" != "$ARCH" ]; then
336    LLVM_TARGET=le32-none-ndk
337    EXTRA_CLANG_FLAGS="-emit-llvm"
338    EXTRA_CLANGXX_FLAGS="$EXTRA_CLANG_FLAGS -I\`dirname \$0\`/../include/c++/$GCC_BASE_VERSION"
339  fi
340
341  cat > "$TMPDIR/bin/clang" <<EOF
342if [ "\$1" != "-cc1" ]; then
343    \`dirname \$0\`/clang$LLVM_VERSION_WITHOUT_DOT -target $LLVM_TARGET "\$@" $EXTRA_CLANG_FLAGS
344    $(dump_extra_compile_commands)
345else
346    # target/triple already spelled out.
347    \`dirname \$0\`/clang$LLVM_VERSION_WITHOUT_DOT "\$@" $EXTRA_CLANG_FLAGS
348fi
349EOF
350  cat > "$TMPDIR/bin/clang++" <<EOF
351if [ "\$1" != "-cc1" ]; then
352    \`dirname \$0\`/clang$LLVM_VERSION_WITHOUT_DOT++ -target $LLVM_TARGET "\$@" $EXTRA_CLANGXX_FLAGS
353    $(dump_extra_compile_commands)
354else
355    # target/triple already spelled out.
356    \`dirname \$0\`/clang$LLVM_VERSION_WITHOUT_DOT++ "\$@" $EXTRA_CLANGXX_FLAGS
357fi
358EOF
359  chmod 0755 "$TMPDIR/bin/clang" "$TMPDIR/bin/clang++"
360  cp -a "$TMPDIR/bin/clang" "$TMPDIR/bin/$TOOLCHAIN_PREFIX-clang"
361  cp -a "$TMPDIR/bin/clang++" "$TMPDIR/bin/$TOOLCHAIN_PREFIX-clang++"
362
363  if [ -n "$HOST_EXE" ] ; then
364    cat > "$TMPDIR/bin/clang.cmd" <<EOF
365@echo off
366if "%1" == "-cc1" goto :L
367%~dp0\\clang${LLVM_VERSION_WITHOUT_DOT}${HOST_EXE} -target $LLVM_TARGET %* $EXTRA_CLANG_FLAGS
368$(dump_extra_compile_commands)
369if ERRORLEVEL 1 exit /b 1
370goto :done
371:L
372rem target/triple already spelled out.
373%~dp0\\clang${LLVM_VERSION_WITHOUT_DOT}${HOST_EXE} %* $EXTRA_CLANG_FLAGS
374if ERRORLEVEL 1 exit /b 1
375:done
376EOF
377    cat > "$TMPDIR/bin/clang++.cmd" <<EOF
378@echo off
379if "%1" == "-cc1" goto :L
380%~dp0\\clang${LLVM_VERSION_WITHOUT_DOT}++${HOST_EXE} -target $LLVM_TARGET %* $EXTRA_CLANGXX_FLAGS
381$(dump_extra_compile_commands)
382if ERRORLEVEL 1 exit /b 1
383goto :done
384:L
385rem target/triple already spelled out.
386%~dp0\\clang${LLVM_VERSION_WITHOUT_DOT}++${HOST_EXE} %* $EXTRA_CLANGXX_FLAGS
387if ERRORLEVEL 1 exit /b 1
388:done
389EOF
390    cp -a "$TMPDIR/bin/clang.cmd" "$TMPDIR/bin/$TOOLCHAIN_PREFIX-clang.cmd"
391    cp -a "$TMPDIR/bin/clang++.cmd" "$TMPDIR/bin/$TOOLCHAIN_PREFIX-clang++.cmd"
392  fi
393fi
394
395dump "Copying sysroot headers and libraries..."
396# Copy the sysroot under $TMPDIR/sysroot. The toolchain was built to
397# expect the sysroot files to be placed there!
398run copy_directory_nolinks "$SRC_SYSROOT_INC" "$TMPDIR/sysroot/usr/include"
399run copy_directory_nolinks "$SRC_SYSROOT_LIB" "$TMPDIR/sysroot/usr/lib"
400if [ "$ARCH_INC" != "$ARCH" ]; then
401    cp -a $NDK_DIR/$LIBPORTABLE_SUBDIR/libs/$ABI/* $TMPDIR/sysroot/usr/lib
402    cp -a $NDK_DIR/$GABIXX_SUBDIR/libs/$ABI/* $TMPDIR/sysroot/usr/lib
403    cp -a $NDK_DIR/$COMPILER_RT_SUBDIR/libs/$ABI/* $TMPDIR/sysroot/usr/lib
404fi
405
406dump "Copying libstdc++ headers and libraries..."
407
408GNUSTL_DIR=$NDK_DIR/$GNUSTL_SUBDIR/$GCC_VERSION
409GNUSTL_LIBS=$GNUSTL_DIR/libs
410
411STLPORT_DIR=$NDK_DIR/$STLPORT_SUBDIR
412STLPORT_LIBS=$STLPORT_DIR/libs
413
414ABI_STL="$TMPDIR/$ABI_CONFIGURE_TARGET"
415ABI_STL_INCLUDE="$TMPDIR/include/c++/$GCC_BASE_VERSION"
416ABI_STL_INCLUDE_TARGET="$ABI_STL_INCLUDE/$ABI_CONFIGURE_TARGET"
417
418# $1: filenames of headers
419copy_gabixx_headers () {
420  for header in $@; do
421    (cd $ABI_STL_INCLUDE && ln -s ../../gabi++/include/$header $header)
422  done
423}
424
425# Copy common STL headers (i.e. the non-arch-specific ones)
426copy_stl_common_headers () {
427    case $STL in
428        gnustl)
429            copy_directory "$GNUSTL_DIR/include" "$ABI_STL_INCLUDE"
430            ;;
431        stlport)
432            copy_directory "$STLPORT_DIR/stlport" "$ABI_STL_INCLUDE"
433            copy_directory "$STLPORT_DIR/../gabi++/include" "$ABI_STL_INCLUDE/../../gabi++/include"
434            copy_gabixx_headers cxxabi.h unwind.h unwind-arm.h unwind-itanium.h
435            ;;
436    esac
437}
438
439# $1: Source ABI (e.g. 'armeabi')
440# $2: Optional extra ABI variant, or empty (e.g. "", "thumb", "armv7-a/thumb")
441copy_stl_libs () {
442    local ABI=$1
443    local ABI2=$2
444    case $STL in
445        gnustl)
446            copy_directory "$GNUSTL_LIBS/$ABI/include/bits" "$ABI_STL_INCLUDE_TARGET/$ABI2/bits"
447            copy_file_list "$GNUSTL_LIBS/$ABI" "$ABI_STL/lib/$ABI2" "libgnustl_shared.so"
448            copy_file_list "$GNUSTL_LIBS/$ABI" "$ABI_STL/lib/$ABI2" "libsupc++.a"
449            cp -p "$GNUSTL_LIBS/$ABI/libgnustl_static.a" "$ABI_STL/lib/$ABI2/libstdc++.a"
450            ;;
451        stlport)
452            if [ "$ARCH_INC" != "$ARCH" ]; then
453              tmp_lib_dir=$TMPDIR/stl
454              $NDK_DIR/build/tools/build-cxx-stl.sh --stl=stlport --out-dir=$tmp_lib_dir --abis=unknown
455              cp -p "`ls $tmp_lib_dir/sources/cxx-stl/stlport/libs/*/libstlport_static.a`" "$ABI_STL/lib/$ABI2/libstdc++.a"
456              cp -p "`ls $tmp_lib_dir/sources/cxx-stl/stlport/libs/*/libstlport_shared.so`" "$ABI_STL/lib/$ABI2/libstlport_shared.so"
457              rm -rf $tmp_lib_dir
458            else
459              copy_file_list "$STLPORT_LIBS/$ABI" "$ABI_STL/lib/$ABI2" "libstlport_shared.so"
460              cp -p "$STLPORT_LIBS/$ABI/libstlport_static.a" "$ABI_STL/lib/$ABI2/libstdc++.a"
461            fi
462            ;;
463        *)
464            dump "ERROR: Unsupported STL: $STL"
465            exit 1
466            ;;
467    esac
468}
469
470mkdir -p "$ABI_STL_INCLUDE_TARGET"
471fail_panic "Can't create directory: $ABI_STL_INCLUDE_TARGET"
472copy_stl_common_headers
473case $ARCH in
474    arm)
475        copy_stl_libs armeabi ""
476        copy_stl_libs armeabi "thumb"
477        copy_stl_libs armeabi-v7a "armv7-a"
478        copy_stl_libs armeabi-v7a "armv7-a/thumb"
479        ;;
480    x86|mips)
481        copy_stl_libs "$ARCH" ""
482        ;;
483    *)
484        dump "ERROR: Unsupported NDK architecture: $ARCH"
485        exit 1
486        ;;
487esac
488
489# Install or Package
490if [ -n "$INSTALL_DIR" ] ; then
491    dump "Copying files to: $INSTALL_DIR"
492    run copy_directory "$TMPDIR" "$INSTALL_DIR"
493else
494    PACKAGE_FILE="$PACKAGE_DIR/$TOOLCHAIN_NAME.tar.bz2"
495    dump "Creating package file: $PACKAGE_FILE"
496    pack_archive "$PACKAGE_FILE" "`dirname $TMPDIR`" "$TOOLCHAIN_NAME"
497    fail_panic "Could not create tarball from $TMPDIR"
498fi
499dump "Cleaning up..."
500run rm -rf $TMPDIR
501
502dump "Done."
503