Make compiler_llvm target independent. To build x86 image.
Change-Id: Ic013e71a3ed13d5e64d3db6551626299ff480eea
diff --git a/src/compiler_llvm/backend_options.h b/src/compiler_llvm/backend_options.h
new file mode 100644
index 0000000..f8295d1
--- /dev/null
+++ b/src/compiler_llvm/backend_options.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+#ifndef ART_SRC_COMPILER_LLVM_BACKEND_OPTIONS_H_
+#define ART_SRC_COMPILER_LLVM_BACKEND_OPTIONS_H_
+
+#include <llvm/Support/CommandLine.h>
+
+#define DECLARE_ARM_BACKEND_OPTIONS \
+extern llvm::cl::opt<bool> EnableARMLongCalls; \
+extern llvm::cl::opt<bool> ReserveR9;
+
+#define INITIAL_ARM_BACKEND_OPTIONS \
+EnableARMLongCalls = false; \
+ReserveR9 = true;
+
+#define DECLARE_X86_BACKEND_OPTIONS
+#define INITIAL_X86_BACKEND_OPTIONS
+
+#define DECLARE_Mips_BACKEND_OPTIONS
+#define INITIAL_Mips_BACKEND_OPTIONS
+
+#define LLVM_TARGET(TargetName) DECLARE_##TargetName##_BACKEND_OPTIONS
+#include "llvm/Config/Targets.def"
+
+namespace art {
+namespace compiler_llvm {
+
+inline void InitialBackendOptions() {
+#define LLVM_TARGET(TargetName) INITIAL_##TargetName##_BACKEND_OPTIONS
+#include "llvm/Config/Targets.def"
+}
+
+} // namespace compiler_llvm
+} // namespace art
+
+#endif // ART_SRC_COMPILER_LLVM_BACKEND_OPTIONS_H_
diff --git a/src/compiler_llvm/compiler_llvm.cc b/src/compiler_llvm/compiler_llvm.cc
index b517d47..6d30912 100644
--- a/src/compiler_llvm/compiler_llvm.cc
+++ b/src/compiler_llvm/compiler_llvm.cc
@@ -16,6 +16,7 @@
#include "compiler_llvm.h"
+#include "backend_options.h"
#include "class_linker.h"
#include "compilation_unit.h"
#include "compiled_method.h"
@@ -33,7 +34,6 @@
#include <llvm/LinkAllPasses.h>
#include <llvm/LinkAllVMCore.h>
-#include <llvm/Support/CommandLine.h>
#include <llvm/Support/ManagedStatic.h>
#include <llvm/Support/TargetSelect.h>
#include <llvm/Support/Threading.h>
@@ -42,14 +42,6 @@
extern bool TimePassesIsEnabled;
}
-// NOTE: Although EnableARMLongCalls is defined in llvm/lib/Target/ARM/
-// ARMISelLowering.cpp, however, it is not in the llvm namespace.
-extern llvm::cl::opt<bool> EnableARMLongCalls;
-
-// ReserveR9 is defined in llvm/lib/Target/ARM/ARMSubtarget.cpp
-extern llvm::cl::opt<bool> ReserveR9;
-
-
namespace {
pthread_once_t llvm_initialized = PTHREAD_ONCE_INIT;
@@ -61,11 +53,8 @@
// NOTE: Uncomment following line to show the time consumption of LLVM passes
//llvm::TimePassesIsEnabled = true;
- // Enable -arm-reserve-r9
- ReserveR9 = true;
-
- // Enable -arm-long-calls
- EnableARMLongCalls = false;
+ // Initialize LLVM target-specific options.
+ art::compiler_llvm::InitialBackendOptions();
// Initialize LLVM target, MC subsystem, asm printer, and asm parser
llvm::InitializeAllTargets();
diff --git a/src/compiler_llvm/compiler_runtime_func_list.h b/src/compiler_llvm/compiler_runtime_func_list.h
index 6b116fd..d9bdc8e 100644
--- a/src/compiler_llvm/compiler_runtime_func_list.h
+++ b/src/compiler_llvm/compiler_runtime_func_list.h
@@ -65,49 +65,34 @@
V(copysignl) \
V(cos) \
V(cosf) \
- V(cosl) \
V(exp) \
V(exp2) \
V(exp2f) \
- V(exp2l) \
V(expf) \
- V(expl) \
V(floor) \
V(floorf) \
V(floorl) \
V(fma) \
V(fmaf) \
- V(fmal) \
V(fmod) \
V(fmodf) \
- V(fmodl) \
V(log) \
V(log10) \
V(log10f) \
- V(log10l) \
- V(log2) \
- V(log2f) \
- V(log2l) \
V(logf) \
- V(logl) \
V(memcpy) \
V(memmove) \
V(memset) \
V(nearbyint) \
V(nearbyintf) \
- V(nearbyintl) \
V(pow) \
V(powf) \
- V(powl) \
V(rint) \
V(rintf) \
- V(rintl) \
V(sin) \
V(sinf) \
- V(sinl) \
V(sqrt) \
V(sqrtf) \
- V(sqrtl) \
V(trunc) \
V(truncf) \
V(truncl)