am ebefa384: Merge "Add libclang for target."

* commit 'ebefa3846413241e117789d25518e687610fa6b2':
  Add libclang for target.
diff --git a/Android.mk b/Android.mk
index 5f62da3..8cd6e17 100644
--- a/Android.mk
+++ b/Android.mk
@@ -29,6 +29,6 @@
   ))
 
 include $(LOCAL_PATH)/clang.mk
-include $(LOCAL_PATH)/host_shared_clang.mk
+include $(LOCAL_PATH)/shared_clang.mk
 
 include $(subdirs)
diff --git a/clang-device-build.mk b/clang-device-build.mk
new file mode 100644
index 0000000..46d535f
--- /dev/null
+++ b/clang-device-build.mk
@@ -0,0 +1,40 @@
+LOCAL_CFLAGS :=	\
+	-pedantic	\
+	-Wcast-qual	\
+	-Wno-long-long	\
+	$(LOCAL_CFLAGS)
+
+LOCAL_CPPFLAGS := \
+	-Wno-sign-promo \
+	$(LOCAL_CPPFLAGS)
+
+# Make sure bionic is first so we can include system headers.
+LOCAL_C_INCLUDES :=	\
+	$(CLANG_ROOT_PATH)/include	\
+	$(CLANG_ROOT_PATH)/lib/CodeGen    \
+	$(LOCAL_C_INCLUDES)
+
+LLVM_ROOT_PATH := external/llvm
+include $(LLVM_ROOT_PATH)/llvm.mk
+
+include external/libcxx/libcxx.mk
+
+ifneq ($(LLVM_DEVICE_BUILD_MK),)
+include $(LLVM_DEVICE_BUILD_MK)
+endif
+
+###########################################################
+## Commands for running tblgen to compile a td file
+###########################################################
+define transform-device-clang-td-to-out
+@mkdir -p $(dir $@)
+@echo "Device Clang TableGen: $(TBLGEN_LOCAL_MODULE) (gen-$(1)) <= $<"
+$(hide) $(CLANG_TBLGEN) \
+	-I $(dir $<)	\
+	-I $(LLVM_ROOT_PATH)/include	\
+	-I $(LLVM_ROOT_PATH)/device/include	\
+	-I $(LLVM_ROOT_PATH)/lib/Target	\
+	$(if $(strip $(CLANG_ROOT_PATH)),-I $(CLANG_ROOT_PATH)/include,)	\
+	-gen-$(strip $(1))	\
+	-o $@ $<
+endef
diff --git a/clang-tblgen-rules.mk b/clang-tblgen-rules.mk
index cdd9f72..9762bd1 100644
--- a/clang-tblgen-rules.mk
+++ b/clang-tblgen-rules.mk
@@ -7,104 +7,110 @@
 
 ifneq ($(strip $(TBLGEN_TABLES)),)
 
