Rebuilding the Android emulator from sources
============================================

I. Getting the sources:
-----------------------

At the moment, you'll need a full AOSP source checkout to rebuild the
emulator from sources. See the instructions at http://source.android.com on
how to download the platform sources.

The following directories will be relevant:

  $AOSP/external/qemu        -> The emulator itself.
  $AOSP/external/getst       -> The GoogleTest sources.
  $AOSP/sdk/emulator/opengl  -> Host GPU emulation libraries.

  $AOSP/prebuilts/tools/gcc-sdk           -> host toolchains for SDK tools.
  $AOSP/prebuilts/gcc/linux-x86/host/
  $AOSP/prebuilts/gcc/darwin-x86/host/


II. Building:
-------------

You can only build the emulator on Linux or Darwin. Windows binaries are
always generated on Linux, and actually run under Wine (more on this later).

There are currently two ways to build the emulator:

1) Using the standalone build-system:

As long as the directories listed in section I. exist, you can build the
emulator binaries from sources directly by using the android-rebuild.sh
script, i.e.:

  cd $AOSP/external/qemu
  ./android-rebuild.sh

This will build all related binaries, and run the small GoogleTest-based
unit test suite for your host system.

This places everything under the 'objs/' sub-directory, and you can launch
the emulator directly with something like:

  export ANDROID_SDK_ROOT=/path/to/sdk
  objs/emulator @<avd-name>  [<other-options>...]

Use ./android-rebuild.sh --help for more details and command-line options.


2) Using the Android platform build:

If you have a full checkout of the AOSP source tree, the emulator will be
built as part of a regular "make" invokation, and the binaries placed under
out/host/<system>/bin/, allowing you to just run 'emulator' after the build.
For example, for an ARM-based SDK system image build:

  cd $AOSP
  . build/envsetup.sh
  lunch sdk-eng
  make -j$NUM_CORES
  emulator

Note that this scheme is _much_slower though, but once you have performed
a full build, you will be able to only rebuild the emulator quickly by
doing the following (after the commands above):

  cd external/qemu
  mm -j$NUM_CORES

The 'mm' command is a special function sourced into your environment by
envsetup.sh

Note: The default SDK system image maps to an ARMv7-based virtual CPU,
      use 'sdk_x86-eng' or 'sdk_mips-eng' to build x86 or MIPS based ones.

In all cases, several binaries will be generated:

    emulator         -> 32-bit launcher program.
    emulator-<cpu>   -> 32-bit emulator for Android <cpu> images.
    emulator64-<cpu> -> 64-bit emulator for Android <cpu> images.

With <cpu> being one of the CPU architectures supported by the
Android emulator (e.g. 'arm', 'x86' or 'mips').

The 'emulator' executable is a very small program used to probe
the host system and the AVD you want to launch, in order to
invoke the appropriate 'real' emulator program. It also adjusts
library search paths to ensure that the emulator can load the
GPU emulation libraries from the right location.

Note that there are no emulator64-<cpu> executables generated on
Windows at the moment, due to issues with the mingw32-w64 cross-toolchains.

Define ANDROID_SDK_ROOT in your environment to point to your SDK installation
and be able to start AVDs with your freshly built emulator.


3) Building Windows emulator binaries:

Windows emulator binaries are always built on Linux, using a cross-toolchain,
there is no support to build the sources directly on Windows with MSys or
Cygwin.

Two cross-toolchains are supported:

  1) The Ubuntu 12.04 "mingw32" toolchain, which can only generate Win32
     executables.

     Note that the "mingw64" toolchain in 12.04 is broken, and conflicts
     with the mingw32 anyway, so never try to use / install it.

  2) Our own custom w64-based toolchain (x86_64-w64-mingw32), which can
     generate both Win32 and Win64 executables. You just need to have
     x86_64-w64-mingw32-gcc in your PATH for it to be used.

     [WARNING: Currently only works in aosp/master branch, not aosp/idea133]

To build the Windows binaries, use the --mingw option, as in:

  cd external/qemu
  ./android-rebuild.sh --mingw

Again, all files are placed under objs/.

If you have Wine installed, you can launch objs/emulator.exe directly, but
you need to setup two environment variables first:

  export ANDROID_SDK_ROOT=/path/to/sdk/install
  export ANDROID_SDK_HOME=$HOME

The latter is required, otherwise the Windows binary will not find your AVDs
when running under Wine (which does special magic when important variable
from the environment that map to host file paths).

NOTE: Performance of Windows binaries under Wine is currently pretty bad,
      unless you add '-qemu -clock dynticks' to your command-line.

      This doesn't affect the exact same binary running under a real Windows
      installation. For more context, see:
              https://android-review.googlesource.com/#/c/82661/


4) Rebuilding binaries for all host architectures at the same time:

A script under distrib/package-release.sh is provided to rebuild all
binaries from sources. By default, it will try to rebuild for Linux and
Windows, but if you have ssh access to a Darwin machine with the command-line
XCode tools installed, it will also automatically:

  - Pack the sources into a tarball
  - Upload it through ssh to a temporary directory on the machine.
  - Perform a Darwin build there, and run GTest-based unit tests.
  - Retrieve the final binaries in case of success.

You can enable this by using the --darwin-ssh=<host> option, or by setting
the ANDROID_EMULATOR_DARWIN_SSH variable to the hostname.

In case of success, this creates 4 tarballs under /tmp: One for the set of
sources used to perform the build, and 3 others for the
Linux / Darwin / Windows packages.

These packages place the binaries under a top-level tools/ directory, so you
can uncompress them directly at the top of an existing SDK installation
(in the case where you want to update the emulator binaries there).
