[clang] [Hexagon] Driver: Always use resource include directory (PR #186494)

via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 16 08:50:38 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Alexey Karyakin (quic-akaryaki)

<details>
<summary>Changes</summary>

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.

---
Full diff: https://github.com/llvm/llvm-project/pull/186494.diff


2 Files Affected:

- (modified) clang/lib/Driver/ToolChains/Hexagon.cpp (+16-19) 
- (modified) clang/test/Driver/hexagon-toolchain-elf.c (+15) 


``````````diff
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..a3aac15905d46 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" "{{.*}}/Inputs/hexagon_tree/Tools/bin/../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"
 

``````````

</details>


https://github.com/llvm/llvm-project/pull/186494


More information about the cfe-commits mailing list