jcheca / rpms / clang

Forked from rpms/clang 2 years ago
Clone
fde900e
From d68a5a7817dc0d43853d8b84c9185dc24338664f Mon Sep 17 00:00:00 2001
fde900e
From: Tom Stellard <tstellar@redhat.com>
fde900e
Date: Wed, 6 Oct 2021 05:32:44 +0000
fde900e
Subject: [PATCH] Driver: Add a gcc equivalent triple to the list of triples to
fde900e
 search
fde900e
fde900e
There are some gcc triples, like x86_64-redhat-linux, that provide the
fde900e
same behavior as a clang triple with a similar name (e.g.
fde900e
x86_64-redhat-linux-gnu).  When searching for a gcc install, also search
fde900e
for a gcc equivalent triple if one exists.
fde900e
fde900e
Differential Revision: https://reviews.llvm.org/D111207
fde900e
---
fde900e
 clang/lib/Driver/ToolChains/Gnu.cpp | 22 ++++++++++++++++++++++
fde900e
 1 file changed, 22 insertions(+)
fde900e
fde900e
diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
fde900e
index fe5bda5c6605..fd4a7f72be14 100644
fde900e
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
fde900e
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
fde900e
@@ -1884,6 +1884,18 @@ static llvm::StringRef getGCCToolchainDir(const ArgList &Args,
fde900e
   return GCC_INSTALL_PREFIX;
fde900e
 }
fde900e
 
fde900e
+/// This function takes a 'clang' triple and converts it to an equivalent gcc
fde900e
+/// triple.
fde900e
+static const char *ConvertToGccTriple(StringRef CandidateTriple) {
fde900e
+  return llvm::StringSwitch<const char *>(CandidateTriple)
fde900e
+      .Case("aarch64-redhat-linux-gnu", "aarch64-redhat-linux")
fde900e
+      .Case("i686-redhat-linux-gnu", "i686-redhat-linux")
fde900e
+      .Case("ppc64le-redhat-linux-gnu", "ppc64le-redhat-linux")
fde900e
+      .Case("s390x-redhat-linux-gnu", "s390x-redhat-linux")
fde900e
+      .Case("x86_64-redhat-linux-gnu", "x86_64-redhat-linux")
fde900e
+      .Default(NULL);
fde900e
+}
fde900e
+
fde900e
 /// Initialize a GCCInstallationDetector from the driver.
fde900e
 ///
fde900e
 /// This performs all of the autodetection and sets up the various paths.
fde900e
@@ -1904,6 +1916,16 @@ void Generic_GCC::GCCInstallationDetector::init(
fde900e
   // The compatible GCC triples for this particular architecture.
fde900e
   SmallVector<StringRef, 16> CandidateTripleAliases;
fde900e
   SmallVector<StringRef, 16> CandidateBiarchTripleAliases;
fde900e
+
fde900e
+  // In some cases gcc uses a slightly different triple than clang for the
fde900e
+  // same target.  Convert the clang triple to the gcc equivalent and use that
fde900e
+  // to search for the gcc install.
fde900e
+  const char *ConvertedTriple = ConvertToGccTriple(TargetTriple.str());
fde900e
+  if (ConvertedTriple) {
fde900e
+    CandidateTripleAliases.push_back(ConvertedTriple);
fde900e
+    CandidateBiarchTripleAliases.push_back(ConvertedTriple);
fde900e
+  }
fde900e
+
fde900e
   CollectLibDirsAndTriples(TargetTriple, BiarchVariantTriple, CandidateLibDirs,
fde900e
                            CandidateTripleAliases, CandidateBiarchLibDirs,
fde900e
                            CandidateBiarchTripleAliases);
fde900e
-- 
fde900e
2.26.2
fde900e