diff gen/main.cpp @ 1544:8863cf7236e6

We need to parse mArch ourselves now Build fix for LLVM r75890
author Benjamin Kramer <benny.kra@gmail.com>
date Fri, 17 Jul 2009 19:23:20 +0200
parents 21d691518d82
children f9660d9cf2ba
line wrap: on
line diff
--- a/gen/main.cpp	Wed Jul 15 23:01:51 2009 +0200
+++ b/gen/main.cpp	Fri Jul 17 19:23:20 2009 +0200
@@ -12,7 +12,7 @@
 #include "llvm/Target/SubtargetFeature.h"
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/TargetOptions.h"
-#include "llvm/Target/TargetMachineRegistry.h"
+#include "llvm/Target/TargetRegistry.h"
 #include "llvm/Target/TargetSelect.h"
 
 #include <stdio.h>
@@ -397,7 +397,7 @@
     // check -m32/64 sanity
     if (m32bits && m64bits)
         error("cannot use both -m32 and -m64 options");
-    else if ((m32bits || m64bits) && (mArch != 0 || !mTargetTriple.empty()))
+    else if ((m32bits || m64bits) && (!mArch.empty() || !mTargetTriple.empty()))
         error("-m32 and -m64 switches cannot be used together with -march and -mtriple switches");
     if (global.errors)
         fatal();
@@ -415,7 +415,7 @@
     // did the user override the target triple?
     if (mTargetTriple.empty())
     {
-        if (mArch != 0)
+        if (!mArch.empty())
         {
             error("you must specify a target triple as well with -mtriple when using the -march option");
             fatal();
@@ -437,9 +437,9 @@
 LDC_TARGETS
 #undef LLVM_TARGET
 
-    const llvm::Target *theTarget;
+    const llvm::Target *theTarget = NULL;
     // Check whether the user has explicitly specified an architecture to compile for.
-    if (mArch == 0)
+    if (mArch.empty())
     {
         std::string Err;
         theTarget = llvm::TargetRegistry::getClosestStaticTargetForModule(mod, Err);
@@ -451,7 +451,21 @@
     }
     else
     {
-        theTarget = &mArch->TheTarget;
+        for (llvm::TargetRegistry::iterator it = llvm::TargetRegistry::begin(),
+             ie = llvm::TargetRegistry::end(); it != ie; ++it)
+        {
+            if (mArch == it->getName())
+            {
+                theTarget = &*it;
+                break;
+            }
+        }
+
+        if (!theTarget)
+        {
+            error("invalid target '%s'", mArch.c_str());
+            fatal();
+        }
     }
 
     // Package up features to be passed to target/subtarget