+define transform-clang-td-to-out
+$(if $(LOCAL_IS_HOST_MODULE),	\
+	$(call transform-host-clang-td-to-out,$(1)),	\
+	$(call transform-device-clang-td-to-out,$(1)))
+endef
+
 intermediates := $(call local-generated-sources-dir)
 
 ifneq ($(findstring AttrDump.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/AST/AttrDump.inc
 $(intermediates)/include/clang/AST/AttrDump.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/AST/AttrDump.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Attr.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-attr-dump)
+	$(call transform-clang-td-to-out,clang-attr-dump)
 endif
 
 ifneq ($(findstring AttrImpl.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/AST/AttrImpl.inc
 $(intermediates)/include/clang/AST/AttrImpl.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/AST/AttrImpl.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Attr.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-attr-impl)
+	$(call transform-clang-td-to-out,clang-attr-impl)
 endif
 
 ifneq ($(findstring AttrHasAttributeImpl.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/Basic/AttrHasAttributeImpl.inc
 $(intermediates)/include/clang/Basic/AttrHasAttributeImpl.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/Basic/AttrHasAttributeImpl.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Attr.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-attr-has-attribute-impl)
+	$(call transform-clang-td-to-out,clang-attr-has-attribute-impl)
 endif
 
 ifneq ($(findstring AttrList.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/Basic/AttrList.inc
 $(intermediates)/include/clang/Basic/AttrList.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/Basic/AttrList.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Attr.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-attr-list)
+	$(call transform-clang-td-to-out,clang-attr-list)
 endif
 
 ifneq ($(findstring AttrSpellingListIndex.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/Sema/AttrSpellingListIndex.inc
 $(intermediates)/include/clang/Sema/AttrSpellingListIndex.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/Sema/AttrSpellingListIndex.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Attr.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-attr-spelling-index)
+	$(call transform-clang-td-to-out,clang-attr-spelling-index)
 endif
 
 ifneq ($(findstring AttrPCHRead.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/Serialization/AttrPCHRead.inc
 $(intermediates)/include/clang/Serialization/AttrPCHRead.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/Serialization/AttrPCHRead.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Attr.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-attr-pch-read)
+	$(call transform-clang-td-to-out,clang-attr-pch-read)
 endif
 
 ifneq ($(findstring AttrPCHWrite.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/Serialization/AttrPCHWrite.inc
 $(intermediates)/include/clang/Serialization/AttrPCHWrite.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/Serialization/AttrPCHWrite.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Attr.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-attr-pch-write)
+	$(call transform-clang-td-to-out,clang-attr-pch-write)
 endif
 
 ifneq ($(findstring Attrs.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/AST/Attrs.inc
 $(intermediates)/include/clang/AST/Attrs.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/AST/Attrs.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Attr.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-attr-classes)
+	$(call transform-clang-td-to-out,clang-attr-classes)
 endif
 
 ifneq ($(findstring AttrParserStringSwitches.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/Parse/AttrParserStringSwitches.inc
 $(intermediates)/include/clang/Parse/AttrParserStringSwitches.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/Parse/AttrParserStringSwitches.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Attr.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-attr-parser-string-switches)
+	$(call transform-clang-td-to-out,clang-attr-parser-string-switches)
 endif
 
 ifneq ($(findstring AttrVisitor.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/AST/AttrVisitor.inc
 $(intermediates)/include/clang/AST/AttrVisitor.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/AST/AttrVisitor.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Attr.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-attr-ast-visitor)
+	$(call transform-clang-td-to-out,clang-attr-ast-visitor)
 endif
 
 ifneq ($(findstring AttrParsedAttrKinds.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/Sema/AttrParsedAttrKinds.inc
 $(intermediates)/include/clang/Sema/AttrParsedAttrKinds.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/Sema/AttrParsedAttrKinds.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Attr.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-attr-parsed-attr-kinds)
+	$(call transform-clang-td-to-out,clang-attr-parsed-attr-kinds)
 endif
 
 ifneq ($(findstring AttrParsedAttrImpl.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/Sema/AttrParsedAttrImpl.inc
 $(intermediates)/include/clang/Sema/AttrParsedAttrImpl.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/Sema/AttrParsedAttrImpl.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Attr.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-attr-parsed-attr-impl)
+	$(call transform-clang-td-to-out,clang-attr-parsed-attr-impl)
 endif
 
 ifneq ($(findstring AttrParsedAttrList.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/Sema/AttrParsedAttrList.inc
 $(intermediates)/include/clang/Sema/AttrParsedAttrList.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/Sema/AttrParsedAttrList.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Attr.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-attr-parsed-attr-list)
+	$(call transform-clang-td-to-out,clang-attr-parsed-attr-list)
 endif
 
 ifneq ($(findstring AttrTemplateInstantiate.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/Sema/AttrTemplateInstantiate.inc
 $(intermediates)/include/clang/Sema/AttrTemplateInstantiate.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/Sema/AttrTemplateInstantiate.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Attr.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-attr-template-instantiate)
+	$(call transform-clang-td-to-out,clang-attr-template-instantiate)
 endif
 
 ifneq ($(findstring Checkers.inc,$(TBLGEN_TABLES)),)
@@ -114,7 +120,7 @@
   $(CLANG_ROOT_PATH)/lib/StaticAnalyzer/Checkers/Checkers.td \
   $(CLANG_ROOT_PATH)/include/clang/StaticAnalyzer/Checkers/CheckerBase.td \
   | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-sa-checkers)
+	$(call transform-clang-td-to-out,clang-sa-checkers)
 endif
 
 ifneq ($(findstring CommentCommandInfo.inc,$(TBLGEN_TABLES)),)
@@ -123,7 +129,7 @@
 $(intermediates)/include/clang/AST/CommentCommandInfo.inc: \
   $(CLANG_ROOT_PATH)/include/clang/AST/CommentCommands.td \
   | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-comment-command-info)
+	$(call transform-clang-td-to-out,clang-comment-command-info)
 endif
 
 ifneq ($(findstring CommentCommandList.inc,$(TBLGEN_TABLES)),)
@@ -132,7 +138,7 @@
 $(intermediates)/include/clang/AST/CommentCommandList.inc: \
   $(CLANG_ROOT_PATH)/include/clang/AST/CommentCommands.td \
   | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-comment-command-list)
+	$(call transform-clang-td-to-out,clang-comment-command-list)
 endif
 
 ifneq ($(findstring CommentHTMLNamedCharacterReferences.inc,$(TBLGEN_TABLES)),)
@@ -141,7 +147,7 @@
 $(intermediates)/include/clang/AST/CommentHTMLNamedCharacterReferences.inc: \
   $(CLANG_ROOT_PATH)/include/clang/AST/CommentHTMLNamedCharacterReferences.td \
   | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-comment-html-named-character-references)
+	$(call transform-clang-td-to-out,clang-comment-html-named-character-references)
 endif
 
 ifneq ($(findstring CommentHTMLTagsProperties.inc,$(TBLGEN_TABLES)),)
@@ -150,7 +156,7 @@
 $(intermediates)/include/clang/AST/CommentHTMLTagsProperties.inc: \
   $(CLANG_ROOT_PATH)/include/clang/AST/CommentHTMLTags.td \
   | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-comment-html-tags-properties)
+	$(call transform-clang-td-to-out,clang-comment-html-tags-properties)
 endif
 
 ifneq ($(findstring CommentHTMLTags.inc,$(TBLGEN_TABLES)),)
@@ -159,7 +165,7 @@
 $(intermediates)/include/clang/AST/CommentHTMLTags.inc: \
   $(CLANG_ROOT_PATH)/include/clang/AST/CommentHTMLTags.td \
   | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-comment-html-tags)
+	$(call transform-clang-td-to-out,clang-comment-html-tags)
 endif
 
 ifneq ($(findstring CommentNodes.inc,$(TBLGEN_TABLES)),)
@@ -168,7 +174,7 @@
 $(intermediates)/include/clang/AST/CommentNodes.inc: \
   $(CLANG_ROOT_PATH)/include/clang/Basic/CommentNodes.td \
   | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-comment-nodes)
+	$(call transform-clang-td-to-out,clang-comment-nodes)
 endif
 
 ifneq ($(filter Diagnostic%Kinds.inc,$(TBLGEN_TABLES)),)
@@ -178,42 +184,42 @@
   $(CLANG_ROOT_PATH)/include/clang/Basic/Diagnostic.td \
   $(CLANG_ROOT_PATH)/include/clang/Basic/Diagnostic%Kinds.td \
   | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-diags-defs -clang-component=$(patsubst Diagnostic%Kinds.inc,%,$(@F)))
+	$(call transform-clang-td-to-out,clang-diags-defs -clang-component=$(patsubst Diagnostic%Kinds.inc,%,$(@F)))
 endif
 
 ifneq ($(findstring DiagnosticGroups.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/Basic/DiagnosticGroups.inc
 $(intermediates)/include/clang/Basic/DiagnosticGroups.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/Basic/DiagnosticGroups.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Diagnostic.td $(CLANG_ROOT_PATH)/include/clang/Basic/DiagnosticGroups.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-diag-groups)
+	$(call transform-clang-td-to-out,clang-diag-groups)
 endif
 
 ifneq ($(findstring DiagnosticIndexName.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/Basic/DiagnosticIndexName.inc
 $(intermediates)/include/clang/Basic/DiagnosticIndexName.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/Basic/DiagnosticIndexName.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/Diagnostic.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-diag-groups)
+	$(call transform-clang-td-to-out,clang-diag-groups)
 endif
 
 ifneq ($(findstring DeclNodes.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/AST/DeclNodes.inc
 $(intermediates)/include/clang/AST/DeclNodes.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/AST/DeclNodes.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/DeclNodes.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-decl-nodes)
+	$(call transform-clang-td-to-out,clang-decl-nodes)
 endif
 
 ifneq ($(findstring StmtNodes.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/AST/StmtNodes.inc
 $(intermediates)/include/clang/AST/StmtNodes.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/AST/StmtNodes.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/StmtNodes.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,clang-stmt-nodes)
+	$(call transform-clang-td-to-out,clang-stmt-nodes)
 endif
 
 ifneq ($(findstring arm_neon.inc,$(TBLGEN_TABLES)),)
 LOCAL_GENERATED_SOURCES += $(intermediates)/include/clang/Basic/arm_neon.inc
 $(intermediates)/include/clang/Basic/arm_neon.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/Basic/arm_neon.inc: $(CLANG_ROOT_PATH)/include/clang/Basic/arm_neon.td | $(CLANG_TBLGEN)
-	$(call transform-host-clang-td-to-out,arm-neon-sema)
+	$(call transform-clang-td-to-out,arm-neon-sema)
 endif
 
 ifneq ($(findstring Options.inc,$(TBLGEN_TABLES)),)
@@ -221,7 +227,7 @@
 $(intermediates)/include/clang/Driver/Options.inc: TBLGEN_LOCAL_MODULE := $(LOCAL_MODULE)
 $(intermediates)/include/clang/Driver/Options.inc: $(CLANG_ROOT_PATH)/include/clang/Driver/Options.td $(LLVM_ROOT_PATH)/include/llvm/Option/OptParser.td $(CLANG_ROOT_PATH)/include/clang/Driver/CC1Options.td \
     | $(CLANG_TBLGEN) $(LLVM_TBLGEN)
-	$(call transform-host-td-to-out,opt-parser-defs)
+	$(call transform-td-to-out,opt-parser-defs)
 endif
 
 LOCAL_C_INCLUDES += $(intermediates)/include
diff --git a/clang.mk b/clang.mk
index 587a510..9165578 100644
--- a/clang.mk
+++ b/clang.mk
@@ -3,5 +3,6 @@
 endif
 
 CLANG_HOST_BUILD_MK := $(CLANG_ROOT_PATH)/clang-host-build.mk
+CLANG_DEVICE_BUILD_MK := $(CLANG_ROOT_PATH)/clang-device-build.mk
 CLANG_TBLGEN_RULES_MK := $(CLANG_ROOT_PATH)/clang-tblgen-rules.mk
 CLANG_VERSION_INC_MK := $(CLANG_ROOT_PATH)/clang-version-inc.mk
diff --git a/lib/ARCMigrate/Android.mk b/lib/ARCMigrate/Android.mk
index 834f573..2a4607a 100644
--- a/lib/ARCMigrate/Android.mk
+++ b/lib/ARCMigrate/Android.mk
@@ -1,8 +1,5 @@
 LOCAL_PATH := $(call my-dir)
 
-# For the host only
-# =====================================================
-include $(CLEAR_VARS)
 include $(CLEAR_TBLGEN_VARS)
 
 TBLGEN_TABLES := \
@@ -40,8 +37,11 @@
   TransUnusedInitDelegate.cpp \
   TransZeroOutPropsInDealloc.cpp
 
-LOCAL_SRC_FILES := $(clang_arc_migrate_SRC_FILES)
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
 
+LOCAL_SRC_FILES := $(clang_arc_migrate_SRC_FILES)
 LOCAL_MODULE := libclangARCMigrate
 LOCAL_MODULE_TAGS := optional
 
@@ -49,3 +49,16 @@
 include $(CLANG_VERSION_INC_MK)
 include $(CLANG_TBLGEN_RULES_MK)
 include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the target
+# ============================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(clang_arc_migrate_SRC_FILES)
+LOCAL_MODULE := libclangARCMigrate
+LOCAL_MODULE_TAGS := optional
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(CLANG_VERSION_INC_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/lib/AST/Android.mk b/lib/AST/Android.mk
index 9d0c005..8423e42 100644
--- a/lib/AST/Android.mk
+++ b/lib/AST/Android.mk
@@ -1,8 +1,5 @@
 LOCAL_PATH:= $(call my-dir)
 
-# For the host only
-# =====================================================
-include $(CLEAR_VARS)
 include $(CLEAR_TBLGEN_VARS)
 
 TBLGEN_TABLES :=    \
@@ -82,13 +79,26 @@
 	VTTBuilder.cpp \
 	VTableBuilder.cpp
 
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
+
 LOCAL_SRC_FILES := $(clang_ast_SRC_FILES)
-
 LOCAL_MODULE:= libclangAST
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_MODULE_TAGS := optional
-
 include $(CLANG_HOST_BUILD_MK)
 include $(CLANG_TBLGEN_RULES_MK)
 include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the target
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(clang_ast_SRC_FILES)
+LOCAL_MODULE:= libclangAST
+LOCAL_MODULE_TAGS := optional
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/lib/Analysis/Android.mk b/lib/Analysis/Android.mk
index 8ccbf3e..cde3e31 100644
--- a/lib/Analysis/Android.mk
+++ b/lib/Analysis/Android.mk
@@ -1,8 +1,5 @@
 LOCAL_PATH:= $(call my-dir)
 
-# For the host only
-# =====================================================
-include $(CLEAR_VARS)
 include $(CLEAR_TBLGEN_VARS)
 
 TBLGEN_TABLES := \
@@ -38,14 +35,26 @@
   ThreadSafety.cpp \
   UninitializedValues.cpp
 
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
 
 LOCAL_SRC_FILES := $(clang_analysis_SRC_FILES)
-
 LOCAL_MODULE:= libclangAnalysis
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_MODULE_TAGS := optional
-
 include $(CLANG_HOST_BUILD_MK)
 include $(CLANG_TBLGEN_RULES_MK)
 include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the target
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(clang_analysis_SRC_FILES)
+LOCAL_MODULE:= libclangAnalysis
+LOCAL_MODULE_TAGS := optional
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/lib/Basic/Android.mk b/lib/Basic/Android.mk
index 03b131c..9f094f1 100644
--- a/lib/Basic/Android.mk
+++ b/lib/Basic/Android.mk
@@ -1,8 +1,5 @@
 LOCAL_PATH:= $(call my-dir)
 
-# For the host only
-# =====================================================
-include $(CLEAR_VARS)
 include $(CLEAR_TBLGEN_VARS)
 
 TBLGEN_TABLES := \
@@ -45,14 +42,28 @@
   VirtualFileSystem.cpp \
   Warnings.cpp
 
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
+
 LOCAL_SRC_FILES := $(clang_basic_SRC_FILES)
-
 LOCAL_MODULE:= libclangBasic
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_MODULE_TAGS := optional
-
 include $(CLANG_HOST_BUILD_MK)
 include $(CLANG_VERSION_INC_MK)
 include $(CLANG_TBLGEN_RULES_MK)
 include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the target
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(clang_basic_SRC_FILES)
+LOCAL_MODULE:= libclangBasic
+LOCAL_MODULE_TAGS := optional
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(CLANG_VERSION_INC_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/lib/CodeGen/Android.mk b/lib/CodeGen/Android.mk
index 0a82640..c90cc52 100644
--- a/lib/CodeGen/Android.mk
+++ b/lib/CodeGen/Android.mk
@@ -1,5 +1,7 @@
 LOCAL_PATH:= $(call my-dir)
 
+include $(CLEAR_TBLGEN_VARS)
+
 clang_codegen_TBLGEN_TABLES := \
   AttrList.inc \
   AttrParsedAttrList.inc \
@@ -61,10 +63,9 @@
   SanitizerBlacklist.cpp \
   TargetInfo.cpp
 
-# For the host only
+# For the host
 # =====================================================
 include $(CLEAR_VARS)
-include $(CLEAR_TBLGEN_VARS)
 
 LOCAL_MODULE:= libclangCodeGen
 LOCAL_MODULE_TAGS := optional
@@ -77,3 +78,19 @@
 include $(CLANG_TBLGEN_RULES_MK)
 include $(LLVM_GEN_INTRINSICS_MK)
 include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the target
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_MODULE:= libclangCodeGen
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES := $(clang_codegen_SRC_FILES)
+TBLGEN_TABLES := $(clang_codegen_TBLGEN_TABLES)
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(CLANG_VERSION_INC_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(LLVM_GEN_INTRINSICS_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/lib/Driver/Android.mk b/lib/Driver/Android.mk
index a80df60..61323c0 100644
--- a/lib/Driver/Android.mk
+++ b/lib/Driver/Android.mk
@@ -1,8 +1,5 @@
 LOCAL_PATH:= $(call my-dir)
 
-# For the host only
-# =====================================================
-include $(CLEAR_VARS)
 include $(CLEAR_TBLGEN_VARS)
 
 TBLGEN_TABLES := \
@@ -29,14 +26,28 @@
   Types.cpp \
   WindowsToolChain.cpp
 
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
+
 LOCAL_SRC_FILES := $(clang_driver_SRC_FILES)
-
 LOCAL_MODULE := libclangDriver
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_MODULE_TAGS := optional
-
 include $(CLANG_HOST_BUILD_MK)
 include $(CLANG_TBLGEN_RULES_MK)
 include $(CLANG_VERSION_INC_MK)
 include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the target
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(clang_driver_SRC_FILES)
+LOCAL_MODULE := libclangDriver
+LOCAL_MODULE_TAGS := optional
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(CLANG_VERSION_INC_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/lib/Edit/Android.mk b/lib/Edit/Android.mk
index 87f4e25..ff6ecdc8 100644
--- a/lib/Edit/Android.mk
+++ b/lib/Edit/Android.mk
@@ -1,16 +1,12 @@
 LOCAL_PATH:= $(call my-dir)
 
+include $(CLEAR_TBLGEN_VARS)
+
 clang_edit_SRC_FILES := \
   Commit.cpp \
   EditedSource.cpp \
   RewriteObjCFoundationAPI.cpp
 
-
-# For the host only
-# =====================================================
-include $(CLEAR_VARS)
-include $(CLEAR_TBLGEN_VARS)
-
 TBLGEN_TABLES := \
   Attrs.inc \
   AttrList.inc \
@@ -20,13 +16,28 @@
   DiagnosticCommonKinds.inc \
   StmtNodes.inc
 
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
+
 LOCAL_SRC_FILES := $(clang_edit_SRC_FILES)
-
 LOCAL_MODULE:= libclangEdit
-
 LOCAL_MODULE_TAGS := optional
 
 include $(CLANG_HOST_BUILD_MK)
 include $(CLANG_VERSION_INC_MK)
 include $(CLANG_TBLGEN_RULES_MK)
 include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the target
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(clang_edit_SRC_FILES)
+LOCAL_MODULE:= libclangEdit
+LOCAL_MODULE_TAGS := optional
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(CLANG_VERSION_INC_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/lib/Frontend/Android.mk b/lib/Frontend/Android.mk
index e93ba21..255da76 100644
--- a/lib/Frontend/Android.mk
+++ b/lib/Frontend/Android.mk
@@ -1,8 +1,5 @@
 LOCAL_PATH:= $(call my-dir)
 
-# For the host only
-# =====================================================
-include $(CLEAR_VARS)
 include $(CLEAR_TBLGEN_VARS)
 
 TBLGEN_TABLES := \
@@ -53,14 +50,28 @@
   TextDiagnosticPrinter.cpp \
   VerifyDiagnosticConsumer.cpp
 
-LOCAL_SRC_FILES := $(clang_frontend_SRC_FILES)
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
 
+LOCAL_SRC_FILES := $(clang_frontend_SRC_FILES)
 LOCAL_MODULE:= libclangFrontend
 LOCAL_MODULE_TAGS:= optional
 
-LOCAL_MODULE_TAGS := optional
-
 include $(CLANG_HOST_BUILD_MK)
 include $(CLANG_TBLGEN_RULES_MK)
 include $(CLANG_VERSION_INC_MK)
 include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the target
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(clang_frontend_SRC_FILES)
+LOCAL_MODULE:= libclangFrontend
+LOCAL_MODULE_TAGS:= optional
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(CLANG_VERSION_INC_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/lib/Lex/Android.mk b/lib/Lex/Android.mk
index a5e9661..239998d 100644
--- a/lib/Lex/Android.mk
+++ b/lib/Lex/Android.mk
@@ -1,8 +1,5 @@
 LOCAL_PATH:= $(call my-dir)
 
-# For the host only
-# =====================================================
-include $(CLEAR_VARS)
 include $(CLEAR_TBLGEN_VARS)
 
 TBLGEN_TABLES := \
@@ -33,13 +30,26 @@
   TokenConcatenation.cpp \
   TokenLexer.cpp
 
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
+
 LOCAL_SRC_FILES := $(clang_lex_SRC_FILES)
-
 LOCAL_MODULE:= libclangLex
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_MODULE_TAGS := optional
-
 include $(CLANG_HOST_BUILD_MK)
 include $(CLANG_TBLGEN_RULES_MK)
 include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the target
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(clang_lex_SRC_FILES)
+LOCAL_MODULE:= libclangLex
+LOCAL_MODULE_TAGS := optional
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/lib/Parse/Android.mk b/lib/Parse/Android.mk
index ff63b60..cb248c4 100644
--- a/lib/Parse/Android.mk
+++ b/lib/Parse/Android.mk
@@ -1,8 +1,5 @@
 LOCAL_PATH:= $(call my-dir)
 
-# For the host only
-# =====================================================
-include $(CLEAR_VARS)
 include $(CLEAR_TBLGEN_VARS)
 
 TBLGEN_TABLES :=  \
@@ -36,13 +33,26 @@
 	ParseTentative.cpp  \
 	Parser.cpp
 
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
+
 LOCAL_SRC_FILES := $(clang_parse_SRC_FILES)
-
 LOCAL_MODULE:= libclangParse
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_MODULE_TAGS := optional
-
 include $(CLANG_HOST_BUILD_MK)
 include $(CLANG_TBLGEN_RULES_MK)
 include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the target
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(clang_parse_SRC_FILES)
+LOCAL_MODULE:= libclangParse
+LOCAL_MODULE_TAGS := optional
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/lib/Rewrite/Core/Android.mk b/lib/Rewrite/Core/Android.mk
index 546fc04..1dcd5cd 100644
--- a/lib/Rewrite/Core/Android.mk
+++ b/lib/Rewrite/Core/Android.mk
@@ -1,14 +1,7 @@
 LOCAL_PATH:= $(call my-dir)
 
-# For the host only
-# =====================================================
-include $(CLEAR_VARS)
 include $(CLEAR_TBLGEN_VARS)
 
-LOCAL_MODULE:= libclangRewriteCore
-
-LOCAL_MODULE_TAGS := optional
-
 TBLGEN_TABLES := \
   AttrList.inc \
   Attrs.inc \
@@ -26,9 +19,26 @@
   Rewriter.cpp \
   TokenRewriter.cpp
 
-LOCAL_SRC_FILES := $(clang_rewrite_core_SRC_FILES)
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
 
+LOCAL_SRC_FILES := $(clang_rewrite_core_SRC_FILES)
+LOCAL_MODULE:= libclangRewriteCore
+LOCAL_MODULE_TAGS := optional
 
 include $(CLANG_HOST_BUILD_MK)
 include $(CLANG_TBLGEN_RULES_MK)
 include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the target
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(clang_rewrite_core_SRC_FILES)
+LOCAL_MODULE:= libclangRewriteCore
+LOCAL_MODULE_TAGS := optional
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/lib/Rewrite/Frontend/Android.mk b/lib/Rewrite/Frontend/Android.mk
index 2bbf311..f23e746 100644
--- a/lib/Rewrite/Frontend/Android.mk
+++ b/lib/Rewrite/Frontend/Android.mk
@@ -1,14 +1,7 @@
 LOCAL_PATH:= $(call my-dir)
 
-# For the host only
-# =====================================================
-include $(CLEAR_VARS)
 include $(CLEAR_TBLGEN_VARS)
 
-LOCAL_MODULE:= libclangRewriteFrontend
-
-LOCAL_MODULE_TAGS := optional
-
 TBLGEN_TABLES := \
   AttrList.inc \
   Attrs.inc \
@@ -30,9 +23,26 @@
   RewriteObjC.cpp \
   RewriteTest.cpp
 
-LOCAL_SRC_FILES := $(clang_rewrite_frontend_SRC_FILES)
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
 
+LOCAL_SRC_FILES := $(clang_rewrite_frontend_SRC_FILES)
+LOCAL_MODULE:= libclangRewriteFrontend
+LOCAL_MODULE_TAGS := optional
 
 include $(CLANG_HOST_BUILD_MK)
 include $(CLANG_TBLGEN_RULES_MK)
 include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the target
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(clang_rewrite_frontend_SRC_FILES)
+LOCAL_MODULE:= libclangRewriteFrontend
+LOCAL_MODULE_TAGS := optional
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/lib/Sema/Android.mk b/lib/Sema/Android.mk
index 77a2e93..ec23640 100644
--- a/lib/Sema/Android.mk
+++ b/lib/Sema/Android.mk
@@ -1,8 +1,5 @@
 LOCAL_PATH:= $(call my-dir)
 
-# For the host only
-# =====================================================
-include $(CLEAR_VARS)
 include $(CLEAR_TBLGEN_VARS)
 
 TBLGEN_TABLES :=    \
@@ -72,13 +69,26 @@
 	SemaType.cpp	\
 	TypeLocBuilder.cpp
 
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
+
 LOCAL_SRC_FILES := $(clang_sema_SRC_FILES)
-
 LOCAL_MODULE:= libclangSema
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_MODULE_TAGS := optional
-
 include $(CLANG_HOST_BUILD_MK)
 include $(CLANG_TBLGEN_RULES_MK)
 include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the target
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(clang_sema_SRC_FILES)
+LOCAL_MODULE:= libclangSema
+LOCAL_MODULE_TAGS := optional
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/lib/Serialization/Android.mk b/lib/Serialization/Android.mk
index 751e306..85cf2ef 100644
--- a/lib/Serialization/Android.mk
+++ b/lib/Serialization/Android.mk
@@ -1,14 +1,7 @@
 LOCAL_PATH:= $(call my-dir)
 
-# For the host only
-# =====================================================
-include $(CLEAR_VARS)
 include $(CLEAR_TBLGEN_VARS)
 
-LOCAL_MODULE:= libclangSerialization
-
-LOCAL_MODULE_TAGS := optional
-
 TBLGEN_TABLES := \
   AttrList.inc \
   AttrParsedAttrList.inc \
@@ -37,10 +30,28 @@
   Module.cpp \
   ModuleManager.cpp
 
-LOCAL_SRC_FILES := $(clang_serialization_SRC_FILES)
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
 
+LOCAL_SRC_FILES := $(clang_serialization_SRC_FILES)
+LOCAL_MODULE:= libclangSerialization
+LOCAL_MODULE_TAGS := optional
 
 include $(CLANG_HOST_BUILD_MK)
 include $(CLANG_TBLGEN_RULES_MK)
 include $(CLANG_VERSION_INC_MK)
 include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the target
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(clang_serialization_SRC_FILES)
+LOCAL_MODULE:= libclangSerialization
+LOCAL_MODULE_TAGS := optional
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(CLANG_VERSION_INC_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/host_shared_clang.mk b/shared_clang.mk
similarity index 68%
rename from host_shared_clang.mk
rename to shared_clang.mk
index 8e7a2cd..604067b 100644
--- a/host_shared_clang.mk
+++ b/shared_clang.mk
@@ -5,13 +5,7 @@
 
 LOCAL_PATH:= $(call my-dir)
 
-LOCAL_IS_HOST_MODULE := true
-
-LOCAL_MODULE:= libclang
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_WHOLE_STATIC_LIBRARIES := \
+clang_whole_static_libraries := \
 	libclangDriver \
 	libclangParse \
 	libclangSema \
@@ -26,6 +20,13 @@
 	libclangRewriteCore \
 	libclangSerialization
 
+# host
+include $(CLEAR_VARS)
+
+LOCAL_IS_HOST_MODULE := true
+LOCAL_MODULE:= libclang
+LOCAL_MODULE_TAGS := optional
+LOCAL_WHOLE_STATIC_LIBRARIES := $(clang_whole_static_libraries)
 
 ifeq ($(HOST_OS),windows)
   LOCAL_SHARED_LIBRARIES := libLLVM
@@ -38,5 +39,18 @@
 include $(CLANG_HOST_BUILD_MK)
 include $(BUILD_HOST_SHARED_LIBRARY)
 
+# device
+include $(CLEAR_VARS)
+
+LOCAL_MODULE:= libclang
+LOCAL_MODULE_TAGS := optional
+LOCAL_WHOLE_STATIC_LIBRARIES := $(clang_whole_static_libraries)
+
+LOCAL_SHARED_LIBRARIES := libLLVM libc++
+LOCAL_LDLIBS := -ldl
+
+include $(CLANG_DEVICE_BUILD_MK)
+include $(BUILD_SHARED_LIBRARY)
+
 endif # don't build in unbundled branches
 endif # don't build unless forced to