Mercurial > projects > ldc
changeset 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 | 7fcb72d518f6 |
files | gen/cl_options.cpp gen/cl_options.h gen/main.cpp |
diffstat | 3 files changed, 22 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/gen/cl_options.cpp Wed Jul 15 23:01:51 2009 +0200 +++ b/gen/cl_options.cpp Fri Jul 17 19:23:20 2009 +0200 @@ -205,8 +205,7 @@ cl::value_desc("filename")); -cl::opt<const llvm::TargetMachineRegistry::entry*, false, - llvm::RegistryParser<llvm::TargetMachine> > mArch("march", +cl::opt<std::string> mArch("march", cl::desc("Architecture to generate code for:")); cl::opt<bool> m32bits("m32",
--- a/gen/cl_options.h Wed Jul 15 23:01:51 2009 +0200 +++ b/gen/cl_options.h Fri Jul 17 19:23:20 2009 +0200 @@ -6,8 +6,6 @@ #include <deque> #include <vector> -#include "llvm/Support/RegistryParser.h" -#include "llvm/Target/TargetMachineRegistry.h" #include "llvm/Support/CommandLine.h" namespace opts { @@ -37,8 +35,7 @@ extern cl::list<std::string> versions; extern cl::opt<std::string> moduleDepsFile; - extern cl::opt<const llvm::TargetMachineRegistry::entry*, false, - llvm::RegistryParser<llvm::TargetMachine> > mArch; + extern cl::opt<std::string> mArch; extern cl::opt<bool> m32bits; extern cl::opt<bool> m64bits; extern cl::opt<std::string> mCPU;
--- 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