]> granicus.if.org Git - clang/commitdiff
Driver: ConstructJob also needs to know the destination (where to put
authorDaniel Dunbar <daniel@zuster.org>
Wed, 18 Mar 2009 07:06:02 +0000 (07:06 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Wed, 18 Mar 2009 07:06:02 +0000 (07:06 +0000)
its commands).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67179 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/Job.h
include/clang/Driver/Tool.h
lib/Driver/Driver.cpp
lib/Driver/InputInfo.h
lib/Driver/Job.cpp
lib/Driver/Tools.cpp
lib/Driver/Tools.h

index d8737393aaaa61bec571cb1710be586f2d299ba8..f60f5146414c37e4cacf81fe360d3d66092ed10c 100644 (file)
@@ -22,6 +22,7 @@ using llvm::dyn_cast_or_null;
 
 namespace clang {
 namespace driver {
+  class Command;
 
 class Job {
 public:
@@ -41,6 +42,10 @@ public:
 
   JobClass getKind() const { return Kind; }
 
+  /// addCommand - Append a command to the current job, which must be
+  /// either a piped job or a job list.
+  void addCommand(Command *C);
+
   static bool classof(const Job *) { return true; }      
 };
 
index 070a162957650383f3e71da914769e1146f09f0b..d8b37e9ead88c51924943a75eab7fa925e341073 100644 (file)
@@ -19,6 +19,7 @@ namespace driver {
   class ArgList;
   class Compilation;
   class InputInfo;
+  class Job;
   class JobAction;
   class ToolChain;
   
@@ -49,11 +50,13 @@ public:
   /// ConstructJob - Construct jobs to perform the action \arg JA,
   /// writing to \arg Output and with \arg Inputs.
   ///
+  /// \param Dest - Where to put the resulting commands.
   /// \param TCArgs - The argument list for this toolchain, with any
   /// tool chain specific translations applied.
   /// \param LinkingOutput - If this output will eventually feed the
   /// linker, then this is the final output name of the linked image.
   virtual void ConstructJob(Compilation &C, const JobAction &JA,
+                            Job &Dest,
                             const InputInfo &Output, 
                             const InputInfoList &Inputs, 
                             const ArgList &TCArgs, 
index 1e4cd7f4782f6bbc33c3ed760ed823cdac85bdcb..f06166e930f5384fd04f3b8be22da00a686620b1 100644 (file)
@@ -751,6 +751,7 @@ void Driver::BuildJobsForAction(Compilation &C,
     if (!PJ) {
       PJ = new PipedJob();
       cast<JobList>(Dest)->addJob(PJ);
+      Dest = PJ;
     }
     Result = InputInfo(PJ, A->getType(), BaseInput);
   } else {
@@ -768,7 +769,7 @@ void Driver::BuildJobsForAction(Compilation &C,
     llvm::errs() << "], output: " << Result.getAsString() << "\n";
   } else {
     const ArgList &TCArgs = C.getArgsForToolChain(TC);
-    T.ConstructJob(C, *JA, Result, InputInfos, TCArgs, LinkingOutput);
+    T.ConstructJob(C, *JA, *Dest, Result, InputInfos, TCArgs, LinkingOutput);
   }
 }
 
index 6cef821e398ae79609443cbdc7fa93d2ad4ec526..617e70365dd6df824531f57f77dc92d473ed33e2 100644 (file)
@@ -10,6 +10,8 @@
 #ifndef CLANG_LIB_DRIVER_INPUTINFO_H_
 #define CLANG_LIB_DRIVER_INPUTINFO_H_
 
+#include "clang/Driver/Types.h"
+
 #include <cassert>
 #include <string>
 
index 1efc38a8e82eb577b34aa320910129dd0427493a..222cf15db60f5b0bfb1ecc92af9ecd0da733a8fe 100644 (file)
@@ -21,3 +21,11 @@ Command::Command(const char *_Executable, const ArgStringList &_Arguments)
 PipedJob::PipedJob() : Job(PipedJobClass) {}
 
 JobList::JobList() : Job(JobListClass) {}
+
+void Job::addCommand(Command *C) {
+  if (PipedJob *PJ = dyn_cast<PipedJob>(this))
+    PJ->addCommand(C);
+  else
+    cast<JobList>(this)->addJob(C);
+}
+    
index 25023c16eff213d60fb5a8838000a2a2bb590afd..20c307417c22433f8a9d60cfb3019cc662e9fef1 100644 (file)
@@ -9,18 +9,29 @@
 
 #include "Tools.h"
 
+#include "clang/Driver/Arg.h"
+#include "clang/Driver/Compilation.h"
+#include "clang/Driver/Job.h"
+#include "clang/Driver/Util.h"
+
+#include "llvm/ADT/SmallVector.h"
+
+#include "InputInfo.h"
+
 using namespace clang::driver;
 using namespace clang::driver::tools;
 
 void Clang::ConstructJob(Compilation &C, const JobAction &JA,
-                         const InputInfo &Output, 
+                         Job &Dest,
+                         const InputInfo &Output,
                          const InputInfoList &Inputs,
                          const ArgList &TCArgs,
                          const char *LinkingOutput) const {
 }
 
 void gcc::Preprocess::ConstructJob(Compilation &C, const JobAction &JA,
-                                   const InputInfo &Output, 
+                                   Job &Dest,
+                                   const InputInfo &Output,
                                    const InputInfoList &Inputs,
                                    const ArgList &TCArgs,
                                    const char *LinkingOutput) const {
@@ -28,7 +39,8 @@ void gcc::Preprocess::ConstructJob(Compilation &C, const JobAction &JA,
 }
 
 void gcc::Precompile::ConstructJob(Compilation &C, const JobAction &JA,
-                                   const InputInfo &Output, 
+                                   Job &Dest,
+                                   const InputInfo &Output,
                                    const InputInfoList &Inputs,
                                    const ArgList &TCArgs,
                                    const char *LinkingOutput) const {
@@ -36,7 +48,8 @@ void gcc::Precompile::ConstructJob(Compilation &C, const JobAction &JA,
 }
 
 void gcc::Compile::ConstructJob(Compilation &C, const JobAction &JA,
-                                const InputInfo &Output, 
+                                Job &Dest,
+                                const InputInfo &Output,
                                 const InputInfoList &Inputs,
                                 const ArgList &TCArgs,
                                 const char *LinkingOutput) const {
@@ -44,7 +57,8 @@ void gcc::Compile::ConstructJob(Compilation &C, const JobAction &JA,
 }
 
 void gcc::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
-                                 const InputInfo &Output, 
+                                 Job &Dest,
+                                 const InputInfo &Output,
                                  const InputInfoList &Inputs,
                                  const ArgList &TCArgs,
                                  const char *LinkingOutput) const {
@@ -52,7 +66,8 @@ void gcc::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
 }
 
 void gcc::Link::ConstructJob(Compilation &C, const JobAction &JA,
-                             const InputInfo &Output, 
+                             Job &Dest,
+                             const InputInfo &Output,
                              const InputInfoList &Inputs,
                              const ArgList &TCArgs,
                              const char *LinkingOutput) const {
index d774e02ff0ce1f63a07a3b872791c514f15f5996..83dab0604e66c2384fccb8afd5ad4a7e71f36496 100644 (file)
@@ -27,6 +27,7 @@ namespace tools {
     virtual bool hasIntegratedCPP() const { return true; }
 
     virtual void ConstructJob(Compilation &C, const JobAction &JA,
+                              Job &Dest,
                               const InputInfo &Output, 
                               const InputInfoList &Inputs, 
                               const ArgList &TCArgs, 
@@ -44,6 +45,7 @@ namespace gcc {
     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, 
@@ -59,6 +61,7 @@ namespace gcc {
     virtual bool hasIntegratedCPP() const { return true; }
 
     virtual void ConstructJob(Compilation &C, const JobAction &JA,
+                              Job &Dest,
                               const InputInfo &Output, 
                               const InputInfoList &Inputs, 
                               const ArgList &TCArgs, 
@@ -74,6 +77,7 @@ namespace gcc {
     virtual bool hasIntegratedCPP() const { return true; }
 
     virtual void ConstructJob(Compilation &C, const JobAction &JA,
+                              Job &Dest,
                               const InputInfo &Output, 
                               const InputInfoList &Inputs, 
                               const ArgList &TCArgs, 
@@ -89,6 +93,7 @@ namespace gcc {
     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, 
@@ -104,6 +109,7 @@ namespace gcc {
     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,