build-host-prebuilts.sh revision d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6
1d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner#!/bin/sh
2d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner#
3d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# Rebuild all host toolchains
4d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner#
5d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
6d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerPROGDIR=$(dirname $0)
7d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner. $PROGDIR/prebuilt-common.sh
8d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
9d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerNDK_DIR=$ANDROID_NDK_ROOT
10d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_var_option "--ndk-dir=<path>" NDK_DIR "NDK installation directory"
11d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
12d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerSYSTEMS=$HOST_TAG
13d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# Replace x86_64 by x86 at the end of SYSTEMS since we will produce
14d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# 32-bit toolchains by default, i.e. unless you use the --try-64 flag
15d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "${SYSTEMS%%x86_64}" != "$SYSTEMS" ]; then
16d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    SYSTEMS=${SYSTEMS%%x86_64}x86
17d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi
18d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# If we are on Linux, we are able to generate the Windows binaries
19d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# with the mingw32 cross-toolchain.
20d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$SYSTEMS" = "linux-x86" ]; then
21d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    SYSTEMS=$SYSTEMS",windows"
22d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi
23d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerCUSTOM_SYSTEMS=
24d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_option "--systems=<names>" do_SYSTEMS "List of host systems to build for"
25d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerdo_SYSTEMS () { CUSTOM_SYSTEMS=true; SYSTEMS=$1; }
26d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
27d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerARCHS="arm,x86"
28d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_var_option "--arch=<list>" ARCHS "List of target archs to build for"
29d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
30d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerPACKAGE_DIR=
31d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_var_option "--package-dir=<path>" PACKAGE_DIR "Package toolchain into this directory"
32d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
33d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerDARWIN_SSH=
34d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_var_option "--darwin-ssh=<hostname>" DARWIN_SSH "Generate darwin packages on remote host"
35d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
36d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerNO_GEN_PLATFORMS=
37d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_var_option "--no-gen-platforms" NO_GEN_PLATFORMS "Don't generate platforms/ directory, use existing one"
38d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
39d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_try64_option
40d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
41d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerPROGRAM_PARAMETERS="<toolchain-src-dir>"
42d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerPROGRAM_DESCRIPTION=\
43d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner"This script can be used to rebuild all the host NDK toolchains at once.
44d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerYou need to give it the path to the toolchain source directory, as
45d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerdownloaded by the 'download-toolchain-sources.sh' dev-script."
46d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
47d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerextract_parameters "$@"
48d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
49d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# Check toolchain source path
50d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerSRC_DIR="$PARAMETERS"
51d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ -z "$SRC_DIR" ]; then
52d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    echo "ERROR: Please provide the path to the toolchain source tree. See --help"
53d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    exit 1
54d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi
55d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
56d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ ! -d "$SRC_DIR" ]; then
57d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    echo "ERROR: Not a directory: '$SRC_DIR'"
58d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    exit 1
59d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi
60d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
61d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ ! -f "$SRC_DIR/build/configure" -o ! -d "$SRC_DIR/gcc/gcc-4.4.3" ]; then
62d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    echo "ERROR: This is not the top of a toolchain tree: $SRC_DIR"
63d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    echo "You must give the path to a copy of the toolchain source directories"
64d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    echo "created by 'download-toolchain-sources.sh."
65d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    exit 1
66d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi
67d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
68d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# Now we can do the build
69d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerBUILDTOOLS=$ANDROID_NDK_ROOT/build/tools
70d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
71d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ -z "$NO_GEN_PLATFORMS" ]; then
72d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    echo "Preparing the build..."
73d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    run $BUILDTOOLS/gen-platforms.sh --minimal --dst-dir=$NDK_DIR --ndk-dir=$NDK_DIR --arch=$(spaces_to_commas $ARCHS)
74d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    fail_panic "Could not generate minimal sysroot!"
75d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerelse
76d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    if [ ! -d "$NDK_DIR/platforms" ]; then
77d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        echo "ERROR: --no-gen-platforms used but directory missing: $NDK_DIR/platforms"
78d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        exit 1
79d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    fi
80d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi
81d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
82d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerSYSTEMS=$(commas_to_spaces $SYSTEMS)
83d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerARCHS=$(commas_to_spaces $ARCHS)
84d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
85d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$DARWIN_SSH" -a -z "$CUSTOM_SYSTEMS" ]; then
86d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    SYSTEMS=" darwin-x86"
87d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi
88d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
89d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerFLAGS=
90d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$VERBOSE" = "yes" ]; then
91d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    FLAGS=$FLAGS" --verbose"
92d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi
93d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$VERBOSE2" = "yes" ]; then
94d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    FLAGS=$FLAGS" --verbose"
95d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi
96d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$TRY64" = "yes" ]; then
97d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    FLAGS=$FLAGS" --try64"
98d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerelse
99d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    force_32bit_binaries
100d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi
101d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$PACKAGE_DIR" ]; then
102d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    if [ ! -d "$PACKAGE_DIR" ]; then
103d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        echo "ERROR: Package destination directory doesn't exist: $PACKAGE_DIR"
104d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    fi
105d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    FLAGS=$FLAGS" --package-dir=$PACKAGE_DIR"
106d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi
107d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
108d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerdo_remote_host_build ()
109d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner{
110d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    local SYSTEM="$1"
111d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    local ARCH="$2"
112d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    local REMOTE_HOST="$3"
113d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
114d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # 1/ Copy the NDK toolchain build scripts
115d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # 2/ Copy the toolchain sources/package
116d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # 3/ Ssh to unpack the build scripts, and run them
117d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # 4/ Copy back the generated prebuilt binaries
118d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    #
119d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    dump "Preparing remote build on $REMOTE_HOST..."
120d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
121d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # First try to create a remote temp directory on the remote host
122d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # Do it first so we can fail fast, not after spending time preparing
123d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # large tarballs.
124d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    dump "Creating remote temp directory"
125d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    TMPREMOTE=/tmp/ndk-$USER/darwin-prebuild
126d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    run ssh $REMOTE_HOST "mkdir -p $TMPREMOTE && rm -rf $TMPREMOTE/*"
127d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    fail_panic "Could not create temporary build directory on $REMOTE_HOST"
128d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
129d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # Now, package all the stuff we're going to send in a temporary
130d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # directory here on the machine, except toolchain sources
131d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    TMPDARWIN=$NDK_TMPDIR/darwin  # Where we're going to package stuff
132d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    log "Using temporary work directory: $TMPDARWIN"
133d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    mkdir -p "$TMPDARWIN"
134d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    dump "Prepare NDK build scripts"
135d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    copy_directory "$ANDROID_NDK_ROOT/build" "$TMPDARWIN/ndk/build"
136d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    copy_file_list "$ANDROID_NDK_ROOT" "$TMPDARWIN/ndk" sources/android/libthread_db
137d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    copy_file_list "$ANDROID_NDK_ROOT" "$TMPDARWIN/ndk" "$STLPORT_SUBDIR"
138d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    copy_file_list "$ANDROID_NDK_ROOT" "$TMPDARWIN/ndk" "$GABIXX_SUBDIR"
139d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    copy_file_list "$ANDROID_NDK_ROOT" "$TMPDARWIN/ndk" sources/host-tools/ndk-stack
140d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    dump "Prepare platforms files"
141d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    copy_directory "$NDK_DIR/platforms" "$TMPDARWIN/ndk/platforms"
142d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    dump "Copying NDK build scripts and platform files to remote..."
143d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    (cd "$TMPDARWIN" && tar czf - ndk) | (ssh $REMOTE_HOST tar xzf - -C $TMPREMOTE)
144d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    fail_panic "Could not copy!"
145d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    rm -rf $TMPDARWIN
146d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
147d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # Copy the toolchain sources
148d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    dump "Copy toolchain sources to remote"
149d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    ssh $REMOTE_HOST mkdir -p $TMPREMOTE/toolchain &&
150d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    (cd "$SRC_DIR" && tar czf - .) | (ssh $REMOTE_HOST tar xzf - -C $TMPREMOTE/toolchain)
151d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    fail_panic "Could not copy toolchain!"
152d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
153d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # Time to run the show :-)
154d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    for ARCH in $(commas_to_spaces $ARCHS); do
155d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        dump "Running remote $ARCH toolchain build..."
156d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        SYSROOT=$TMPREMOTE/ndk/platforms/android-$(get_default_api_level_for_arch $ARCH)/arch-$ARCH
157d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        run ssh $REMOTE_HOST "$TMPREMOTE/ndk/build/tools/build-host-prebuilts.sh $TMPREMOTE/toolchain --package-dir=$TMPREMOTE/packages --arch=$ARCH --ndk-dir=$TMPREMOTE/ndk --no-gen-platforms"
158d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        fail_panic "Could not build prebuilt $ARCH toolchain on Darwin!"
159d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    done
160d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # Get the results
161d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    dump "Copying back Darwin prebuilt packages..."
162d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    mkdir -p $TMPDARWIN/packages && rm -rf $TMPDARWIN/packages/*
163d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    run scp $REMOTE_HOST:$TMPREMOTE/packages/*-darwin-* $TMPDARWIN/packages
164d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    fail_panic "Could not grab Darwin packages!"
165d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
166d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    for PACK in $TMPDARWIN/packages/*; do
167d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        if [ "$PACKAGE_DIR" ]; then
168d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner            echo "Copying $(basename $PACK) to $PACKAGE_DIR..."
169d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner            cp $PACK $PACKAGE_DIR/
170d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        else
171d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner            echo "Unpacking $(basename $PACK) into $NDK_DIR..."
172d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner            unpack_archive $PACK $NDK_DIR
173d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        fi
174d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        fail_panic ""
175d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    done
176d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
177d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    dump "Cleaning up remote machine..."
178d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    run ssh $REMOTE_HOST rm -rf $TMPREMOTE
179d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner}
180d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
181d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfor SYSTEM in $SYSTEMS; do
182d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
183d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # First, build the toolchains
184d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    TOOLCHAIN_FLAGS=$FLAGS
185d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    if [ "$HOST_TAG" = "linux-x86" -a "$SYSTEM" = "windows" ]; then
186d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        TOOLCHAIN_FLAGS=$TOOLCHAIN_FLAGS" --mingw"
187d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    fi
188d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
189d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner     # Should we do a remote build?
190d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    if [ "$SYSTEM" != "$HOST_TAG" ]; then
191d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        case $SYSTEM in
192d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner            darwin-*)
193d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner                if [ "$DARWIN_SSH" ]; then
194d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner                    do_remote_host_build "$SYSTEM" "$ARCH" "$DARWIN_SSH"
195d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner                else
196d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner                    echo "WARNING: Can't build $SYSTEM binaries on this system!"
197d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner                    echo "Consider using the --darwin-ssh option."
198d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner                fi
199d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner                continue
200d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        esac
201d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    fi
202d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
203d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # First, ndk-stack
204d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    echo "Building $SYSTEM ndk-stack"
205d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    run $BUILDTOOLS/build-ndk-stack.sh $TOOLCHAIN_FLAGS
206d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    fail_panic "ndk-stack build failure!"
207d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
208d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # Then the toolchains
209d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    for ARCH in $ARCHS; do
210d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        TOOLCHAIN_NAME=$(get_default_toolchain_name_for $ARCH)
211d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        if [ -z "$TOOLCHAIN_NAME" ]; then
212d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner            echo "ERROR: Invalid architecture name: $ARCH"
213d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner            exit 1
214d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        fi
215d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
216d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        echo "Building $SYSTEM toolchain for $ARCH architecture: $TOOLCHAIN_NAME"
217d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        run $BUILDTOOLS/build-gcc.sh "$SRC_DIR" "$NDK_DIR" $TOOLCHAIN_NAME $TOOLCHAIN_FLAGS
218d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner        fail_panic "Could not build $TOOLCHAIN_NAME-$SYSTEM!"
219d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    done
220d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
221d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    # We're done for this system
222d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerdone
223d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
224d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$PACKAGE_DIR" ]; then
225d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    echo "Done, please look at $PACKAGE_DIR"
226d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerelse
227d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner    echo "Done"
228d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi
229d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner
230d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerexit 0