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