[cfe-commits] r87051 - in /cfe/trunk: include/clang/Frontend/FrontendOptions.h tools/clang-cc/Options.cpp tools/clang-cc/clang-cc.cpp

Daniel Dunbar daniel at zuster.org
Thu Nov 12 17:02:19 PST 2009


Author: ddunbar
Date: Thu Nov 12 19:02:19 2009
New Revision: 87051

URL: http://llvm.org/viewvc/llvm-project?rev=87051&view=rev
Log:
Move -target-{triple,abi} options into FrontendOptions.

Modified:
    cfe/trunk/include/clang/Frontend/FrontendOptions.h
    cfe/trunk/tools/clang-cc/Options.cpp
    cfe/trunk/tools/clang-cc/clang-cc.cpp

Modified: cfe/trunk/include/clang/Frontend/FrontendOptions.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/FrontendOptions.h?rev=87051&r1=87050&r2=87051&view=diff

==============================================================================
--- cfe/trunk/include/clang/Frontend/FrontendOptions.h (original)
+++ cfe/trunk/include/clang/Frontend/FrontendOptions.h Thu Nov 12 19:02:19 2009
@@ -37,6 +37,13 @@
   unsigned ShowTimers : 1;                 ///< Show timers for individual
                                            /// actions.
 
+  /// If given, the name of the target triple to compile for. If not given the
+  /// target will be selected to match the host.
+  std::string TargetTriple;
+
+  /// If given, the name of the target ABI to use.
+  std::string TargetABI;
+
   /// The input files.
   std::vector<std::string> InputFilenames;
 

Modified: cfe/trunk/tools/clang-cc/Options.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-cc/Options.cpp?rev=87051&r1=87050&r2=87051&view=diff

==============================================================================
--- cfe/trunk/tools/clang-cc/Options.cpp (original)
+++ cfe/trunk/tools/clang-cc/Options.cpp Thu Nov 12 19:02:19 2009
@@ -344,6 +344,14 @@
 Stats("print-stats",
       llvm::cl::desc("Print performance metrics and statistics"));
 
+static llvm::cl::opt<std::string>
+TargetABI("target-abi",
+          llvm::cl::desc("Target a particular ABI type"));
+
+static llvm::cl::opt<std::string>
+TargetTriple("triple",
+  llvm::cl::desc("Specify target triple (e.g. i686-apple-darwin9)"));
+
 static llvm::cl::opt<bool>
 TimeReport("ftime-report",
            llvm::cl::desc("Print the amount of time each "
@@ -784,6 +792,8 @@
   Opts.ShowMacrosInCodeCompletion = CodeCompletionWantsMacros;
   Opts.ShowStats = Stats;
   Opts.ShowTimers = TimeReport;
+  Opts.TargetABI = TargetABI;
+  Opts.TargetTriple = TargetTriple;
   Opts.ViewClassInheritance = InheritanceViewCls;
 
   // '-' is the default input if none is given.

Modified: cfe/trunk/tools/clang-cc/clang-cc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-cc/clang-cc.cpp?rev=87051&r1=87050&r2=87051&view=diff

==============================================================================
--- cfe/trunk/tools/clang-cc/clang-cc.cpp (original)
+++ cfe/trunk/tools/clang-cc/clang-cc.cpp Thu Nov 12 19:02:19 2009
@@ -199,14 +199,6 @@
                                "Clang AST"),
                     clEnumValEnd));
 
-static llvm::cl::opt<std::string>
-TargetTriple("triple",
-  llvm::cl::desc("Specify target triple (e.g. i686-apple-darwin9)"));
-
-static llvm::cl::opt<std::string>
-TargetABI("target-abi",
-          llvm::cl::desc("Target a particular ABI type"));
-
 //===----------------------------------------------------------------------===//
 // Utility Methods
 //===----------------------------------------------------------------------===//
@@ -905,19 +897,39 @@
   return LK;
 }
 
