Frontend driver patch from Edward O'Callaghan

https://llvm.org/bugs/show_bug.cgi?id=21538

Index: include/clang/Driver/Driver.h
===================================================================
--- cfe-3.6.1.src/include/clang/Driver/Driver.h	(revision 211898)
+++ cfe-3.6.1.src/include/clang/Driver/Driver.h	(working copy)
@@ -325,6 +325,14 @@
   // FIXME: This should be in CompilationInfo.
   std::string GetFilePath(const char *Name, const ToolChain &TC) const;
 
+  /// GetCompilerRTPath - Find Compiler-RT library path
+  ///
+  /// \param TC - The provided tool chain for additional information on
+  /// directories to search.
+  //
+  // FIXME: This should be in CompilationInfo.
+  std::string GetCompilerRTPath(const ToolChain &TC) const;
+
   /// GetProgramPath - Lookup \p Name in the list of program search paths.
   ///
   /// \param TC - The provided tool chain for additional information on
Index: include/clang/Driver/Options.td
===================================================================
--- cfe-3.6.1.src/include/clang/Driver/Options.td	(revision 211898)
+++ cfe-3.6.1.src/include/clang/Driver/Options.td	(working copy)
@@ -1269,6 +1269,8 @@
   HelpText<"Enable Objective-C Ivar layout bitmap print trace">;
 def print_libgcc_file_name : Flag<["-", "--"], "print-libgcc-file-name">,
   HelpText<"Print the library path for \"libgcc.a\"">;
+def print_librt_file_name : Flag<["-", "--"], "print-librt-file-name">,
+  HelpText<"Print the library path for \"libclang_rt.builtins-ARCH.a\"">;
 def print_multi_directory : Flag<["-", "--"], "print-multi-directory">;
 def print_multi_lib : Flag<["-", "--"], "print-multi-lib">;
 def print_multi_os_directory : Flag<["-", "--"], "print-multi-os-directory">;
Index: lib/Driver/Driver.cpp
===================================================================
--- cfe-3.6.1.src/lib/Driver/Driver.cpp	(revision 211898)
+++ cfe-3.6.1.src/lib/Driver/Driver.cpp	(working copy)
@@ -756,6 +756,11 @@
     return false;
   }
 
+  if (C.getArgs().hasArg(options::OPT_print_librt_file_name)) {
+    llvm::outs() << GetCompilerRTPath(TC) << "\n";
+    return false;
+  }
+
   if (C.getArgs().hasArg(options::OPT_print_multi_lib)) {
     const MultilibSet &Multilibs = TC.getMultilibs();
 
@@ -1820,6 +1825,26 @@
   return Name;
 }
 
+std::string Driver::GetCompilerRTPath(const ToolChain &TC) const {
+  // The runtimes are located in the OS-specific resource directory.
+  SmallString<128> Res(TC.getDriver().ResourceDir);
+  const llvm::Triple &Triple = TC.getTriple();
+
+  // TC.getOS() yield "freebsd10.0" whereas "freebsd" is expected.
+  StringRef OSLibName = (Triple.getOS() == llvm::Triple::FreeBSD) ?
+    "freebsd" : TC.getOS();
+  llvm::sys::path::append(Res, "lib", OSLibName);
+
+  StringRef archName = TC.getArchName();
+  // Until ARM libraries are build separately, we have them all in one library
+  if (TC.getArch() == llvm::Triple::arm ||
+      TC.getArch() == llvm::Triple::armeb)
+    archName = "arm";
+
+  llvm::sys::path::append(Res, Twine("libclang_rt.builtins-") + archName + ".a");
+  return Res.str();
+}
+
 std::string Driver::GetProgramPath(const char *Name,
                                    const ToolChain &TC) const {
   // FIXME: Needs a better variable than DefaultTargetTriple
