Driver: Ditch Driver::DefaultToolChain, this can vary between compilations.

llvm-svn: 67162
This commit is contained in:
Daniel Dunbar 2009-03-18 03:13:20 +00:00
parent 896cb66166
commit eb843bedf9
3 changed files with 23 additions and 29 deletions

View File

@ -105,6 +105,8 @@ public:
};
class BindArchAction : public Action {
/// The architecture to bind, or 0 if the default architecture
/// should be bound.
const char *ArchName;
public:

View File

@ -64,11 +64,6 @@ public:
/// will generally be the actual host platform, but not always.
const HostInfo *Host;
/// The default tool chain for this host.
// FIXME: This shouldn't be here; this should be in a
// CompilationInfo structure.
ToolChain *DefaultToolChain;
/// Information about the host which can be overriden by the user.
std::string HostBits, HostMachine, HostSystem, HostRelease;
@ -164,7 +159,7 @@ public:
void PrintVersion() const;
/// PrintActions - Print the list of actions.
void PrintActions(const ArgList &Args, const ActionList &Actions) const;
void PrintActions(const Compilation &C) const;
/// GetFilePath - Lookup \arg Name in the list of file search paths.
///

View File

@ -162,12 +162,9 @@ Compilation *Driver::BuildCompilation(int argc, const char **argv) {
ArgList *Args = ParseArgStrings(Start, End);
Host = GetHostInfo(HostTriple);
// FIXME: This shouldn't live inside Driver, the default tool chain
// is part of the compilation (it is arg dependent).
DefaultToolChain = Host->getToolChain(*Args);
// The compilation takes ownership of Args.
Compilation *C = new Compilation(*DefaultToolChain, Args);
Compilation *C = new Compilation(*Host->getToolChain(*Args), Args);
// FIXME: This behavior shouldn't be here.
if (CCCPrintOptions) {
@ -188,7 +185,7 @@ Compilation *Driver::BuildCompilation(int argc, const char **argv) {
BuildActions(C->getArgs(), C->getActions());
if (CCCPrintActions) {
PrintActions(C->getArgs(), C->getActions());
PrintActions(*C);
return C;
}
@ -255,7 +252,7 @@ bool Driver::HandleImmediateArgs(const Compilation &C) {
return true;
}
static unsigned PrintActions1(const ArgList &Args,
static unsigned PrintActions1(const Compilation &C,
Action *A,
std::map<Action*, unsigned> &Ids) {
if (Ids.count(A))
@ -266,14 +263,15 @@ static unsigned PrintActions1(const ArgList &Args,
os << Action::getClassName(A->getKind()) << ", ";
if (InputAction *IA = dyn_cast<InputAction>(A)) {
os << "\"" << IA->getInputArg().getValue(Args) << "\"";
os << "\"" << IA->getInputArg().getValue(C.getArgs()) << "\"";
} else if (BindArchAction *BIA = dyn_cast<BindArchAction>(A)) {
os << "\"" << BIA->getArchName() << "\", "
<< "{" << PrintActions1(Args, *BIA->begin(), Ids) << "}";
os << '"' << (BIA->getArchName() ? BIA->getArchName() :
C.getDefaultToolChain().getArchName()) << '"'
<< ", {" << PrintActions1(C, *BIA->begin(), Ids) << "}";
} else {
os << "{";
for (Action::iterator it = A->begin(), ie = A->end(); it != ie;) {
os << PrintActions1(Args, *it, Ids);
os << PrintActions1(C, *it, Ids);
++it;
if (it != ie)
os << ", ";
@ -289,12 +287,11 @@ static unsigned PrintActions1(const ArgList &Args,
return Id;
}
void Driver::PrintActions(const ArgList &Args,
const ActionList &Actions) const {
void Driver::PrintActions(const Compilation &C) const {
std::map<Action*, unsigned> Ids;
for (ActionList::const_iterator it = Actions.begin(), ie = Actions.end();
it != ie; ++it)
PrintActions1(Args, *it, Ids);
for (ActionList::const_iterator it = C.getActions().begin(),
ie = C.getActions().end(); it != ie; ++it)
PrintActions1(C, *it, Ids);
}
void Driver::BuildUniversalActions(const ArgList &Args,
@ -319,12 +316,11 @@ void Driver::BuildUniversalActions(const ArgList &Args,
}
}
// When there is no explicit arch for this platform, get one from
// the host so that -Xarch_ is handled correctly.
if (!Archs.size()) {
const char *Arch = DefaultToolChain->getArchName().c_str();
Archs.push_back(Arch);
}
// When there is no explicit arch for this platform, make sure we
// still bind the architecture (to the default) so that -Xarch_ is
// handled correctly.
if (!Archs.size())
Archs.push_back(0);
// FIXME: We killed off some others but these aren't yet detected in
// a functional manner. If we added information to jobs about which
@ -641,8 +637,7 @@ void Driver::BuildJobs(Compilation &C) const {
}
InputInfo II;
BuildJobsForAction(C,
A, DefaultToolChain,
BuildJobsForAction(C, A, &C.getDefaultToolChain(),
/*CanAcceptPipe*/ true,
/*AtTopLevel*/ true,
/*LinkingOutput*/ LinkingOutput,
@ -679,6 +674,8 @@ void Driver::BuildJobsForAction(Compilation &C,
if (const BindArchAction *BAA = dyn_cast<BindArchAction>(A)) {
const char *ArchName = BAA->getArchName();
if (!ArchName)
ArchName = C.getDefaultToolChain().getArchName().c_str();
BuildJobsForAction(C,
*BAA->begin(),
Host->getToolChain(C.getArgs(), ArchName),