diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-07-17 22:38:58 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-07-17 22:38:58 +0000 |
commit | b4b53e5c13167925d6315a6f57c7b863e4e2b704 (patch) | |
tree | 798dca05cc66cf81e982d211b009becd5d69df10 /tools/llvm-mc/llvm-mc.cpp | |
parent | cbdf0e2455d78b047aec4141ec84cf96095bee16 (diff) |
llvm-mc: Add -triple, and start fetching the target asm printer.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76257 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-mc/llvm-mc.cpp')
-rw-r--r-- | tools/llvm-mc/llvm-mc.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/tools/llvm-mc/llvm-mc.cpp b/tools/llvm-mc/llvm-mc.cpp index b52edd1ed4..c7f3996c97 100644 --- a/tools/llvm-mc/llvm-mc.cpp +++ b/tools/llvm-mc/llvm-mc.cpp @@ -22,6 +22,8 @@ #include "llvm/Support/SourceMgr.h" #include "llvm/Support/raw_ostream.h" #include "llvm/System/Signals.h" +#include "llvm/Target/TargetRegistry.h" +#include "llvm/Target/TargetSelect.h" #include "AsmParser.h" using namespace llvm; @@ -36,6 +38,11 @@ static cl::list<std::string> IncludeDirs("I", cl::desc("Directory of include files"), cl::value_desc("directory"), cl::Prefix); +static cl::opt<std::string> +Triple("triple", cl::desc("Target triple to assemble for," + "see -version for available targets"), + cl::init("")); + enum ActionType { AC_AsLex, AC_Assemble @@ -137,6 +144,23 @@ static int AsLexInput(const char *ProgName) { } static int AssembleInput(const char *ProgName) { + // Get the target specific parser. + std::string Error; + const Target *TheTarget = + TargetRegistry::getClosestStaticTargetForTriple(Triple, Error); + if (TheTarget == 0) { + errs() << ProgName << ": error: unable to get target for '" << Triple + << "', see --version and --triple.\n"; + return 1; + } + + TargetAsmParser *TAP = TheTarget->createAsmParser(); + if (!TAP) { + errs() << ProgName + << ": error: this target does not support assembly parsing.\n"; + return 1; + } + std::string ErrorMessage; MemoryBuffer *Buffer = MemoryBuffer::getFileOrSTDIN(InputFilename, &ErrorMessage); @@ -174,6 +198,11 @@ int main(int argc, char **argv) { sys::PrintStackTraceOnErrorSignal(); PrettyStackTraceProgram X(argc, argv); llvm_shutdown_obj Y; // Call llvm_shutdown() on exit. + + // Initialize targets and assembly parsers. + llvm::InitializeAllTargetInfos(); + llvm::InitializeAllAsmParsers(); + cl::ParseCommandLineOptions(argc, argv, "llvm machine code playground\n"); switch (Action) { |