This directory contains prebuilt emulator binaries that were generated by
running the following command on a 64-bit Linux machine:

  external/qemu/distrib/package-release.sh \
      --darwin-ssh=<host> \
      --copy-prebuilts=<path>

Where <host> is the host name of a Darwin machine, and <path> is the root
path of this AOSP repo workspace.

Below is the list of specific commits for each input directory used:

external/qemu        a5822bc Fix Windows executable icon.
external/gtest       56cad54 Use an older standard for the NDK gtest libs.

Summary of changes:

    $ cd external/qemu && git log --oneline --no-merges d5c0f67..a5822bc .
        a5822bc Fix Windows executable icon.
        06635c3 [MIPS] Make sure exception is raised on TLBRET_DIRTY
        81a8e66 android/skin/: Ensure EmuGL is properly shutdown on program exit.
        0d51ff9 Rename new launcher to emulator-ranchu-<arch> instead of emulator-<arch>
        e94e3f0 android/qemu-launcher: Group target information.
        fa2f4b3 android-emugl: Add ::emugl::MessageChannel<> template.
        a1e792b android-emugl: Add ::emugl::CondVariable.
        187686b android-emugl: Add RenderWindow class.
        303a377 android-emugl: Fix RenderThread termination.
        a82f04a android-emugl: Add IOStream::forceStop() method.
        8b50488 android-emugl: Move render_api.h to host/libs/libOpenglRender
        746d567 android/looper-base.cpp: Remove unnecessary declarations.
        1ad4df9 android/base/sockets/SocketErrors.h: new header.
        382ab59 android-emugl: Fix bitness-conditional modules.
        2ef2784 android-emugl: Rename ThreadInfo.h to RenderThreadInfo.h
        3c2cf23 android-emugl: Move m_rcDec from RenderThread to RenderThreadInfo.
        4c5611d android-emugl: Fix thread stack leakage in RenderThread.
        59ba348 android-emugl: Fix emugl::Thread stack reclaim.
        b591c38 android-emugl: Minor cleanup of EglValidate.h
        5cca984 android-emugl: Cleanup EglConfig definition.
        e233fd0 android-emugl: Cleanup EglGlobalInfo
        1d9dd76 android/utils/debug.c: Initialize android_verbose.
        4d65868 android-emugl: Cleanup EglThreadInfo.h
        e0b100d android-emugl: Change assert() into simple warnings.
        cc8564e android/skin/region.h: Add unit tests.
        8ba5fa7 android/skin/rect.h: Add unit test + fix skin_rect_equals
        f65fccd Rename skin_keycodes_buffer_xxx -> skin_keycode_buffer_xxx
        6ce0533 android/skin/keycode-buffer.c: Add unit test.
        1670b8c android/skin: Adding unit test suite.
        14829cf android/skin/keyboard: Fix SDL2 keyboard handling.
        6216538 Add GL_OES_EGL_image_external to extensions query
        95e080d [MIPS64] Create a wrapper for running MIPS64 ranchu QEMU
        9a225fb Cleanup Obsolete LOCAL_PRELINK_MODULE.
        7fc4b69 android/skin: Add support for SDL2.
        dd5fa4c Fix emulator on Mac sending message crash issue
        53e0d7f distrib/sdl2-2.0.3: New SDL2 sources + build file.
        e392374 android/skin/: Move window scaling to android/skin/surface.h
        5055903 android/skin/scaler.h: Add skin_scaler_reverse_map().
        92f9e25 android/skin/surface.h: Simplify skin_surface_create_argb32_from
        c7b7045 android/skin/scaler.h: Add skin_scaler_free().
        e907a63 android/skin/surface.h: Remove obsolete functions.
        b7273d3 android/skin/window.c: Add SkinSurface for each ADisplay.
        80bf968 android/skin/: Add skin_surface_upload()
        4a7ca74 android/skin/: Add skin_surface_update_scaled()
        b676607 [MIPS64] Add mips64 target support to build-kernel.sh
        a68e95b Remove bad error message about missing icon on Windows.
        18db6cc Use GPU emulation sources in distrib/android-emugl/
        b0024fb Print clearer message when missing kernel file
        fd706d9 Print more specific error message if avd not found
        9bb1b27 distrib/android-emugl: Move Android GPU emulation sources here.
        c99a04b Fix missing enter key
        9c5b276 Remove unsed check for simulator
        7370999 Fix missing backspace key
        4aa2dc7 Fix missing backspace key
        0b86b5f Adds ANDROID_AVD_HOME and ANDROID_EMULATOR_HOME
        2a6e0b9 Adds ANDROID_AVD_HOME and ANDROID_EMULATOR_HOME
        b3fa4bc Fix keyboard emulation.
        13c2556 Implement initial screen orientation suport
        9e80ce6 remove two obsolete functions.
        a46fc2c android-configure.sh: Move OS X SDK detection code up.
        c98fa77 Fix keyboard emulation.
        b13e871 Add new -list-avds option.
        ff2c689 Implement initial screen orientation suport
        922418b Ensure SDL_LDLIBS is properly used when linking SDL.
        68b8f8b remove two obsolete functions.
        d3d143b Fix emulator freeze due to infinite loop
        70166d6 Fix emulator freeze due to infinite loop
        3def4f8 Sets ro.opengles.version property
        ba14a81 android-rebuild.sh: Run emugen_unittests.
        0a6c7e5 Make emulator binaries unstripped by default.
        d904d4d Turn emugen unittests back on
        81e9011 Turn emugen unittests back on
        004a0f9 Revert the test on emugen
        3341c55 Check OSX SDK version
        64222eb Fix bug in profiling support:
        d1964d7 Update icon files with new Material Design assets.
        c130748 darwin: Remove ccache-induced clang warnings.
        a3df28e Warn against use of old host CPU for x86/64 emulation.
        92b6aac docs/SOURCE-CODE-ORGANIZATION.TXT
        06e386d Fix Darwin binary.
        08f5da3 enable SSE4.1, 4.2 and POPCNT for x86-64
        18bb91b android/icons.h: Fix Darwin icon.
        16c74a0 Fix Darwin dyld launch error.
        7866fa6 package-release.sh: Force remote darwin build to use prebuilt toolchain.
        7ae1a26 Update Linux emulator icon to 128x128 size.
        391f8d7 distrib/update-emugl-sources.sh: New script.
        1670f0a Run 'emugen' test suite as part of android-rebuild.sh
        6c882a6 [MIPS64] fasttlb : Add check for high segbits

    $ cd external/gtest && git log --oneline --no-merges fde6da7..56cad54 .
        56cad54 Use an older standard for the NDK gtest libs.
        ce2c523 Make the libc++ libraries the primary.
        f694f2b Remove the host libstdc++ compiled libraries.
        3803e25 Be explicit about the STL for host modules.

