build-host-prebuilts.sh revision 433f2c4e0348d448f4e31efa93537f1784bf47b4
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" 363b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh # If darwin toolchain exist, build darwin too 373b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh if [ -f "${DARWIN_TOOLCHAIN}-gcc" ]; then 383b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh SYSTEMS=$SYSTEMS",darwin-x86" 393b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh fi 40d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 41d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerCUSTOM_SYSTEMS= 42d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_option "--systems=<names>" do_SYSTEMS "List of host systems to build for" 43d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerdo_SYSTEMS () { CUSTOM_SYSTEMS=true; SYSTEMS=$1; } 44d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 451c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' TurnerARCHS=$DEFAULT_ARCHS 46d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_var_option "--arch=<list>" ARCHS "List of target archs to build for" 47d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 48d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerPACKAGE_DIR= 49d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_var_option "--package-dir=<path>" PACKAGE_DIR "Package toolchain into this directory" 50d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 51d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerDARWIN_SSH= 52d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_var_option "--darwin-ssh=<hostname>" DARWIN_SSH "Generate darwin packages on remote host" 53d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 54d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerNO_GEN_PLATFORMS= 55d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_var_option "--no-gen-platforms" NO_GEN_PLATFORMS "Don't generate platforms/ directory, use existing one" 56d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 578e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan ChienLLVM_VERSION_LIST=$DEFAULT_LLVM_VERSION_LIST 586099deecb0b4f2805135f3670c41be971fbe4e3dAndrew Hsiehregister_var_option "--llvm-version-list=<vers>" LLVM_VERSION_LIST "List of LLVM release versions" 598e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan Chien 60bedf803c145294a8a1970accd860d8a49379f9e7Andrew HsiehCHECK_FLAG= 61bedf803c145294a8a1970accd860d8a49379f9e7Andrew Hsiehdo_check_option () { CHECK_FLAG="--check"; } 62bedf803c145294a8a1970accd860d8a49379f9e7Andrew Hsiehregister_option "--check" do_check_option "Check host prebuilts" 63bedf803c145294a8a1970accd860d8a49379f9e7Andrew Hsieh 64d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerregister_try64_option 65d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 66d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerPROGRAM_PARAMETERS="<toolchain-src-dir>" 67d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerPROGRAM_DESCRIPTION=\ 68d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner"This script can be used to rebuild all the host NDK toolchains at once. 69d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerYou need to give it the path to the toolchain source directory, as 70d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerdownloaded by the 'download-toolchain-sources.sh' dev-script." 71d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 72d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerextract_parameters "$@" 73d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 74d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# Check toolchain source path 75d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerSRC_DIR="$PARAMETERS" 76d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ -z "$SRC_DIR" ]; then 77d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "ERROR: Please provide the path to the toolchain source tree. See --help" 78d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner exit 1 79d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 80d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 81d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ ! -d "$SRC_DIR" ]; then 82d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "ERROR: Not a directory: '$SRC_DIR'" 83d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner exit 1 84d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 85d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 861c663b4a2961e4c9bde69eb740327083bbc92ed8David 'Digit' Turnerif [ ! -f "$SRC_DIR/build/configure" -o ! -d "$SRC_DIR/gcc/gcc-$DEFAULT_GCC_VERSION" ]; then 87612e5d967db47c99996511a9e78f7c29d2dbdc67Nick Kralevich echo "ERROR: The file $SRC_DIR/build/configure or" 88612e5d967db47c99996511a9e78f7c29d2dbdc67Nick Kralevich echo " the directory $SRC_DIR/gcc/gcc-$DEFAULT_GCC_VERSION does not exist" 89612e5d967db47c99996511a9e78f7c29d2dbdc67Nick Kralevich echo "This is not the top of a toolchain tree: $SRC_DIR" 90d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "You must give the path to a copy of the toolchain source directories" 91d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "created by 'download-toolchain-sources.sh." 92d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner exit 1 93d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 94d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 95d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner# Now we can do the build 96d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerBUILDTOOLS=$ANDROID_NDK_ROOT/build/tools 97d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 98d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ -z "$NO_GEN_PLATFORMS" ]; then 99d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "Preparing the build..." 100d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner run $BUILDTOOLS/gen-platforms.sh --minimal --dst-dir=$NDK_DIR --ndk-dir=$NDK_DIR --arch=$(spaces_to_commas $ARCHS) 101d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "Could not generate minimal sysroot!" 102d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerelse 103d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner if [ ! -d "$NDK_DIR/platforms" ]; then 104d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "ERROR: --no-gen-platforms used but directory missing: $NDK_DIR/platforms" 105d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner exit 1 106d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fi 107d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 108d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 109d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerSYSTEMS=$(commas_to_spaces $SYSTEMS) 110d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerARCHS=$(commas_to_spaces $ARCHS) 1118e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan ChienLLVM_VERSION_LIST=$(commas_to_spaces $LLVM_VERSION_LIST) 112d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 113d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$DARWIN_SSH" -a -z "$CUSTOM_SYSTEMS" ]; then 114d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner SYSTEMS=" darwin-x86" 115d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 116d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 117d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' TurnerFLAGS= 118d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$VERBOSE" = "yes" ]; then 119d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner FLAGS=$FLAGS" --verbose" 120d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 121d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$VERBOSE2" = "yes" ]; then 122d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner FLAGS=$FLAGS" --verbose" 123d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 124d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$TRY64" = "yes" ]; then 12509a968eb0b25413ccc5cce15d04216a630e85631Ray Donnelly FLAGS=$FLAGS" --try-64" 126d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerelse 127d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner force_32bit_binaries 128d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 129d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$PACKAGE_DIR" ]; then 1301c855558c00aaf7f8f86335b605e7b78d8a17172David 'Digit' Turner mkdir -p "$PACKAGE_DIR" 1311c855558c00aaf7f8f86335b605e7b78d8a17172David 'Digit' Turner fail_panic "Could not create package directory: $PACKAGE_DIR" 132d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner FLAGS=$FLAGS" --package-dir=$PACKAGE_DIR" 133d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 134d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 135d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerdo_remote_host_build () 136d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner{ 137d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner local SYSTEM="$1" 138d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner local ARCH="$2" 139d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner local REMOTE_HOST="$3" 140d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 141d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # 1/ Copy the NDK toolchain build scripts 142d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # 2/ Copy the toolchain sources/package 143d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # 3/ Ssh to unpack the build scripts, and run them 144d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # 4/ Copy back the generated prebuilt binaries 145d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # 146d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Preparing remote build on $REMOTE_HOST..." 147d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 148d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # First try to create a remote temp directory on the remote host 149d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # Do it first so we can fail fast, not after spending time preparing 150d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # large tarballs. 151d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Creating remote temp directory" 152d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner TMPREMOTE=/tmp/ndk-$USER/darwin-prebuild 153d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner run ssh $REMOTE_HOST "mkdir -p $TMPREMOTE && rm -rf $TMPREMOTE/*" 154d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "Could not create temporary build directory on $REMOTE_HOST" 155d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 156d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # Now, package all the stuff we're going to send in a temporary 157d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # directory here on the machine, except toolchain sources 158d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner TMPDARWIN=$NDK_TMPDIR/darwin # Where we're going to package stuff 159d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner log "Using temporary work directory: $TMPDARWIN" 160d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner mkdir -p "$TMPDARWIN" 161d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Prepare NDK build scripts" 162d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner copy_directory "$ANDROID_NDK_ROOT/build" "$TMPDARWIN/ndk/build" 163d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner copy_file_list "$ANDROID_NDK_ROOT" "$TMPDARWIN/ndk" sources/android/libthread_db 164d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner copy_file_list "$ANDROID_NDK_ROOT" "$TMPDARWIN/ndk" "$STLPORT_SUBDIR" 165d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner copy_file_list "$ANDROID_NDK_ROOT" "$TMPDARWIN/ndk" "$GABIXX_SUBDIR" 1665c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner copy_file_list "$ANDROID_NDK_ROOT" "$TMPDARWIN/ndk" sources/host-tools 167d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Prepare platforms files" 168d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner copy_directory "$NDK_DIR/platforms" "$TMPDARWIN/ndk/platforms" 169d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Copying NDK build scripts and platform files to remote..." 170d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner (cd "$TMPDARWIN" && tar czf - ndk) | (ssh $REMOTE_HOST tar xzf - -C $TMPREMOTE) 171d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "Could not copy!" 172d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner rm -rf $TMPDARWIN 173d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 174d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # Copy the toolchain sources 175d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Copy toolchain sources to remote" 176d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner ssh $REMOTE_HOST mkdir -p $TMPREMOTE/toolchain && 177d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner (cd "$SRC_DIR" && tar czf - .) | (ssh $REMOTE_HOST tar xzf - -C $TMPREMOTE/toolchain) 178d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "Could not copy toolchain!" 179d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 180d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # Time to run the show :-) 181d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner for ARCH in $(commas_to_spaces $ARCHS); do 182d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Running remote $ARCH toolchain build..." 183d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner SYSROOT=$TMPREMOTE/ndk/platforms/android-$(get_default_api_level_for_arch $ARCH)/arch-$ARCH 184d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David '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" 185d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "Could not build prebuilt $ARCH toolchain on Darwin!" 186d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner done 187d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # Get the results 188d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Copying back Darwin prebuilt packages..." 189d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner mkdir -p $TMPDARWIN/packages && rm -rf $TMPDARWIN/packages/* 190d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner run scp $REMOTE_HOST:$TMPREMOTE/packages/*-darwin-* $TMPDARWIN/packages 191d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "Could not grab Darwin packages!" 192d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 193d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner for PACK in $TMPDARWIN/packages/*; do 194d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner if [ "$PACKAGE_DIR" ]; then 195d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "Copying $(basename $PACK) to $PACKAGE_DIR..." 196d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner cp $PACK $PACKAGE_DIR/ 197d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner else 198d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "Unpacking $(basename $PACK) into $NDK_DIR..." 199d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner unpack_archive $PACK $NDK_DIR 200d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fi 201d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fail_panic "" 202d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner done 203d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 204d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner dump "Cleaning up remote machine..." 205d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner run ssh $REMOTE_HOST rm -rf $TMPREMOTE 206d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner} 207d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 208d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfor SYSTEM in $SYSTEMS; do 209d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 2103b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh # Add --mingw/--darwin flag 211d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner TOOLCHAIN_FLAGS=$FLAGS 212bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh CANADIAN_BUILD=no 2133b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh if [ "$HOST_TAG32" = "linux-x86" ]; then 2143b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh case "$SYSTEM" in 2153b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh windows) 2163b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh TOOLCHAIN_FLAGS=$TOOLCHAIN_FLAGS" --mingw" 217bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh CANADIAN_BUILD=yes 2183b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh ;; 219bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh darwin-x86) 2203b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh TOOLCHAIN_FLAGS=$TOOLCHAIN_FLAGS" --darwin" 221bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh CANADIAN_BUILD=yes 2223b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh ;; 2233b28972d8a5a108579496233266fccd69c9d2fe5Andrew Hsieh esac 224d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fi 225d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 226524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh # Should we do a remote build? 227bd2fa8bbb88e221220827bbfca6db13016893d35Andrew Hsieh if [ "$SYSTEM" != "$HOST_TAG32" -a "$CANADIAN_BUILD" != "yes" ]; then 228d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner case $SYSTEM in 229d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner darwin-*) 230d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner if [ "$DARWIN_SSH" ]; then 231d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner do_remote_host_build "$SYSTEM" "$ARCH" "$DARWIN_SSH" 232d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner else 233d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "WARNING: Can't build $SYSTEM binaries on this system!" 234d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "Consider using the --darwin-ssh option." 235d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fi 236d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner continue 237d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner esac 238d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fi 239d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 240524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh # Determin the display system name 241524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh SYSNAME=$SYSTEM 242524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh if [ "$TRY64" = "yes" ]; then 243524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh case $SYSTEM in 244524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh darwin-x86|linux-x86) 24569e3629c68313d29140e1fdf5c6216a0e8963a22Andrew Hsieh SYSNAME=${SYSTEM%%x86}x86_64 246524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh ;; 247524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh windows) 248524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh SYSNAME=windows-x86_64 249524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh ;; 250524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh esac 251524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh fi 252d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 253524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh # First, ndk-stack 254524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh if [ "$TRY64" != "yes" ]; then 255524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh # Don't build ndk-stack in 64-bit because unlike other host toolchains 256524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh # ndk-stack doesn't have separate directories for 32-bit and 64-bit. 257524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh # 64-bit one will overwrite the 32-bit one 258524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh echo "Building $SYSNAME ndk-stack" 259524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh run $BUILDTOOLS/build-ndk-stack.sh $TOOLCHAIN_FLAGS 260524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh fail_panic "ndk-stack build failure!" 261524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh fi 262524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh echo "Building $SYSNAME ndk-make" 2635c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner run $BUILDTOOLS/build-host-make.sh $TOOLCHAIN_FLAGS 2645c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner fail_panic "make build failure!" 2655c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner 266524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh echo "Building $SYSNAME ndk-awk" 2675c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner run $BUILDTOOLS/build-host-awk.sh $TOOLCHAIN_FLAGS 2685c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner fail_panic "awk build failure!" 2695c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner 270524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh echo "Building $SYSNAME ndk-sed" 2715c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner run $BUILDTOOLS/build-host-sed.sh $TOOLCHAIN_FLAGS 2725c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner fail_panic "sed build failure!" 2735c1b54f8aa498659c154a5cb909d0e19a9b63e92David 'Digit' Turner 2742641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh # ToDo: perl in windows 2752641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh if [ "$SYSTEM" != "windows" ]; then 2762641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh echo "Building $SYSNAME ndk-perl" 2772641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh run $BUILDTOOLS/build-host-perl.sh $TOOLCHAIN_FLAGS "$SRC_DIR" 2782641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh fail_panic "perl build failure!" 2792641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh fi 2802641f6f5414e56d792fac26572a5d984977ef462Andrew Hsieh 281c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih echo "Building $SYSNAME ndk-python" 282433f2c4e0348d448f4e31efa93537f1784bf47b4Andrew Hsieh run $BUILDTOOLS/build-host-python.sh $TOOLCHAIN_FLAGS "--toolchain-src-dir=$SRC_DIR" "--systems=$SYSTEM" "--force" 283c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih fail_panic "python build failure!" 284c6798d0201775cd96ae85b67b7653bdc406f2599Lai Wei-Chih 285ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner if [ "$SYSTEM" = "windows" ]; then 286524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh echo "Building $SYSNAME toolbox" 287ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner run $BUILDTOOLS/build-host-toolbox.sh $FLAGS 288ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner fail_panic "Windows toolbox build failure!" 289ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner fi 290ad1afc5e66ab40201947a3178eba975515b0d73cDavid 'Digit' Turner 291d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # Then the toolchains 292d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner for ARCH in $ARCHS; do 293f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner TOOLCHAIN_NAMES=$(get_toolchain_name_list_for_arch $ARCH) 294f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner if [ -z "$TOOLCHAIN_NAMES" ]; then 295d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "ERROR: Invalid architecture name: $ARCH" 296d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner exit 1 297d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner fi 298d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 299f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner for TOOLCHAIN_NAME in $TOOLCHAIN_NAMES; do 300524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh echo "Building $SYSNAME toolchain for $ARCH architecture: $TOOLCHAIN_NAME" 301f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner run $BUILDTOOLS/build-gcc.sh "$SRC_DIR" "$NDK_DIR" $TOOLCHAIN_NAME $TOOLCHAIN_FLAGS 30269e3629c68313d29140e1fdf5c6216a0e8963a22Andrew Hsieh fail_panic "Could not build $TOOLCHAIN_NAME-$SYSNAME!" 303f7e74d4ece211f975f6bfc90132e26a6048b79f1David 'Digit' Turner done 304d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner done 305d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 3068e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan Chien # Build llvm and clang 307ddeed0481172250935ed47f906905629450d981bAndrew Hsieh POLLY_FLAGS= 308ddeed0481172250935ed47f906905629450d981bAndrew Hsieh if [ "$TRY64" != "yes" -a "$SYSTEM" != "windows" ]; then 309ddeed0481172250935ed47f906905629450d981bAndrew Hsieh POLLY_FLAGS="--with-polly" 310ddeed0481172250935ed47f906905629450d981bAndrew Hsieh fi 3118e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan Chien for LLVM_VERSION in $LLVM_VERSION_LIST; do 312524869abdbd228ccb916cc9a4902550dd6382ba2Andrew Hsieh echo "Building $SYSNAME clang/llvm-$LLVM_VERSION" 313bedf803c145294a8a1970accd860d8a49379f9e7Andrew Hsieh run $BUILDTOOLS/build-llvm.sh "$SRC_DIR" "$NDK_DIR" "llvm-$LLVM_VERSION" $TOOLCHAIN_FLAGS $POLLY_FLAGS $CHECK_FLAG 31469e3629c68313d29140e1fdf5c6216a0e8963a22Andrew Hsieh fail_panic "Could not build llvm for $SYSNAME" 3158e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan Chien done 3168e58e6b10c9c82e2085420b0e2f4c82d1db9b5c3Logan Chien 31769e3629c68313d29140e1fdf5c6216a0e8963a22Andrew Hsieh # Deploy ld.mcld 31869e3629c68313d29140e1fdf5c6216a0e8963a22Andrew Hsieh $PROGDIR/deploy-host-mcld.sh --package-dir=$PACKAGE_DIR --systems=$SYSNAME 31969e3629c68313d29140e1fdf5c6216a0e8963a22Andrew Hsieh fail_panic "Could not deploy ld.mcld for $SYSNAME" 32069e3629c68313d29140e1fdf5c6216a0e8963a22Andrew Hsieh 321d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner # We're done for this system 322d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerdone 323d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 3248fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh# Build tools common to all system 3258fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsiehrun $BUILDTOOLS/build-analyzer.sh "$SRC_DIR" "$NDK_DIR" "llvm-$DEFAULT_LLVM_VERSION" --package-dir="$PACKAGE_DIR" 3268fbff41d699dad1386dcdf58e02b7263939abe41Andrew Hsieh 327d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerif [ "$PACKAGE_DIR" ]; then 328d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "Done, please look at $PACKAGE_DIR" 329d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerelse 330d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner echo "Done" 331d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turnerfi 332d9bb7ebc331f10c98f5c5513fc8d9e5daf12c6e6David 'Digit' Turner 33309a968eb0b25413ccc5cce15d04216a630e85631Ray Donnellyexit 0 334