<div dir="ltr">Thanks! FTR, I still can't use libc++ from the Clang build directory due to problems described in <a href="http://llvm.org/bugs/show_bug.cgi?id=18569">http://llvm.org/bugs/show_bug.cgi?id=18569</a></div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jan 22, 2014 at 2:49 AM, Chandler Carruth <span dir="ltr"><<a href="mailto:chandlerc@gmail.com" target="_blank">chandlerc@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: chandlerc<br>
Date: Tue Jan 21 16:49:05 2014<br>
New Revision: 199769<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=199769&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=199769&view=rev</a><br>
Log:<br>
Teach Clang to look in its installation libdir for libraries (such as<br>
libc++) when the installation is within the system root.<br>
<br>
This doesn't really help cross compiles much, but we don't (currently)<br>
have a great story around libc++, cross compiles, and who is responsible<br>
for building and/or installing the libraries. However, it handles the<br>
very common case of non-cross builds in a way entirely consistent with<br>
GCC, so I'm hopeful this won't really hose anyone.<br>
<br>
This is the second patch that I think should be backported to 3.4 to<br>
give folks an easy to checkout and install working Clang+libc++<br>
toolchain.<br>
<br>
Modified:<br>
    cfe/trunk/lib/Driver/ToolChains.cpp<br>
    cfe/trunk/test/Driver/linux-ld.c<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=199769&r1=199768&r2=199769&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=199769&r1=199768&r2=199769&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains.cpp (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains.cpp Tue Jan 21 16:49:05 2014<br>
@@ -2695,6 +2695,17 @@ Linux::Linux(const Driver &D, const llvm<br>
       addPathIfExists(LibPath + "/../" + Multilib, Paths);<br>
     }<br>
   }<br>
+<br>
+  // Similar to the logic for GCC above, if we currently running Clang inside<br>
+  // of the requested system root, add its parent multilib library paths to<br>
+  // those searched.<br>
+  // FIXME: It's not clear whether we should use the driver's installed<br>
+  // directory ('Dir' below) or the ResourceDir.<br>
+  if (StringRef(D.Dir).startswith(SysRoot)) {<br>
+    addPathIfExists(D.Dir + "/../lib/" + MultiarchTriple, Paths);<br>
+    addPathIfExists(D.Dir + "/../" + Multilib, Paths);<br>
+  }<br>
+<br>
   addPathIfExists(SysRoot + "/lib/" + MultiarchTriple, Paths);<br>
   addPathIfExists(SysRoot + "/lib/../" + Multilib, Paths);<br>
   addPathIfExists(SysRoot + "/usr/lib/" + MultiarchTriple, Paths);<br>
@@ -2723,6 +2734,15 @@ Linux::Linux(const Driver &D, const llvm<br>
     if (StringRef(LibPath).startswith(SysRoot))<br>
       addPathIfExists(LibPath, Paths);<br>
   }<br>
+<br>
+  // Similar to the logic for GCC above, if we are currently running Clang<br>
+  // inside of the requested system root, add its parent library path to those<br>
+  // searched.<br>
+  // FIXME: It's not clear whether we should use the driver's installed<br>
+  // directory ('Dir' below) or the ResourceDir.<br>
+  if (StringRef(D.Dir).startswith(SysRoot))<br>
+    addPathIfExists(D.Dir + "/../lib", Paths);<br>
+<br>
   addPathIfExists(SysRoot + "/lib", Paths);<br>
   addPathIfExists(SysRoot + "/usr/lib", Paths);<br>
 }<br>
<br>
Modified: cfe/trunk/test/Driver/linux-ld.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/linux-ld.c?rev=199769&r1=199768&r2=199769&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/linux-ld.c?rev=199769&r1=199768&r2=199769&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/test/Driver/linux-ld.c (original)<br>
+++ cfe/trunk/test/Driver/linux-ld.c Tue Jan 21 16:49:05 2014<br>
@@ -214,6 +214,32 @@<br>
 // CHECK-GCC-VERSION4: "{{.*}}/Inputs/gcc_version_parsing4/bin/../lib/gcc/i386-unknown-linux/4.7.99{{/|\\\\}}crtbegin.o"<br>
 // CHECK-GCC-VERSION4: "-L{{.*}}/Inputs/gcc_version_parsing4/bin/../lib/gcc/i386-unknown-linux/4.7.99"<br>
 //<br>
+// Test a simulated installation of libc++ on Linux, both through sysroot and<br>
+// the installation path of Clang.<br>
+// RUN: %clangxx -no-canonical-prefixes -x c++ %s -### -o %t.o 2>&1 \<br>
+// RUN:     -target x86_64-unknown-linux-gnu \<br>
+// RUN:     -stdlib=libc++ \<br>
+// RUN:     -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin \<br>
+// RUN:     --sysroot=%S/Inputs/basic_linux_libcxx_tree \<br>
+// RUN:   | FileCheck --check-prefix=CHECK-BASIC-LIBCXX-SYSROOT %s<br>
+// CHECK-BASIC-LIBCXX-SYSROOT: "{{[^"]*}}clang{{[^"]*}}" "-cc1"<br>
+// CHECK-BASIC-LIBCXX-SYSROOT: "-isysroot" "[[SYSROOT:[^"]+]]"<br>
+// CHECK-BASIC-LIBCXX-SYSROOT: "-internal-isystem" "[[SYSROOT]]/usr/include/c++/v1"<br>
+// CHECK-BASIC-LIBCXX-SYSROOT: "-internal-isystem" "[[SYSROOT]]/usr/local/include"<br>
+// CHECK-BASIC-LIBCXX-SYSROOT: "--sysroot=[[SYSROOT]]"<br>
+// RUN: %clang -no-canonical-prefixes -x c++ %s -### -o %t.o 2>&1 \<br>
+// RUN:     -target x86_64-unknown-linux-gnu \<br>
+// RUN:     -stdlib=libc++ \<br>
+// RUN:     -ccc-install-dir %S/Inputs/basic_linux_libcxx_tree/usr/bin \<br>
+// RUN:     --sysroot=%S/Inputs/basic_linux_libcxx_tree \<br>
+// RUN:   | FileCheck --check-prefix=CHECK-BASIC-LIBCXX-INSTALL %s<br>
+// CHECK-BASIC-LIBCXX-INSTALL: "{{[^"]*}}clang{{[^"]*}}" "-cc1"<br>
+// CHECK-BASIC-LIBCXX-INSTALL: "-isysroot" "[[SYSROOT:[^"]+]]"<br>
+// CHECK-BASIC-LIBCXX-INSTALL: "-internal-isystem" "[[SYSROOT]]/usr/bin/../include/c++/v1"<br>
+// CHECK-BASIC-LIBCXX-INSTALL: "-internal-isystem" "[[SYSROOT]]/usr/local/include"<br>
+// CHECK-BASIC-LIBCXX-INSTALL: "--sysroot=[[SYSROOT]]"<br>
+// CHECK-BASIC-LIBCXX-INSTALL: "-L[[SYSROOT]]/usr/bin/../lib"<br>
+//<br>
 // Test a very broken version of multiarch that shipped in Ubuntu 11.04.<br>
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \<br>
 // RUN:     --target=i386-unknown-linux \<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Alexey Samsonov, MSK</div>
</div>