diff --git a/scripts/build-defaults.shi b/scripts/build-defaults.shi
index 8f02edb..6ccecb4 100644
--- a/scripts/build-defaults.shi
+++ b/scripts/build-defaults.shi
@@ -1,12 +1,28 @@
 # Default values for all build scripts.
 
-SOURCES_PACKAGES="\
-zlib-1.2.8.tar.gz \
-libpng-1.6.12.tar.xz \
-libffi-3.1.tar.gz \
+SOURCE_PACKAGES="\
+expat-2.1.0.tar.gz \
 gettext-0.19.1.tar.xz \
 glib-2.41.0.tar.xz \
-expat-2.1.0.tar.gz \
+libffi-3.1.tar.gz \
+libiconv-1.14.tar.gz \
+libpng-1.6.12.tar.xz \
 pixman-0.32.4.tar.gz \
 SDL-1.2.15.tar.gz \
+zlib-1.2.8.tar.gz \
 "
+
+# Extract the version number from a source package.
+# $1: Unversioned and unsuffixed package name (e.g. "zlib")
+# Out: package version (e.g. "1.2.8")
+get_source_package_version () {
+    echo "$SOURCE_PACKAGES" | tr ' ' '\n' | \
+        grep -e "^$1" | sed -e "s|^$1-\(.*\)\.tar\..z$|\\1|g"
+}
+
+# Extract the package name for a given library.
+# $1: Unversioned and unsuffixed package name (e.g. "zlib")
+# Out: package name (e.g. "zlib-1.2.8.tar.gz")
+get_source_package_name () {
+    echo "$SOURCE_PACKAGES" | tr ' ' '\n' | grep -e "^$1"
+}
diff --git a/scripts/build-zlib.sh b/scripts/build-zlib.sh
deleted file mode 100755
index 92981ef..0000000
--- a/scripts/build-zlib.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-. $(dirname "$0")/common.shi
-
-shell_import build-defaults.shi
-
-usage () {
-    cat <<EOF
-Usage: $(program_name) [options] <src-directory>
-
-Valid options:
-    --help, -?          Print this message.
-    --verbose           Increment verbosity.
-    --quiet             Decrement verbosity.
-    --prefix=<path>     Installation path prefix [/usr/local].
-EOF
\ No newline at end of file
diff --git a/scripts/common.shi b/scripts/common.shi
index 21676ce..298ff63 100644
--- a/scripts/common.shi
+++ b/scripts/common.shi
@@ -74,10 +74,10 @@
         echo "COMMAND: $@"
     fi
     case $VERBOSE in
-        0)
-             "$@" >/dev/null >&2
+        0|1)
+             "$@" >/dev/null 2>&1
              ;;
-        1)
+        2)
             "$@" >/dev/null
             ;;
         *)
@@ -86,14 +86,101 @@
     esac
 }
 
+# Return the current script's directory.
 program_directory () {
     printf "%s" "$_SHU_PROGDIR"
 }
 
+# Return the current script's filename.
 program_name () {
     printf "%s" "$_SHU_PROGNAME"
 }
 
