/// 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;
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.
///
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) {
BuildActions(C->getArgs(), C->getActions());
if (CCCPrintActions) {
- PrintActions(C->getArgs(), C->getActions());
+ PrintActions(*C);
return 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))
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 << ", ";
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,
}
}
- // 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
}
InputInfo II;
- BuildJobsForAction(C,
- A, DefaultToolChain,
+ BuildJobsForAction(C, A, &C.getDefaultToolChain(),
/*CanAcceptPipe*/ true,
/*AtTopLevel*/ true,
/*LinkingOutput*/ LinkingOutput,
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),