changeset 583:12bda38ea366

Fixed choosing default target machine without needing to link in targets.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Sun, 07 Sep 2008 17:44:25 -0700
parents 723806dc48d8
children c7d7e2282ba3
files dmd/mars.c gen/llvmhelpers.cpp gen/toobj.cpp
diffstat 3 files changed, 13 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/dmd/mars.c	Sun Sep 07 16:16:10 2008 +0200
+++ b/dmd/mars.c	Sun Sep 07 17:44:25 2008 -0700
@@ -41,9 +41,6 @@
 
 void getenv_setargv(const char *envvar, int *pargc, char** *pargv);
 
-// llvmdc
-void findDefaultTarget();
-
 Global global;
 
 Global::Global()
@@ -753,7 +750,18 @@
     bool allowForceEndianness = false;
 
     if (global.params.llvmArch == 0) {
-        findDefaultTarget();
+    #if defined(__x86_64__) || defined(_M_X64)
+        global.params.llvmArch = "x86-64";
+    #elif defined(__i386__) || defined(_M_IX86)
+        global.params.llvmArch = "x86";
+    #elif defined(__ppc__) || defined(_M_PPC)
+        if (global.params.is64bit)
+            global.params.llvmArch = "ppc64";
+        else
+            global.params.llvmArch = "ppc32";
+    #else
+    #error
+    #endif
     }
 
     if (strcmp(global.params.llvmArch,"x86")==0) {
--- a/gen/llvmhelpers.cpp	Sun Sep 07 16:16:10 2008 +0200
+++ b/gen/llvmhelpers.cpp	Sun Sep 07 17:44:25 2008 -0700
@@ -1483,23 +1483,6 @@
 
 //////////////////////////////////////////////////////////////////////////////////////////
 
-void findDefaultTarget()
-{
-    std::string err_str;
-    const llvm::TargetMachineRegistry::entry* e = llvm::TargetMachineRegistry::getClosestTargetForJIT(err_str);
-    if (e == 0)
-    {
-        error("Failed to find a default target machine: %s", err_str.c_str());
-        fatal();
-    }
-    else
-    {
-        global.params.llvmArch = const_cast<char*>(e->Name);
-    }
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////
-
 LLValue* DtoBoolean(Loc& loc, DValue* dval)
 {
     Type* dtype = dval->getType()->toBasetype();
--- a/gen/toobj.cpp	Sun Sep 07 16:16:10 2008 +0200
+++ b/gen/toobj.cpp	Sun Sep 07 17:44:25 2008 -0700
@@ -95,15 +95,7 @@
     ir.module->setTargetTriple(target_triple);
     ir.module->setDataLayout(global.params.data_layout);
 
-    // heavily inspired by tools/llc/llc.cpp:200-230
-    const llvm::TargetMachineRegistry::entry* targetEntry;
-    std::string targetError;
-    targetEntry = llvm::TargetMachineRegistry::getClosestStaticTargetForModule(*ir.module, targetError);
-    assert(targetEntry && "Failed to find a static target for module");
-    std::auto_ptr<llvm::TargetMachine> targetPtr(targetEntry->CtorFn(*ir.module, "")); // TODO: replace "" with features
-    assert(targetPtr.get() && "Could not allocate target machine!");
-    llvm::TargetMachine &targetMachine = *targetPtr.get();
-    gTargetData = targetMachine.getTargetData();
+    gTargetData = new llvm::TargetData(global.params.data_layout);
 
     // debug info
     if (global.params.symdebug) {