OSDN Git Service

start wiring up support for asm parsing.
authorChris Lattner <sabre@nondot.org>
Sun, 21 Jun 2009 05:22:37 +0000 (05:22 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 21 Jun 2009 05:22:37 +0000 (05:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73846 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-mc/llvm-mc.cpp

index e8e51c5..74e419c 100644 (file)
@@ -16,6 +16,7 @@
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/PrettyStackTrace.h"
+#include "llvm/Support/SourceMgr.h"
 #include "llvm/Support/raw_ostream.h"
 #include "llvm/System/Signals.h"
 using namespace llvm;
@@ -27,31 +28,63 @@ static cl::opt<std::string>
 OutputFilename("o", cl::desc("Output filename"),
                cl::value_desc("filename"));
 
-int main(int argc, char **argv) {
-  // Print a stack trace if we signal out.
-  sys::PrintStackTraceOnErrorSignal();
-  PrettyStackTraceProgram X(argc, argv);
-  
-  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
+static cl::list<std::string>
+IncludeDirs("I", cl::desc("Directory of include files"),
+            cl::value_desc("directory"), cl::Prefix);
 
-  cl::ParseCommandLineOptions(argc, argv, "llvm machine code playground\n");
+enum ActionType {
+  AC_Assemble
+};
 
-  std::string ErrorMessage;
-  
-  MemoryBuffer *Buffer
-    = MemoryBuffer::getFileOrSTDIN(InputFilename, &ErrorMessage);
+static cl::opt<ActionType>
+Action(cl::desc("Action to perform:"),
+       cl::values(clEnumValN(AC_Assemble, "assemble",
+                             "Assemble a .s file (default)"),
+                  clEnumValEnd));
 
+static int AssembleInput(const char *ProgName) {
+  std::string ErrorMessage;
+  MemoryBuffer *Buffer = MemoryBuffer::getFileOrSTDIN(InputFilename,
+                                                      &ErrorMessage);
   if (Buffer == 0) {
-    errs() << argv[0] << ": ";
+    errs() << ProgName << ": ";
     if (ErrorMessage.size())
       errs() << ErrorMessage << "\n";
     else
       errs() << "input file didn't read correctly.\n";
     return 1;
   }
+
+  SourceMgr SrcMgr;
+  
+  // Tell SrcMgr about this buffer, which is what TGParser will pick up.
+  SrcMgr.AddNewSourceBuffer(Buffer, SMLoc());
+  
+  // Record the location of the include directories so that the lexer can find
+  // it later.
+  SrcMgr.setIncludeDirs(IncludeDirs);
   
+  //TGParser Parser(SrcMgr);
+  //return Parser.ParseFile();
   
   
+  return 1;
+}
+
+
+int main(int argc, char **argv) {
+  // Print a stack trace if we signal out.
+  sys::PrintStackTraceOnErrorSignal();
+  PrettyStackTraceProgram X(argc, argv);
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
+  cl::ParseCommandLineOptions(argc, argv, "llvm machine code playground\n");
+
+  switch (Action) {
+  default:
+  case AC_Assemble:
+    return AssembleInput(argv[0]);
+  }
+  
   return 0;
 }