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 /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"