https://github.com/quic-akaryaki updated 
https://github.com/llvm/llvm-project/pull/186494

>From 30f6e2816b67ce1cd998854cc0cc7f6d4d8047e6 Mon Sep 17 00:00:00 2001
From: Alexey Karyakin <[email protected]>
Date: Fri, 13 Mar 2026 10:41:55 -0700
Subject: [PATCH] [Hexagon] Driver: Always use resource include dir

Before #185456, non-linux triples used the resource include directory
implicitly, by logic in preprocessor. #185456 disables that logic
for all Hexagon triples. To compensate, add the resource include
directory in the driver. Hopefully, this will also make the
corresponding driver logic less convoluted.

The order of inclusion for linux/musl is different for internal and
external sysroots, which is kept as is.
---
 clang/lib/Driver/ToolChains/Hexagon.cpp   | 35 +++++++++++------------
 clang/test/Driver/hexagon-toolchain-elf.c | 15 ++++++++++
 2 files changed, 31 insertions(+), 19 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp 
b/clang/lib/Driver/ToolChains/Hexagon.cpp
index 084f51721315c..d3e2b5006fa6d 100644
--- a/clang/lib/Driver/ToolChains/Hexagon.cpp
+++ b/clang/lib/Driver/ToolChains/Hexagon.cpp
@@ -706,22 +706,17 @@ void HexagonToolChain::AddClangSystemIncludeArgs(const 
ArgList &DriverArgs,
   if (DriverArgs.hasArg(options::OPT_nostdinc))
     return;
 
-  const bool IsELF = !getTriple().isMusl() && !getTriple().isOSLinux();
+  const Driver &D = getDriver();
+  const bool UseBuiltins = !DriverArgs.hasArg(options::OPT_nobuiltininc);
+  const bool HasSysRoot = !D.SysRoot.empty();
   const bool IsLinuxMusl = getTriple().isMusl() && getTriple().isOSLinux();
 
-  const Driver &D = getDriver();
-  SmallString<128> ResourceDirInclude(D.ResourceDir);
-  if (!IsELF) {
+  if (UseBuiltins && !IsLinuxMusl) {
+    SmallString<128> ResourceDirInclude(D.ResourceDir);
     llvm::sys::path::append(ResourceDirInclude, "include");
-    if (!DriverArgs.hasArg(options::OPT_nobuiltininc) &&
-        (!IsLinuxMusl || DriverArgs.hasArg(options::OPT_nostdlibinc)))
-      addSystemInclude(DriverArgs, CC1Args, ResourceDirInclude);
+    addSystemInclude(DriverArgs, CC1Args, ResourceDirInclude);
   }
-  if (DriverArgs.hasArg(options::OPT_nostdlibinc))
-    return;
-
-  const bool HasSysRoot = !D.SysRoot.empty();
-  if (HasSysRoot) {
+  if (!DriverArgs.hasArg(options::OPT_nostdlibinc) && HasSysRoot) {
     SmallString<128> P(D.SysRoot);
     if (IsLinuxMusl)
       llvm::sys::path::append(P, "usr/include");
@@ -734,14 +729,16 @@ void HexagonToolChain::AddClangSystemIncludeArgs(const 
ArgList &DriverArgs,
     // TOOL_INCLUDE_DIR
     AddMultilibIncludeArgs(DriverArgs, CC1Args);
   }
-
-  if (!DriverArgs.hasArg(options::OPT_nobuiltininc) && IsLinuxMusl)
+  if (UseBuiltins && IsLinuxMusl) {
+    SmallString<128> ResourceDirInclude(D.ResourceDir);
+    llvm::sys::path::append(ResourceDirInclude, "include");
     addSystemInclude(DriverArgs, CC1Args, ResourceDirInclude);
-
-  if (HasSysRoot)
-    return;
-  std::string TargetDir = getHexagonTargetDir(D.Dir, D.PrefixDirs);
-  addExternCSystemInclude(DriverArgs, CC1Args, TargetDir + "/hexagon/include");
+  }
+  if (!DriverArgs.hasArg(options::OPT_nostdlibinc) && !HasSysRoot) {
+    std::string TargetDir = getHexagonTargetDir(D.Dir, D.PrefixDirs);
+    addExternCSystemInclude(DriverArgs, CC1Args,
+                            TargetDir + "/hexagon/include");
+  }
 }
 
 void HexagonToolChain::addLibCxxIncludePaths(
diff --git a/clang/test/Driver/hexagon-toolchain-elf.c 
b/clang/test/Driver/hexagon-toolchain-elf.c
index bff4819488453..72a8a8b075eab 100644
--- a/clang/test/Driver/hexagon-toolchain-elf.c
+++ b/clang/test/Driver/hexagon-toolchain-elf.c
@@ -27,17 +27,32 @@
 // CHECK111: "-cc1"
 // CHECK111-NOT: "-internal-externc-isystem"
 
+// RUN: %clang -### --target=hexagon-unknown-elf \
+// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \
+// RUN:   -resource-dir=%S/Inputs/resource_dir %s 2>&1 | FileCheck 
-check-prefix=CHECK-RESOURCE-DIR %s
+// CHECK-RESOURCE-DIR: InstalledDir: [[INSTALLED_DIR:.+]]
+// CHECK-RESOURCE-DIR: "-cc1"
+// CHECK-RESOURCE-DIR: "-resource-dir" "[[RESOURCE:[^"]+]]"
+// CHECK-RESOURCE-DIR: "-internal-isystem" "[[RESOURCE]]{{/|\\\\}}include"
+// CHECK-RESOURCE-DIR: "-internal-externc-isystem" 
"[[INSTALLED_DIR]]/../target/hexagon/include"
+
 // RUN: %clangxx -### --target=hexagon-unknown-elf \
 // RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \
 // RUN:   -nostdinc++ %s 2>&1 | FileCheck -check-prefix=CHECK112 %s
+// CHECK112: InstalledDir: [[INSTALLED_DIR:.+]]
 // CHECK112: "-cc1"
+// CHECK112: "-resource-dir" "[[RESOURCE:[^"]+]]"
+// CHECK112: "-internal-isystem" "[[RESOURCE]]{{/|\\\\}}include"
 // CHECK112-NOT: "-internal-isystem"
 // CHECK112-DAG: "-internal-externc-isystem" 
"{{.*}}/Inputs/hexagon_tree/Tools/bin/../target/hexagon/include"
 
 // RUN: %clangxx -### --target=hexagon-unknown-elf -fno-integrated-as    \
 // RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/qc/bin \
 // RUN:   -nostdlibinc %s 2>&1 | FileCheck -check-prefix=CHECK113 %s
+// CHECK113: InstalledDir: [[INSTALLED_DIR:.+]]
 // CHECK113: "-cc1"
+// CHECK113: "-resource-dir" "[[RESOURCE:[^"]+]]"
+// CHECK113: "-internal-isystem" "[[RESOURCE]]{{/|\\\\}}include"
 // CHECK113-NOT: "-internal-isystem"
 // CHECK113-NOT: "-internal-externc-isystem"
 

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to