Merge "Get rid of compiler warnings."
diff --git a/Makefile.android b/Makefile.android
index c526172..6fccf71 100644
--- a/Makefile.android
+++ b/Makefile.android
@@ -98,13 +98,13 @@
   # which contains the relevant headers and 32-bit libraries for audio (The host 64-bit
   # Lucid doesn't provide these anymore, only their 64-bit versions).
   ifeq ($(HOST_OS),linux)
-    HOST_SDK_TOOLCHAIN_PREFIX := prebuilt/linux-x86/toolchain/i686-linux-glibc2.7-4.4.3/bin/i686-linux
+    HOST_SDK_TOOLCHAIN_PREFIX := prebuilts/tools/gcc-sdk
     # Don't do anything if the toolchain is not there
-    ifneq (,$(strip $(wildcard $(HOST_SDK_TOOLCHAIN_PREFIX)-gcc)))
-      MY_CC  := $(HOST_SDK_TOOLCHAIN_PREFIX)-gcc
-      MY_CXX := $(HOST_SDK_TOOLCHAIN_PREFIX)-g++
-      MY_AR  := $(HOST_SDK_TOOLCHAIN_PREFIX)-ar
-    endif # $(HOST_SDK_TOOLCHAIN_PREFIX)-gcc exists
+    ifneq (,$(strip $(wildcard $(HOST_SDK_TOOLCHAIN_PREFIX)/gcc)))
+      MY_CC  := $(HOST_SDK_TOOLCHAIN_PREFIX)/gcc
+      MY_CXX := $(HOST_SDK_TOOLCHAIN_PREFIX)/g++
+      MY_AR  := $(HOST_SDK_TOOLCHAIN_PREFIX)/ar
+    endif # $(HOST_SDK_TOOLCHAIN_PREFIX)/gcc exists
   endif # HOST_OS == linux
 
   ifneq ($(USE_CCACHE),)
diff --git a/Makefile.common b/Makefile.common
index cecbf28..a72d719 100644
--- a/Makefile.common
+++ b/Makefile.common
@@ -139,12 +139,11 @@
 $(call end-emulator-library)
 
 ## another for 64-bit
-##### NOTE: disable 64-bit for now until new 64-bit prebuilts/gcc toolchain exist in AOSP
 # NOTE: only linux in non-standalone mode is supported, because
 #  1) For Windows: amd64-mingw32msvc-gcc doesn't work, see http://b/issue?id=5949152.
 #  2) For MacOSX: 64-bit libSDL*.a 1.2.x depends on NSQuickDrawView doesn't exist
 #  3) Standalone has --try-64
-ifeq ($(HOST_OS),)
+ifeq ($(HOST_OS),linux)
   ifneq ($(BUILD_STANDALONE_EMULATOR),true)
     $(call start-emulator-library, emulator64-common)
     LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
@@ -295,7 +294,7 @@
 
 
 ## another for 64-bit, see note in emulator64-common
-ifeq ($(HOST_OS),)
+ifeq ($(HOST_OS),linux)
   ifneq ($(BUILD_STANDALONE_EMULATOR),true)
     $(call start-emulator-library, emulator64-libui)
     LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
@@ -617,7 +616,7 @@
 
 
 ## another for 64-bit, see note in emulator64-common
-ifeq ($(HOST_OS),)
+ifeq ($(HOST_OS),linux)
   ifneq ($(BUILD_STANDALONE_EMULATOR),true)
     $(call start-emulator-library, emulator64-libqemu)
     # gdbstub-xml.c contains C-compilable arrays corresponding to the content
@@ -711,7 +710,7 @@
 
 
 ## another for 64-bit, see note in emulator64-common
-ifeq ($(HOST_OS),)
+ifeq ($(HOST_OS),linux)
   ifneq ($(BUILD_STANDALONE_EMULATOR),true)
     $(call start-emulator-library, emulator64-libelff)
     LOCAL_CPP_EXTENSION := .cc
diff --git a/Makefile.target b/Makefile.target
index 92ac855..1961acf 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -246,7 +246,7 @@
 $(call end-emulator-library)
 
 ## another for 64-bit, see note in file Makefile.common emulator64-common
-ifeq ($(HOST_OS),)
+ifeq ($(HOST_OS),linux)
   ifneq ($(BUILD_STANDALONE_EMULATOR),true)
     $(call start-emulator-library, emulator64-target-$(EMULATOR_TARGET_CPU))
     LOCAL_CFLAGS += $(common_LOCAL_CFLAGS) -m64
@@ -433,7 +433,7 @@
 
 
 ## another for 64-bit, see note in file Makefile.common emulator64-common
-ifeq ($(HOST_OS),)
+ifeq ($(HOST_OS),linux)
   ifneq ($(BUILD_STANDALONE_EMULATOR),true)
     $(call start-emulator-program, emulator64-$(EMULATOR_TARGET_ARCH))
     LOCAL_STATIC_LIBRARIES += \
