Add MIPS as build target.

Change-Id: Ib783443b3bed198b21638316178669331b012141
diff --git a/Android.mk b/Android.mk
index 2d68f7e..b02b51b 100644
--- a/Android.mk
+++ b/Android.mk
@@ -73,9 +73,11 @@
 
 LOCAL_SRC_FILES := lib/ExecutionEngine/bcc.cpp
 
-LOCAL_WHOLE_STATIC_LIBRARIES += \
-  $(libbcc_WHOLE_STATIC_LIBRARIES) \
-  libbccCompilerRT
+LOCAL_WHOLE_STATIC_LIBRARIES := $(libbcc_WHOLE_STATIC_LIBRARIES)
+
+ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm x86))
+LOCAL_WHOLE_STATIC_LIBRARIES += libbccCompilerRT
+endif
 
 ifeq ($(libbcc_USE_MCJIT),1)
   LOCAL_STATIC_LIBRARIES += librsloader
@@ -87,11 +89,15 @@
       libLLVMARMDisassembler \
       libLLVMARMAsmPrinter
   else
-    ifeq ($(TARGET_ARCH),x86)
-      LOCAL_STATIC_LIBRARIES += \
-        libLLVMX86Disassembler
+    ifeq ($(TARGET_ARCH),mips)
+	  $(error "Disassembler is not available for MIPS architecture")
     else
-      $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
+      ifeq ($(TARGET_ARCH),x86)
+        LOCAL_STATIC_LIBRARIES += \
+          libLLVMX86Disassembler
+      else
+        $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
+      endif
     endif
   endif
 endif
@@ -102,15 +108,23 @@
     libLLVMARMDesc \
     libLLVMARMInfo
 else
-  ifeq ($(TARGET_ARCH),x86) # We don't support x86-64 right now
+  ifeq ($(TARGET_ARCH), mips)
     LOCAL_STATIC_LIBRARIES += \
-      libLLVMX86CodeGen \
-      libLLVMX86Desc \
-      libLLVMX86Info \
-      libLLVMX86Utils \
-      libLLVMX86AsmPrinter
+      libLLVMMipsCodeGen \
+      libLLVMMipsAsmPrinter \
+      libLLVMMipsDesc \
+      libLLVMMipsInfo
   else
-    $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
+    ifeq ($(TARGET_ARCH),x86) # We don't support x86-64 right now
+      LOCAL_STATIC_LIBRARIES += \
+        libLLVMX86CodeGen \
+        libLLVMX86Desc \
+        libLLVMX86Info \
+        libLLVMX86Utils \
+        libLLVMX86AsmPrinter
+    else
+      $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
+    endif
   endif
 endif
 
@@ -135,13 +149,19 @@
 
 LOCAL_SHARED_LIBRARIES := libdl libcutils libutils libstlport
 
-# Modules that need get installed if and only if the target libbcc.so is installed.
+# Modules that need get installed if and only if the target libbcc.so is
+# installed.
 LOCAL_REQUIRED_MODULES := libclcore.bc libbcc.so.sha1
 
-# -Wl,--exclude-libs=ALL only applies to library archives. It would hide most of
-# the symbols in this shared library. As a result, it reduced the size of libbcc.so
-# by about 800k in 2010.
-# Note that libLLVMBitReader:libLLVMCore:libLLVMSupport are used by pixelflinger2.
+# Link-Time Optimization on libbcc.so
+#
+# -Wl,--exclude-libs=ALL only applies to library archives. It would hide most
+# of the symbols in this shared library. As a result, it reduced the size of
+# libbcc.so by about 800k in 2010.
+#
+# Note that libLLVMBitReader:libLLVMCore:libLLVMSupport are used by
+# pixelflinger2.
+
 LOCAL_LDFLAGS += -Wl,--exclude-libs=libLLVMARMDisassembler:libLLVMARMAsmPrinter:libLLVMX86Disassembler:libLLVMX86AsmPrinter:libLLVMMCParser:libLLVMARMCodeGen:libLLVMARMDesc:libLLVMARMInfo:libLLVMSelectionDAG:libLLVMAsmPrinter:libLLVMCodeGen:libLLVMLinker:libLLVMJIT:libLLVMTarget:libLLVMMC:libLLVMScalarOpts:libLLVMInstCombine:libLLVMipo:libLLVMipa:libLLVMTransformUtils:libLLVMAnalysis
 
 # Generate build stamp (Build time + Build git revision + Build Semi SHA1)
@@ -155,6 +175,7 @@
 #=====================================================================
 # Host Shared Library libbcc
 #=====================================================================
+
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := libbcc
@@ -183,16 +204,24 @@
 endif
 
 LOCAL_STATIC_LIBRARIES += \
-  libcutils \
-  libutils \
   libLLVMARMCodeGen \
   libLLVMARMDesc \
-  libLLVMARMInfo \
+  libLLVMARMInfo
+
+LOCAL_STATIC_LIBRARIES += \
+  libLLVMMipsCodeGen \
+  libLLVMMipsAsmPrinter \
+  libLLVMMipsDesc \
+  libLLVMMipsInfo
+
+LOCAL_STATIC_LIBRARIES += \
   libLLVMX86CodeGen \
   libLLVMX86Desc \
-  libLLVMX86Info \
-  libLLVMX86Utils \
   libLLVMX86AsmPrinter \
+  libLLVMX86Info \
+  libLLVMX86Utils
+
+LOCAL_STATIC_LIBRARIES += \
   libLLVMAsmPrinter \
   libLLVMBitReader \
   libLLVMSelectionDAG \
@@ -211,24 +240,15 @@
   libLLVMCore \
   libLLVMSupport
 
