Index: test/Driver/android.c
===================================================================
--- test/Driver/android.c	(revision 0)
+++ test/Driver/android.c	(revision 0)
@@ -0,0 +1,8 @@
+// RUN: %clang -target arm-linux-androideabi -E -dM -c %s 2>&1 | FileCheck %s -check-prefix=ANDROID-ARM
+// CHECK-ANDROID-ARM: __ANDROID__ 1
+
+// RUN: %clang -target i386-linux-androideabi -E -dM -c %s 2>&1 | FileCheck %s -check-prefix=ANDROID-X86
+// CHECK-ANDROID-X86: __ANDROID__ 1
+
+// RUN: %clang -target arm-linux -E -dM -c %s 2>&1 | FileCheck %s -check-prefix=LINUX-ARM
+// CHECK-LINUX-ARM-NOT: __ANDROID__
Index: lib/Basic/Targets.cpp
===================================================================
--- lib/Basic/Targets.cpp	(revision 155186)
+++ lib/Basic/Targets.cpp	(working copy)
@@ -316,6 +316,8 @@
     DefineStd(Builder, "linux", Opts);
     Builder.defineMacro("__gnu_linux__");
     Builder.defineMacro("__ELF__");
+    if (Triple.getEnvironment() == llvm::Triple::ANDROIDEABI)
+      Builder.defineMacro("__ANDROID__", "1");
     if (Opts.POSIXThreads)
       Builder.defineMacro("_REENTRANT");
     if (Opts.CPlusPlus)
