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)