[cfe-commits] r67162 - in /cfe/trunk: include/clang/Driver/Action.h include/clang/Driver/Driver.h lib/Driver/Driver.cpp

Daniel Dunbar daniel at zuster.org
Tue Mar 17 20:13:22 PDT 2009


Author: ddunbar
Date: Tue Mar 17 22:13:20 2009
New Revision: 67162

URL: http://llvm.org/viewvc/llvm-project?rev=67162&view=rev
Log:
Driver: Ditch Driver::DefaultToolChain, this can vary between compilations.

Modified:
    cfe/trunk/include/clang/Driver/Action.h
    cfe/trunk/include/clang/Driver/Driver.h
    cfe/trunk/lib/Driver/Driver.cpp

Modified: cfe/trunk/include/clang/Driver/Action.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Action.h?rev=67162&r1=67161&r2=67162&view=diff

==============================================================================
--- cfe/trunk/include/clang/Driver/Action.h (original)
+++ cfe/trunk/include/clang/Driver/Action.h Tue Mar 17 22:13:20 2009
@@ -105,6 +105,8 @@
 };
 
 class BindArchAction : public Action {
+  /// The architecture to bind, or 0 if the default architecture
+  /// should be bound.
   const char *ArchName;
 
 public:

Modified: cfe/trunk/include/clang/Driver/Driver.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Driver.h?rev=67162&r1=67161&r2=67162&view=diff

==============================================================================
--- cfe/trunk/include/clang/Driver/Driver.h (original)
+++ cfe/trunk/include/clang/Driver/Driver.h Tue Mar 17 22:13:20 2009
@@ -64,11 +64,6 @@
   /// 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 @@
   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.
   ///

Modified: cfe/trunk/lib/Driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=67162&r1=67161&r2=67162&view=diff

==============================================================================
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Tue Mar 17 22:13:20 2009
@@ -162,12 +162,9 @@
   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 @@
     BuildActions(C->getArgs(), C->getActions());
 
   if (CCCPrintActions) {
-    PrintActions(C->getArgs(), C->getActions());
+    PrintActions(*C);
     return C;
   }
 
@@ -255,7 +252,7 @@
   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 @@
   
   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 @@
   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 @@
     }
   }
 
-  // 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 @@
     }
 
     InputInfo II;
-    BuildJobsForAction(C, 
-                       A, DefaultToolChain, 
+    BuildJobsForAction(C, A, &C.getDefaultToolChain(), 
                        /*CanAcceptPipe*/ true,
                        /*AtTopLevel*/ true,
                        /*LinkingOutput*/ LinkingOutput,
@@ -679,6 +674,8 @@
 
   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),





More information about the cfe-commits mailing list