glaubitz updated this revision to Diff 334071. glaubitz retitled this revision from "[Driver] Fix architecture triplets and search paths for Linux x32" to "WIP: [Driver] Fix architecture triplets and search paths for Linux x32". glaubitz added a comment.
Updated version which unfortunately still fails. One of the problems is that I don't know how to detect a native x32 system in getOSLibDir() in clang/lib/Driver/ToolChains/Linux.cpp. On a native x32 system, libraries are not in /libx32. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D52050/new/ https://reviews.llvm.org/D52050 Files: clang/lib/Driver/ToolChains/Gnu.cpp clang/lib/Driver/ToolChains/Linux.cpp Index: clang/lib/Driver/ToolChains/Linux.cpp =================================================================== --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -87,6 +87,8 @@ case llvm::Triple::x86_64: if (IsAndroid) return "x86_64-linux-android"; + if (D.getVFS().exists(SysRoot + "/lib/x86_64-linux-gnux32")) + return "x86_64-linux-gnux32"; // We don't want this for x32, otherwise it will match x86_64 libs if (TargetEnvironment != llvm::Triple::GNUX32 && D.getVFS().exists(SysRoot + "/lib/x86_64-linux-gnu")) @@ -210,7 +212,10 @@ if (Triple.getArch() == llvm::Triple::x86_64 && Triple.getEnvironment() == llvm::Triple::GNUX32) - return "libx32"; + if (getDriver().getVFS().exists(SysRoot + "/lib/x86_64-linux-gnux32")) + return "lib32"; + else + return "libx32"; if (Triple.getArch() == llvm::Triple::riscv32) return "lib32"; Index: clang/lib/Driver/ToolChains/Gnu.cpp =================================================================== --- clang/lib/Driver/ToolChains/Gnu.cpp +++ clang/lib/Driver/ToolChains/Gnu.cpp @@ -2105,8 +2105,10 @@ "x86_64-redhat-linux", "x86_64-suse-linux", "x86_64-manbo-linux-gnu", "x86_64-linux-gnu", "x86_64-slackware-linux", "x86_64-unknown-linux", - "x86_64-amazon-linux", "x86_64-linux-android"}; - static const char *const X32LibDirs[] = {"/libx32"}; + "x86_64-amazon-linux", "x86_64-linux-android", + "x86_64-linux-gnux32", "x86_64-unknown-linux-gnux32", + "x86_64-pc-linux-gnux32"}; + static const char *const X32LibDirs[] = {"/libx32", "/lib"}; static const char *const X86LibDirs[] = {"/lib32", "/lib"}; static const char *const X86Triples[] = { "i686-linux-gnu", "i686-pc-linux-gnu", "i386-redhat-linux6E",
Index: clang/lib/Driver/ToolChains/Linux.cpp =================================================================== --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -87,6 +87,8 @@ case llvm::Triple::x86_64: if (IsAndroid) return "x86_64-linux-android"; + if (D.getVFS().exists(SysRoot + "/lib/x86_64-linux-gnux32")) + return "x86_64-linux-gnux32"; // We don't want this for x32, otherwise it will match x86_64 libs if (TargetEnvironment != llvm::Triple::GNUX32 && D.getVFS().exists(SysRoot + "/lib/x86_64-linux-gnu")) @@ -210,7 +212,10 @@ if (Triple.getArch() == llvm::Triple::x86_64 && Triple.getEnvironment() == llvm::Triple::GNUX32) - return "libx32"; + if (getDriver().getVFS().exists(SysRoot + "/lib/x86_64-linux-gnux32")) + return "lib32"; + else + return "libx32"; if (Triple.getArch() == llvm::Triple::riscv32) return "lib32"; Index: clang/lib/Driver/ToolChains/Gnu.cpp =================================================================== --- clang/lib/Driver/ToolChains/Gnu.cpp +++ clang/lib/Driver/ToolChains/Gnu.cpp @@ -2105,8 +2105,10 @@ "x86_64-redhat-linux", "x86_64-suse-linux", "x86_64-manbo-linux-gnu", "x86_64-linux-gnu", "x86_64-slackware-linux", "x86_64-unknown-linux", - "x86_64-amazon-linux", "x86_64-linux-android"}; - static const char *const X32LibDirs[] = {"/libx32"}; + "x86_64-amazon-linux", "x86_64-linux-android", + "x86_64-linux-gnux32", "x86_64-unknown-linux-gnux32", + "x86_64-pc-linux-gnux32"}; + static const char *const X32LibDirs[] = {"/libx32", "/lib"}; static const char *const X86LibDirs[] = {"/lib32", "/lib"}; static const char *const X86Triples[] = { "i686-linux-gnu", "i686-pc-linux-gnu", "i386-redhat-linux6E",
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits