[clang] d8166e1 - [Driver] Refactor /opt/rh detection

Fangrui Song via cfe-commits cfe-commits at lists.llvm.org
Wed May 18 12:40:32 PDT 2022


Author: Fangrui Song
Date: 2022-05-18T12:40:27-07:00
New Revision: d8166e1900c05429abc726d379bc33281c4c98e4

URL: https://github.com/llvm/llvm-project/commit/d8166e1900c05429abc726d379bc33281c4c98e4
DIFF: https://github.com/llvm/llvm-project/commit/d8166e1900c05429abc726d379bc33281c4c98e4.diff

LOG: [Driver] Refactor /opt/rh detection

Check /opt/rh first to avoid `/opt/rh/*` newfstatat/etc calls on other
distributions.

Added: 
    

Modified: 
    clang/lib/Driver/ToolChains/Gnu.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
index 003a97e2c3ebb..b73634bad631a 100644
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
@@ -2147,9 +2147,10 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
     return;
   }
 
-  // Non-Solaris is much simpler - most systems just go with "/usr".
-  if (SysRoot.empty() && TargetTriple.getOS() == llvm::Triple::Linux) {
-    // Yet, still look for RHEL/CentOS devtoolsets and gcc-toolsets.
+  // For Linux, if --sysroot is not specified, look for RHEL/CentOS devtoolsets
+  // and gcc-toolsets.
+  if (SysRoot.empty() && TargetTriple.getOS() == llvm::Triple::Linux &&
+      D.getVFS().exists("/opt/rh")) {
     Prefixes.push_back("/opt/rh/gcc-toolset-11/root/usr");
     Prefixes.push_back("/opt/rh/gcc-toolset-10/root/usr");
     Prefixes.push_back("/opt/rh/devtoolset-11/root/usr");
@@ -2162,6 +2163,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
     Prefixes.push_back("/opt/rh/devtoolset-3/root/usr");
     Prefixes.push_back("/opt/rh/devtoolset-2/root/usr");
   }
+
+  // Fall back to /usr which is used by most non-Solaris systems.
   Prefixes.push_back(SysRoot.str() + "/usr");
 }
 


        


More information about the cfe-commits mailing list