build-host-prebuilts.sh revision 6099deecb0b4f2805135f3670c41be971fbe4e3d
1d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner#!/bin/sh 2d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# 31c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# Copyright (C) 2011 The Android Open Source Project 41c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# 51c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# Licensed under the Apache License, Version 2.0 (the "License"); 61c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# you may not use this file except in compliance with the License. 71c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# You may obtain a copy of the License at 81c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# 91c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# http://www.apache.org/licenses/LICENSE-2.0 101c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# 111c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# Unless required by applicable law or agreed to in writing, software 121c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# distributed under the License is distributed on an "AS IS" BASIS, 131c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 141c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# See the License for the specific language governing permissions and 151c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# limitations under the License. 161c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# 171c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turner# Rebuild all host toolchains and programs 18d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# 19d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 20d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerPROGDIR=$(dirname $0) 21d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner. $PROGDIR/prebuilt-common.sh 22d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 23d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerNDK_DIR=$ANDROID_NDK_ROOT 24d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_var_option "--ndk-dir=<path>" NDK_DIR "NDK installation directory" 25d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 26d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerSYSTEMS=$HOST_TAG 27d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# Replace x86_64 by x86 at the end of SYSTEMS since we will produce 28d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# 32-bit toolchains by default, i.e. unless you use the --try-64 flag 29d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "${SYSTEMS%%x86_64}" != "$SYSTEMS" ]; then 30d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner SYSTEMS=${SYSTEMS%%x86_64}x86 31d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 32d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# If we are on Linux, we are able to generate the Windows binaries 33d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# with the mingw32 cross-toolchain. 34d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$SYSTEMS" = "linux-x86" ]; then 35d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner SYSTEMS=$SYSTEMS",windows" 36d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 37d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerCUSTOM_SYSTEMS= 38d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_option "--systems=<names>" do_SYSTEMS "List of host systems to build for" 39d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerdo_SYSTEMS () { CUSTOM_SYSTEMS=true; SYSTEMS=$1; } 40d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 411c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerARCHS=$DEFAULT_ARCHS 42d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_var_option "--arch=<list>" ARCHS "List of target archs to build for" 43d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 44d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerPACKAGE_DIR= 45d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_var_option "--package-dir=<path>" PACKAGE_DIR "Package toolchain into this directory" 46d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 47d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerDARWIN_SSH= 48d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_var_option "--darwin-ssh=<hostname>" DARWIN_SSH "Generate darwin packages on remote host" 49d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 50d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerNO_GEN_PLATFORMS= 51d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_var_option "--no-gen-platforms" NO_GEN_PLATFORMS "Don't generate platforms/ directory, use existing one" 52d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 538e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan ChienLLVM_VERSION_LIST=$DEFAULT_LLVM_VERSION_LIST 546099deecb0b4f2805135f3670c41be971fbe4e3dAndrew Hsiehregister_var_option "--llvm-version-list=<vers>" LLVM_VERSION_LIST "List of LLVM release versions" 558e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan Chien 56d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_try64_option 57d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 58d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerPROGRAM_PARAMETERS="<toolchain-src-dir>" 59d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerPROGRAM_DESCRIPTION=\ 60d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner"This script can be used to rebuild all the host NDK toolchains at once. 61d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerYou need to give it the path to the toolchain source directory, as 62d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerdownloaded by the 'download-toolchain-sources.sh' dev-script." 63d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 64d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerextract_parameters "$@" 65d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 66d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# Check toolchain source path 67d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerSRC_DIR="$PARAMETERS" 68d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ -z "$SRC_DIR" ]; then 69d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "ERROR: Please provide the path to the toolchain source tree. See --help" 70d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner exit 1 71d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 72d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 73d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ ! -d "$SRC_DIR" ]; then 74d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "ERROR: Not a directory: '$SRC_DIR'" 75d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner exit 1 76d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 77d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 781c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerif [ ! -f "$SRC_DIR/build/configure" -o ! -d "$SRC_DIR/gcc/gcc-$DEFAULT_GCC_VERSION" ]; then 79612e5d967db47c99996511a9e78f7c29d2dbdc67Nick Kralevich echo "ERROR: The file $SRC_DIR/build/configure or" 80612e5d967db47c99996511a9e78f7c29d2dbdc67Nick Kralevich echo " the directory $SRC_DIR/gcc/gcc-$DEFAULT_GCC_VERSION does not exist" 81612e5d967db47c99996511a9e78f7c29d2dbdc67Nick Kralevich echo "This is not the top of a toolchain tree: $SRC_DIR" 82d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "You must give the path to a copy of the toolchain source directories" 83d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "created by 'download-toolchain-sources.sh." 84d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner exit 1 85d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 86d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 87d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# Now we can do the build 88d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerBUILDTOOLS=$ANDROID_NDK_ROOT/build/tools 89d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 90d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ -z "$NO_GEN_PLATFORMS" ]; then 91d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "Preparing the build..." 92d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner run $BUILDTOOLS/gen-platforms.sh --minimal --dst-dir=$NDK_DIR --ndk-dir=$NDK_DIR --arch=$(spaces_to_commas $ARCHS) 93d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "Could not generate minimal sysroot!" 94d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerelse 95d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner if [ ! -d "$NDK_DIR/platforms" ]; then 96d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "ERROR: --no-gen-platforms used but directory missing: $NDK_DIR/platforms" 97d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner exit 1 98d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fi 99d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 100d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 101d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerSYSTEMS=$(commas_to_spaces $SYSTEMS) 102d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerARCHS=$(commas_to_spaces $ARCHS) 1038e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan ChienLLVM_VERSION_LIST=$(commas_to_spaces $LLVM_VERSION_LIST) 104d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 105d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$DARWIN_SSH" -a -z "$CUSTOM_SYSTEMS" ]; then 106d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner SYSTEMS=" darwin-x86" 107d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 108d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 109d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerFLAGS= 110d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$VERBOSE" = "yes" ]; then 111d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner FLAGS=$FLAGS" --verbose" 112d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 113d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$VERBOSE2" = "yes" ]; then 114d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner FLAGS=$FLAGS" --verbose" 115d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 116d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$TRY64" = "yes" ]; then 11709a968eb0b25413ccc5cce15d04216a630e85631Ray Donnelly FLAGS=$FLAGS" --try-64" 118d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerelse 119d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner force_32bit_binaries 120d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 121d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$PACKAGE_DIR" ]; then 1221c855558c00aaf7f8f86335b605e7b78d8a17172David 'Digit' Turner mkdir -p "$PACKAGE_DIR" 1231c855558c00aaf7f8f86335b605e7b78d8a17172David 'Digit' Turner fail_panic "Could not create package directory: $PACKAGE_DIR" 124d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner FLAGS=$FLAGS" --package-dir=$PACKAGE_DIR" 125d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 126d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 127d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerdo_remote_host_build () 128d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner{ 129d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner local SYSTEM="$1" 130d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner local ARCH="$2" 131d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner local REMOTE_HOST="$3" 132d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 133d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # 1/ Copy the NDK toolchain build scripts 134d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # 2/ Copy the toolchain sources/package 135d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # 3/ Ssh to unpack the build scripts, and run them 136d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # 4/ Copy back the generated prebuilt binaries 137d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # 138d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Preparing remote build on $REMOTE_HOST..." 139d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 140d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # First try to create a remote temp directory on the remote host 141d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # Do it first so we can fail fast, not after spending time preparing 142d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # large tarballs. 143d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Creating remote temp directory" 144d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner TMPREMOTE=/tmp/ndk-$USER/darwin-prebuild 145d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner run ssh $REMOTE_HOST "mkdir -p $TMPREMOTE && rm -rf $TMPREMOTE/*" 146d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "Could not create temporary build directory on $REMOTE_HOST" 147d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 148d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # Now, package all the stuff we're going to send in a temporary 149d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # directory here on the machine, except toolchain sources 150d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner TMPDARWIN=$NDK_TMPDIR/darwin # Where we're going to package stuff 151d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner log "Using temporary work directory: $TMPDARWIN" 152d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner mkdir -p "$TMPDARWIN" 153d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Prepare NDK build scripts" 154d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner copy_directory "$ANDROID_NDK_ROOT/build" "$TMPDARWIN/ndk/build" 155d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner copy_file_list "$ANDROID_NDK_ROOT" "$TMPDARWIN/ndk" sources/android/libthread_db 156d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner copy_file_list "$ANDROID_NDK_ROOT" "$TMPDARWIN/ndk" "$STLPORT_SUBDIR" 157d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner copy_file_list "$ANDROID_NDK_ROOT" "$TMPDARWIN/ndk" "$GABIXX_SUBDIR" 1585c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner copy_file_list "$ANDROID_NDK_ROOT" "$TMPDARWIN/ndk" sources/host-tools 159d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Prepare platforms files" 160d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner copy_directory "$NDK_DIR/platforms" "$TMPDARWIN/ndk/platforms" 161d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Copying NDK build scripts and platform files to remote..." 162d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner (cd "$TMPDARWIN" && tar czf - ndk) | (ssh $REMOTE_HOST tar xzf - -C $TMPREMOTE) 163d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "Could not copy!" 164d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner rm -rf $TMPDARWIN 165d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 166d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # Copy the toolchain sources 167d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Copy toolchain sources to remote" 168d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner ssh $REMOTE_HOST mkdir -p $TMPREMOTE/toolchain && 169d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner (cd "$SRC_DIR" && tar czf - .) | (ssh $REMOTE_HOST tar xzf - -C $TMPREMOTE/toolchain) 170d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "Could not copy toolchain!" 171d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 172d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # Time to run the show :-) 173d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner for ARCH in $(commas_to_spaces $ARCHS); do 174d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Running remote $ARCH toolchain build..." 175d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner SYSROOT=$TMPREMOTE/ndk/platforms/android-$(get_default_api_level_for_arch $ARCH)/arch-$ARCH 176d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David '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" 177d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "Could not build prebuilt $ARCH toolchain on Darwin!" 178d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner done 179d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # Get the results 180d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Copying back Darwin prebuilt packages..." 181d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner mkdir -p $TMPDARWIN/packages && rm -rf $TMPDARWIN/packages/* 182d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner run scp $REMOTE_HOST:$TMPREMOTE/packages/*-darwin-* $TMPDARWIN/packages 183d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "Could not grab Darwin packages!" 184d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 185d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner for PACK in $TMPDARWIN/packages/*; do 186d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner if [ "$PACKAGE_DIR" ]; then 187d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "Copying $(basename $PACK) to $PACKAGE_DIR..." 188d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner cp $PACK $PACKAGE_DIR/ 189d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner else 190d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "Unpacking $(basename $PACK) into $NDK_DIR..." 191d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner unpack_archive $PACK $NDK_DIR 192d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fi 193d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "" 194d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner done 195d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 196d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Cleaning up remote machine..." 197d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner run ssh $REMOTE_HOST rm -rf $TMPREMOTE 198d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner} 199d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 200d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfor SYSTEM in $SYSTEMS; do 201d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 202d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # First, build the toolchains 203d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner TOOLCHAIN_FLAGS=$FLAGS 204d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner if [ "$HOST_TAG" = "linux-x86" -a "$SYSTEM" = "windows" ]; then 205d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner TOOLCHAIN_FLAGS=$TOOLCHAIN_FLAGS" --mingw" 206d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fi 207d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 208d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # Should we do a remote build? 209d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner if [ "$SYSTEM" != "$HOST_TAG" ]; then 210d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner case $SYSTEM in 211d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner darwin-*) 212d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner if [ "$DARWIN_SSH" ]; then 213d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner do_remote_host_build "$SYSTEM" "$ARCH" "$DARWIN_SSH" 214d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner else 215d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "WARNING: Can't build $SYSTEM binaries on this system!" 216d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "Consider using the --darwin-ssh option." 217d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fi 218d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner continue 219d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner esac 220d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fi 221d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 222d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # First, ndk-stack 223d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "Building $SYSTEM ndk-stack" 224d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner run $BUILDTOOLS/build-ndk-stack.sh $TOOLCHAIN_FLAGS 225d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "ndk-stack build failure!" 226d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 2275c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner echo "Building $SYSTEM ndk-make" 2285c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner run $BUILDTOOLS/build-host-make.sh $TOOLCHAIN_FLAGS 2295c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner fail_panic "make build failure!" 2305c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner 2315c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner echo "Building $SYSTEM ndk-awk" 2325c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner run $BUILDTOOLS/build-host-awk.sh $TOOLCHAIN_FLAGS 2335c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner fail_panic "awk build failure!" 2345c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner 2355c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner echo "Building $SYSTEM ndk-sed" 2365c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner run $BUILDTOOLS/build-host-sed.sh $TOOLCHAIN_FLAGS 2375c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner fail_panic "sed build failure!" 2385c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner 239ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner if [ "$SYSTEM" = "windows" ]; then 240aed73a4495adbed0d4e398598344b68eda1a349fAndrew Hsieh echo "Building $SYSTEM toolbox" 241ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner run $BUILDTOOLS/build-host-toolbox.sh $FLAGS 242ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner fail_panic "Windows toolbox build failure!" 243ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner fi 244ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 245d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # Then the toolchains 246d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner for ARCH in $ARCHS; do 247f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner TOOLCHAIN_NAMES=$(get_toolchain_name_list_for_arch $ARCH) 248f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner if [ -z "$TOOLCHAIN_NAMES" ]; then 249d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "ERROR: Invalid architecture name: $ARCH" 250d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner exit 1 251d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fi 252d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 253f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner for TOOLCHAIN_NAME in $TOOLCHAIN_NAMES; do 254f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner echo "Building $SYSTEM toolchain for $ARCH architecture: $TOOLCHAIN_NAME" 255f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner run $BUILDTOOLS/build-gcc.sh "$SRC_DIR" "$NDK_DIR" $TOOLCHAIN_NAME $TOOLCHAIN_FLAGS 256f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner fail_panic "Could not build $TOOLCHAIN_NAME-$SYSTEM!" 257f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner done 258d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner done 259d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 2608e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan Chien # Build llvm and clang 2618e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan Chien for LLVM_VERSION in $LLVM_VERSION_LIST; do 2628e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan Chien echo "Building $SYSTEM clang/llvm-$LLVM_VERSION" 2638e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan Chien run $BUILDTOOLS/build-llvm.sh "$SRC_DIR" "$NDK_DIR" "llvm-$LLVM_VERSION" $TOOLCHAIN_FLAGS 2648e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan Chien fail_panic "Could not build llvm for $SYSTEM" 2658e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan Chien done 2668e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan Chien 267d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # We're done for this system 268d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerdone 269d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 270d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$PACKAGE_DIR" ]; then 271d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "Done, please look at $PACKAGE_DIR" 272d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerelse 273d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "Done" 274d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 275d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 27609a968eb0b25413ccc5cce15d04216a630e85631Ray Donnellyexit 0 277