+# Return the value of a given named variable.
+# $1: variable name
+#
+# example:
+#    FOO=BAR
+#    BAR=ZOO
+#    echo `var_value $FOO`
+#    will print 'ZOO'
+#
+var_value () {
+    eval printf %s \"\$$1\"
+}
+
+# Return success if variable $1 is set and non-empty, failure otherwise.
+# $1: Variable name.
+# Usage example:
+#   if var_is_set FOO; then
+#      .. Do something the handle FOO condition.
+#   fi
+var_is_set () {
+    test -n "$(var_value $1)"
+}
+
+# Set the value of a given name variables.
+# $1: Variable name.
+# $2+: Variable value.
+# example:
+#    FOO=BAR
+#    var_assign $FOO bar
+# is equivalent to
+#    BAR=bar
+var_assign () {
+    local _var_assign_varname
+    _var_assign_varname=$1
+    shift
+    eval $_var_assign_varname=\'"$*"\'
+}
+
+# Append a space-separated list of items to a given variable.
+# $1: Variable name.
+# $2+: Variable value.
+# Example:
+#   FOO=
+#   var_append FOO foo    (FOO is now 'foo')
+#   var_append FOO bar    (FOO is now 'foo bar')
+#   var_append FOO zoo    (FOO is now 'foo bar zoo')
+var_append () {
+    local _var_append_varname
+    _var_append_varname=$1
+    shift
+    if test $(var_value $_var_append_varname); then
+        eval $_var_append_varname=\$$_var_append_varname\'\ "$*"\'
+    else
+        eval $_var_append_varname=\'"$*"\'
+    fi
+}
+
+# Import shell script $1. Similar to sourcing the script except
+# that each script will only be sourced once, even with multiple
+# dependencies.
+shell_import () {
+    local SCRIPT="$_SHU_PROGDIR/$1"
+    if [ ! -f "$SCRIPT" ]; then
+        panic "Missing script: $SCRIPT"
+    fi
+    local SCRIPT_TAG=_SHU_SHELL_SCRIPT_TAG__${1%%.shi}
+    SCRIPT_TAG=$(echo "$SCRIPT_TAG" | tr '-' '_')
+	case $(var_value $SCRIPT_TAG) in
+        imported)
+            # Script is already imported.
+            return 0
+            ;;
+        importing)
+            # Script is already being imported, this is
+            # a circular dependency.
+            panic "Circular dependency when trying to import $1"
+            ;;
+        *)
+            # Import the script.
+            var_assign $SCRIPT_TAG importing
+            . "$SCRIPT"
+            var_assign $SCRIPT_TAG imported
+            ;;
+    esac
+}
 
 # Unpack a given archive into a given destination directory.
 # $1: Archive path
@@ -101,7 +188,7 @@
 unpack_archive () {
     local PKG_PATH="$1"
     local DEST_DIR="$2"
-    case $PKG in
+    case $PKG_PATH in
         *.tar.gz|*.tar.bz2|*.tar.xz)
             run tar xf "$PKG_PATH" -C "$DEST_DIR"
             ;;
@@ -114,10 +201,98 @@
     esac
 }
 
-shell_import () {
-    local SCRIPT="$_SHU_PROGDIR/$1"
-    if [ ! -f "$SCRIPT" ]; then
-        panic "Missing script: $SCRIPT"
+# Return the build machine's operating system tag.
+# Valid return values are:
+#    linux
+#    darwin
+#    freebsd
+#    windows   (really MSys)
+#    cygwin
+get_build_os () {
+    if [ -z "$_SHU_BUILD_OS" ]; then
+        _SHU_BUILD_OS=$(uname -s)
+        case $_SHU_BUILD_OS in
+            Darwin)
+                _SHU_BUILD_OS=darwin
+                ;;
+            FreeBsd)  # note: this is not tested
+                _SHU_BUILD_OS=freebsd
+                ;;
+            Linux)
+                # note that building  32-bit binaries on x86_64 is handled later
+                _SHU_BUILD_OS=linux
+                ;;
+            CYGWIN*|*_NT-*)
+                _SHU_BUILD_OS=windows
+                if [ "x$OSTYPE" = xcygwin ] ; then
+                    _SHU_BUILD_OS=cygwin
+                fi
+                ;;
+        esac
     fi
