39 lines
1.7 KiB
Diff
39 lines
1.7 KiB
Diff
--- a/clang-17.0.6.src/lib/Driver/ToolChains/Gnu.cpp 2023-10-31 14:00:30.000000000 +0600
|
|
+++ b/clang-17.0.6.src/lib/Driver/ToolChains/Gnu.cpp 2023-11-21 18:49:10.488706821 +0600
|
|
@@ -2061,6 +2061,18 @@
|
|
return GCC_INSTALL_PREFIX;
|
|
}
|
|
|
|
+/// This function takes a 'clang' triple and converts it to an equivalent gcc
|
|
+/// triple.
|
|
+static const char *ConvertToGccTriple(StringRef CandidateTriple) {
|
|
+ return llvm::StringSwitch<const char *>(CandidateTriple)
|
|
+ .Case("aarch64-redhat-linux-gnu", "aarch64-redhat-linux")
|
|
+ .Case("i686-redhat-linux-gnu", "i686-redhat-linux")
|
|
+ .Case("ppc64le-redhat-linux-gnu", "ppc64le-redhat-linux")
|
|
+ .Case("s390x-redhat-linux-gnu", "s390x-redhat-linux")
|
|
+ .Case("x86_64-redhat-linux-gnu", "x86_64-redhat-linux")
|
|
+ .Default(NULL);
|
|
+}
|
|
+
|
|
/// Initialize a GCCInstallationDetector from the driver.
|
|
///
|
|
/// This performs all of the autodetection and sets up the various paths.
|
|
@@ -2081,6 +2093,16 @@
|
|
// The compatible GCC triples for this particular architecture.
|
|
SmallVector<StringRef, 16> CandidateTripleAliases;
|
|
SmallVector<StringRef, 16> CandidateBiarchTripleAliases;
|
|
+
|
|
+ // In some cases gcc uses a slightly different triple than clang for the
|
|
+ // same target. Convert the clang triple to the gcc equivalent and use that
|
|
+ // to search for the gcc install.
|
|
+ const char *ConvertedTriple = ConvertToGccTriple(TargetTriple.str());
|
|
+ if (ConvertedTriple) {
|
|
+ CandidateTripleAliases.push_back(ConvertedTriple);
|
|
+ CandidateBiarchTripleAliases.push_back(ConvertedTriple);
|
|
+ }
|
|
+
|
|
CollectLibDirsAndTriples(TargetTriple, BiarchVariantTriple, CandidateLibDirs,
|
|
CandidateTripleAliases, CandidateBiarchLibDirs,
|
|
CandidateBiarchTripleAliases);
|