make-release.sh revision 7a54bc8cb5965d2fa65ccbe722bb2f42e0bbb9b4
1c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner#!/bin/sh
2c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner#
3a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# Copyright (C) 2010 The Android Open Source Project
4849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner#
5849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# Licensed under the Apache License, Version 2.0 (the "License");
6849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# you may not use this file except in compliance with the License.
7849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# You may obtain a copy of the License at
8849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner#
9849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner#      http://www.apache.org/licenses/LICENSE-2.0
10849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner#
11849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# Unless required by applicable law or agreed to in writing, software
12849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# distributed under the License is distributed on an "AS IS" BASIS,
13849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# See the License for the specific language governing permissions and
15849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner# limitations under the License.
16849a5c1101965b920b49a5620511661bf6870062David 'Digit' Turner#
17a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# This script is used to build an NDK release package *from* scratch !!
18a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# While handy, this is *not* the best way to generate NDK release packages.
19a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# See docs/DEVELOPMENT.TXT for details.
20c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner#
21c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
22a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner. `dirname $0`/prebuilt-common.sh
23c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
24721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turnerforce_32bit_binaries
25721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner
26a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# The default release name (use today's date)
27721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' TurnerRELEASE=`date +%Y%m%d`
28a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerregister_var_option "--release=<name>" RELEASE "Specify release name"
29c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
30a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# The package prefix
31cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' TurnerPREFIX=android-ndk
32a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerregister_var_option "--prefix=<name>" PREFIX "Specify package prefix"
33cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner
34a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# Find the location of the platforms root directory
35a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerDEVELOPMENT_ROOT=`dirname $ANDROID_NDK_ROOT`/development/ndk
36a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerregister_var_option "--development=<path>" DEVELOPMENT_ROOT "Path to development/ndk directory"
376157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner
386f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner# Default location for final packages
397a54bc8cb5965d2fa65ccbe722bb2f42e0bbb9b4David 'Digit' TurnerOUT_DIR=/tmp/ndk-$USER/release
406f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerregister_var_option "--out-dir=<path>" OUT_DIR "Path to output directory"
416f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner
42a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# Force the build
43a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerFORCE=no
44a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerregister_var_option "--force" FORCE "Force build (do not ask initial question)"
45721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner
466f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner# Use --incremental to implement incremental release builds.
476f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner# This is only useful to debug this script or the ones it calls.
486f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' TurnerINCREMENTAL=no
496f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerregister_var_option "--incremental" INCREMENTAL "Enable incremental packaging (debug only)."
506f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner
5199fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' TurnerDARWIN_SSH=
5299fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turnerif [ "$HOST_OS" = "linux" ] ; then
5399fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turnerregister_var_option "--darwin-ssh=<hostname>" DARWIN_SSH "Specify Darwin hostname to ssh to for the build."
5499fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turnerfi
5599fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner
56a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# Determine the host platforms we can build for.
57a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# This is the current host platform, and eventually windows if
58a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# we are on Linux and have the mingw32 compiler installed and
59a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# in our path.
60a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner#
61a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerHOST_SYSTEMS="$HOST_TAG"
62a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner
63a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerMINGW_GCC=
64a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerif [ "$HOST_TAG" == "linux-x86" ] ; then
65a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner    find_program MINGW_GCC i586-mingw32msvc-gcc
66a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner    if [ -n "$MINGW_GCC" ] ; then
67a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner        HOST_SYSTEMS="$HOST_SYSTEMS windows"
68a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner    fi
69a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerfi
7099fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turnerif [ -n "$DARWIN_SSH" ] ; then
7199fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner    HOST_SYSTEMS="$HOST_SYSTEMS darwin-x86"
7299fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turnerfi
7399fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner
74a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerregister_var_option "--systems=<list>" HOST_SYSTEMS "List of host systems to build for"
75a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner
76a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerTOOLCHAIN_SRCDIR=
77a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerregister_var_option "--toolchain-src-dir=<path>" TOOLCHAIN_SRCDIR "Use toolchain sources from <path>"
78cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner
79a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerextract_parameters "$@"
80cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner
81a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# Print a warning and ask the user if he really wants to do that !
82a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner#
836f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerif [ "$FORCE" = "no" -a "$INCREMENTAL" = "no" ] ; then
84a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner    echo "IMPORTANT WARNING !!"
85721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner    echo ""
86a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner    echo "This script is used to generate an NDK release package from scratch"
87a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner    echo "for the following host platforms: $HOST_SYSTEMS"
88cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    echo ""
89a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner    echo "This process is EXTREMELY LONG and may take SEVERAL HOURS on a dual-core"
90a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner    echo "machine. If you plan to do that often, please read docs/DEVELOPMENT.TXT"
91a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner    echo "that provides instructions on how to do that more easily."
92cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner    echo ""
93a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner    echo "Are you sure you want to do that [y/N] "
94a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner    read YESNO
95a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner    case "$YESNO" in
96a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner        y|Y|yes|YES)
97a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner            ;;
98a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner        *)
99a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner            echo "Aborting !"
100a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner            exit 0
101a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner    esac
1026157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turnerfi
1036157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner
104a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerPROGRAM_PARAMETERS=
105a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerPROGRAM_DESCRIPTION=\
106a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner"This script is used to generate an NDK release package from scratch.
107cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner
108a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerThis process is EXTREMELY LONG and consists in the following steps:
109c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
110a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner  - downloading toolchain sources from the Internet
111a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner  - patching them appropriately (if needed)
112a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner  - rebuilding the toolchain binaries for the host system
113a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner  - rebuilding the platforms and samples directories from ../development/ndk
114a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner  - packaging everything into a host-specific archive
115c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
116a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerThis can take several hours on a dual-core machine, even assuming a very
117a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnernice Internet connection and plenty of RAM and disk space.
118c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
119a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerNote that on Linux, if you have the 'mingw32' package installed, the script
120a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerwill also automatically generate a windows release package. You can prevent
121a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerthat by using the --platforms option.
1226157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner
123a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerIMPORTANT:
124a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner        If you intend to package NDK releases often, please read the
125a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner        file named docs/DEVELOPMENT.TXT which provides ways to do that
126a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner        more quickly, by preparing toolchain binary tarballs that can be
127a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner        reused for each package operation. This will save you hours of
128a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner        your time compared to using this script!
129a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner"
130c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
131a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# Create directory where everything will be performed.
1327a54bc8cb5965d2fa65ccbe722bb2f42e0bbb9b4David 'Digit' TurnerRELEASE_DIR=$NDK_TMPDIR/release-$RELEASE
1336f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerif [ "$INCREMENTAL" = "no" ] ; then
1346f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    rm -rf $RELEASE_DIR && mkdir -p $RELEASE_DIR
1356f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerelse
1366f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    if [ ! -d "$RELEASE_DIR" ] ; then
1376f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        echo "ERROR: Can't make incremental, missing release dir: $RELEASE_DIR"
1386f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        exit 1
1396f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    fi
1406f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerfi
1416f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner
1426f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner
1436f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner#
1446f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner# Timestamp management
1456f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' TurnerTIMESTAMP_DIR="$RELEASE_DIR/timestamps"
1466f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnermkdir -p "$TIMESTAMP_DIR"
1476f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerif [ "$INCREMENTAL" = "no" ] ; then
1486f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    run rm -rf "$TIMESTAMP_DIR/*"
1496f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerfi
1506f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner
1516f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnertimestamp_set ()
1526f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner{
1536f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    touch "$TIMESTAMP_DIR/$1"
1546f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner}
1556f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner
1566f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnertimestamp_clear ()
1576f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner{
1586f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    rm -f "$TIMESTAMP_DIR/$1"
1596f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner}
1606f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner
1616f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnertimestamp_check ()
1626f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner{
1636f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    if [ -f "$TIMESTAMP_DIR/$1" ] ; then
1646f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        return 1
1656f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    else
1666f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        return 0
1676f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    fi
1686f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner}
169c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
170a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# Step 1, If needed, download toolchain sources into a temporary directory
171a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerif [ -n "$TOOLCHAIN_SRCDIR" ] ; then
172a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner    dump "Using toolchain source directory: $TOOLCHAIN_SRCDIR"
1736f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    timestamp_set   toolchain-download-sources
174ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turnerelse
1756f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    if timestamp_check toolchain-download-sources; then
1766f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        dump "Downloading toolchain sources..."
1776f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        TOOLCHAIN_SRCDIR="$RELEASE_DIR/toolchain-src"
1786f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        log "Using toolchain source directory: $TOOLCHAIN_SRCDIR"
1796f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        $ANDROID_NDK_ROOT/build/tools/download-toolchain-sources.sh "$TOOLCHAIN_SRCDIR"
1806f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        if [ "$?" != 0 ] ; then
1816f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner            dump "ERROR: Could not download toolchain sources"
1826f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner            exit 1
1836f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        fi
1846f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        timestamp_set   toolchain-download-sources
1856f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        timestamp_clear build-prebuilts
18699fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner        timestamp_clear build-host-prebuilts
18799fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner        timestamp_clear build-darwin-prebuilts
18899fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner        timestamp_clear build-mingw-prebuilts
1896f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    fi
19077d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turnerfi
19177d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner
192a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# Step 2, build the host toolchain binaries and package them
1936f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerif timestamp_check build-prebuilts; then
1946f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    PREBUILT_DIR="$RELEASE_DIR/prebuilt"
1956f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    if timestamp_check build-host-prebuilts; then
1966f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        dump "Building host toolchain binaries..."
1976f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        $ANDROID_NDK_ROOT/build/tools/rebuild-all-prebuilt.sh --toolchain-src-dir="$TOOLCHAIN_SRCDIR" --package-dir="$PREBUILT_DIR" --build-dir="$RELEASE_DIR/build"
19899fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner        fail_panic "Can't build $HOST_SYSTEM binaries."
1996f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        timestamp_set build-host-prebuilts
2006f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    fi
20199fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner    if [ -n "$DARWIN_SSH" ] ; then
20299fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner        if timestamp_check build-darwin-prebuilts; then
20399fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner            dump "Building Darwin prebuilts through ssh to $DARWIN_SSH..."
20499fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner            $ANDROID_NDK_ROOT/build/tools/rebuild-all-prebuilt.sh --toolchain-src-dir="$TOOLCHAIN_SRCDIR" --package-dir="$PREBUILT_DIR" --darwin-ssh="$DARWIN_SSH"
20599fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner            fail_panic "Can't build Darwin binaries!"
20699fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner            timestamp_set build-darwin-prebuilts
20799fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner        fi
20899fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner    fi
2096f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    if [ -n "$MINGW_GCC" ] ; then
2106f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        if timestamp_check build-mingw-prebuilts; then
2116f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner            dump "Building windows toolchain binaries..."
2126f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner            $ANDROID_NDK_ROOT/build/tools/rebuild-all-prebuilt.sh --toolchain-src-dir="$TOOLCHAIN_SRCDIR" --package-dir="$PREBUILT_DIR" --build-dir="$RELEASE_DIR/build-mingw" --mingw
21399fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner            fail_panic "Can't build windows binaries."
21499fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner            timestamp_set build-mingw-prebuilt
2156f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        fi
2166f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    fi
2176f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    timestamp_set build-prebuilts
2186f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    timestamp_clear make-packages
219ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turnerfi
220ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner
221a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# Step 3, package a release with everything
2226f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerif timestamp_check make-packages; then
2236f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    dump "Generating NDK release packages"
2246f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    $ANDROID_NDK_ROOT/build/tools/package-release.sh --release=$RELEASE --prefix=$PREFIX --out-dir="$OUT_DIR" --prebuilt-dir="$PREBUILT_DIR" --systems="$HOST_SYSTEMS" --development-root="$DEVELOPMENT_ROOT"
2256f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    if [ $? != 0 ] ; then
2266f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        dump "ERROR: Can't generate proper release packages."
2276f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner        exit 1
2286f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    fi
2296f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner    timestamp_set make-packages
2306f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerfi
231c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner
2326f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerdump "All clear. Good work! See $OUT_DIR"
233