1a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner#!/bin/bash 2a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 3a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# This script is used to rebuild all emulator binaries from sources 4a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# and package them for easier distribution. 5a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 6a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerset -e 7a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerexport LANG=C 8a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerexport LC_ALL=C 9a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 10a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerPROGDIR=$(dirname "$0") 11a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerPROGNAME=$(basename "$0") 12a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 13a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerpanic () { 14a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner echo "ERROR: $@" 15a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner exit 1 16a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner} 17a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 18a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerVERBOSE=1 19a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 20a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# Dump a message if VERBOSE is greater or equal to $1 21a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# $1: level 22a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# $2+: Message to print. 23a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerdump_n () { 24a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner local LEVEL=$1 25a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner shift 26a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner if [ "$VERBOSE" -ge "$LEVEL" ]; then 27a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner printf "%s\n" "$@" 28a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner fi 29a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner} 30a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 31a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# Dump a message at VERBOSE level 1 (the default one). 32a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerdump () { 33a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner dump_n 1 "$@" 34a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner} 35a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 36a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# Dump a message at VERBOSE level 2 (if --verbose was used). 37a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerlog () { 38a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner dump_n 2 "$@" 39a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner} 40a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 41a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# Run a command, dump its output depending on VERBOSE level, i.e.: 42a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# 0 -> Don't display anything. 43a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# 1 -> Display error messages only. 44a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# 2 -> Display the command, its output and error. 45a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerrun () { 46a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner case $VERBOSE in 47a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 0) 48a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner "$@" >/dev/null 2>&1 49a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 50a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 1) 51a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner "$@" >/dev/null 52a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 53a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner *) 54a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner echo "COMMAND: $@" 55a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner "$@" 56a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 57a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner esac 58a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner} 59a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 60d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner# Same as 'run', but slightly more quiet: 61d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner# 0 or 1 -> Don't display anything 62d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner# 2 -> Diplay the command, its output and error. 63d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerrun2 () { 64d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner case $VERBOSE in 65d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 0|1) 66d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner "$@" >/dev/null 2>&1 67d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner ;; 68d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 2) 69d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner echo "COMMAND: $@" 70d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner "$@" >/dev/null 2>&1 71d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner ;; 72d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner *) 73d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner echo "COMMAND: $@" 74d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner "$@" 75d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner ;; 76d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner esac 77d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner} 78d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 79a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# $1: Source directory. 80a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# $2: Destination directory. 81a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# $3: List of files to copy, relative to $1 (if empty, all files will be copied). 82a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnercopy_directory_files () { 83a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner local SRCDIR DSTDIR FILES 84a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner SRCDIR=$1 85a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner DSTDIR=$2 86a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner shift; shift; 87a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner FILES="$@" 88a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 89a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner mkdir -p "$DSTDIR" || panic "Cannot create destination directory: $DSTDIR" 90a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner (cd $SRCDIR && tar cf - $FILES) | (cd $DSTDIR && tar xf -) 91a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner} 92a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 93a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# $1: Source directory (must be a git checkout). 94a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# $2: Destination directory. 95a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnercopy_directory_git_files () { 96a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner local SRCDIR DSTDIR FILES 97a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner SRCDIR=$1 98a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner DSTDIR=$2 99a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner log "Copying git sources from $SRCDIR to $DSTDIR" 100a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner # The list of names can contain spaces, so put them in a file to avoid 101a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner # any issues. 102a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner TMP_FILE_LIST=$(mktemp) 103a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner (cd $SRCDIR && git ls-files) > $TMP_FILE_LIST 104a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner mkdir -p "$DSTDIR" || panic "Cannot create destination directory: $DSTDIR" 105a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner (cd $SRCDIR && tar cf - -T $TMP_FILE_LIST) | (cd $DSTDIR && tar xf -) 106a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner rm -f $TMP_FILE_LIST 107a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner} 108a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 109a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# Convert a comma-separated list into a space-separated one. 110a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnercommas_to_spaces () { 111a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner printf "%s" "$@" | tr ',' ' ' 112a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner} 113a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 114d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner# Rebuild Darwin binaries remotely through SSH 115d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner# $1: Host name. 116d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner# $2: Source package file. 117d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerbuild_darwin_binaries_on () { 118d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner local HOST PKG_FILE PKG_FILE_BASENAME DST_DIR TARFLAGS 119d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner HOST=$1 120d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner PKG_FILE=$2 121d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 122d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner # The package file is ....../something-darwin.tar.bz2 123d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner # And should unpack to a single directory named 'something/' 124d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner # so extract the prefix from the package name. 125d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner PKG_FILE_BASENAME=$(basename "$PKG_FILE") 126d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner PKG_FILE_PREFIX=${PKG_FILE_BASENAME%%-sources.tar.bz2} 127d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner if [ "$PKG_FILE_PREFIX" = "$PKG_FILE_BASENAME" ]; then 128d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner # Sanity check. 129d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner panic "Can't get package prefix from $PKG_FILE_BASENAME" 130d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner fi 131d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 132d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner # Where to do the work on the remote host. 133d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner DST_DIR=/tmp/android-emulator-build 134d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 135d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner if [ "$VERBOSE" -ge 3 ]; then 136d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner TARFLAGS="v" 137d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner fi 138d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner dump "Copying sources to Darwin host: $HOST" 139d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner run ssh $HOST "mkdir -p $DST_DIR && rm -rf $DST_DIR/$PKG_FILE_BASENAME" 140d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner cat "$PKG_FILE" | ssh $HOST "cd $DST_DIR && tar x${TARGFLAGS}f -" 141d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 142d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner dump "Rebuilding Darwin binaries remotely." 143d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner run ssh $HOST "bash -l -c \"cd $DST_DIR/$PKG_FILE_PREFIX/qemu && ./android-rebuild.sh $REBUILD_FLAGS\"" || 144d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner panic "Can't rebuild binaries on Darwin, use --verbose to see why!" 145d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 146d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner dump "Retrieving Darwin binaries from: $HOST" 147d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner rm -rf objs/* 148d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner run scp $HOST:$DST_DIR/$PKG_FILE_PREFIX/qemu/objs/emulator* objs/ 1491af8215c58e5c94432f04ec87d34e429fe7cd7a6David 'Digit' Turner run scp -r $HOST:$DST_DIR/$PKG_FILE_PREFIX/qemu/objs/lib objs/lib 1501af8215c58e5c94432f04ec87d34e429fe7cd7a6David 'Digit' Turner # TODO(digit): Retrieve PC BIOS files. 151d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner run ssh $HOST rm -rf $DST_DIR/$PKG_FILE_PREFIX 152d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner} 153d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 15490eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner# Extract the git commit SHA1 of a given directory, and put its value 15590eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner# in a destination variable. If the target directory is not the root 15690eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner# of a git checkout, abort. 15790eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner# $1: Destination variable name. 15890eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner# $2: Git directory. 15990eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner# Example: extract_commit_description GTEST_DESC "$GTEST_DIR" 16090eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turnerextract_git_commit_description () { 16190eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner local VARNAME GIT_DIR SHA1 16290eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner VARNAME=$1 16390eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner GIT_DIR=$2 16490eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner # Extract the commit description, then escape (') characters in it. 16590eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner SHA1=$(cd $GIT_DIR && git log --oneline -1 .) || \ 16690eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner panic "Not a Git directory: $GIT_DIR" 16790eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner 168b8c66380ba649264bfff1a15d285bb7a7e4d1e08David 'Digit' Turner SHA1=$(printf "%s" "$SHA1" | sed -e "s/'/\\'/g") 16990eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner eval $VARNAME=\'$SHA1\' 17090eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner} 1710c95fadd0f6010b42091f033c984d32f659821dcDavid 'Digit' Turner 172a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# Defaults. 173a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerDEFAULT_REVISION=$(date +%Y%m%d) 174a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerDEFAULT_PKG_PREFIX=android-emulator 175a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerDEFAULT_PKG_DIR=/tmp 176d2c0852277077455c30ec405d02db34f64b67381David 'Digit' TurnerDEFAULT_DARWIN_SSH=$ANDROID_EMULATOR_DARWIN_SSH 177a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 178a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnercase $(uname -s) in 179a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner Linux) 180a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner DEFAULT_SYSTEMS="linux,windows" 181a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner HOST_SYSTEM=linux 182a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 183a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner Darwin) 184a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner DEFAULT_SYSTEMS="darwin" 185a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner HOST_SYSTEM=darwin 186a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 187a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner *) 188a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner panic "Unsupported system! This can only run on Linux and Darwin." 189a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turneresac 190a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 191a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# Command-line parsing. 192a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerDO_HELP= 1939554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' TurnerOPT_COPY_PREBUILTS= 194d2c0852277077455c30ec405d02db34f64b67381David 'Digit' TurnerOPT_DARWIN_SSH= 195a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerOPT_PKG_DIR= 196a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerOPT_PKG_PREFIX= 197a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerOPT_REVISION= 198a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerOPT_SOURCES= 199a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerOPT_SYSTEM= 200a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 201a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerfor OPT; do 202a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner case $OPT in 203a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner --help|-?) 204a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner DO_HELP=true 205a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 2069554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner --copy-prebuilts=*) 2079554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner OPT_COPY_PREBUILTS=${OPT##--copy-prebuilts=} 2089554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner ;; 209d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner --darwin-ssh=*) 210d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner OPT_DARWIN_SSH=${OPT##--darwin-ssh=} 211d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner ;; 212a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner --package-dir=*) 213a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner OPT_PKG_DIR=${OPT##--package-dir=} 214a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 215a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner --package-prefix=*) 216a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner OPT_PKG_PREFIX=${OPT##--package-prefix=} 217a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 218a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner --quiet) 219a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner VERBOSE=$(( $VERBOSE - 1 )) 220a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 221a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner --sources) 222a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner OPT_SOURCES=true 223a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 224a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner --revision=*) 225a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner OPT_REVISION=${OPT##--revision=} 226a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 227a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner --system=*) 228a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner OPT_SYSTEM=${OPT##--system=} 229a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 230a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner --verbose) 231a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner VERBOSE=$(( $VERBOSE + 1 )) 232a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 233a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner -*) 234a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner panic "Unsupported option '$OPT', see --help." 235a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 236a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner *) 237a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner panic "Unsupported parameter '$OPT', see --help." 238a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner esac 239a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerdone 240a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 241a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerif [ "$DO_HELP" ]; then 242a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner cat <<EOF 243a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerUsage: $PROGNAME [options] 244a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 245a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerRebuild the emulator binaries from source and package them into tarballs 246a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerfor easier distribution. 247a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 248a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerNew packages are placed by default at $DEFAULT_PKG_DIR 249a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerUse --package-dir=<path> to use another output directory. 250a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 251a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerPackages names are prefixed with $DEFAULT_PKG_PREFIX-<revision>, where 252a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerthe <revision> is the current ISO date by default. You can use 253a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner--package-prefix=<prefix> and --revision=<revision> to change this. 254a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 255a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerBinary packages will include the OpenGLES emulation libraries if they can 256a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerbe found in your current workspace, not otherwise. 257a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 258a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerUse --sources option to also generate a source tarball. 259a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 260d2c0852277077455c30ec405d02db34f64b67381David 'Digit' TurnerUse --darwin-ssh=<host> to build perform a remote build of the Darwin 261d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerbinaries on a remote host through ssh. Note that this forces --sources 262d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turneras well. You can also define ANDROID_EMULATOR_DARWIN_SSH in your 263d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerenvironment to setup a default value for this option. 264d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 2659554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' TurnerUse --copy-prebuilts=<path> to specify the path of an AOSP workspace/checkout, 2669554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turnerand to copy 64-bit prebuilt binaries to <path>/prebuilts/android-emulator/ 2679554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turnerfor both Linux and Darwin platforms. This option requires the use of 2689554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner--darwin-ssh=<host> or ANDROID_EMULATOR_DARWIN_SSH to build the Darwin 2699554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turnerbinaries. 2709554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner 271a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerValid options (defaults are inside brackets): 272a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner --help | -? Print this message. 273a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner --package-dir=<path> Change package output directory [$DEFAULT_PKG_DIR]. 274a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner --revision=<name> Change revision [$DEFAULT_REVISION]. 275a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner --sources Also create sources package. 276a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner --system=<list> Specify host system list [$DEFAULT_SYSTEMS]. 2779554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner --copy-prebuilts=<path> Copy 64-bit Linux and Darwin binaries to 2789554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner <path>/prebuilts/android-emulator/ 279a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 280a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerEOF 281a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner exit 0 282a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerfi 283a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 284a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerif [ "$OPT_PKG_PREFIX" ]; then 285a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner PKG_PREFIX=$OPT_PKG_PREFIX 286a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerelse 287a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner PKG_PREFIX=$DEFAULT_PKG_PREFIX 288a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner log "Auto-config: --package-prefix=$PKG_PREFIX" 289a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerfi 290a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 291a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerif [ "$OPT_REVISION" ]; then 292a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner PKG_REVISION=$OPT_REVISION 293a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerelse 294a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner PKG_REVISION=$DEFAULT_REVISION 295a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner log "Auto-config: --revision=$PKG_REVISION" 296a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerfi 297a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 298a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerif [ "$OPT_PKG_DIR" ]; then 299a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner PKG_DIR=$OPT_PKG_DIR 300a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner mkdir -p "$PKG_DIR" || panic "Can't create directory: $PKG_DIR" 301a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerelse 302a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner PKG_DIR=$DEFAULT_PKG_DIR 303a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner log "Auto-config: --package-dir=$PKG_DIR" 304a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerfi 305a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 306a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerif [ "$OPT_SYSTEM" ]; then 307a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner SYSTEMS=$(commas_to_spaces $OPT_SYSTEM) 308a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerelse 309a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner SYSTEMS=$(commas_to_spaces $DEFAULT_SYSTEMS) 310a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner log "Auto-config: --system=$SYSTEMS" 311a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerfi 312a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 313d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerif [ -z "$OPT_DARWIN_SSH" ]; then 314d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner DARWIN_SSH=$DEFAULT_DARWIN_SSH 315d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner if [ "$DARWIN_SSH" ]; then 316d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner log "Auto-config: --darwin-ssh=$DARWIN_SSH (from environment)." 317d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner fi 318d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerelse 319d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner DARWIN_SSH=$OPT_DARWIN_SSH 320d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerfi 321d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 322d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerif [ "$DARWIN_SSH" ]; then 323d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner if [ -z "$OPT_SOURCES" ]; then 324d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner OPT_SOURCES=true 325d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner log "Auto-config: --sources (remote Darwin build)." 326d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner fi 327d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner SYSTEMS="$SYSTEMS darwin" 328d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerfi 329d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 3309554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turnerif [ "$OPT_COPY_PREBUILTS" ]; then 3319554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner if [ -z "$DARWIN_SSH" ]; then 3329554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner panic "The --copy-prebuilts=<dir> option requires --darwin-ssh=<host>." 3339554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner fi 3349554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner TARGET_AOSP=$OPT_COPY_PREBUILTS 3359554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner if [ ! -f "$TARGET_AOSP/build/envsetup.sh" ]; then 3369554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner panic "Not an AOSP checkout / workspace: $TARGET_AOSP" 3379554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner fi 3389554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner TARGET_PREBUILTS_DIR=$TARGET_AOSP/prebuilts/android-emulator 3399554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner mkdir -p "$TARGET_PREBUILTS_DIR" 3409554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turnerfi 3419554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner 342d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnercase $VERBOSE in 343d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 0|1) 344d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner REBUILD_FLAGS="" 345d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner ;; 346d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 2) 347d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner REBUILD_FLAGS="--verbose" 348d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner ;; 349d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner *) 350d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner REBUILD_FLAGS="--verbose --verbose" 351d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner ;; 352d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turneresac 353d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 354d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner# Remove duplicates. 355d2c0852277077455c30ec405d02db34f64b67381David 'Digit' TurnerSYSTEMS=$(echo "$SYSTEMS" | tr ' ' '\n' | sort -u | tr '\n' ' ') 356d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerlog "Building for the following systems: $SYSTEMS" 357d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 358a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# Default build directory. 359a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerTEMP_BUILD_DIR=/tmp/$USER-qemu-package-binaries 360a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 361a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# Ensure the build directory is removed when the script exits or is 362a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# interrupted. 363a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerclean_exit () { 364a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner if [ -n "$TEMP_BUILD_DIR" -a -d "$TEMP_BUILD_DIR" ]; then 365a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner rm -rf "$TEMP_BUILD_DIR" 366a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner fi 367a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner exit $? 368a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner} 369a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 370a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnertrap "clean_exit 0" EXIT 371a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnertrap "clean_exit \$?" QUIT HUP INT 372a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 373a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# Do some sanity checks to verify that the current source directory 374a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# doesn't have unchecked files and other bad things lingering. 375a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 376a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner# Assume this script is under distrib/ 377a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerQEMU_DIR=$(cd "$PROGDIR"/.. && pwd -P) 378a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerlog "Found emulator directory: $QEMU_DIR" 379a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 380a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnercd $QEMU_DIR 381a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerif [ ! -d "$QEMU_DIR"/.git ]; then 382a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner panic "This directory must be a checkout of \$AOSP/platform/external/qemu!" 383a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerfi 384a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerUNCHECKED_FILES=$(git ls-files -o -x objs/ -x images/emulator_icon.o) 385a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerif [ "$UNCHECKED_FILES" ]; then 386a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner echo "ERROR: There are unchecked files in the current directory!" 387a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner echo "Please remove them:" 388a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner echo "$UNCHECKED_FILES" 389a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner exit 1 390a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerfi 391a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 39290eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turnerextract_git_commit_description QEMU_GIT_COMMIT "$QEMU_DIR" 393a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerGTEST_DIR=$(dirname $QEMU_DIR)/gtest 394a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerif [ ! -d "$GTEST_DIR" ]; then 395a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner panic "Cannot find GoogleTest source directory: $GTEST_DIR" 396a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerfi 397a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerlog "Found GoogleTest directory: $GTEST_DIR" 39890eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turnerextract_git_commit_description GTEST_GIT_COMMIT "$GTEST_DIR" 399a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 4001af8215c58e5c94432f04ec87d34e429fe7cd7a6David 'Digit' TurnerEMUGL_DIR=$QEMU_DIR/../../sdk/emulator/opengl 4011af8215c58e5c94432f04ec87d34e429fe7cd7a6David 'Digit' Turnerif [ ! -d "$EMUGL_DIR" ]; then 4021af8215c58e5c94432f04ec87d34e429fe7cd7a6David 'Digit' Turner panic "Cannot find GPU emulation source directory: $EMUGL_DIR" 4031af8215c58e5c94432f04ec87d34e429fe7cd7a6David 'Digit' Turnerfi 4041af8215c58e5c94432f04ec87d34e429fe7cd7a6David 'Digit' Turnerlog "Found GPU emulation directory: $EMUGL_DIR" 40590eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turnerextract_git_commit_description EMUGL_GIT_COMMIT "$EMUGL_DIR" 4061af8215c58e5c94432f04ec87d34e429fe7cd7a6David 'Digit' Turner 407d2c0852277077455c30ec405d02db34f64b67381David 'Digit' TurnerSOURCES_PKG_FILE= 408d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerif [ "$OPT_SOURCES" ]; then 409d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner BUILD_DIR=$TEMP_BUILD_DIR/sources/$PKG_PREFIX-$PKG_REVISION 410d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner PKG_NAME="$PKG_REVISION-sources" 411d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner dump "[$PKG_NAME] Copying GoogleTest source files." 412d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner copy_directory_git_files "$GTEST_DIR" "$BUILD_DIR"/gtest 413d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 414d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner dump "[$PKG_NAME] Copying Emulator source files." 415d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner copy_directory_git_files "$QEMU_DIR" "$BUILD_DIR"/qemu 416d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 4171af8215c58e5c94432f04ec87d34e429fe7cd7a6David 'Digit' Turner dump "[$PKG_NAME] Copying GPU emulation library sources." 4181af8215c58e5c94432f04ec87d34e429fe7cd7a6David 'Digit' Turner copy_directory_git_files "$EMUGL_DIR" "$BUILD_DIR"/opengl 4191af8215c58e5c94432f04ec87d34e429fe7cd7a6David 'Digit' Turner 420d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner dump "[$PKG_NAME] Generating README file." 421d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner cat > "$BUILD_DIR"/README <<EOF 422d2c0852277077455c30ec405d02db34f64b67381David 'Digit' TurnerThis directory contains the sources of the Android emulator. 423d2c0852277077455c30ec405d02db34f64b67381David 'Digit' TurnerUse './rebuild.sh' to rebuild the binaries from scratch. 424d2c0852277077455c30ec405d02db34f64b67381David 'Digit' TurnerEOF 425d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 426d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner dump "[$PKG_NAME] Generating rebuild script." 427d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner cat > "$BUILD_DIR"/rebuild.sh <<EOF 428d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner#!/bin/sh 429d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 430d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner# Auto-generated script used to rebuild the Android emulator binaries 431d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner# from sources. Note that this does not include the GLES emulation 432d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner# libraries. 433d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 434d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnercd \$(dirname "\$0") && 435d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner(cd qemu && ./android-rebuild.sh --ignore-audio) && 436d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnermkdir -p bin/ && 437d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnercp -rfp qemu/objs/emulator* bin/ && 438d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerecho "Emulator binaries are under \$(pwd -P)/bin/" 439d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerecho "IMPORTANT: The GLES emulation libraries must be copied to:" 440d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerecho " \$(pwd -P)/bin/lib" 441d2c0852277077455c30ec405d02db34f64b67381David 'Digit' TurnerEOF 442d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 443d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner chmod +x "$BUILD_DIR"/rebuild.sh 444d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 445d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner PKG_FILE=$PKG_DIR/$PKG_PREFIX-$PKG_REVISION-sources.tar.bz2 446d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner SOURCES_PKG_FILE=$PKG_FILE 447d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner dump "[$PKG_NAME] Creating tarball..." 448d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner (run cd "$BUILD_DIR"/.. && run tar cjf "$PKG_FILE" $PKG_PREFIX-$PKG_REVISION) 449d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerfi 450d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner 451a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerfor SYSTEM in $SYSTEMS; do 452a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner PKG_NAME="$PKG_REVISION-$SYSTEM" 453a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner dump "[$PKG_NAME] Rebuilding binaries from sources." 454a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner run cd $QEMU_DIR 455a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner case $SYSTEM in 456a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner $HOST_SYSTEM) 457d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner run ./android-rebuild.sh $REBUILD_FLAGS || panic "Use ./android-rebuild.sh to see why." 458d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner ;; 459d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner darwin) 460d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner if [ -z "$DARWIN_SSH" ]; then 461d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner # You can only rebuild Darwin binaries on non-Darwin systems 462d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner # by using --darwin-ssh=<host>. 463d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner panic "You can only rebuild Darwin binaries with --darwin-ssh" 464d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner fi 465d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner if [ -z "$SOURCES_PKG_FILE" ]; then 466d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner panic "You must use --sources to build Darwin binaries through ssh" 467d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner fi 468d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner build_darwin_binaries_on "$DARWIN_SSH" "$SOURCES_PKG_FILE" 469a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 470a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner windows) 471a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner if [ "$HOST_SYSTEM" != "linux" ]; then 472a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner panic "Windows binaries can only be rebuilt on Linux!" 473a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner fi 474d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turner run ./android-rebuild.sh --mingw $REBUILD_FLAGS || panic "Use ./android-rebuild.sh --mingw to see why." 475a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 476a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner *) 477a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner panic "Can't rebuild $SYSTEM binaries on $HOST_SYSTEM for now!" 478a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner ;; 479a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner esac 480a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 481a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner dump "[$PKG_NAME] Copying emulator binaries." 482a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner TEMP_PKG_DIR=$TEMP_BUILD_DIR/$SYSTEM/$PKG_PREFIX-$PKG_REVISION 483a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner run mkdir -p "$TEMP_PKG_DIR"/tools 484a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 485a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner run cp -p objs/emulator* "$TEMP_PKG_DIR"/tools 486a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner if [ -d "objs/lib" ]; then 487a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner dump "[$PKG_NAME] Copying GLES emulation libraries." 488a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner run mkdir -p "$TEMP_PKG_DIR"/tools/lib 4895a0063fdbdea9723dd4d48d0059a01cb75b8cf01David 'Digit' Turner run2 cp -rp objs/lib/* "$TEMP_PKG_DIR"/tools/lib/ 490a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner fi 491a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 492a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner dump "[$PKG_NAME] Creating README file." 493a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner cat > $TEMP_PKG_DIR/README <<EOF 494a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerThis directory contains Android emulator binaries. You can use them directly 495a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerby defining ANDROID_SDK_ROOT in your environment, then call tools/emulator 496a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerwith the usual set of options. 497a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 498a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerTo install them directly into your SDK, copy them with: 499a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 500a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner cp -r tools/* \$ANDROID_SDK_ROOT/tools/ 501a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' TurnerEOF 502a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 503a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner dump "[$PKG_NAME] Copying license files." 504a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner mkdir -p "$TEMP_PKG_DIR"/licenses/ 505a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner cp COPYING COPYING.LIB "$TEMP_PKG_DIR"/licenses/ 506a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 507a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner dump "[$PKG_NAME] Creating tarball." 508a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner PKG_FILE=$PKG_DIR/$PKG_PREFIX-$PKG_REVISION-$SYSTEM.tar.bz2 509765f7c7d9aac1b3715e223b2be3e2f15de277d28David 'Digit' Turner (run cd "$TEMP_BUILD_DIR"/$SYSTEM && run tar cjf $PKG_FILE $PKG_PREFIX-$PKG_REVISION) 510a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerdone 511a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turner 5129554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turnerif [ "$OPT_COPY_PREBUILTS" ]; then 5139554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner for SYSTEM in linux darwin; do 5149554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner SRC_DIR="$TEMP_BUILD_DIR"/$SYSTEM/$PKG_PREFIX-$PKG_REVISION 5159554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner DST_DIR=$TARGET_PREBUILTS_DIR/$SYSTEM-x86_64 51690eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner dump "[$SYSTEM-x86_64] Copying emulator binaries into $DST_DIR" 5179554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner run mkdir -p "$DST_DIR" || panic "Could not create directory: $DST_DIR" 5189554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner case $SYSTEM in 5199554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner linux) DLLEXT=.so;; 5209554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner darwin) DLLEXT=.dylib;; 5219554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner *) panic "Unsupported prebuilt system: $SYSTEM";; 5229554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner esac 5239554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner FILES="emulator" 5249554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner for ARCH in arm x86 mips; do 5259554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner FILES="$FILES emulator64-$ARCH" 5269554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner done 5279554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner for LIB in OpenglRender EGL_translator GLES_CM_translator GLES_V2_translator; do 5289554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner FILES="$FILES lib/lib64$LIB$DLLEXT" 5299554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner done 5309554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner (run cd "$SRC_DIR/tools" && tar cf - $FILES) | (cd $DST_DIR && tar xf -) || 5319554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner panic "Could not copy binaries to $DST_DIR" 5329554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner done 53390eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner cat > $TARGET_PREBUILTS_DIR/README <<EOF 53490eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' TurnerThis directory contains prebuilt emulator binaries that were generated by 53590eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turnerrunning the following command on a 64-bit Linux machine: 53690eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner 53790eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner external/qemu/distrib/package-release.sh \\ 53890eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner --darwin-ssh=<host> \\ 53990eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner --copy-prebuilts=<path> 54090eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner 54190eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' TurnerWhere <host> is the host name of a Darwin machine, and <path> is the root 54290eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turnerpath of this AOSP repo workspace. 54390eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner 54490eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' TurnerBelow is the list of specific commits for each input directory used: 54590eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner 54690eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turnerexternal/gtest $GTEST_GIT_COMMIT 54790eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turnerexternal/qemu $QEMU_GIT_COMMIT 54890eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turnersdk/emulator/opengl $EMUGL_GIT_COMMIT 54990eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' Turner 55090eb445a501372220dccbc55122a0b219ffd99a9David 'Digit' TurnerEOF 5519554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turnerfi 5529554550a3ecf2987af84d98d4b683757c74d8b93David 'Digit' Turner 553a10b316b82cde4a58bcba9d0dba2c392a8f17c0bDavid 'Digit' Turnerdump "Done. See $PKG_DIR" 554d2c0852277077455c30ec405d02db34f64b67381David 'Digit' Turnerls -lh "$PKG_DIR"/$PKG_PREFIX-$PKG_REVISION* 555