Enhance target architecture selection rules.
Change-Id: I595f8b6d9acd36bffc0017f06a959e709b9707d5
diff --git a/Config.h b/Config.h
index 63bcc1d..4141491 100644
--- a/Config.h
+++ b/Config.h
@@ -54,45 +54,37 @@
// Configuration for CodeGen and CompilerRT
//---------------------------------------------------------------------------
-#if defined(__arm__)
- #define DEFAULT_ARM_CODEGEN
- #define PROVIDE_ARM_CODEGEN
-#elif defined(__i386__)
- #define DEFAULT_X86_CODEGEN
- #define PROVIDE_X86_CODEGEN
-#elif defined(__x86_64__)
- #define DEFAULT_X64_CODEGEN
- #define PROVIDE_X64_CODEGEN
-#endif
-
#if defined(FORCE_ARM_CODEGEN)
- #define DEFAULT_ARM_CODEGEN
- #undef DEFAULT_X86_CODEGEN
- #undef DEFAULT_X64_CODEGEN
#define PROVIDE_ARM_CODEGEN
- #undef PROVIDE_X86_CODEGEN
- #undef PROVIDE_X64_CODEGEN
+ #define DEFAULT_ARM_CODEGEN
+
#elif defined(FORCE_X86_CODEGEN)
- #undef DEFAULT_ARM_CODEGEN
- #define DEFAULT_X86_CODEGEN
- #undef DEFAULT_X64_CODEGEN
- #undef PROVIDE_ARM_CODEGEN
#define PROVIDE_X86_CODEGEN
- #undef PROVIDE_X64_CODEGEN
-#elif defined(FORCE_X64_CODEGEN)
- #undef DEFAULT_ARM_CODEGEN
- #undef DEFAULT_X86_CODEGEN
- #define DEFAULT_X64_CODEGEN
- #undef PROVIDE_ARM_CODEGEN
- #undef PROVIDE_X86_CODEGEN
- #define PROVIDE_X64_CODEGEN
+
+ #if defined(__i386__)
+ #define DEFAULT_X86_CODEGEN
+ #elif defined(__x86_64__)
+ #define DEFAULT_X86_64_CODEGEN
+ #endif
+
+#else
+ #define PROVIDE_ARM_CODEGEN
+ #define PROVIDE_X86_CODEGEN
+
+ #if defined(__arm__)
+ #define DEFAULT_ARM_CODEGEN
+ #elif defined(__i386__)
+ #define DEFAULT_X86_CODEGEN
+ #elif defined(__x86_64__)
+ #define DEFAULT_X86_64_CODEGEN
+ #endif
#endif
#if defined(DEFAULT_ARM_CODEGEN)
#define TARGET_TRIPLE_STRING "armv7-none-linux-gnueabi"
#elif defined(DEFAULT_X86_CODEGEN)
#define TARGET_TRIPLE_STRING "i686-unknown-linux"
-#elif defined(DEFAULT_X64_CODEGEN)
+#elif defined(DEFAULT_X86_64_CODEGEN)
#define TARGET_TRIPLE_STRING "x86_64-unknown-linux"
#endif
diff --git a/helper/Android.mk b/helper/Android.mk
index fd4a873..b19c131 100644
--- a/helper/Android.mk
+++ b/helper/Android.mk
@@ -35,6 +35,7 @@
LOCAL_SRC_FILES := sha1.c
include $(LIBBCC_ROOT_PATH)/libbcc-gen-config-from-mk.mk
+include $(LIBBCC_ROOT_PATH)/libbcc-build-rules.mk
include $(LLVM_ROOT_PATH)/llvm-device-build.mk
include $(BUILD_STATIC_LIBRARY)
@@ -58,5 +59,6 @@
sha1.c
include $(LIBBCC_ROOT_PATH)/libbcc-gen-config-from-mk.mk
+include $(LIBBCC_ROOT_PATH)/libbcc-build-rules.mk
include $(LLVM_ROOT_PATH)/llvm-host-build.mk
include $(BUILD_HOST_STATIC_LIBRARY)
diff --git a/lib/CodeGen/Android.mk b/lib/CodeGen/Android.mk
index 60fc6ca..1e293b2 100644
--- a/lib/CodeGen/Android.mk
+++ b/lib/CodeGen/Android.mk
@@ -43,6 +43,7 @@
LOCAL_SRC_FILES := $(libbcc_codegen_SRC_FILES)
include $(LIBBCC_ROOT_PATH)/libbcc-gen-config-from-mk.mk
+include $(LIBBCC_ROOT_PATH)/libbcc-build-rules.mk
include $(LLVM_ROOT_PATH)/llvm-device-build.mk
include $(BUILD_STATIC_LIBRARY)
@@ -64,6 +65,7 @@
LOCAL_SRC_FILES := $(libbcc_codegen_SRC_FILES)
include $(LIBBCC_ROOT_PATH)/libbcc-gen-config-from-mk.mk
+include $(LIBBCC_ROOT_PATH)/libbcc-build-rules.mk
include $(LLVM_ROOT_PATH)/llvm-host-build.mk
include $(BUILD_HOST_STATIC_LIBRARY)
diff --git a/lib/Disassembler/Android.mk b/lib/Disassembler/Android.mk
index 701f606..1b5ff4d 100644
--- a/lib/Disassembler/Android.mk
+++ b/lib/Disassembler/Android.mk
@@ -42,6 +42,7 @@
LOCAL_SRC_FILES := $(libbcc_disassembler_SRC_FILES)
include $(LIBBCC_ROOT_PATH)/libbcc-gen-config-from-mk.mk
+include $(LIBBCC_ROOT_PATH)/libbcc-build-rules.mk
include $(LLVM_ROOT_PATH)/llvm-device-build.mk
include $(BUILD_STATIC_LIBRARY)
@@ -63,6 +64,7 @@
LOCAL_SRC_FILES := $(libbcc_disassembler_SRC_FILES)
include $(LIBBCC_ROOT_PATH)/libbcc-gen-config-from-mk.mk
+include $(LIBBCC_ROOT_PATH)/libbcc-build-rules.mk
include $(LLVM_ROOT_PATH)/llvm-host-build.mk
include $(BUILD_HOST_STATIC_LIBRARY)
diff --git a/lib/Disassembler/Disassembler.cpp b/lib/Disassembler/Disassembler.cpp
index 8a2cf2c..d0e6000 100644
--- a/lib/Disassembler/Disassembler.cpp
+++ b/lib/Disassembler/Disassembler.cpp
@@ -67,12 +67,11 @@
namespace bcc {
void InitializeDisassembler() {
-#if defined(DEFAULT_ARM_CODEGEN) || defined(PROVIDE_ARM_CODEGEN)
+#if defined(PROVIDE_ARM_CODEGEN)
LLVMInitializeARMDisassembler();
#endif
-#if defined(DEFAULT_X86_CODEGEN) || defined(PROVIDE_X86_CODEGEN) || \
- defined(DEFAULT_X64_CODEGEN) || defined(PROVIDE_X64_CODEGEN)
+#if defined(PROVIDE_X86_CODEGEN)
LLVMInitializeX86Disassembler();
#endif
}
diff --git a/lib/ExecutionEngine/Android.mk b/lib/ExecutionEngine/Android.mk
index e849827..695a975 100644
--- a/lib/ExecutionEngine/Android.mk
+++ b/lib/ExecutionEngine/Android.mk
@@ -72,6 +72,7 @@
LOCAL_SRC_FILES := $(libbcc_executionengine_SRC_FILES)
include $(LIBBCC_ROOT_PATH)/libbcc-gen-config-from-mk.mk
+include $(LIBBCC_ROOT_PATH)/libbcc-build-rules.mk
include $(LLVM_ROOT_PATH)/llvm-device-build.mk
include $(BUILD_STATIC_LIBRARY)
@@ -93,5 +94,6 @@
LOCAL_SRC_FILES := $(libbcc_executionengine_SRC_FILES)
include $(LIBBCC_ROOT_PATH)/libbcc-gen-config-from-mk.mk
+include $(LIBBCC_ROOT_PATH)/libbcc-build-rules.mk
include $(LLVM_ROOT_PATH)/llvm-host-build.mk
include $(BUILD_HOST_STATIC_LIBRARY)
diff --git a/lib/ExecutionEngine/Compiler.cpp b/lib/ExecutionEngine/Compiler.cpp
index ebf6912..a26c1c3 100644
--- a/lib/ExecutionEngine/Compiler.cpp
+++ b/lib/ExecutionEngine/Compiler.cpp
@@ -129,10 +129,8 @@
// Set Triple, CPU and Features here
Triple = TARGET_TRIPLE_STRING;
- // NOTE: Currently, we have to turn off the support for NEON explicitly.
- // Since the ARMCodeEmitter.cpp is not ready for JITing NEON
- // instructions.
-#if defined(DEFAULT_ARM_CODEGEN) || defined(PROVIDE_ARM_CODEGEN)
+#if defined(DEFAULT_ARM_CODEGEN)
+
#if defined(ARCH_ARM_HAVE_VFP)
Features.push_back("+vfp3");
#if !defined(ARCH_ARM_HAVE_VFP_D32)
@@ -140,15 +138,22 @@
#endif
#endif
-// FIXME - Temporarily disable NEON
-#if 0 && defined(ARCH_ARM_HAVE_NEON)
+ // NOTE: Currently, we have to turn off the support for NEON explicitly.
+ // Since the ARMCodeEmitter.cpp is not ready for JITing NEON
+ // instructions.
+
+ // FIXME: Re-enable NEON when ARMCodeEmitter supports NEON.
+#define USE_ARM_NEON 0
+#if USE_ARM_NEON
Features.push_back("+neon");
Features.push_back("+neonfp");
#else
Features.push_back("-neon");
Features.push_back("-neonfp");
-#endif
+#endif // USE_ARM_NEON
+#endif // DEFAULT_ARM_CODEGEN
+#if defined(PROVIDE_ARM_CODEGEN)
LLVMInitializeARMMCAsmInfo();
LLVMInitializeARMMCCodeGenInfo();
LLVMInitializeARMMCSubtargetInfo();
@@ -157,8 +162,7 @@
LLVMInitializeARMTarget();
#endif
-#if defined(DEFAULT_X86_CODEGEN) || defined(PROVIDE_X86_CODEGEN) || \
- defined(DEFAULT_X64_CODEGEN) || defined(PROVIDE_X64_CODEGEN)
+#if defined(PROVIDE_X86_CODEGEN)
LLVMInitializeX86MCAsmInfo();
LLVMInitializeX86MCCodeGenInfo();
LLVMInitializeX86MCSubtargetInfo();
@@ -193,7 +197,7 @@
llvm::FloatABIType = llvm::FloatABI::Soft;
llvm::UseSoftFloat = false;
-#if defined(DEFAULT_X64_CODEGEN)
+#if defined(DEFAULT_X86_64_CODEGEN)
// Data address in X86_64 architecture may reside in a far-away place
llvm::TargetMachine::setCodeModel(llvm::CodeModel::Medium);
#else
diff --git a/libbcc-build-rules.mk b/libbcc-build-rules.mk
new file mode 100644
index 0000000..898002c
--- /dev/null
+++ b/libbcc-build-rules.mk
@@ -0,0 +1,47 @@
+#
+# Copyright (C) 2011 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+#=====================================================================
+# Architecture Selection
+#=====================================================================
+
+ifeq ($(LOCAL_IS_HOST_MODULE),) # Target Build
+
+ # Note: We should only use -DFORCE_ARCH_CODEGEN on target build.
+ # For the host build, we will include as many architecture as possible,
+ # so that we can test the execution engine easily.
+
+ ifeq ($(TARGET_ARCH),arm)
+ LOCAL_CFLAGS += -DFORCE_ARM_CODEGEN
+ ifeq ($(ARCH_ARM_HAVE_VFP),true)
+ LOCAL_CFLAGS += -DARCH_ARM_HAVE_VFP
+ ifeq ($(ARCH_ARM_HAVE_VFP_D32),true)
+ LOCAL_CFLAGS += -DARCH_ARM_HAVE_VFP_D32
+ endif
+ endif
+ ifeq ($(ARCH_ARM_HAVE_NEON),true)
+ LOCAL_CFLAGS += -DARCH_ARM_HAVE_NEON
+ endif
+ else
+ ifeq ($(TARGET_ARCH),x86)
+ LOCAL_CFLAGS += -DFORCE_X86_CODEGEN
+ else
+ $(error Unsupported architecture $(TARGET_ARCH))
+ endif
+ endif
+
+endif
diff --git a/libbcc-config.mk b/libbcc-config.mk
index f5c9eff..43c7897 100644
--- a/libbcc-config.mk
+++ b/libbcc-config.mk
@@ -70,25 +70,6 @@
libbcc_CFLAGS += -D__DISABLE_ASSERTS
endif
-ifeq ($(TARGET_ARCH),arm)
- libbcc_CFLAGS += -DFORCE_ARM_CODEGEN=1
- ifeq (true,$(ARCH_ARM_HAVE_VFP))
- libbcc_CFLAGS += -DARCH_ARM_HAVE_VFP
- ifeq (true,$(ARCH_ARM_HAVE_VFP_D32))
- libbcc_CFLAGS += -DARCH_ARM_HAVE_VFP_D32
- endif
- endif
- ifeq (true,$(ARCH_ARM_HAVE_NEON))
- libbcc_CFLAGS += -DARCH_ARM_HAVE_NEON
- endif
-else
- ifeq ($(TARGET_ARCH),x86)
- libbcc_CFLAGS += -DFORCE_X86_CODEGEN=1
- else
- $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
- endif
-endif
-
# Include File Search Path
libbcc_C_INCLUDES := \
$(RSLOADER_ROOT_PATH)/android \
diff --git a/runtime/Android.mk b/runtime/Android.mk
index bb2ff0f..39e662a 100644
--- a/runtime/Android.mk
+++ b/runtime/Android.mk
@@ -86,4 +86,5 @@
endif
endif
+include $(LIBBCC_ROOT_PATH)/libbcc-build-rules.mk
include $(BUILD_STATIC_LIBRARY)