Add a new driver-only option `--supported-targets` which enumerates the 
supported targets to stdout.  This is an often requested feature, allowing for 
a quick inspection of supported target architectures supported by a particular 
build of clang.

http://llvm-reviews.chandlerc.com/D233

Files:
  include/clang/Driver/Options.td
  lib/Driver/Driver.cpp

Index: include/clang/Driver/Options.td
===================================================================
--- include/clang/Driver/Options.td
+++ include/clang/Driver/Options.td
@@ -1142,6 +1142,8 @@
   HelpText<"Serialize compiler diagnostics to a file">;
 // We give --version different semantics from -version.
 def _version : Flag<["--"], "version">,  Flags<[CC1Option]>;
+def _supported_targets : Flag<["--"], "supported-targets">,
+  Flags<[DriverOption]>, HelpText<"Display supported targets">;
 def _signed_char : Flag<["--"], "signed-char">, Alias<fsigned_char>;
 def _std : Separate<["--"], "std">, Alias<std_EQ>;
 def _stdlib : Separate<["--"], "stdlib">, Alias<stdlib_EQ>;
Index: lib/Driver/Driver.cpp
===================================================================
--- lib/Driver/Driver.cpp
+++ lib/Driver/Driver.cpp
@@ -27,9 +27,11 @@
 #include "llvm/ADT/StringSet.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/FileSystem.h"
+#include "llvm/Support/Host.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/Program.h"
+#include "llvm/Support/TargetRegistry.h"
 #include "llvm/Support/raw_ostream.h"
 #include <map>
 
@@ -628,6 +630,34 @@
     return false;
   }
 
+  if (C.getArgs().hasArg(options::OPT__supported_targets)) {
+    std::string CPU = llvm::sys::getHostCPUName();
+    llvm::raw_ostream &OS = llvm::outs();
+    llvm::TargetRegistry Registry;
+
+    if (CPU == "generic")
+      CPU = "(unknown)";
+
+    OS << getClangFullVersion() << " ("
+#if defined(__OPTIMIZE__)
+       << "optimized"
+#else
+       << "debug"
+#endif
+#if !defined(NDEBUG)
+       << "+asserts"
+#endif
+       << ")\n"
+       << "Host CPU: " << CPU << "\n"
+       << "Default Target: " << llvm::sys::getDefaultTargetTriple() << "\n"
+       << "Supported Target Architectures:\n";
+    for (llvm::TargetRegistry::iterator TI = Registry.begin(),
+                                        TE = Registry.end(); TI != TE; ++TI)
+      OS << "\t" << TI->getName() << "\n";
+
+    return false;
+  }
+
   if (C.getArgs().hasArg(options::OPT_v) ||
       C.getArgs().hasArg(options::OPT__HASH_HASH_HASH)) {
     PrintVersion(C, llvm::errs());
Index: include/clang/Driver/Options.td
===================================================================
--- include/clang/Driver/Options.td
+++ include/clang/Driver/Options.td
@@ -1142,6 +1142,8 @@
   HelpText<"Serialize compiler diagnostics to a file">;
 // We give --version different semantics from -version.
 def _version : Flag<["--"], "version">,  Flags<[CC1Option]>;
+def _supported_targets : Flag<["--"], "supported-targets">,
+  Flags<[DriverOption]>, HelpText<"Display supported targets">;
 def _signed_char : Flag<["--"], "signed-char">, Alias<fsigned_char>;
 def _std : Separate<["--"], "std">, Alias<std_EQ>;
 def _stdlib : Separate<["--"], "stdlib">, Alias<stdlib_EQ>;
Index: lib/Driver/Driver.cpp
===================================================================
--- lib/Driver/Driver.cpp
+++ lib/Driver/Driver.cpp
@@ -27,9 +27,11 @@
 #include "llvm/ADT/StringSet.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/FileSystem.h"
+#include "llvm/Support/Host.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/Program.h"
+#include "llvm/Support/TargetRegistry.h"
 #include "llvm/Support/raw_ostream.h"
 #include <map>
 
@@ -628,6 +630,34 @@
     return false;
   }
 
+  if (C.getArgs().hasArg(options::OPT__supported_targets)) {
+    std::string CPU = llvm::sys::getHostCPUName();
+    llvm::raw_ostream &OS = llvm::outs();
+    llvm::TargetRegistry Registry;
+
+    if (CPU == "generic")
+      CPU = "(unknown)";
+
+    OS << getClangFullVersion() << " ("
+#if defined(__OPTIMIZE__)
+       << "optimized"
+#else
+       << "debug"
+#endif
+#if !defined(NDEBUG)
+       << "+asserts"
+#endif
+       << ")\n"
+       << "Host CPU: " << CPU << "\n"
+       << "Default Target: " << llvm::sys::getDefaultTargetTriple() << "\n"
+       << "Supported Target Architectures:\n";
+    for (llvm::TargetRegistry::iterator TI = Registry.begin(),
+                                        TE = Registry.end(); TI != TE; ++TI)
+      OS << "\t" << TI->getName() << "\n";
+
+    return false;
+  }
+
   if (C.getArgs().hasArg(options::OPT_v) ||
       C.getArgs().hasArg(options::OPT__HASH_HASH_HASH)) {
     PrintVersion(C, llvm::errs());
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to