From 10ffa9a4887d9376e3eb3598e40523d1b58773c9 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Wed, 18 Mar 2009 03:13:20 +0000 Subject: [PATCH] Driver: Ditch Driver::DefaultToolChain, this can vary between compilations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67162 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Driver/Action.h | 2 ++ include/clang/Driver/Driver.h | 7 +----- lib/Driver/Driver.cpp | 43 ++++++++++++++++------------------- 3 files changed, 23 insertions(+), 29 deletions(-) diff --git a/include/clang/Driver/Action.h b/include/clang/Driver/Action.h index b65e5af65a..b9bf671db2 100644 --- a/include/clang/Driver/Action.h +++ b/include/clang/Driver/Action.h @@ -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: diff --git a/include/clang/Driver/Driver.h b/include/clang/Driver/Driver.h index aea5d8c979..8198913bd0 100644 --- a/include/clang/Driver/Driver.h +++ b/include/clang/Driver/Driver.h @@ -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. /// diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index f60271c02e..84f3428c62 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -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 &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(A)) { - os << "\"" << IA->getInputArg().getValue(Args) << "\""; + os << "\"" << IA->getInputArg().getValue(C.getArgs()) << "\""; } else if (BindArchAction *BIA = dyn_cast(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 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(A)) { const char *ArchName = BAA->getArchName(); + if (!ArchName) + ArchName = C.getDefaultToolChain().getArchName().c_str(); BuildJobsForAction(C, *BAA->begin(), Host->getToolChain(C.getArgs(), ArchName), -- 2.40.0