gollvm: support -print-prog-name and -print-file-name
Add support for the -print-prog-name=<prog> and -print-file-name=<file>
command line options.
Change-Id: Ic2a0588f07028f0b050d0e5803f64b94beaac304
Reviewed-on: https://go-review.googlesource.com/117435
Reviewed-by: Cherry Zhang <cherryyz@google.com>
diff --git a/driver/Driver.cpp b/driver/Driver.cpp
index 3b31b7f..9485616 100644
--- a/driver/Driver.cpp
+++ b/driver/Driver.cpp
@@ -93,6 +93,12 @@
return candidate.str();
}
+ // System install dir
+ llvm::SmallString<256> installed(installedLibDir());
+ llvm::sys::path::append(installed, name);
+ if (llvm::sys::fs::exists(llvm::Twine(installed)))
+ return installed.str();
+
return name;
}
@@ -301,6 +307,34 @@
exit(0);
}
+ // Look up toolchain.
+ auto &tc = toolchains_[triple_.str()];
+ if (!tc) {
+ switch (triple_.getOS()) {
+ case Triple::Linux:
+ tc = make_unique<toolchains::Linux>(*this, triple_);
+ break;
+ default:
+ errs() << progname_ << ": error: unsupported target "
+ << triple_.str() << ", unable to create toolchain\n";
+ return nullptr;
+ }
+ }
+
+ // Honor -print-file-name=...
+ opt::Arg *pfnarg = args_.getLastArg(gollvm::options::OPT_print_file_name_EQ);
+ if (pfnarg) {
+ llvm::outs() << getFilePath(pfnarg->getValue(), *tc) << "\n";
+ exit(0);
+ }
+
+ // Honor -print-prog-name=...
+ opt::Arg *ppnarg = args_.getLastArg(gollvm::options::OPT_print_prog_name_EQ);
+ if (ppnarg) {
+ llvm::outs() << getProgramPath(ppnarg->getValue(), *tc) << "\n";
+ exit(0);
+ }
+
// Check for existence of input files.
for (opt::Arg *arg : args_) {
if (arg->getOption().getKind() == opt::Option::InputClass) {
@@ -326,20 +360,6 @@
return nullptr;
}
- // Look up toolchain.
- auto &tc = toolchains_[triple_.str()];
- if (!tc) {
- switch (triple_.getOS()) {
- case Triple::Linux:
- tc = make_unique<toolchains::Linux>(*this, triple_);
- break;
- default:
- errs() << progname_ << ": error: unsupported target "
- << triple_.str() << ", unable to create toolchain\n";
- return nullptr;
- }
- }
-
// FIXME: add code to weed out unknown architectures (ex:
// SomethingWeird-unknown-linux-gnu).
diff --git a/driver/GollvmOptions.td b/driver/GollvmOptions.td
index d4d8199..f11eac4 100644
--- a/driver/GollvmOptions.td
+++ b/driver/GollvmOptions.td
@@ -174,6 +174,12 @@
def dumpmachine : Flag<["-"], "dumpmachine">,
HelpText<"Emit target machine and exit.">;
+def print_file_name_EQ : Joined<["-", "--"], "print-file-name=">,
+ HelpText<"Print the full library path of <file>">, MetaVarName<"<file>">;
+
+def print_prog_name_EQ : Joined<["-", "--"], "print-prog-name=">,
+ HelpText<"Print the full program path of <name>">, MetaVarName<"<name>">;
+
def print_multi_lib : Flag<["--"], "print-multi-lib">,
HelpText<"Emit the mapping from multilib directory names to compiler "
"flags that enable them">;