musl-targets.patch (5560B)
1 diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp 2 index 543f396..24ee06b 100644 3 --- a/clang/lib/Driver/ToolChains/Gnu.cpp 4 +++ b/clang/lib/Driver/ToolChains/Gnu.cpp 5 @@ -2545,8 +2545,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( 6 // 64-bit compiler which defaults to "-m32", hence "powerpc64-suse-linux". 7 "powerpc64-suse-linux", "powerpc-montavista-linuxspe"}; 8 static const char *const PPCLELibDirs[] = {"/lib32", "/lib"}; 9 - static const char *const PPCLETriples[] = {"powerpcle-unknown-linux-gnu", 10 - "powerpcle-linux-musl"}; 11 + static const char *const PPCLETriples[] = {"powerpcle-unknown-linux-gnu"}; 12 13 static const char *const PPC64LibDirs[] = {"/lib64", "/lib"}; 14 static const char *const PPC64Triples[] = {"powerpc64-unknown-linux-gnu", 15 @@ -2619,6 +2618,95 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( 16 return; 17 } 18 19 + if (TargetTriple.isMusl()) { 20 + static const char *const AArch64MuslTriples[] = {"aarch64-linux-musl"}; 21 + static const char *const ARMHFMuslTriples[] = { 22 + "arm-linux-musleabihf", "armv7l-linux-musleabihf" 23 + }; 24 + static const char *const ARMMuslTriples[] = {"arm-linux-musleabi"}; 25 + static const char *const X86_64MuslTriples[] = { 26 + "x86_64-linux-musl", 27 + "x86_64-pc-linux-musl", "x86_64-unknown-linux-musl" 28 + }; 29 + static const char *const X86MuslTriples[] = {"i686-linux-musl"}; 30 + static const char *const MIPSMuslTriples[] = { 31 + "mips-linux-musl", "mipsel-linux-musl", 32 + "mipsel-linux-muslhf", "mips-linux-muslhf" 33 + }; 34 + static const char *const PPCMuslTriples[] = {"powerpc-linux-musl"}; 35 + static const char *const PPCLEMuslTriples[] = {"powerpcle-linux-musl"}; 36 + static const char *const PPC64MuslTriples[] = {"powerpc64-linux-musl"}; 37 + static const char *const PPC64LEMuslTriples[] = {"powerpc64le-linux-musl"}; 38 + static const char *const RISCV64MuslTriples[] = {"riscv64-linux-musl"}; 39 + 40 + switch (TargetTriple.getArch()) { 41 + case llvm::Triple::aarch64: 42 + LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs)); 43 + TripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples)); 44 + BiarchLibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs)); 45 + BiarchTripleAliases.append(begin(AArch64MuslTriples), end(AArch64MuslTriples)); 46 + break; 47 + case llvm::Triple::arm: 48 + LibDirs.append(begin(ARMLibDirs), end(ARMLibDirs)); 49 + if (TargetTriple.getEnvironment() == llvm::Triple::MuslEABIHF) { 50 + TripleAliases.append(begin(ARMHFMuslTriples), end(ARMHFMuslTriples)); 51 + } else { 52 + TripleAliases.append(begin(ARMMuslTriples), end(ARMMuslTriples)); 53 + } 54 + break; 55 + case llvm::Triple::x86_64: 56 + LibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs)); 57 + TripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples)); 58 + BiarchLibDirs.append(begin(X86LibDirs), end(X86LibDirs)); 59 + BiarchTripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples)); 60 + break; 61 + case llvm::Triple::x86: 62 + LibDirs.append(begin(X86LibDirs), end(X86LibDirs)); 63 + TripleAliases.append(begin(X86MuslTriples), end(X86MuslTriples)); 64 + BiarchLibDirs.append(begin(X86_64LibDirs), end(X86_64LibDirs)); 65 + BiarchTripleAliases.append(begin(X86_64MuslTriples), end(X86_64MuslTriples)); 66 + break; 67 + case llvm::Triple::mips: 68 + LibDirs.append(begin(MIPSLibDirs), end(MIPSLibDirs)); 69 + TripleAliases.append(begin(MIPSMuslTriples), end(MIPSMuslTriples)); 70 + break; 71 + case llvm::Triple::ppc: 72 + LibDirs.append(begin(PPCLibDirs), end(PPCLibDirs)); 73 + TripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples)); 74 + BiarchLibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs)); 75 + BiarchTripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples)); 76 + break; 77 + case llvm::Triple::ppcle: 78 + LibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs)); 79 + TripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples)); 80 + BiarchLibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs)); 81 + BiarchTripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples)); 82 + break; 83 + case llvm::Triple::ppc64: 84 + LibDirs.append(begin(PPC64LibDirs), end(PPC64LibDirs)); 85 + TripleAliases.append(begin(PPC64MuslTriples), end(PPC64MuslTriples)); 86 + BiarchLibDirs.append(begin(PPCLibDirs), end(PPCLibDirs)); 87 + BiarchTripleAliases.append(begin(PPCMuslTriples), end(PPCMuslTriples)); 88 + break; 89 + case llvm::Triple::ppc64le: 90 + LibDirs.append(begin(PPC64LELibDirs), end(PPC64LELibDirs)); 91 + TripleAliases.append(begin(PPC64LEMuslTriples), end(PPC64LEMuslTriples)); 92 + BiarchLibDirs.append(begin(PPCLELibDirs), end(PPCLELibDirs)); 93 + BiarchTripleAliases.append(begin(PPCLEMuslTriples), end(PPCLEMuslTriples)); 94 + break; 95 + case llvm::Triple::riscv64: 96 + LibDirs.append(begin(RISCV64LibDirs), end(RISCV64LibDirs)); 97 + TripleAliases.append(begin(RISCV64MuslTriples), end(RISCV64MuslTriples)); 98 + break; 99 + default: 100 + break; 101 + } 102 + TripleAliases.push_back(TargetTriple.str()); 103 + if (TargetTriple.str() != BiarchTriple.str()) 104 + BiarchTripleAliases.push_back(BiarchTriple.str()); 105 + return; 106 + } 107 + 108 // Android targets should not use GNU/Linux tools or libraries. 109 if (TargetTriple.isAndroid()) { 110 static const char *const AArch64AndroidTriples[] = {