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);
