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# 619663333b0571152f648b4ce280de4ce9404ec5d5Andrew HsiehHOST_SYSTEMS="$HOST_TAG32" 62a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner 63a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerMINGW_GCC= 64bd2fa8bbb88e221220827bbfca6db13016893d35Andrew HsiehCANADIAN_DARWIN_BUILD=no 6551d35f549ee27b03dc337380b4452ed20e39803bAndrew Hsiehif [ "$HOST_TAG" = "linux-x86" ] ; then 669663333b0571152f648b4ce280de4ce9404ec5d5Andrew Hsieh find_mingw_toolchain 67a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner if [ -n "$MINGW_GCC" ] ; then 689663333b0571152f648b4ce280de4ce9404ec5d5Andrew Hsieh HOST_SYSTEMS="$HOST_SYSTEMS,windows" 69bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh fi 70bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh # If darwin toolchain exist, build darwin too 71bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh if [ -z "$DARWIN_SSH" -a -f "${DARWIN_TOOLCHAIN}-gcc" ]; then 72bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh HOST_SYSTEMS="$HOST_SYSTEMS,darwin-x86" 73bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh CANADIAN_DARWIN_BUILD=yes 74a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner fi 75a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerfi 76bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsiehif [ -n "$DARWIN_SSH" -a "$HOST_SYSTEMS" = "${HOST_SYSTEMS%darwin-x86*}" ]; then 779663333b0571152f648b4ce280de4ce9404ec5d5Andrew Hsieh HOST_SYSTEMS="$HOST_SYSTEMS,darwin-x86" 7899fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turnerfi 7999fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner 80a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerregister_var_option "--systems=<list>" HOST_SYSTEMS "List of host systems to build for" 81a775f5537568f4768cd61931bb1b5314694adc96David 'Digit' Turner 82bd2fa8bbb88e221220827bbfca6db13016893d35Andrew HsiehALSO_64_FLAG= 83bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsiehregister_option "--also-64" do_ALSO_64 "Also build 64-bit host toolchain" 84bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsiehdo_ALSO_64 () { ALSO_64_FLAG=--also-64; } 85bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh 86bd2fa8bbb88e221220827bbfca6db13016893d35Andrew HsiehTOOLCHAIN_SRCDIR= 87bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsiehregister_var_option "--toolchain-src-dir=<path>" TOOLCHAIN_SRCDIR "Use toolchain sources from <path>" 88bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh 89bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsiehextract_parameters "$@" 90bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh 919663333b0571152f648b4ce280de4ce9404ec5d5Andrew Hsieh# Check if windows is specified w/o linux-x86 929663333b0571152f648b4ce280de4ce9404ec5d5Andrew Hsiehif [ "$HOST_SYSTEMS" != "${HOST_SYSTEMS%windows*}" ] ; then 93cc42e534e1532136d00f2a392db0adc775b3c553Andrew Hsieh if [ -z "$MINGW_GCC" ]; then 94cc42e534e1532136d00f2a392db0adc775b3c553Andrew Hsieh echo "ERROR: Can't find mingw tool with --systems=windows" 95cc42e534e1532136d00f2a392db0adc775b3c553Andrew Hsieh exit 1 96cc42e534e1532136d00f2a392db0adc775b3c553Andrew Hsieh fi 979663333b0571152f648b4ce280de4ce9404ec5d5Andrew Hsieh if [ "$HOST_SYSTEMS" = "${HOST_SYSTEMS%linux-x86*}" ] ; then 98cc42e534e1532136d00f2a392db0adc775b3c553Andrew Hsieh echo "ERROR: Can't specify --systems=windows w/o also specifying linux-x86" 999663333b0571152f648b4ce280de4ce9404ec5d5Andrew Hsieh exit 1 1009663333b0571152f648b4ce280de4ce9404ec5d5Andrew Hsieh fi 1019663333b0571152f648b4ce280de4ce9404ec5d5Andrew Hsiehfi 102bd2fa8bbb88e221220827bbfca6db13016893d35Andrew HsiehHOST_FLAGS="--systems=$HOST_SYSTEMS $ALSO_64_FLAG" 103bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsiehif [ -z "$CANADIAN_DARWIN_BUILD" ]; then 104bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh # Filter out darwin-x86 in $HOST_FLAGS, because 105bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh # 1) On linux when cross-compiling is done via "--darwin-ssh", keeping darwin-x86 in --systems list 106bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh # actually disable --darwin-ssh later on. 107bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh # 2) On MacOSX, darwin-x86 is the default, no need to be explicit. 108bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh # 109bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh HOST_FLAGS=$(echo "$HOST_FLAGS" | sed -e 's/darwin-x86//') 110bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsiehfi 111cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner 112a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# Print a warning and ask the user if he really wants to do that ! 113a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# 1146f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerif [ "$FORCE" = "no" -a "$INCREMENTAL" = "no" ] ; then 115a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner echo "IMPORTANT WARNING !!" 116721a3eb0d56840dd24fde4ee4d51259e43c002e5David 'Digit' Turner echo "" 117a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner echo "This script is used to generate an NDK release package from scratch" 118a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner echo "for the following host platforms: $HOST_SYSTEMS" 119cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner echo "" 120a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner echo "This process is EXTREMELY LONG and may take SEVERAL HOURS on a dual-core" 121a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner echo "machine. If you plan to do that often, please read docs/DEVELOPMENT.TXT" 122a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner echo "that provides instructions on how to do that more easily." 123cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner echo "" 124a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner echo "Are you sure you want to do that [y/N] " 125a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner read YESNO 126a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner case "$YESNO" in 127a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner y|Y|yes|YES) 128a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner ;; 129a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner *) 130a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner echo "Aborting !" 131a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner exit 0 132a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner esac 1336157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turnerfi 1346157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner 135a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerPROGRAM_PARAMETERS= 136a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerPROGRAM_DESCRIPTION=\ 137a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner"This script is used to generate an NDK release package from scratch. 138cae78f99bebefece4faf2464bc9cbf6c40e33070David 'Digit' Turner 139a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerThis process is EXTREMELY LONG and consists in the following steps: 140c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner 141a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner - downloading toolchain sources from the Internet 142a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner - patching them appropriately (if needed) 143a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner - rebuilding the toolchain binaries for the host system 144a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner - rebuilding the platforms and samples directories from ../development/ndk 145a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner - packaging everything into a host-specific archive 146c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner 147a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerThis can take several hours on a dual-core machine, even assuming a very 148a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnernice Internet connection and plenty of RAM and disk space. 149c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner 150a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerNote that on Linux, if you have the 'mingw32' package installed, the script 151a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerwill also automatically generate a windows release package. You can prevent 152a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerthat by using the --platforms option. 1536157bc1f5291c9a50691c8878830fbba8e11f710David 'Digit' Turner 154a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' TurnerIMPORTANT: 155a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner If you intend to package NDK releases often, please read the 156a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner file named docs/DEVELOPMENT.TXT which provides ways to do that 157a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner more quickly, by preparing toolchain binary tarballs that can be 158a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner reused for each package operation. This will save you hours of 159a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner your time compared to using this script! 160a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner" 161c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner 162a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# Create directory where everything will be performed. 1637a54bc8cb5965d2fa65ccbe722bb2f42e0bbb9b4David 'Digit' TurnerRELEASE_DIR=$NDK_TMPDIR/release-$RELEASE 1640a4a75b7e8d09abcfa71cbfbf2c0acd35d09b04dAndrew Hsiehunset NDK_TMPDIR # prevent later script from reusing/removing it 1656f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerif [ "$INCREMENTAL" = "no" ] ; then 1666f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner rm -rf $RELEASE_DIR && mkdir -p $RELEASE_DIR 1676f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerelse 1686f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner if [ ! -d "$RELEASE_DIR" ] ; then 1696f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner echo "ERROR: Can't make incremental, missing release dir: $RELEASE_DIR" 1706f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner exit 1 1716f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner fi 1726f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerfi 1736f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner 1746f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner 1756f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner# 1766f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner# Timestamp management 1776f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' TurnerTIMESTAMP_DIR="$RELEASE_DIR/timestamps" 1786f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnermkdir -p "$TIMESTAMP_DIR" 1796f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerif [ "$INCREMENTAL" = "no" ] ; then 1806f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner run rm -rf "$TIMESTAMP_DIR/*" 1816f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerfi 1826f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner 1836f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnertimestamp_set () 1846f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner{ 1856f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner touch "$TIMESTAMP_DIR/$1" 1866f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner} 1876f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner 1886f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnertimestamp_clear () 1896f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner{ 1906f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner rm -f "$TIMESTAMP_DIR/$1" 1916f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner} 1926f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner 1936f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnertimestamp_check () 1946f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner{ 1956f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner if [ -f "$TIMESTAMP_DIR/$1" ] ; then 1966f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner return 1 1976f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner else 1986f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner return 0 1996f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner fi 2006f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner} 201c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner 202a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# Step 1, If needed, download toolchain sources into a temporary directory 203a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turnerif [ -n "$TOOLCHAIN_SRCDIR" ] ; then 204a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner dump "Using toolchain source directory: $TOOLCHAIN_SRCDIR" 2056f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner timestamp_set toolchain-download-sources 206ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turnerelse 2076f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner if timestamp_check toolchain-download-sources; then 2086f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner dump "Downloading toolchain sources..." 2096f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner TOOLCHAIN_SRCDIR="$RELEASE_DIR/toolchain-src" 2106f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner log "Using toolchain source directory: $TOOLCHAIN_SRCDIR" 2110a4a75b7e8d09abcfa71cbfbf2c0acd35d09b04dAndrew Hsieh run $ANDROID_NDK_ROOT/build/tools/download-toolchain-sources.sh "$TOOLCHAIN_SRCDIR" 2126f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner if [ "$?" != 0 ] ; then 2136f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner dump "ERROR: Could not download toolchain sources" 2146f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner exit 1 2156f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner fi 2166f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner timestamp_set toolchain-download-sources 2176f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner timestamp_clear build-prebuilts 21899fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner timestamp_clear build-host-prebuilts 21999fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner timestamp_clear build-darwin-prebuilts 22099fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner timestamp_clear build-mingw-prebuilts 2216f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner fi 22277d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turnerfi 22377d9a08814a063577d086dc356a5a55d5ff55bf6David 'Digit' Turner 224a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# Step 2, build the host toolchain binaries and package them 2256f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerif timestamp_check build-prebuilts; then 2266f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner PREBUILT_DIR="$RELEASE_DIR/prebuilt" 2276f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner if timestamp_check build-host-prebuilts; then 2286f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner dump "Building host toolchain binaries..." 2295c7708e4e20e6b0544c4ec4d5bee554474849a73Andrew Hsieh run $ANDROID_NDK_ROOT/build/tools/rebuild-all-prebuilt.sh --package-dir="$PREBUILT_DIR" --build-dir="$RELEASE_DIR/build" "$TOOLCHAIN_SRCDIR" $HOST_FLAGS 23099fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner fail_panic "Can't build $HOST_SYSTEM binaries." 2316f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner timestamp_set build-host-prebuilts 2326f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner fi 23399fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner if [ -n "$DARWIN_SSH" ] ; then 23499fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner if timestamp_check build-darwin-prebuilts; then 23599fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner dump "Building Darwin prebuilts through ssh to $DARWIN_SSH..." 2360a4a75b7e8d09abcfa71cbfbf2c0acd35d09b04dAndrew Hsieh run $ANDROID_NDK_ROOT/build/tools/rebuild-all-prebuilt.sh --package-dir="$PREBUILT_DIR" --darwin-ssh="$DARWIN_SSH" "$TOOLCHAIN_SRCDIR" 23799fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner fail_panic "Can't build Darwin binaries!" 23899fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner timestamp_set build-darwin-prebuilts 23999fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner fi 24099fe4b8ad34283a065b90fb6cd56999c8998da35David 'Digit' Turner fi 2416f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner timestamp_set build-prebuilts 2426f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner timestamp_clear make-packages 243ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turnerfi 244ea573da2c3f1a8379f4344d023035fdf795c768dDavid 'Digit' Turner 245a0f307d9a1b8e0d5e2a8b4ea0a4126ef7fb3a29bDavid 'Digit' Turner# Step 3, package a release with everything 2466f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerif timestamp_check make-packages; then 2476f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner dump "Generating NDK release packages" 2480a4a75b7e8d09abcfa71cbfbf2c0acd35d09b04dAndrew Hsieh run $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" 2496f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner if [ $? != 0 ] ; then 2506f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner dump "ERROR: Can't generate proper release packages." 2516f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner exit 1 2526f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner fi 2536f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turner timestamp_set make-packages 2546f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerfi 255c8906b0ac264f8a5f07849c760b4d9fc60789c94David 'Digit' Turner 2566f2c722f62236e57093a6fa83d29322f6bb856cdDavid 'Digit' Turnerdump "All clear. Good work! See $OUT_DIR" 257