]> granicus.if.org Git - clang/commitdiff
Add very limited support for GCC's '-B' flag. This allows us to support unusual
authorChandler Carruth <chandlerc@gmail.com>
Mon, 22 Mar 2010 01:52:07 +0000 (01:52 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Mon, 22 Mar 2010 01:52:07 +0000 (01:52 +0000)
toolchain configurations and is a small step toward FreeBSD support.

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

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

index f49c3b97c1c422e667c6304ec57f573961359c2b..37575fc303fc26d710a4be4d14ad0cd2e632fd74 100644 (file)
@@ -64,6 +64,12 @@ public:
   /// The path to the compiler resource directory.
   std::string ResourceDir;
 
+  /// A prefix directory used to emulated a limited subset of GCC's '-Bprefix'
+  /// functionality.
+  /// FIXME: This type of customization should be removed in favor of the
+  /// universal driver when it is ready.
+  std::string PrefixDir;
+
   /// Default host triple.
   std::string DefaultHostTriple;
 
index 71258f9814be7b31e4e57a35d072a9760445e82e..6656dbe1733258d141d304692e41f93d9e13a4dd 100644 (file)
@@ -118,7 +118,7 @@ def ccc_ : Joined<"-ccc-">, Group<ccc_Group>, Flags<[Unsupported]>;
 def _HASH_HASH_HASH : Flag<"-###">, Flags<[DriverOption]>,
     HelpText<"Print the commands to run for this compilation">;
 def A : JoinedOrSeparate<"-A">;
-def B : JoinedOrSeparate<"-B">, Flags<[Unsupported]>;
+def B : JoinedOrSeparate<"-B">;
 def CC : Flag<"-CC">;
 def C : Flag<"-C">;
 def D : JoinedOrSeparate<"-D">, Group<CompileOnly_Group>;
index acfff386f485827b28380006b9cb99d9af2c7f32..aa55d3988664af36cd7cf0d95c3cabbf0b2ce9d4 100644 (file)
@@ -172,6 +172,8 @@ Compilation *Driver::BuildCompilation(int argc, const char **argv) {
     HostTriple = A->getValue(*Args);
   if (const Arg *A = Args->getLastArg(options::OPT_ccc_install_dir))
     Dir = A->getValue(*Args);
+  if (const Arg *A = Args->getLastArg(options::OPT_B))
+    PrefixDir = A->getValue(*Args);
 
   Host = GetHostInfo(HostTriple);
 
@@ -1088,6 +1090,15 @@ const char *Driver::GetNamedOutputPath(Compilation &C,
 }
 
 std::string Driver::GetFilePath(const char *Name, const ToolChain &TC) const {
+  // Respect a limited subset of the '-Bprefix' functionality in GCC by
+  // attempting to use this prefix when lokup up program paths.
+  if (!PrefixDir.empty()) {
+    llvm::sys::Path P(PrefixDir);
+    P.appendComponent(Name);
+    if (P.exists())
+      return P.str();
+  }
+
   const ToolChain::path_list &List = TC.getFilePaths();
   for (ToolChain::path_list::const_iterator
          it = List.begin(), ie = List.end(); it != ie; ++it) {
@@ -1102,6 +1113,15 @@ std::string Driver::GetFilePath(const char *Name, const ToolChain &TC) const {
 
 std::string Driver::GetProgramPath(const char *Name, const ToolChain &TC,
                                    bool WantFile) const {
+  // Respect a limited subset of the '-Bprefix' functionality in GCC by
+  // attempting to use this prefix when lokup up program paths.
+  if (!PrefixDir.empty()) {
+    llvm::sys::Path P(PrefixDir);
+    P.appendComponent(Name);
+    if (WantFile ? P.exists() : P.canExecute())
+      return P.str();
+  }
+
   const ToolChain::path_list &List = TC.getProgramPaths();
   for (ToolChain::path_list::const_iterator
          it = List.begin(), ie = List.end(); it != ie; ++it) {