[PATCH] D131563: [clang] Fix clang multiarch isssue with musl
listout updated this revision to Diff 456920. listout marked an inline comment as done. listout retitled this revision from "[WIP] [clang] Fix clang multiarch isssue with musl" to "[clang] Fix clang multiarch isssue with musl". CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131563/new/ https://reviews.llvm.org/D131563 Files: 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 @@ -42,6 +42,15 @@ StringRef SysRoot) const { llvm::Triple::EnvironmentType TargetEnvironment = TargetTriple.getEnvironment(); + // Fall back to "-gnu" on unknown environment to preserve the historical + // behavior. + std::string EnvName = + TargetTriple + .getEnvironmentTypeName(TargetEnvironment != + llvm::Triple::UnknownEnvironment + ? TargetEnvironment + : llvm::Triple::GNU) + .str(); bool IsAndroid = TargetTriple.isAndroid(); bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6; bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32; @@ -60,40 +69,30 @@ case llvm::Triple::thumb: if (IsAndroid) return "arm-linux-androideabi"; -if (TargetEnvironment == llvm::Triple::GNUEABIHF) - return "arm-linux-gnueabihf"; -return "arm-linux-gnueabi"; +return "arm-linux-" + EnvName; case llvm::Triple::armeb: case llvm::Triple::thumbeb: -if (TargetEnvironment == llvm::Triple::GNUEABIHF) - return "armeb-linux-gnueabihf"; -return "armeb-linux-gnueabi"; +return "armeb-linux-" + EnvName; case llvm::Triple::x86: if (IsAndroid) return "i686-linux-android"; -return "i386-linux-gnu"; +return "i386-linux-" + EnvName; case llvm::Triple::x86_64: -if (IsAndroid) - return "x86_64-linux-android"; -if (TargetEnvironment == llvm::Triple::GNUX32) - return "x86_64-linux-gnux32"; -return "x86_64-linux-gnu"; +return "x86_64-linux-" + EnvName; case llvm::Triple::aarch64: -if (IsAndroid) - return "aarch64-linux-android"; -return "aarch64-linux-gnu"; +return "aarch64-linux-" + EnvName; case llvm::Triple::aarch64_be: -return "aarch64_be-linux-gnu"; +return "aarch64_be-linux-" + EnvName; case llvm::Triple::m68k: -return "m68k-linux-gnu"; +return "m68k-linux-" + EnvName; case llvm::Triple::mips: -return IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-gnu"; +return (IsMipsR6 ? "mipsisa32r6-linux-" : "mips-linux-") + EnvName; case llvm::Triple::mipsel: if (IsAndroid) return "mipsel-linux-android"; -return IsMipsR6 ? "mipsisa32r6el-linux-gnu" : "mipsel-linux-gnu"; +return (IsMipsR6 ? "mipsisa32r6el-linux-" : "mipsel-linux-") + EnvName; case llvm::Triple::mips64: { std::string MT = std::string(IsMipsR6 ? "mipsisa64r6" : "mips64") + "-linux-" + (IsMipsN32Abi ? "gnuabin32" : "gnuabi64"); @@ -117,21 +116,21 @@ case llvm::Triple::ppc: if (D.getVFS().exists(concat(SysRoot, "/lib/powerpc-linux-gnuspe"))) return "powerpc-linux-gnuspe"; -return "powerpc-linux-gnu"; +return "powerpc-linux-" + EnvName; case llvm::Triple::ppcle: -return "powerpcle-linux-gnu"; +return "powerpcle-linux-" + EnvName; case llvm::Triple::ppc64: -return "powerpc64-linux-gnu"; +return "powerpc64-linux-" + EnvName; case llvm::Triple::ppc64le: -return "powerpc64le-linux-gnu"; +return "powerpc64le-linux-" + EnvName; case llvm::Triple::riscv64: -return "riscv64-linux-gnu"; +return "riscv64-linux-" + EnvName; case llvm::Triple::sparc: -return "sparc-linux-gnu"; +return "sparc-linux-" + EnvName; case llvm::Triple::sparcv9: -return "sparc64-linux-gnu"; +return "sparc64-linux-" + EnvName; case llvm::Triple::systemz: -return "s390x-linux-gnu"; +return "s390x-linux-" + EnvName; } return TargetTriple.str(); } Index: clang/lib/Driver/ToolChains/Linux.cpp === --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -42,6 +42,15 @@ StringRef SysRoot) const { llvm::Triple::EnvironmentType TargetEnvironment = TargetTriple.getEnvironment(); + // Fall back to "-gnu" on unknown environment to preserve the historical + // behavior. + std::string EnvName = + TargetTriple + .getEnvironmentTypeName(TargetEnvironment != + llvm::Triple::UnknownEnvironment + ? TargetEnvironment + : llvm::Triple::GNU) + .st
[PATCH] D131563: [clang] Fix clang multiarch isssue with musl
listout added a comment. Hey everyone, it would be very helpful if someone looked at this and help me merge this patch, python3.11 is failing without these modifications CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131563/new/ https://reviews.llvm.org/D131563 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D131563: [clang] Fix clang multiarch isssue with musl
listout created this revision. listout added reviewers: dlj, atanasyan, MaskRay, Bdragon28. Herald added subscribers: StephenFan, pengfei, fedor.sergeev, kristof.beyls. Herald added a project: All. listout requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits. >From clang 13.0.0 has a new option -print-multiarch, matching gcc. On linux-musl systems this outputs x86_64-linux-gnu (or aarch64-linux-gnu, etc) instead of x86_64-linux-musl (or aarch64-linux-musl, etc). Amongst other things, this bug breaks compiling python with clang on musl hosts, as the python configure script does a sanity check and notices the output of -print-multiarch is inconsistent with the linux-musl platform triplet it (correctly) deduces for the host by other means. (The configure script errors out with "internal configure error for the platform triplet, please file a bug report" FWIW. This worked okay in clang 12.0.1 because python only checks the multiarch target for consistency if $CC -print-multiarch isn't an error.) The implementation in Linux::getMultiarchTriple() of clang/lib/Driver/ToolChains/Linux.cpp special-cases -linux-android targets, and assumes -linux-gnu for anything else. Credit for this patch goes to arachsys Please also reffer: https://bugs.llvm.org/show_bug.cgi?id=52127 and llvm/llvm-project#51469 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D131563 Files: 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 @@ -42,7 +42,9 @@ StringRef SysRoot) const { llvm::Triple::EnvironmentType TargetEnvironment = TargetTriple.getEnvironment(); - bool IsAndroid = TargetTriple.isAndroid(); + std::string EnvName = TargetTriple.isAndroid() ? "android" +: TargetTriple.isMusl() ? "musl" + : "gnu"; bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6; bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32; @@ -58,78 +60,66 @@ // regardless of what the actual target triple is. case llvm::Triple::arm: case llvm::Triple::thumb: -if (IsAndroid) - return "arm-linux-androideabi"; if (TargetEnvironment == llvm::Triple::GNUEABIHF) - return "arm-linux-gnueabihf"; -return "arm-linux-gnueabi"; + return "arm-linux-" + EnvName + "eabihf"; +return "arm-linux-" + EnvName + "eabi"; case llvm::Triple::armeb: case llvm::Triple::thumbeb: if (TargetEnvironment == llvm::Triple::GNUEABIHF) - return "armeb-linux-gnueabihf"; -return "armeb-linux-gnueabi"; + return "armeb-linux-" + EnvName + "eabihf"; +return "armeb-linux-" + EnvName + "eabi"; case llvm::Triple::x86: -if (IsAndroid) - return "i686-linux-android"; -return "i386-linux-gnu"; +return "i386-linux-" + EnvName; case llvm::Triple::x86_64: -if (IsAndroid) - return "x86_64-linux-android"; if (TargetEnvironment == llvm::Triple::GNUX32) - return "x86_64-linux-gnux32"; -return "x86_64-linux-gnu"; + return "x86_64-linux-" + EnvName + "x32"; +return "x86_64-linux-" + EnvName; case llvm::Triple::aarch64: -if (IsAndroid) - return "aarch64-linux-android"; -return "aarch64-linux-gnu"; +return "aarch64-linux-" + EnvName; case llvm::Triple::aarch64_be: -return "aarch64_be-linux-gnu"; +return "aarch64_be-linux-" + EnvName; case llvm::Triple::m68k: -return "m68k-linux-gnu"; +return "m68k-linux-" + EnvName; case llvm::Triple::mips: -return IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-gnu"; +return (IsMipsR6 ? "mipsisa32r6-linux-" : "mips-linux-") + EnvName; case llvm::Triple::mipsel: -if (IsAndroid) - return "mipsel-linux-android"; -return IsMipsR6 ? "mipsisa32r6el-linux-gnu" : "mipsel-linux-gnu"; +return (IsMipsR6 ? "mipsisa32r6el-linux-" : "mipsel-linux-") + EnvName; case llvm::Triple::mips64: { std::string MT = std::string(IsMipsR6 ? "mipsisa64r6" : "mips64") + - "-linux-" + (IsMipsN32Abi ? "gnuabin32" : "gnuabi64"); + "-linux-" + EnvName + (IsMipsN32Abi ? "abin32" : "abi64"); if (D.getVFS().exists(SysRoot + "/lib/" + MT)) return MT; -if (D.getVFS().exists(SysRoot + "/lib/mips64-linux-gnu")) - return "mips64-linux-gnu"; +if (D.getVFS().exists(SysRoot + "/lib/mips64-linux-" + EnvName)) + return "mips64-linux-" + EnvName; break; } case llvm::Triple::mips64el: { -if (IsAndroid) - return "mips64el-linux-android"; std::string MT = std::string(IsMipsR6 ? "mipsisa64r6el" : "mips64el") + - "-linux-" + (IsMipsN32Abi ? "gnuabin32" : "gnuabi64"); + "-
[PATCH] D131563: [clang] Fix clang multiarch isssue with musl
listout added a comment. The patch needs some rework for 15.x and above version. If people think it's appropriate then I'll be glad to make the changes Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131563/new/ https://reviews.llvm.org/D131563 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D131563: [WIP] [clang] Fix clang multiarch isssue with musl
listout updated this revision to Diff 451452. listout added a comment. Herald added subscribers: pcwang-thead, luke957, s.egerton, simoncook. Less drastic changes and rebased with main CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131563/new/ https://reviews.llvm.org/D131563 Files: 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 @@ -46,6 +46,8 @@ bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6; bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32; + std::string EnvName = TargetTriple.isMusl() ? "musl" : "gnu"; + // For most architectures, just use whatever we have rather than trying to be // clever. switch (TargetTriple.getArch()) { @@ -61,35 +63,35 @@ if (IsAndroid) return "arm-linux-androideabi"; if (TargetEnvironment == llvm::Triple::GNUEABIHF) - return "arm-linux-gnueabihf"; -return "arm-linux-gnueabi"; + return "arm-linux-" + EnvName; +return "arm-linux-" + EnvName; case llvm::Triple::armeb: case llvm::Triple::thumbeb: if (TargetEnvironment == llvm::Triple::GNUEABIHF) - return "armeb-linux-gnueabihf"; -return "armeb-linux-gnueabi"; + return "armeb-linux-" + EnvName; +return "armeb-linux-" + EnvName; case llvm::Triple::x86: if (IsAndroid) return "i686-linux-android"; -return "i386-linux-gnu"; +return "i386-linux" + EnvName; case llvm::Triple::x86_64: if (IsAndroid) return "x86_64-linux-android"; if (TargetEnvironment == llvm::Triple::GNUX32) return "x86_64-linux-gnux32"; -return "x86_64-linux-gnu"; +return "x86_64-linux-" + EnvName; case llvm::Triple::aarch64: if (IsAndroid) return "aarch64-linux-android"; -return "aarch64-linux-gnu"; +return "aarch64-linux-" + EnvName; case llvm::Triple::aarch64_be: -return "aarch64_be-linux-gnu"; +return "aarch64_be-linux-" + EnvName; case llvm::Triple::m68k: return "m68k-linux-gnu"; case llvm::Triple::mips: -return IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-gnu"; +return IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-" + EnvName; case llvm::Triple::mipsel: if (IsAndroid) return "mipsel-linux-android"; @@ -119,13 +121,13 @@ return "powerpc-linux-gnuspe"; return "powerpc-linux-gnu"; case llvm::Triple::ppcle: -return "powerpcle-linux-gnu"; +return "powerpcle-linux-" EnvName; case llvm::Triple::ppc64: -return "powerpc64-linux-gnu"; +return "powerpc64-linux-" + EnvName; case llvm::Triple::ppc64le: -return "powerpc64le-linux-gnu"; +return "powerpc64le-linux-" + EnvName; case llvm::Triple::riscv64: -return "riscv64-linux-gnu"; +return "riscv64-linux-" + EnvName; case llvm::Triple::sparc: return "sparc-linux-gnu"; case llvm::Triple::sparcv9: Index: clang/lib/Driver/ToolChains/Linux.cpp === --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -46,6 +46,8 @@ bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6; bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32; + std::string EnvName = TargetTriple.isMusl() ? "musl" : "gnu"; + // For most architectures, just use whatever we have rather than trying to be // clever. switch (TargetTriple.getArch()) { @@ -61,35 +63,35 @@ if (IsAndroid) return "arm-linux-androideabi"; if (TargetEnvironment == llvm::Triple::GNUEABIHF) - return "arm-linux-gnueabihf"; -return "arm-linux-gnueabi"; + return "arm-linux-" + EnvName; +return "arm-linux-" + EnvName; case llvm::Triple::armeb: case llvm::Triple::thumbeb: if (TargetEnvironment == llvm::Triple::GNUEABIHF) - return "armeb-linux-gnueabihf"; -return "armeb-linux-gnueabi"; + return "armeb-linux-" + EnvName; +return "armeb-linux-" + EnvName; case llvm::Triple::x86: if (IsAndroid) return "i686-linux-android"; -return "i386-linux-gnu"; +return "i386-linux" + EnvName; case llvm::Triple::x86_64: if (IsAndroid) return "x86_64-linux-android"; if (TargetEnvironment == llvm::Triple::GNUX32) return "x86_64-linux-gnux32"; -return "x86_64-linux-gnu"; +return "x86_64-linux-" + EnvName; case llvm::Triple::aarch64: if (IsAndroid) return "aarch64-linux-android"; -return "aarch64-linux-gnu"; +return "aarch64-linux-" + EnvName; case llvm::Triple::aarch64_be: -return "aarch64_be-linux-gnu"; +return "aarch64_be-linux-" + EnvName; case llvm::Triple::m68k: return "m68k-linux-gnu"; case llvm::Triple::mips: -return IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips
[PATCH] D131563: [WIP] [clang] Fix clang multiarch isssue with musl
listout updated this revision to Diff 451459. listout added a comment. Fix missing '+' CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131563/new/ https://reviews.llvm.org/D131563 Files: 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 @@ -46,6 +46,8 @@ bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6; bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32; + std::string EnvName = TargetTriple.isMusl() ? "musl" : "gnu"; + // For most architectures, just use whatever we have rather than trying to be // clever. switch (TargetTriple.getArch()) { @@ -61,35 +63,35 @@ if (IsAndroid) return "arm-linux-androideabi"; if (TargetEnvironment == llvm::Triple::GNUEABIHF) - return "arm-linux-gnueabihf"; -return "arm-linux-gnueabi"; + return "arm-linux-" + EnvName; +return "arm-linux-" + EnvName; case llvm::Triple::armeb: case llvm::Triple::thumbeb: if (TargetEnvironment == llvm::Triple::GNUEABIHF) - return "armeb-linux-gnueabihf"; -return "armeb-linux-gnueabi"; + return "armeb-linux-" + EnvName; +return "armeb-linux-" + EnvName; case llvm::Triple::x86: if (IsAndroid) return "i686-linux-android"; -return "i386-linux-gnu"; +return "i386-linux" + EnvName; case llvm::Triple::x86_64: if (IsAndroid) return "x86_64-linux-android"; if (TargetEnvironment == llvm::Triple::GNUX32) return "x86_64-linux-gnux32"; -return "x86_64-linux-gnu"; +return "x86_64-linux-" + EnvName; case llvm::Triple::aarch64: if (IsAndroid) return "aarch64-linux-android"; -return "aarch64-linux-gnu"; +return "aarch64-linux-" + EnvName; case llvm::Triple::aarch64_be: -return "aarch64_be-linux-gnu"; +return "aarch64_be-linux-" + EnvName; case llvm::Triple::m68k: return "m68k-linux-gnu"; case llvm::Triple::mips: -return IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-gnu"; +return IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-" + EnvName; case llvm::Triple::mipsel: if (IsAndroid) return "mipsel-linux-android"; @@ -119,13 +121,13 @@ return "powerpc-linux-gnuspe"; return "powerpc-linux-gnu"; case llvm::Triple::ppcle: -return "powerpcle-linux-gnu"; +return "powerpcle-linux-" + EnvName; case llvm::Triple::ppc64: -return "powerpc64-linux-gnu"; +return "powerpc64-linux-" + EnvName; case llvm::Triple::ppc64le: -return "powerpc64le-linux-gnu"; +return "powerpc64le-linux-" + EnvName; case llvm::Triple::riscv64: -return "riscv64-linux-gnu"; +return "riscv64-linux-" + EnvName; case llvm::Triple::sparc: return "sparc-linux-gnu"; case llvm::Triple::sparcv9: Index: clang/lib/Driver/ToolChains/Linux.cpp === --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -46,6 +46,8 @@ bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6; bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32; + std::string EnvName = TargetTriple.isMusl() ? "musl" : "gnu"; + // For most architectures, just use whatever we have rather than trying to be // clever. switch (TargetTriple.getArch()) { @@ -61,35 +63,35 @@ if (IsAndroid) return "arm-linux-androideabi"; if (TargetEnvironment == llvm::Triple::GNUEABIHF) - return "arm-linux-gnueabihf"; -return "arm-linux-gnueabi"; + return "arm-linux-" + EnvName; +return "arm-linux-" + EnvName; case llvm::Triple::armeb: case llvm::Triple::thumbeb: if (TargetEnvironment == llvm::Triple::GNUEABIHF) - return "armeb-linux-gnueabihf"; -return "armeb-linux-gnueabi"; + return "armeb-linux-" + EnvName; +return "armeb-linux-" + EnvName; case llvm::Triple::x86: if (IsAndroid) return "i686-linux-android"; -return "i386-linux-gnu"; +return "i386-linux" + EnvName; case llvm::Triple::x86_64: if (IsAndroid) return "x86_64-linux-android"; if (TargetEnvironment == llvm::Triple::GNUX32) return "x86_64-linux-gnux32"; -return "x86_64-linux-gnu"; +return "x86_64-linux-" + EnvName; case llvm::Triple::aarch64: if (IsAndroid) return "aarch64-linux-android"; -return "aarch64-linux-gnu"; +return "aarch64-linux-" + EnvName; case llvm::Triple::aarch64_be: -return "aarch64_be-linux-gnu"; +return "aarch64_be-linux-" + EnvName; case llvm::Triple::m68k: return "m68k-linux-gnu"; case llvm::Triple::mips: -return IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-gnu"; +return IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-" + EnvName; case l
[PATCH] D131563: [WIP] [clang] Fix clang multiarch isssue with musl
listout updated this revision to Diff 451572. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131563/new/ https://reviews.llvm.org/D131563 Files: 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 @@ -46,6 +46,8 @@ bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6; bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32; + std::string EnvName = TargetTriple.isMusl() ? "musl" : "gnu"; + // For most architectures, just use whatever we have rather than trying to be // clever. switch (TargetTriple.getArch()) { @@ -62,34 +64,34 @@ return "arm-linux-androideabi"; if (TargetEnvironment == llvm::Triple::GNUEABIHF) return "arm-linux-gnueabihf"; -return "arm-linux-gnueabi"; +return "arm-linux-" + EnvName + "eabi"; case llvm::Triple::armeb: case llvm::Triple::thumbeb: if (TargetEnvironment == llvm::Triple::GNUEABIHF) return "armeb-linux-gnueabihf"; -return "armeb-linux-gnueabi"; +return "armeb-linux-" + EnvName + "eabi"; case llvm::Triple::x86: if (IsAndroid) return "i686-linux-android"; -return "i386-linux-gnu"; +return "i386-linux-" + EnvName; case llvm::Triple::x86_64: if (IsAndroid) return "x86_64-linux-android"; if (TargetEnvironment == llvm::Triple::GNUX32) return "x86_64-linux-gnux32"; -return "x86_64-linux-gnu"; +return "x86_64-linux-" + EnvName; case llvm::Triple::aarch64: if (IsAndroid) return "aarch64-linux-android"; -return "aarch64-linux-gnu"; +return "aarch64-linux-" + EnvName; case llvm::Triple::aarch64_be: -return "aarch64_be-linux-gnu"; +return "aarch64_be-linux-" + EnvName; case llvm::Triple::m68k: -return "m68k-linux-gnu"; +return "m68k-linux-" + EnvName; case llvm::Triple::mips: -return IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-gnu"; +return IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-" + EnvName; case llvm::Triple::mipsel: if (IsAndroid) return "mipsel-linux-android"; @@ -117,19 +119,19 @@ case llvm::Triple::ppc: if (D.getVFS().exists(concat(SysRoot, "/lib/powerpc-linux-gnuspe"))) return "powerpc-linux-gnuspe"; -return "powerpc-linux-gnu"; +return "powerpc-linux-" + EnvName; case llvm::Triple::ppcle: -return "powerpcle-linux-gnu"; +return "powerpcle-linux-" + EnvName; case llvm::Triple::ppc64: -return "powerpc64-linux-gnu"; +return "powerpc64-linux-" + EnvName; case llvm::Triple::ppc64le: -return "powerpc64le-linux-gnu"; +return "powerpc64le-linux-" + EnvName; case llvm::Triple::riscv64: -return "riscv64-linux-gnu"; +return "riscv64-linux-" + EnvName; case llvm::Triple::sparc: -return "sparc-linux-gnu"; +return "sparc-linux-" + EnvName; case llvm::Triple::sparcv9: -return "sparc64-linux-gnu"; +return "sparc64-linux-" + EnvName; case llvm::Triple::systemz: return "s390x-linux-gnu"; } Index: clang/lib/Driver/ToolChains/Linux.cpp === --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -46,6 +46,8 @@ bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6; bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32; + std::string EnvName = TargetTriple.isMusl() ? "musl" : "gnu"; + // For most architectures, just use whatever we have rather than trying to be // clever. switch (TargetTriple.getArch()) { @@ -62,34 +64,34 @@ return "arm-linux-androideabi"; if (TargetEnvironment == llvm::Triple::GNUEABIHF) return "arm-linux-gnueabihf"; -return "arm-linux-gnueabi"; +return "arm-linux-" + EnvName + "eabi"; case llvm::Triple::armeb: case llvm::Triple::thumbeb: if (TargetEnvironment == llvm::Triple::GNUEABIHF) return "armeb-linux-gnueabihf"; -return "armeb-linux-gnueabi"; +return "armeb-linux-" + EnvName + "eabi"; case llvm::Triple::x86: if (IsAndroid) return "i686-linux-android"; -return "i386-linux-gnu"; +return "i386-linux-" + EnvName; case llvm::Triple::x86_64: if (IsAndroid) return "x86_64-linux-android"; if (TargetEnvironment == llvm::Triple::GNUX32) return "x86_64-linux-gnux32"; -return "x86_64-linux-gnu"; +return "x86_64-linux-" + EnvName; case llvm::Triple::aarch64: if (IsAndroid) return "aarch64-linux-android"; -return "aarch64-linux-gnu"; +return "aarch64-linux-" + EnvName; case llvm::Triple::aarch64_be: -return "aarch64_be-linux-gnu"; +return "aarch64_be-linux-" + EnvName; case llvm::Triple::m68k: -return "m68k-linux-gnu"; +return "m68k-linux-"
[PATCH] D131563: [WIP] [clang] Fix clang multiarch isssue with musl
listout updated this revision to Diff 451757. listout added a comment. Using `getEnvironmentTypeName()` instead of `isMusl()` CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131563/new/ https://reviews.llvm.org/D131563 Files: 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 @@ -46,6 +46,9 @@ bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6; bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32; + llvm::StringRef EnvName = + llvm::Triple::getEnvironmentTypeName(TargetTriple.getEnvironment()); + // For most architectures, just use whatever we have rather than trying to be // clever. switch (TargetTriple.getArch()) { @@ -62,34 +65,35 @@ return "arm-linux-androideabi"; if (TargetEnvironment == llvm::Triple::GNUEABIHF) return "arm-linux-gnueabihf"; -return "arm-linux-gnueabi"; +return "arm-linux-" + llvm::Twine(EnvName).str() + "eabi"; case llvm::Triple::armeb: case llvm::Triple::thumbeb: if (TargetEnvironment == llvm::Triple::GNUEABIHF) return "armeb-linux-gnueabihf"; -return "armeb-linux-gnueabi"; +return "armeb-linux-" + llvm::Twine(EnvName).str() + "eabi"; case llvm::Triple::x86: if (IsAndroid) return "i686-linux-android"; -return "i386-linux-gnu"; +return "i386-linux-" + llvm::Twine(EnvName).str(); case llvm::Triple::x86_64: if (IsAndroid) return "x86_64-linux-android"; if (TargetEnvironment == llvm::Triple::GNUX32) return "x86_64-linux-gnux32"; -return "x86_64-linux-gnu"; +return "x86_64-linux-" + llvm::Twine(EnvName).str(); case llvm::Triple::aarch64: if (IsAndroid) return "aarch64-linux-android"; -return "aarch64-linux-gnu"; +return "aarch64-linux-" + llvm::Twine(EnvName).str(); case llvm::Triple::aarch64_be: -return "aarch64_be-linux-gnu"; +return "aarch64_be-linux-" + llvm::Twine(EnvName).str(); case llvm::Triple::m68k: -return "m68k-linux-gnu"; +return "m68k-linux-" + llvm::Twine(EnvName).str(); case llvm::Triple::mips: -return IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-gnu"; +return IsMipsR6 ? "mipsisa32r6-linux-gnu" +: "mips-linux-" + llvm::Twine(EnvName).str(); case llvm::Triple::mipsel: if (IsAndroid) return "mipsel-linux-android"; @@ -117,19 +121,19 @@ case llvm::Triple::ppc: if (D.getVFS().exists(concat(SysRoot, "/lib/powerpc-linux-gnuspe"))) return "powerpc-linux-gnuspe"; -return "powerpc-linux-gnu"; +return "powerpc-linux-" + llvm::Twine(EnvName).str(); case llvm::Triple::ppcle: -return "powerpcle-linux-gnu"; +return "powerpcle-linux-" + llvm::Twine(EnvName).str(); case llvm::Triple::ppc64: -return "powerpc64-linux-gnu"; +return "powerpc64-linux-" + llvm::Twine(EnvName).str(); case llvm::Triple::ppc64le: -return "powerpc64le-linux-gnu"; +return "powerpc64le-linux-" + llvm::Twine(EnvName).str(); case llvm::Triple::riscv64: -return "riscv64-linux-gnu"; +return "riscv64-linux-" + llvm::Twine(EnvName).str(); case llvm::Triple::sparc: -return "sparc-linux-gnu"; +return "sparc-linux-" + llvm::Twine(EnvName).str(); case llvm::Triple::sparcv9: -return "sparc64-linux-gnu"; +return "sparc64-linux-" + llvm::Twine(EnvName).str(); case llvm::Triple::systemz: return "s390x-linux-gnu"; } Index: clang/lib/Driver/ToolChains/Linux.cpp === --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -46,6 +46,9 @@ bool IsMipsR6 = TargetTriple.getSubArch() == llvm::Triple::MipsSubArch_r6; bool IsMipsN32Abi = TargetTriple.getEnvironment() == llvm::Triple::GNUABIN32; + llvm::StringRef EnvName = + llvm::Triple::getEnvironmentTypeName(TargetTriple.getEnvironment()); + // For most architectures, just use whatever we have rather than trying to be // clever. switch (TargetTriple.getArch()) { @@ -62,34 +65,35 @@ return "arm-linux-androideabi"; if (TargetEnvironment == llvm::Triple::GNUEABIHF) return "arm-linux-gnueabihf"; -return "arm-linux-gnueabi"; +return "arm-linux-" + llvm::Twine(EnvName).str() + "eabi"; case llvm::Triple::armeb: case llvm::Triple::thumbeb: if (TargetEnvironment == llvm::Triple::GNUEABIHF) return "armeb-linux-gnueabihf"; -return "armeb-linux-gnueabi"; +return "armeb-linux-" + llvm::Twine(EnvName).str() + "eabi"; case llvm::Triple::x86: if (IsAndroid) return "i686-linux-android"; -return "i386-linux-gnu"; +return "i386-linux-" + llvm::Twine(EnvName).str(); case llvm::Triple::x86_64: if (IsAndroid) return "x86_64-linux-androi
[PATCH] D131563: [WIP] [clang] Fix clang multiarch isssue with musl
listout marked an inline comment as done. listout added a comment. @barannikov88 made some changes. What do you think? Comment at: clang/lib/Driver/ToolChains/Linux.cpp:49 + std::string EnvName = TargetTriple.isMusl() ? "musl" : "gnu"; + barannikov88 wrote: > * `!isMusl()` does not mean it is "gnu". > * Why don't just use `Triple::getEnvironmentTypeName`? > Sure, I'll change the patch CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131563/new/ https://reviews.llvm.org/D131563 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits