Rebased with master

Hi rafael, rafael.espindola,

http://llvm-reviews.chandlerc.com/D2040

CHANGE SINCE LAST DIFF
  http://llvm-reviews.chandlerc.com/D2040?vs=5203&id=5258#toc

Files:
  lib/Driver/ToolChains.cpp
  
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/include/c++/4.7.3/arm-linux-gnueabihf/.keep
  
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/include/c++/4.7.3/backward/.keep
  
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crt1.o
  
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crti.o
  
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crtn.o
  
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7.3/crtbegin.o
  
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7.3/crtend.o
  
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/crtend.o
  test/Driver/linux-header-search.cpp

Index: lib/Driver/ToolChains.cpp
===================================================================
--- lib/Driver/ToolChains.cpp
+++ lib/Driver/ToolChains.cpp
@@ -2694,6 +2694,21 @@
   StringRef MIPSABIDirSuffix = GCCInstallation.getMIPSABIDirSuffix();
   StringRef BiarchSuffix = GCCInstallation.getBiarchSuffix();
   const GCCVersion &Version = GCCInstallation.getVersion();
+  const std::string GCCMultiArchDir =
+      LibDir.str() + "/../" + TripleStr.str() + "/include/c++/";
+
+  // On Ubuntu, find include files for cross-compiler for GCC Version of the
+  // form {Major.Minor.Patch} by probing the lib path.
+  StringRef ParentPath = llvm::sys::path::parent_path(InstallDir);
+  llvm::error_code EC;
+  for (llvm::sys::fs::directory_iterator LI(ParentPath.str(), EC), LE;
+       !EC && LI != LE; LI = LI.increment(EC)) {
+    StringRef VersionText = llvm::sys::path::filename(LI->path());
+    if (addLibStdCXXIncludePaths(GCCMultiArchDir + VersionText.str(),
+                                 TripleStr + BiarchSuffix,
+                                 DriverArgs, CC1Args))
+      break;
+  }
 
   if (addLibStdCXXIncludePaths(LibDir.str() + "/../include",
                                "/c++/" + Version.Text, TripleStr, BiarchSuffix,
@@ -2707,7 +2722,9 @@
         Version.MinorStr,
     InstallDir.str() + "/include/g++-v" + Version.MajorStr,
     // Android standalone toolchain has C++ headers in yet another place.
-    LibDir.str() + "/../" + TripleStr.str() + "/include/c++/" + Version.Text,
+    // FIXME: Retain this line only if toolchains has the form Major.Minor
+    //  instead of Major.Minor.Patch
+    GCCMultiArchDir + Version.Text,
     // Freescale SDK C++ headers are directly in <sysroot>/usr/include/c++,
     // without a subdirectory corresponding to the gcc version.
     LibDir.str() + "/../include/c++",
@@ -2719,6 +2736,7 @@
                                  DriverArgs, CC1Args))
       break;
   }
+
 }
 
 bool Linux::isPIEDefault() const {
Index: 
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crt1.o
===================================================================
--- /dev/null
+++ 
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crt1.o
@@ -0,0 +1 @@
+empty
Index: 
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crti.o
===================================================================
--- /dev/null
+++ 
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crti.o
@@ -0,0 +1 @@
+empty
Index: 
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crtn.o
===================================================================
--- /dev/null
+++ 
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crtn.o
@@ -0,0 +1 @@
+empty
Index: 
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7.3/crtbegin.o
===================================================================
--- /dev/null
+++ 
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7.3/crtbegin.o
@@ -0,0 +1 @@
+empty
Index: 
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7.3/crtend.o
===================================================================
--- /dev/null
+++ 
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7.3/crtend.o
@@ -0,0 +1 @@
+empty
Index: 
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/crtend.o
===================================================================
--- /dev/null
+++ 
test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/crtend.o
@@ -0,0 +1 @@
+empty
Index: test/Driver/linux-header-search.cpp
===================================================================
--- test/Driver/linux-header-search.cpp
+++ test/Driver/linux-header-search.cpp
@@ -37,6 +37,9 @@
 // RUN:   | FileCheck --check-prefix=CHECK-UBUNTU-13-04-CROSS %s
 // CHECK-UBUNTU-13-04-CROSS: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
 // CHECK-UBUNTU-13-04-CROSS: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-UBUNTU-13-04-CROSS: "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../arm-linux-gnueabihf/include/c++/4.7.3"
+// CHECK-UBUNTU-13-04-CROSS: "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../arm-linux-gnueabihf/include/c++/4.7.3/arm-linux-gnueabihf"
+// CHECK-UBUNTU-13-04-CROSS: "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../arm-linux-gnueabihf/include/c++/4.7.3/backward"
 // CHECK-UBUNTU-13-04-CROSS: "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../include/c++/4.7"
 // CHECK-UBUNTU-13-04-CROSS: "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../include/c++/4.7/backward"
 // CHECK-UBUNTU-13-04-CROSS: "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../include/arm-linux-gnueabihf/c++/4.7"
Index: lib/Driver/ToolChains.cpp
===================================================================
--- lib/Driver/ToolChains.cpp
+++ lib/Driver/ToolChains.cpp
@@ -2694,6 +2694,21 @@
   StringRef MIPSABIDirSuffix = GCCInstallation.getMIPSABIDirSuffix();
   StringRef BiarchSuffix = GCCInstallation.getBiarchSuffix();
   const GCCVersion &Version = GCCInstallation.getVersion();
+  const std::string GCCMultiArchDir =
+      LibDir.str() + "/../" + TripleStr.str() + "/include/c++/";
+
+  // On Ubuntu, find include files for cross-compiler for GCC Version of the
+  // form {Major.Minor.Patch} by probing the lib path.
+  StringRef ParentPath = llvm::sys::path::parent_path(InstallDir);
+  llvm::error_code EC;
+  for (llvm::sys::fs::directory_iterator LI(ParentPath.str(), EC), LE;
+       !EC && LI != LE; LI = LI.increment(EC)) {
+    StringRef VersionText = llvm::sys::path::filename(LI->path());
+    if (addLibStdCXXIncludePaths(GCCMultiArchDir + VersionText.str(),
+                                 TripleStr + BiarchSuffix,
+                                 DriverArgs, CC1Args))
+      break;
+  }
 
   if (addLibStdCXXIncludePaths(LibDir.str() + "/../include",
                                "/c++/" + Version.Text, TripleStr, BiarchSuffix,
@@ -2707,7 +2722,9 @@
         Version.MinorStr,
     InstallDir.str() + "/include/g++-v" + Version.MajorStr,
     // Android standalone toolchain has C++ headers in yet another place.
-    LibDir.str() + "/../" + TripleStr.str() + "/include/c++/" + Version.Text,
+    // FIXME: Retain this line only if toolchains has the form Major.Minor
+    //  instead of Major.Minor.Patch
+    GCCMultiArchDir + Version.Text,
     // Freescale SDK C++ headers are directly in <sysroot>/usr/include/c++,
     // without a subdirectory corresponding to the gcc version.
     LibDir.str() + "/../include/c++",
@@ -2719,6 +2736,7 @@
                                  DriverArgs, CC1Args))
       break;
   }
+
 }
 
 bool Linux::isPIEDefault() const {
Index: test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crt1.o
===================================================================
--- /dev/null
+++ test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crt1.o
@@ -0,0 +1 @@
+empty
Index: test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crti.o
===================================================================
--- /dev/null
+++ test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crti.o
@@ -0,0 +1 @@
+empty
Index: test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crtn.o
===================================================================
--- /dev/null
+++ test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/arm-linux-gnueabihf/lib/crtn.o
@@ -0,0 +1 @@
+empty
Index: test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7.3/crtbegin.o
===================================================================
--- /dev/null
+++ test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7.3/crtbegin.o
@@ -0,0 +1 @@
+empty
Index: test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7.3/crtend.o
===================================================================
--- /dev/null
+++ test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7.3/crtend.o
@@ -0,0 +1 @@
+empty
Index: test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/crtend.o
===================================================================
--- /dev/null
+++ test/Driver/Inputs/ubuntu_13.04_multiarch_tree/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/crtend.o
@@ -0,0 +1 @@
+empty
Index: test/Driver/linux-header-search.cpp
===================================================================
--- test/Driver/linux-header-search.cpp
+++ test/Driver/linux-header-search.cpp
@@ -37,6 +37,9 @@
 // RUN:   | FileCheck --check-prefix=CHECK-UBUNTU-13-04-CROSS %s
 // CHECK-UBUNTU-13-04-CROSS: "{{[^"]*}}clang{{[^"]*}}" "-cc1"
 // CHECK-UBUNTU-13-04-CROSS: "-isysroot" "[[SYSROOT:[^"]+]]"
+// CHECK-UBUNTU-13-04-CROSS: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../arm-linux-gnueabihf/include/c++/4.7.3"
+// CHECK-UBUNTU-13-04-CROSS: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../arm-linux-gnueabihf/include/c++/4.7.3/arm-linux-gnueabihf"
+// CHECK-UBUNTU-13-04-CROSS: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../arm-linux-gnueabihf/include/c++/4.7.3/backward"
 // CHECK-UBUNTU-13-04-CROSS: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../include/c++/4.7"
 // CHECK-UBUNTU-13-04-CROSS: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../include/c++/4.7/backward"
 // CHECK-UBUNTU-13-04-CROSS: "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/../../../../include/arm-linux-gnueabihf/c++/4.7"
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to