-    . "$SCRIPT"
+    echo "$_SHU_BUILD_OS"
+}
+
+# Return the executable extension for a given operating system tag.
+# $1: operating system tag.
+_shu_get_exe_extension_for () {
+    case $1 in
+        windows|cygwin)
+            echo ".exe"
+            ;;
+        *)
+            echo ""
+    esac
+}
+
+# Return the dynamic library extension for a given operating system tag.
+# $1: operating system tag.
+_shu_get_dll_extension_for () {
+    case $1 in
+        darwin)
+            echo ".dylib"
+            ;;
+        windows|cygwin)
+            echo ".dll"
+            ;;
+        *)
+            echo ".so"
+            ;;
+    esac
+}
+
+# Return the extension of executables on the build machine.
+get_build_exe_extension () {
+    if [ -z "$_SHU_BUILD_EXE_EXTENSION_DEFINED" ]; then
+        _SHU_BUILD_EXE_EXTENSION=$(_shu_get_exe_extension_for $(get_build_os))
+        _SHU_BUILD_EXE_EXTENSION_DEFINED=true
+    fi
+    echo "$_SHU_BUILD_EXE_EXTENSION"
+}
+
+# Return the extension of dynamic libraries on the build machine.
+get_build_dll_extension () {
+    if [ -z "$_SHU_BUILD_DLL_EXTENSION_DEFINED" ]; then
+        _SHU_BUILD_DLL_EXTENSION=$(_shu_get_dll_extension_for $(get_build_os))
+        _SHU_BUILD_DLL_EXTENSION_DEFINED=true
+    fi
+    echo "$_SHU_BUILD_DLL_EXTENSION"
+}
+
+# Return the number of CPU cores on the build machine.
+get_build_num_cores () {
+    case $(get_build_os) in
+        linux)
+            grep -c -e processor /proc/cpuinfo
+            ;;
+        darwin|freebsd)
+            sysctl -n hw.ncpu
+            ;;
+        windows|cygwin)
+            echo "${NUMBER_OF_PROCESSORS:-1}"
+            ;;
+        *)
+            echo "1"
+            ;;
+    esac
 }