-static void ConstructCompilerInvocation(CompilerInvocation &Opts,
-                                        const char *Argv0,
-                                        const DiagnosticOptions &DiagOpts,
-                                        TargetInfo &Target,
-                                        bool &IsAST) {
+static TargetInfo *
+ConstructCompilerInvocation(CompilerInvocation &Opts, Diagnostic &Diags,
+                            const char *Argv0,
+                            const DiagnosticOptions &DiagOpts, bool &IsAST) {
   Opts.getDiagnosticOpts() = DiagOpts;
 
   // Initialize frontend options.
   InitializeFrontendOptions(Opts.getFrontendOpts());
 
+  // Initialize base triple.  If a -triple option has been specified, use
+  // that triple.  Otherwise, default to the host triple.
+  llvm::Triple Triple(Opts.getFrontendOpts().TargetTriple);
+  if (Triple.getTriple().empty())
+    Triple = llvm::Triple(llvm::sys::getHostTriple());
+
+  // Get information about the target being compiled for.
+  TargetInfo *Target = TargetInfo::CreateTargetInfo(Triple.getTriple());
+  if (!Target) {
+    Diags.Report(diag::err_fe_unknown_triple) << Triple.getTriple().c_str();
+    return 0;
+  }
+
+  // Set the target ABI if specified.
+  if (!Opts.getFrontendOpts().TargetABI.empty() &&
+      !Target->setABI(Opts.getFrontendOpts().TargetABI)) {
+    Diags.Report(diag::err_fe_unknown_target_abi)
+      << Opts.getFrontendOpts().TargetABI;
+    return 0;
+  }
+
   // Initialize backend options, which may also be used to key some language
   // options.
-  InitializeCodeGenOptions(Opts.getCodeGenOpts(), Target);
+  InitializeCodeGenOptions(Opts.getCodeGenOpts(), *Target);
 
   // Initialize language options.
   //
@@ -926,7 +938,7 @@
   LangKind LK = GetLanguage(Opts.getFrontendOpts().InputFilenames);
   IsAST = LK == langkind_ast;
   if (!IsAST)
-    InitializeLangOptions(Opts.getLangOpts(), LK, Target,
+    InitializeLangOptions(Opts.getLangOpts(), LK, *Target,
                           Opts.getCodeGenOpts());
 
   // Initialize the static analyzer options.
@@ -952,6 +964,8 @@
   if (Opts.getLangOpts().CPlusPlus)
     Opts.getCodeGenOpts().NoCommon = 1;
   Opts.getCodeGenOpts().TimePasses = Opts.getFrontendOpts().ShowTimers;
+
+  return Target;
 }
 
 static Diagnostic *CreateDiagnosticEngine(const DiagnosticOptions &Opts,
@@ -1007,36 +1021,19 @@
   // should (optionally?) take ownership of it.
   llvm::OwningPtr<DiagnosticClient> DiagClient(Diags->getClient());
 
-  // Initialize base triple.  If a -triple option has been specified, use
-  // that triple.  Otherwise, default to the host triple.
-  llvm::Triple Triple(TargetTriple);
-  if (Triple.getTriple().empty())
-    Triple = llvm::Triple(llvm::sys::getHostTriple());
-
-  // Get information about the target being compiled for.
-  llvm::OwningPtr<TargetInfo>
-  Target(TargetInfo::CreateTargetInfo(Triple.getTriple()));
-  if (Target == 0) {
-    Diags->Report(diag::err_fe_unknown_triple) << Triple.getTriple().c_str();
-    return 1;
-  }
-
-  // Set the target ABI if specified.
-  if (!TargetABI.empty() &&!Target->setABI(TargetABI)) {
-    Diags->Report(diag::err_fe_unknown_target_abi) << TargetABI;
-    return 1;
-  }
-
-  // Now that we have initialized the diagnostics engine and the target, finish
-  // setting up the compiler invocation.
+  // Now that we have initialized the diagnostics engine, create the target and
+  // the compiler invocation object.
   //
   // FIXME: We should move .ast inputs to taking a separate path, they are
   // really quite different.
   CompilerInvocation CompOpts;
   bool IsAST;
-  ConstructCompilerInvocation(CompOpts, argv[0], DiagOpts, *Target, IsAST);
+  llvm::OwningPtr<TargetInfo> Target(
+    ConstructCompilerInvocation(CompOpts, *Diags, argv[0], DiagOpts, IsAST));
+  if (!Target)
+    return 1;
 
-  // Validate/process some options.
+  // Validate/process some options
   if (CompOpts.getHeaderSearchOpts().Verbose)
     llvm::errs() << "clang-cc version " CLANG_VERSION_STRING
                  << " based upon " << PACKAGE_STRING





More information about the cfe-commits mailing list