aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Support/CommandLine.cpp
diff options
context:
space:
mode:
authorArchibald Elliott <archibald.elliott@arm.com>2022-12-13 22:02:58 +0000
committerArchibald Elliott <archibald.elliott@arm.com>2022-12-20 09:56:14 +0000
commit142aa1bdd1dd1db9a7fecf9d157228019c794c94 (patch)
treefe701b132a9055672d213ba2f12812792063a837 /llvm/lib/Support/CommandLine.cpp
parentb76cc30e15855bf3ed094e680448e08e42e7d99d (diff)
downloadllvm-142aa1bdd1dd1db9a7fecf9d157228019c794c94.zip
llvm-142aa1bdd1dd1db9a7fecf9d157228019c794c94.tar.gz
llvm-142aa1bdd1dd1db9a7fecf9d157228019c794c94.tar.bz2
[Support] Move Target/CPU Printing out of CommandLine
This change is rather more invasive than intended. The main intention here is to make CommandLine.cpp not rely on llvm/Support/Host.h. Right now, this reliance is only in 3 superficial places: - Choosing how to expand response files (in two places) - Printing the default triple and current CPU in `--version` output. The built in version system has a method for adding "extra version printers", commonly used by several tools (such as llc) to report the registered targets in the built version of LLVM. It was reasonably easy to move the logic for printing the default triple and current CPU into a similar function, and register it with any relevant binaries. The incompatible change here is that now, even if LLVM_VERSION_PRINTER_SHOW_HOST_TARGET_INFO is defined, most binaries will no longer print out the default target triple and cpu when provided with `--version`, for instance llvm-as and llvm-dis. This breakage is intended, but the changes in this patch keep printing the default target and detected in `llc` and `opt` as these were remarked as important binaries in the LLVM install. The change to expanding response files may also be controversial, but I believe that these macros should correspond exactly to the host triple introspection used before. Differential Revision: https://reviews.llvm.org/D137837
Diffstat (limited to 'llvm/lib/Support/CommandLine.cpp')
-rw-r--r--llvm/lib/Support/CommandLine.cpp50
1 files changed, 22 insertions, 28 deletions
diff --git a/llvm/lib/Support/CommandLine.cpp b/llvm/lib/Support/CommandLine.cpp
index 24fe049..6663250 100644
--- a/llvm/lib/Support/CommandLine.cpp
+++ b/llvm/lib/Support/CommandLine.cpp
@@ -27,7 +27,6 @@
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
-#include "llvm/ADT/Triple.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Config/config.h"
#include "llvm/Support/ConvertUTF.h"
@@ -35,7 +34,6 @@
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FileSystem.h"
-#include "llvm/Support/Host.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Path.h"
@@ -1358,9 +1356,11 @@ Error ExpansionContext::expandResponseFiles(
bool cl::expandResponseFiles(int Argc, const char *const *Argv,
const char *EnvVar, StringSaver &Saver,
SmallVectorImpl<const char *> &NewArgv) {
- auto Tokenize = Triple(sys::getProcessTriple()).isOSWindows()
- ? cl::TokenizeWindowsCommandLine
- : cl::TokenizeGNUCommandLine;
+#ifdef _WIN32
+ auto Tokenize = cl::TokenizeWindowsCommandLine;
+#else
+ auto Tokenize = cl::TokenizeGNUCommandLine;
+#endif
// The environment variable specifies initial options.
if (EnvVar)
if (std::optional<std::string> EnvValue = sys::Process::GetEnv(EnvVar))
@@ -1504,9 +1504,12 @@ bool CommandLineParser::ParseCommandLineOptions(int argc,
// Expand response files.
SmallVector<const char *, 20> newArgv(argv, argv + argc);
BumpPtrAllocator A;
- ExpansionContext ECtx(A, Triple(sys::getProcessTriple()).isOSWindows()
- ? cl::TokenizeWindowsCommandLine
- : cl::TokenizeGNUCommandLine);
+#ifdef _WIN32
+ auto Tokenize = cl::TokenizeWindowsCommandLine;
+#else
+ auto Tokenize = cl::TokenizeGNUCommandLine;
+#endif
+ ExpansionContext ECtx(A, Tokenize);
if (Error Err = ECtx.expandResponseFiles(newArgv)) {
*Errs << toString(std::move(Err)) << '\n';
return false;
@@ -2535,7 +2538,7 @@ public:
namespace {
class VersionPrinter {
public:
- void print() {
+ void print(std::vector<VersionPrinterTy> ExtraPrinters = {}) {
raw_ostream &OS = outs();
#ifdef PACKAGE_VENDOR
OS << PACKAGE_VENDOR << " ";
@@ -2551,15 +2554,14 @@ public:
#ifndef NDEBUG
OS << " with assertions";
#endif
-#if LLVM_VERSION_PRINTER_SHOW_HOST_TARGET_INFO
- std::string CPU = std::string(sys::getHostCPUName());
- if (CPU == "generic")
- CPU = "(unknown)";
- OS << ".\n"
- << " Default target: " << sys::getDefaultTargetTriple() << '\n'
- << " Host CPU: " << CPU;
-#endif
- OS << '\n';
+ OS << ".\n";
+
+ // Iterate over any registered extra printers and call them to add further
+ // information.
+ if (!ExtraPrinters.empty()) {
+ for (const auto &I : ExtraPrinters)
+ I(outs());
+ }
}
void operator=(bool OptionWasSpecified);
};
@@ -2686,15 +2688,7 @@ void VersionPrinter::operator=(bool OptionWasSpecified) {
CommonOptions->OverrideVersionPrinter(outs());
exit(0);
}
- print();
-
- // Iterate over any registered extra printers and call them to add further
- // information.
- if (!CommonOptions->ExtraVersionPrinters.empty()) {
- outs() << '\n';
- for (const auto &I : CommonOptions->ExtraVersionPrinters)
- I(outs());
- }
+ print(CommonOptions->ExtraVersionPrinters);
exit(0);
}
@@ -2749,7 +2743,7 @@ void cl::PrintHelpMessage(bool Hidden, bool Categorized) {
/// Utility function for printing version number.
void cl::PrintVersionMessage() {
- CommonOptions->VersionPrinterInstance.print();
+ CommonOptions->VersionPrinterInstance.print(CommonOptions->ExtraVersionPrinters);
}
void cl::SetVersionPrinter(VersionPrinterTy func) {