summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-03-18 07:06:02 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-03-18 07:06:02 +0000
commit04c4c2c3db48fbc43542c5609f27f163ae798469 (patch)
treec1eaca22ae96ec661b538a06d61438cd33a9a9fb /clang/lib
parent3beceaf7f134875d3cd8357fec4314ea32987193 (diff)
downloadbcm5719-llvm-04c4c2c3db48fbc43542c5609f27f163ae798469.tar.gz
bcm5719-llvm-04c4c2c3db48fbc43542c5609f27f163ae798469.zip
Driver: ConstructJob also needs to know the destination (where to put
its commands). llvm-svn: 67179
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Driver/Driver.cpp3
-rw-r--r--clang/lib/Driver/InputInfo.h2
-rw-r--r--clang/lib/Driver/Job.cpp8
-rw-r--r--clang/lib/Driver/Tools.cpp27
-rw-r--r--clang/lib/Driver/Tools.h6
5 files changed, 39 insertions, 7 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 1e4cd7f4782..f06166e930f 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -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);
}
}
diff --git a/clang/lib/Driver/InputInfo.h b/clang/lib/Driver/InputInfo.h
index 6cef821e398..617e70365dd 100644
--- a/clang/lib/Driver/InputInfo.h
+++ b/clang/lib/Driver/InputInfo.h
@@ -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>
diff --git a/clang/lib/Driver/Job.cpp b/clang/lib/Driver/Job.cpp
index 1efc38a8e82..222cf15db60 100644
--- a/clang/lib/Driver/Job.cpp
+++ b/clang/lib/Driver/Job.cpp
@@ -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);
+}
+
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 25023c16eff..20c307417c2 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -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 {
diff --git a/clang/lib/Driver/Tools.h b/clang/lib/Driver/Tools.h
index d774e02ff0c..83dab0604e6 100644
--- a/clang/lib/Driver/Tools.h
+++ b/clang/lib/Driver/Tools.h
@@ -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,
OpenPOWER on IntegriCloud