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)