diff --git a/scripts/rebuild.sh b/scripts/rebuild.sh
new file mode 100755
index 0000000..1dc42e4
--- /dev/null
+++ b/scripts/rebuild.sh
@@ -0,0 +1,444 @@
+#!/bin/sh
+
+. $(dirname "$0")/common.shi
+shell_import build-defaults.shi
+
+# Do we have ccache ?
+CCACHE=$(which ccache 2>/dev/null)
+if [ "$CCACHE" ]; then
+    log "Found ccache as: $CCACHE"
+else
+    log "Cannot find ccache in PATH."
+fi
+
+ARCHIVE_DIR=$(dirname "$0")/../archive
+if [ ! -d "$ARCHIVE_DIR" ]; then
+    panic "Missing archive directory: $ARCHIVE_DIR"
+fi
+ARCHIVE_DIR=$(cd "$ARCHIVE_DIR" && pwd -P)
+log "Using archive directory: $ARCHIVE_DIR"
+
+HOST_OS=linux-x86_64
+
+# TODO(digit): Take these from command-line parameters.
+AOSP_SOURCE_DIR=/opt/digit/repo/aosp
+QEMU_ANDROID=$UPSTREAM/qemu-android
+
+TEMP_DIR=/tmp/build-qemu-android-aarch64-100
+mkdir -p "$TEMP_DIR"
+rm -rf "$TEMP_DIR"/*
+
+NUM_JOBS=$(get_build_num_cores)
+log "Parallel jobs count: $NUM_JOBS"
+
+ORIGINAL_PATH=$PATH
+
+export PKG_CONFIG=$(which pkg-config 2>/dev/null)
+if [ -z "$PKG_CONFIG" ]; then
+    panic "You must have pkg-config installed on this system!"
+fi
+
+# Generate a small wrapper program
+#
+# $1: program name, without any prefix (e.g. gcc, g++, ar, etc..)
+# $2: source prefix (e.g. 'i586-mingw32msvc-')
+# $3: destination prefix (e.g. 'i586-px-mingw32msvc-')
+# $4: destination directory for the generated program
+#
+gen_wrapper_program ()
+{
+    local PROG="$1"
+    local SRC_PREFIX="$2"
+    local DST_PREFIX="$3"
+    local DST_FILE="$4/${SRC_PREFIX}$PROG"
+    local FLAGS=""
+    local LDFLAGS=""
+
+    case $PROG in
+      cc|gcc|cpp)
+          FLAGS=$FLAGS" $EXTRA_CFLAGS"
+          ;;
+      c++|g++)
+          FLAGS=$FLAGS" $EXTRA_CXXFLAGS"
+          ;;
+      ar) FLAGS=$FLAGS" $EXTRA_ARFLAGS";;
+      as) FLAGS=$FLAGS" $EXTRA_ASFLAGS";;
+      ld|ld.bfd|ld.gold) FLAGS=$FLAGS" $EXTRA_LDFLAGS";;
+      windres) FLAGS=$FLAGS" $EXTRA_WINDRESFLAGS";;
+    esac
+
+    if [ "$CCACHE" ]; then
+        DST_PREFIX="$CCACHE $DST_PREFIX"
+    fi
+
+    cat > "$DST_FILE" << EOF
+#!/bin/sh
+# Auto-generated, do not edit
+${DST_PREFIX}$PROG $FLAGS "\$@" $LDFLAGS
+EOF
+    chmod +x "$DST_FILE"
+    log "Generating: ${SRC_PREFIX}$PROG"
+}
+
+# $1: source prefix
+# $2: destination prefix
+# $3: destination directory.
+gen_wrapper_toolchain () {
+    local SRC_PREFIX="$1"
+    local DST_PREFIX="$2"
+    local DST_DIR="$3"
+    local PROG
+    local PROGRAMS="cc gcc c++ g++ cpp as ld ar ranlib strip strings nm objdump objcopy dlltool"
+
+    log "Generating toolchain wrappers in: $DST_DIR"
+    run mkdir -p "$DST_DIR"
+
+    case $SRC_PREFIX in
+        *mingw*)
+            PROGRAMS="$PROGRAMS windres"
+            case $CURRENT_HOST in
+                windows-x86)
+                    EXTRA_WINDRESFLAGS="--target=pe-i386"
+                    ;;
+            esac
+            ;;
+    esac
+
+    for PROG in $PROGRAMS; do
+        gen_wrapper_program $PROG "$SRC_PREFIX" "$DST_PREFIX" "$DST_DIR"
+    done
+
+    EXTRA_CFLAGS=
+    EXTRA_CXXFLAGS=
+    EXTRA_LDFLAGS=
+    EXTRA_ARFLAGS=
+    EXTRA_ASFLAGS=
+    EXTRA_WINDRESFLAGS=
+}
+
+# Prepare the build for a given host system.
+# $1: Host system name (e.g. linux-x86_64)
+prepare_build_for_host () {
+    CURRENT_HOST=$1
+
+    CURRENT_TEXT="[$CURRENT_HOST]"
+
+    PREBUILT_TOOLCHAIN_DIR=
+    TOOLCHAIN_PREFIX=
+    HOST_EXE_EXTENSION=
+    case $CURRENT_HOST in
+        linux-*)
+            PREBUILT_TOOLCHAIN_DIR=$AOSP_SOURCE_DIR/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8
+            TOOLCHAIN_PREFIX=x86_64-linux-
+            ;;
+        windows-*)
+            PREBUILT_TOOLCHAIN_DIR=$AOSP_SOURCE_DIR/prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8
+            TOOLCHAIN_PREFIX=x86_64-w64-mingw32-
+            HOST_EXE_EXTENSION=.exe
+            ;;
+        *)
+            panic "Host system '$CURRENT_HOST' is not supported by this script!"
+            ;;
+    esac
+
+    case $CURRENT_HOST in
+        linux-x86_64)
+            GNU_CONFIG_HOST=x86_64-linux
+            ;;
+        linux-x86)
+            GNU_CONFIG_HOST=i686-linux
+            ;;
+        windows-x86)
+            GNU_CONFIG_HOST=i686-w64-mingw32
+            ;;
+        windows-x86_64)
+            GNU_CONFIG_HOST=x86_64-w64-mingw32
+            ;;
+        *)
+            panic "Host system '$CURRENT_HOST' is not supported by this script!"
+            ;;
+    esac
+
+    case $CURRENT_HOST in
+        *-x86)
+            EXTRA_CFLAGS="-m32"
+            EXTRA_CXXFLAGS="-m32"
+            EXTRA_LDFLAGS="-m32"
+            ;;
+        *-x86_64)
+            EXTRA_CFLAGS="-m64"
+            EXTRA_CXXFLAGS="-m64"
+            EXTRA_LDFLAGS="-m64"
+            ;;
+        *)
+            panic "Host system '$CURRENT_HOST' is not supported by this script!"
+            ;;
+    esac
+
+    CROSS_PREFIX=${GNU_CONFIG_HOST}-
+
+    PATH=$ORIGINAL_PATH
+
+    BUILD_DIR=$TEMP_DIR/build-$CURRENT_HOST
+    log "$CURRENT_TEXT Creating build directory: $BUILD_DIR"
+    run mkdir -p "$BUILD_DIR"
+    run rm -rf "$BUILD_DIR"/*
+
+    PREFIX=$BUILD_DIR/install
+    log "$CURRENT_TEXT Using build prefix: $PREFIX"
+    EXTRA_CFLAGS="$EXTRA_CFLAGS -I$PREFIX/include"
+    EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -I$PREFIX/include"
+    EXTRA_LDFLAGS="$EXTRA_LDFLAGS -L$PREFIX/lib"
+
+    log "$CURRENT_TEXT Generating $CROSS_PREFIX wrapper toolchain in $TOOLCHAIN_WRAPPER_DIR"
+    TOOLCHAIN_WRAPPER_DIR=$BUILD_DIR/toolchain-wrapper
+    gen_wrapper_toolchain "${GNU_CONFIG_HOST}-" "$PREBUILT_TOOLCHAIN_DIR/bin/$TOOLCHAIN_PREFIX" "$TOOLCHAIN_WRAPPER_DIR"
+    PATH=$TOOLCHAIN_WRAPPER_DIR:$PATH
+    log "$CURRENT_TEXT Path: $(echo \"$PATH\" | tr ' ' '\n')"
+}
+
+# Handle zlib, only on Win32 because the zlib configure script
+# doesn't know how to generate a static library with -fPIC!
+do_windows_zlib_package () {
+    local ZLIB_VERSION ZLIB_PACKAGE
+    local LOC LDFLAGS
+    case $CURRENT_HOST in
+        windows-x86)
+            LOC=-m32
+            LDFLAGS=-m32
+            ;;
+        windows-x86_64)
+            LOC=-m64
+            LDFLAGS=-m64
+            ;;
+    esac
+    ZLIB_VERSION=$(get_source_package_version zlib)
+    dump "$CURRENT_TEXT Building zlib-$ZLIB_VERSION"
+    ZLIB_PACKAGE=$(get_source_package_name zlib)
+    unpack_archive "$ARCHIVE_DIR/$ZLIB_PACKAGE" "$BUILD_DIR"
+    (
+        run cd "$BUILD_DIR/zlib-$ZLIB_VERSION"
+        export BINARY_PATH=$PREFIX/bin
+        export INCLUDE_PATH=$PREFIX/include
+        export LIBRARY_PATH=$PREFIX/lib
+        run make -fwin32/Makefile.gcc install PREFIX=$CROSS_PREFIX LOC=$LOC LDFLAGS=$LDFLAGS
+    )
+}
+
+require_program () {
+    local VARNAME PROGNAME CMD
+    VARNAME=$1
+    PROGNAME=$2
+    CMD=$(which $PROGNAME 2>/dev/null)
+    if [ -z "$CMD" ]; then
+        panic "Cannot find required build executable: $PROGNAME"
+    fi
+    eval $VARNAME=\'$CMD\'
+}
+
+# Cross-compiling glib for Win32 is broken and requires special care.
+# The following was inspired by the glib.mk from MXE (http://mxe.cc/)
+# $1: bitness (32 or 64)
+do_windows_glib_package () {
+    local GLIB_VERSION GLIB_PACKAGE GLIB_DIR
+    GLIB_VERSION=$(get_source_package_version glib)
+    dump "$CURRENT_TEXT Building glib-$GLIB_VERSION"
+    GLIB_PACKAGE=$(get_source_package_name glib)
+    require_program GLIB_GENMARSHAL glib-genmarshal
+    require_program GLIB_COMPILE_SCHEMAS glib-compile-schemas
+    require_program GLIB_COMPILE_RESOURCES glib-compile-resources
+    unpack_archive "$ARCHIVE_DIR/$GLIB_PACKAGE" "$BUILD_DIR"
+    GLIB_DIR=$BUILD_DIR/glib-$GLIB_VERSION
+    (
+        run cd "$GLIB_DIR"
+        export LDFLAGS="-L$PREFIX/lib -L$PREFIX/lib$1"
+        export CPPFLAGS="-I$PREFIX/include -I$GLIB_DIR -I$GLIB_DIR/glib"
+        export CC=${GNU_CONFIG_HOST}-gcc
+        export CXX=${GNU_CONFIG_HOST}-c++
+        export PKG_CONFIG=$(which pkg-config)
+        export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
+        run ./configure \
+            --prefix=$PREFIX \
+            --host=$GNU_CONFIG_HOST \
+            --disable-shared \
+            --with-threads=win32 \
+            --with-pcre=internal \
+            --disable-debug \
+            --disable-gtk-doc \
+            --disable-gtk-doc-html \
+            --disable-man \
+            GLIB_GENMARSHAL=$GLIB_GENMARSHAL \
+            GLIB_COMPILE_SCHEMAS=$GLIB_COMPILE_SCHEMAS \
+            GLIB_COMPILE_RESOURCES=$GLIB_COMPILE_RESOURCES
+
+        # Necessary to build gio stuff properly.
+        run ln -s "$GLIB_COMPILE_RESOURCES" gio/
+
+        run make -j$NUM_JOBS -C glib install sbin_PROGRAMS= noinst_PROGRAMS=
+        run make -j$NUM_JOBS -C gmodule install bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS=
+        run make -j$NUM_JOBS -C gthread install bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS=
+        run make -j$NUM_JOBS -C gobject install bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS=
+        run make -j$NUM_JOBS -C gio install bin_PROGRAMS= sbin_PROGRAMS= noinst_PROGRAMS= MISC_STUFF=
+        run make -j$NUM_JOBS install-pkgconfigDATA
+        run make -j$NUM_JOBS -C m4macros install
+
+        # Missing -lole32 results in link failure later!
+        sed -i -e 's|\-lglib-2.0 -lintl|-lglib-2.0 -lole32 -lintl|g' \
+            $PREFIX/lib/pkgconfig/glib-2.0.pc
+    )
+}
+
+# Generic routine used to unpack and rebuild a generic auto-tools package
+# $1: package name, unversioned and unsuffixed (e.g. 'libpng')
+# $2+: extra configuration flags
+do_autotools_package () {
+    local PKG PKG_VERSION PKG_NAME
+    PKG=$1
+    shift
+    PKG_VERSION=$(get_source_package_version $PKG)
+    PKG_NAME=$(get_source_package_name $PKG)
+    dump "$CURRENT_TEXT Building $PKG-$PKG_VERSION"
+    unpack_archive "$ARCHIVE_DIR/$PKG_NAME" "$BUILD_DIR" ||
+    panic "Could not unpack $PKG_NAME"
+    (
+        run cd "$BUILD_DIR/$PKG-$PKG_VERSION"
+        export LDFLAGS="-L$PREFIX/lib"
+        export CPPFLAGS="-L$PREFIX/include"
+        run ./configure \
+            --prefix=$PREFIX \
+            --host=$GNU_CONFIG_HOST \
+            --disable-shared \
+            --with-pic \
+            "$@"
+        run make -j$NUM_JOBS
+        run make install
+    ) ||
+    panic "Could not build and install $PKG_NAME"
+}
+
+# Assume you have called prepare_build_for_host previously.
+# $1: host os name.
+build_qemu_android () {
+    prepare_build_for_host $1
+
+    export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
+
+    # Handle zlib for Windows
+    case $1 in
+        windows-*)
+            do_windows_zlib_package
+            ;;
+    esac
+
+    # Handle libpng
+    do_autotools_package libpng
+
+    case $1 in
+        windows-*)
+            do_autotools_package libiconv \
+                --disable-rpath \
+            ;;
+    esac
+
+    do_autotools_package gettext \
+        --disable-rpath \
+        --disable-acl \
+        --disable-curses \
+        --disable-openmp \
+        --disable-java \
+        --disable-rpath \
+        --without-emacs \
+        --disable-c++
+
+    do_autotools_package libffi
+
+    case $1 in
+        windows-x86)
+            do_windows_glib_package 32
+            ;;
+        windows-x86_64)
+            do_windows_glib_package 64
+            ;;
+        *)
+            do_autotools_package glib \
+                --disable-man \
+                --disable-gtk-doc \
+                --disable-always-build-tests \
+                --disable-installed-tests \
+                --enable-included-printf
+            ;;
+    esac
+
+    do_autotools_package pixman \
+        --disable-gtk
+
+    do_autotools_package SDL \
+        --disable-audio \
+        --disable-joystick \
+        --disable-cdrom \
+        --disable-file \
+        --disable-threads
+
+    export SDL_CONFIG=$PREFIX/bin/sdl-config
+
+    dump "$CURRENT_TEXT Building qemu-android"
+    (
+        run mkdir -p "$BUILD_DIR/qemu-android"
+        run rm -rf "$BUILD_DIR"/qemu-android/*
+        run cd "$BUILD_DIR/qemu-android"
+        run $QEMU_ANDROID/configure \
+            --cross-prefix=$CROSS_PREFIX \
+            --target-list=aarch64-softmmu \
+            --prefix=$PREFIX \
+            --extra-ldflags="-L$PREFIX/lib -static-libgcc -static-libstdc++" \
+            --disable-attr \
+            --disable-blobs \
+            --disable-cap-ng \
+            --disable-curses \
+            --disable-docs \
+            --disable-glusterfs \
+            --disable-gtk \
+            --disable-guest-agent \
+            --disable-libnfs \
+            --disable-libiscsi \
+            --disable-libssh2 \
+            --disable-libusb \
+            --disable-quorum \
+            --disable-seccomp \
+            --disable-spice \
+            --disable-smartcard-nss \
+            --disable-usb-redir \
+            --disable-user \
+            --disable-vde \
+            --disable-vhdx \
+            --disable-vhost-net \
+
+            # The Windows parallel build fails early on, so try to catch
+            # up later with -j1 to complete it.
+            (run make -j$NUM_JOBS || run make -j1 || true)
+
+            if [ ! -f "aarch64-softmmu/qemu-system-aarch64$HOST_EXE_EXTENSION" ]; then
+                panic "$CURRENT_TEXT Could not build qemu-system-aarch64!!"
+            fi
+
+    ) || panic "Build failed!!"
+
+    dump "$CURRENT_TEXT Copying qemu-system-aarch64 to binaries/$CURRENT_HOST"
+
+    BINARY_DIR=$(dirname "$0")/../binaries/$CURRENT_HOST
+    run mkdir -p "$BINARY_DIR" ||
+    panic "Could not create final directory: $BINARY_DIR"
+
+    run cp -p \
+        "$BUILD_DIR"/qemu-android/aarch64-softmmu/qemu-system-aarch64$HOST_EXE_EXTENSION \
+        "$BINARY_DIR"/qemu-system-aarch64$HOST_EXE_EXTENSION
+
+    run ${GNU_CONFIG_HOST}-strip "$BINARY_DIR"/qemu-system-aarch64$HOST_EXE_EXTENSION
+}
+
+build_qemu_android linux-x86
+build_qemu_android linux-x86_64
+build_qemu_android windows-x86
+build_qemu_android windows-x86_64
+
+echo "Done!"
