]> granicus.if.org Git - clang/commitdiff
Hoist the targeted triple object into an actual object in the Driver.
authorChandler Carruth <chandlerc@gmail.com>
Tue, 24 Jan 2012 10:21:46 +0000 (10:21 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Tue, 24 Jan 2012 10:21:46 +0000 (10:21 +0000)
The Driver has a fixed target, whether we like it or not, the
DefaultTargetTriple is not a default. This at least makes things more
honest. I'll eventually get rid of most (if not all) of
DefaultTargetTriple with this proper triple object. Bit of a WIP.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148796 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/Driver.h
lib/Driver/Driver.cpp

index 845e527067d23a8292989e0b37b1a07d38beacbf..b9cbeaac7b75b40a272f653fa3096d1e556f632c 100644 (file)
@@ -102,6 +102,11 @@ public:
   /// Information about the host which can be overridden by the user.
   std::string HostBits, HostMachine, HostSystem, HostRelease;
 
+  /// \brief Target triple.
+  /// Represents which platforms this driver will target at each stage of the
+  /// compilation.
+  llvm::Triple TargetTriple;
+
   /// The file to log CC_PRINT_OPTIONS output to, if enabled.
   const char *CCPrintOptionsFilename;
 
@@ -381,7 +386,7 @@ public:
 
   /// GetHostInfo - Construct a new host info object for the given
   /// host triple.
-  const HostInfo *GetHostInfo(const char *HostTriple) const;
+  const HostInfo *GetHostInfo(const llvm::Triple &Triple) const;
 
   /// ShouldUseClangCompilar - Should the clang compiler be used to
   /// handle this action.
index 8699a92228b60583cc474b9fe38666d1acd79cfb..1edea6136098ad95c100f648e516005e2675cbb3 100644 (file)
@@ -57,6 +57,7 @@ Driver::Driver(StringRef ClangExecutable,
     DefaultImageName(DefaultImageName),
     DriverTitle("clang \"gcc-compatible\" driver"),
     Host(0),
+    TargetTriple(llvm::Triple::normalize(DefaultTargetTriple)),
     CCPrintOptionsFilename(0), CCPrintHeadersFilename(0),
     CCLogDiagnosticsFilename(0), CCCIsCXX(false),
     CCCIsCPP(false),CCCEcho(false), CCCPrintBindings(false),
@@ -321,7 +322,11 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
   if (Args->hasArg(options::OPT_nostdlib))
     UseStdLib = false;
 
-  Host = GetHostInfo(DefaultTargetTriple.c_str());
+  // Reset the target triple here as we may have adjusted the
+  // DefaultTargetTriple string for flags above.
+  // FIXME: Same fix is needed here when the above flag management is fixed.
+  TargetTriple = llvm::Triple(llvm::Triple::normalize(DefaultTargetTriple));
+  Host = GetHostInfo(TargetTriple);
 
   // Perform the default argument translations.
   DerivedArgList *TranslatedArgs = TranslateInputArgs(*Args);
@@ -1571,9 +1576,8 @@ std::string Driver::GetTemporaryPath(StringRef Prefix, const char *Suffix)
   return P.str();
 }
 
-const HostInfo *Driver::GetHostInfo(const char *TripleStr) const {
+const HostInfo *Driver::GetHostInfo(const llvm::Triple &Triple) const {
   llvm::PrettyStackTraceString CrashInfo("Constructing host");
-  llvm::Triple Triple(llvm::Triple::normalize(TripleStr).c_str());
 
   // TCE is an osless target
   if (Triple.getArchName() == "tce")