]> granicus.if.org Git - clang/commitdiff
Driver: Add an explicit dsymutil action.
authorDaniel Dunbar <daniel@zuster.org>
Fri, 4 Jun 2010 18:28:36 +0000 (18:28 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Fri, 4 Jun 2010 18:28:36 +0000 (18:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105474 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/Action.h
lib/Driver/Action.cpp
lib/Driver/ToolChains.cpp
lib/Driver/Tools.cpp
lib/Driver/Tools.h

index ab3162a047072b91deacd7ffd384c55e9c93067e..4b45c98313c4caf88da12860945415390c8647d1 100644 (file)
@@ -51,9 +51,10 @@ public:
     AssembleJobClass,
     LinkJobClass,
     LipoJobClass,
+    DsymutilJobClass,
 
     JobClassFirst=PreprocessJobClass,
-    JobClassLast=LipoJobClass
+    JobClassLast=DsymutilJobClass
   };
 
   static const char *getClassName(ActionClass AC);
@@ -211,6 +212,16 @@ public:
   static bool classof(const LipoJobAction *) { return true; }
 };
 
+class DsymutilJobAction : public JobAction {
+public:
+  DsymutilJobAction(ActionList &Inputs, types::ID Type);
+
+  static bool classof(const Action *A) {
+    return A->getKind() == DsymutilJobClass;
+  }
+  static bool classof(const DsymutilJobAction *) { return true; }
+};
+
 } // end namespace driver
 } // end namespace clang
 
index b9a3306d53c9fc8af3ca7478cb0c8fca7e157be3..f34971bfa0c74e969879faf4a51ab1eba0107e9f 100644 (file)
@@ -30,6 +30,7 @@ const char *Action::getClassName(ActionClass AC) {
   case AssembleJobClass: return "assembler";
   case LinkJobClass: return "linker";
   case LipoJobClass: return "lipo";
+  case DsymutilJobClass: return "dsymutil";
   }
 
   assert(0 && "invalid class");
@@ -79,3 +80,7 @@ LinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type)
 LipoJobAction::LipoJobAction(ActionList &Inputs, types::ID Type)
   : JobAction(LipoJobClass, Inputs, Type) {
 }
+
+DsymutilJobAction::DsymutilJobAction(ActionList &Inputs, types::ID Type)
+  : JobAction(DsymutilJobClass, Inputs, Type) {
+}
index abb55b07d106f48a97128838ed96d0c52a643ad2..92c7d793f9abf6c893854bfcac76676b9622d1db 100644 (file)
@@ -225,6 +225,8 @@ Tool &Darwin::SelectTool(const Compilation &C, const JobAction &JA) const {
       T = new tools::darwin::Link(*this); break;
     case Action::LipoJobClass:
       T = new tools::darwin::Lipo(*this); break;
+    case Action::DsymutilJobClass:
+      T = new tools::darwin::Dsymutil(*this); break;
     }
   }
 
@@ -740,6 +742,8 @@ Tool &Generic_GCC::SelectTool(const Compilation &C,
       // driver is Darwin.
     case Action::LipoJobClass:
       T = new tools::darwin::Lipo(*this); break;
+    case Action::DsymutilJobClass:
+      T = new tools::darwin::Dsymutil(*this); break;
     }
   }
 
index 0d6cb3020568d3ee6cb5cd427cf626e92ac95ac6..518debce932fbf1f9204d6d5053e99a2fe67e35c 100644 (file)
@@ -2603,6 +2603,26 @@ void darwin::Lipo::ConstructJob(Compilation &C, const JobAction &JA,
   Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
 }
 
+void darwin::Dsymutil::ConstructJob(Compilation &C, const JobAction &JA,
+                                    Job &Dest, const InputInfo &Output,
+                                    const InputInfoList &Inputs,
+                                    const ArgList &Args,
+                                    const char *LinkingOutput) const {
+  ArgStringList CmdArgs;
+
+  assert(Inputs.size() == 1 && "Unable to handle multiple inputs.");
+  const InputInfo &Input = Inputs[0];
+  assert(Input.isFilename() && "Unexpected dsymutil input.");
+  CmdArgs.push_back(Input.getFilename());
+
+  CmdArgs.push_back("-o");
+  CmdArgs.push_back(Output.getFilename());
+
+  const char *Exec =
+    Args.MakeArgString(getToolChain().GetProgramPath(C, "dsymutil"));
+  Dest.addCommand(new Command(JA, *this, Exec, CmdArgs));
+}
+
 void auroraux::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
                                       Job &Dest, const InputInfo &Output,
                                       const InputInfoList &Inputs,
index d5e98dd24c4882ff650e454b175454094a7c1ffc..606007d2df6f24db73e22c39528205c196ec6176 100644 (file)
@@ -288,6 +288,23 @@ namespace darwin {
                               const ArgList &TCArgs,
                               const char *LinkingOutput) const;
   };
+
+  class LLVM_LIBRARY_VISIBILITY Dsymutil : public DarwinTool  {
+  public:
+    Dsymutil(const ToolChain &TC) : DarwinTool("darwin::Dsymutil",
+                                               "dsymutil", TC) {}
+
+    virtual bool acceptsPipedInput() const { return false; }
+    virtual bool canPipeOutput() const { return false; }
+    virtual bool hasIntegratedCPP() const { return false; }
+
+    virtual void ConstructJob(Compilation &C, const JobAction &JA,
+                              Job &Dest,
+                              const InputInfo &Output,
+                              const InputInfoList &Inputs,
+                              const ArgList &TCArgs,
+                              const char *LinkingOutput) const;
+  };
 }
 
   /// openbsd -- Directly call GNU Binutils assembler and linker