+LOCAL_STATIC_LIBRARIES += \
+  libcutils \
+  libutils
+
 LOCAL_LDLIBS := -ldl -lpthread
 
 # Generate build stamp (Build time + Build git revision + Build Semi SHA1)
 include $(LOCAL_PATH)/libbcc-gen-build-stamp.mk
 
-# definitions for LLVM
-LOCAL_CFLAGS += -DDEBUG_CODEGEN=1
-
-ifeq ($(TARGET_ARCH),arm)
-  LOCAL_CFLAGS += -DFORCE_ARM_CODEGEN=1
-else
-  ifeq ($(TARGET_ARCH),x86)
-    LOCAL_CFLAGS += -DFORCE_X86_CODEGEN=1
-  else
-    $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
-  endif
-endif
-
 include $(LIBBCC_ROOT_PATH)/libbcc-gen-config-from-mk.mk
 include $(LLVM_ROOT_PATH)/llvm-host-build.mk
 include $(BUILD_HOST_SHARED_LIBRARY)
diff --git a/Config.h b/Config.h
index 61b98a4..ebe0044 100644
--- a/Config.h
+++ b/Config.h
@@ -42,6 +42,8 @@
 // Configuration for ContextManager
 //---------------------------------------------------------------------------
 
+#if USE_OLD_JIT
+
 // Note: Most of the code should NOT use these constants.  Use the public
 // static member of ContextManager instead, which is type-safe.  For example,
 // if you need BCC_CONTEXT_FIXED_ADDR_, then you should write:
@@ -55,6 +57,8 @@
 
 #define BCC_CONTEXT_DATA_SIZE_ (128 * 1024)
 
+#endif // USE_OLD_JIT
+
 //---------------------------------------------------------------------------
 // Configuration for CodeGen and CompilerRT
 //---------------------------------------------------------------------------
@@ -63,6 +67,10 @@
   #define PROVIDE_ARM_CODEGEN
   #define DEFAULT_ARM_CODEGEN
 
+#elif defined(FORCE_MIPS_CODEGEN)
+  #define PROVIDE_MIPS_CODEGEN
+  #define DEFAULT_MIPS_CODEGEN
+
 #elif defined(FORCE_X86_CODEGEN)
   #define PROVIDE_X86_CODEGEN
 
@@ -74,10 +82,13 @@
 
 #else
   #define PROVIDE_ARM_CODEGEN
+  #define PROVIDE_MIPS_CODEGEN
   #define PROVIDE_X86_CODEGEN
 
   #if defined(__arm__)
     #define DEFAULT_ARM_CODEGEN
+  #elif defined(__mips__)
+    #define DEFAULT_MIPS_CODEGEN
   #elif defined(__i386__)
     #define DEFAULT_X86_CODEGEN
   #elif defined(__x86_64__)
@@ -87,6 +98,8 @@
 
 #if defined(DEFAULT_ARM_CODEGEN)
   #define DEFAULT_TARGET_TRIPLE_STRING "armv7-none-linux-gnueabi"
+#elif defined(DEFAULT_MIPS_CODEGEN)
+  #define DEFAULT_TARGET_TRIPLE_STRING "mipsel-none-linux-gnueabi"
 #elif defined(DEFAULT_X86_CODEGEN)
   #define DEFAULT_TARGET_TRIPLE_STRING "i686-unknown-linux"
 #elif defined(DEFAULT_X86_64_CODEGEN)
diff --git a/lib/ExecutionEngine/Compiler.cpp b/lib/ExecutionEngine/Compiler.cpp
index 3f87d39..f456066 100644
--- a/lib/ExecutionEngine/Compiler.cpp
+++ b/lib/ExecutionEngine/Compiler.cpp
@@ -176,6 +176,13 @@
   LLVMInitializeARMTarget();
 #endif
 
+#if defined(PROVIDE_MIPS_CODEGEN)
+  LLVMInitializeMipsAsmPrinter();
+  LLVMInitializeMipsTargetMC();
+  LLVMInitializeMipsTargetInfo();
+  LLVMInitializeMipsTarget();
+#endif
+
 #if defined(PROVIDE_X86_CODEGEN)
   LLVMInitializeX86AsmPrinter();
   LLVMInitializeX86TargetMC();
diff --git a/libbcc-build-rules.mk b/libbcc-build-rules.mk
index 898002c..a065ed6 100644
--- a/libbcc-build-rules.mk
+++ b/libbcc-build-rules.mk
@@ -37,10 +37,14 @@
       LOCAL_CFLAGS += -DARCH_ARM_HAVE_NEON
     endif
   else
-    ifeq ($(TARGET_ARCH),x86)
-      LOCAL_CFLAGS += -DFORCE_X86_CODEGEN
+    ifeq ($(TARGET_ARCH),mips)
+      LOCAL_CFLAGS += -DFORCE_MIPS_CODEGEN
     else
-      $(error Unsupported architecture $(TARGET_ARCH))
+      ifeq ($(TARGET_ARCH),x86)
+        LOCAL_CFLAGS += -DFORCE_X86_CODEGEN
+      else
+        $(error Unsupported architecture $(TARGET_ARCH))
+      endif
     endif
   endif
 
diff --git a/runtime/Android.mk b/runtime/Android.mk
index 39e662a..c2051ec 100644
--- a/runtime/Android.mk
+++ b/runtime/Android.mk
@@ -22,6 +22,8 @@
 # Device Static Library: libbccCompilerRT
 #=====================================================================
 
+ifneq ($(TARGET_ARCH),mips)
+
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := libbccCompilerRT
@@ -88,3 +90,5 @@
 
 include $(LIBBCC_ROOT_PATH)/libbcc-build-rules.mk
 include $(BUILD_STATIC_LIBRARY)
+
+endif # ifneq($(TARGET_ARCH),mips)