diff --git a/android/cmdline-options.h b/android/cmdline-options.h
index aa85c0e..eb8ede0 100644
--- a/android/cmdline-options.h
+++ b/android/cmdline-options.h
@@ -162,6 +162,8 @@
 
 OPT_PARAM( screen, "<mode>", "set emulated screen mode" )
 
+OPT_FLAG( force_32bit, "always use 32-bit emulator" )
+
 #undef CFG_FLAG
 #undef CFG_PARAM
 #undef OPT_FLAG
diff --git a/android/help.c b/android/help.c
index 54d2f10..20758c0 100644
--- a/android/help.c
+++ b/android/help.c
@@ -1505,6 +1505,15 @@
     );
 }
 
+static void
+help_force_32bit(stralloc_t* out)
+{
+    PRINTF(
+    "  Use -force-32bit to use 32-bit emulator on 64-bit platforms\n\n"
+
+    );
+}
+
 #define  help_no_skin   NULL
 #define  help_netspeed  help_shaper
 #define  help_netdelay  help_shaper
diff --git a/android/main-emulator.c b/android/main-emulator.c
index f2e30e2..0981a71 100644
--- a/android/main-emulator.c
+++ b/android/main-emulator.c
@@ -63,7 +63,7 @@
 
 
 /* Forward declarations */
-static char* getTargetEmulatorPath(const char* progName, const char* avdArch);
+static char* getTargetEmulatorPath(const char* progName, const char* avdArch, const int force_32bit);
 static char* getSharedLibraryPath(const char* progName, const char* libName);
 static void  prependSharedLibraryPath(const char* prefix);
 
@@ -90,6 +90,7 @@
     const char* avdName = NULL;
     char*       avdArch = NULL;
     char*       emulatorPath;
+    int         force_32bit = 0;
 
     /* Define ANDROID_EMULATOR_DEBUG to 1 in your environment if you want to
      * see the debug messages from this launcher program.
@@ -99,8 +100,9 @@
     if (debug != NULL && *debug && *debug != '0')
         android_verbose = 1;
 
-    /* Parse command-line and look for an avd name
-     * Either in the form or '-avd <name>' or '@<name>'
+    /* Parse command-line and look for
+     * 1) an avd name either in the form or '-avd <name>' or '@<name>'
+     * 2) '-force-32bit' which always use 32-bit emulator on 64-bit platforms
      */
     int  nn;
     for (nn = 1; nn < argc; nn++) {
@@ -109,13 +111,18 @@
         if (!strcmp(opt,"-qemu"))
             break;
 
-        if (!strcmp(opt,"-avd") && nn+1 < argc) {
-            avdName = argv[nn+1];
-            break;
+        if (!strcmp(opt,"-force-32bit")) {
+            force_32bit = 1;
+            continue;
         }
-        else if (opt[0] == '@' && opt[1] != '\0') {
-            avdName = opt+1;
-            break;
+
+        if (!avdName) {
+            if (!strcmp(opt,"-avd") && nn+1 < argc) {
+                avdName = argv[nn+1];
+            }
+            else if (opt[0] == '@' && opt[1] != '\0') {
+                avdName = opt+1;
+            }
         }
     }
 
@@ -143,7 +150,7 @@
     }
 
     /* Find the architecture-specific program in the same directory */
-    emulatorPath = getTargetEmulatorPath(argv[0], avdArch);
+    emulatorPath = getTargetEmulatorPath(argv[0], avdArch, force_32bit);
     D("Found target-specific emulator binary: %s\n", emulatorPath);
 
     /* Replace it in our command-line */
@@ -212,7 +219,7 @@
  * the directory of the current program.
  */
 static char*
-getTargetEmulatorPath(const char* progName, const char* avdArch)
+getTargetEmulatorPath(const char* progName, const char* avdArch, const int force_32bit)
 {
     char*  progDir;
     char   path[PATH_MAX], *pathEnd=path+sizeof(path), *p;
@@ -222,16 +229,16 @@
     const char* exeExt = ".exe";
     /* ToDo: currently amd64-mingw32msvc-gcc doesn't work (http://b/issue?id=5949152)
              which prevents us from generating 64-bit emulator for Windows */
-    int host_runs_64bit_OS = 0;
+    int search_for_64bit_emulator = 0;
 #else
     const char* exeExt = "";
-    int host_runs_64bit_OS = getHostOSBitness() == 64;
+    int search_for_64bit_emulator = !force_32bit && getHostOSBitness() == 64;
 #endif
 
     /* Get program's directory name in progDir */
     path_split(progName, &progDir, NULL);
 
-    if (host_runs_64bit_OS) {
+    if (search_for_64bit_emulator) {
         /* Find 64-bit emulator first */
         p = bufprint(path, pathEnd, "%s/%s%s%s", progDir, emulator64Prefix, avdArch, exeExt);
         if (p >= pathEnd) {
@@ -262,7 +269,7 @@
 #else
     if (strchr(progName, '/') == NULL) {
 #endif
-        if (host_runs_64bit_OS) {
+        if (search_for_64bit_emulator) {
            p = bufprint(path, pathEnd, "%s%s%s", emulator64Prefix, avdArch, exeExt);
            if (p < pathEnd) {
                char*  resolved = path_search_exec(path);