https://github.com/jhuber6 updated 
https://github.com/llvm/llvm-project/pull/175593

>From 25429d459ce8ed555b9b9270fb0c7f4845581821 Mon Sep 17 00:00:00 2001
From: Joseph Huber <[email protected]>
Date: Mon, 12 Jan 2026 11:43:19 -0600
Subject: [PATCH 1/5] [Clang] Include LLVM libc header directory from Linux

Summary:
The LLVM-libc stores its headers in the target-specific include
directory. This PR makes the Linux toolchain include this directory when
the environment is LLVM. This should allow the following to work
correctly when building the LLVM libc

```shell
$> clang --target=x86_64-unknown-linux-llvm -static foo.c
```

In the future we might want to consider making a separate toolchain, but
considering that the LLVM-libc intentionally shares a lot of
compatibility with GCC I thnk it's easier to just to do conditional
operations like this.
---
 clang/lib/Driver/ToolChains/Linux.cpp                      | 7 +++++++
 clang/test/Driver/Inputs/basic_llvm_linux_tree/bin/.keep   | 0
 .../Inputs/basic_llvm_linux_tree/include/c++/v1/.keep      | 0
 .../include/x86_64-unknown-linux-llvm/.keep                | 0
 .../include/x86_64-unknown-linux-llvm/c++/v1/.keep         | 0
 .../lib/x86_64-unknown-linux-llvm/.keep                    | 0
 .../lib/x86_64-unknown-linux-llvm/crt0.o                   | 0
 clang/test/Driver/linux-llvm-toolchain.c                   | 3 +++
 8 files changed, 10 insertions(+)
 create mode 100644 clang/test/Driver/Inputs/basic_llvm_linux_tree/bin/.keep
 create mode 100644 
clang/test/Driver/Inputs/basic_llvm_linux_tree/include/c++/v1/.keep
 create mode 100644 
clang/test/Driver/Inputs/basic_llvm_linux_tree/include/x86_64-unknown-linux-llvm/.keep
 create mode 100644 
clang/test/Driver/Inputs/basic_llvm_linux_tree/include/x86_64-unknown-linux-llvm/c++/v1/.keep
 create mode 100644 
clang/test/Driver/Inputs/basic_llvm_linux_tree/lib/x86_64-unknown-linux-llvm/.keep
 create mode 100644 
clang/test/Driver/Inputs/basic_llvm_linux_tree/lib/x86_64-unknown-linux-llvm/crt0.o
 create mode 100644 clang/test/Driver/linux-llvm-toolchain.c

diff --git a/clang/lib/Driver/ToolChains/Linux.cpp 
b/clang/lib/Driver/ToolChains/Linux.cpp
index cd2c4deb63d14..9e78f0acf6bed 100644
--- a/clang/lib/Driver/ToolChains/Linux.cpp
+++ b/clang/lib/Driver/ToolChains/Linux.cpp
@@ -760,6 +760,13 @@ void Linux::AddClangSystemIncludeArgs(const ArgList 
&DriverArgs,
   if (DriverArgs.hasArg(options::OPT_nostdlibinc))
     return;
 
+  // The LLVM-libc environment stores its C headers in the Clang include
+  // directory.
+  if (getTriple().getEnvironment() == llvm::Triple::LLVM) {
+    if (std::optional<std::string> Path = getStdlibIncludePath())
+      addSystemInclude(DriverArgs, CC1Args, *Path);
+  }
+
   // LOCAL_INCLUDE_DIR
   addSystemInclude(DriverArgs, CC1Args, concat(SysRoot, "/usr/local/include"));
   // TOOL_INCLUDE_DIR
diff --git a/clang/test/Driver/Inputs/basic_llvm_linux_tree/bin/.keep 
b/clang/test/Driver/Inputs/basic_llvm_linux_tree/bin/.keep
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git 
a/clang/test/Driver/Inputs/basic_llvm_linux_tree/include/c++/v1/.keep 
b/clang/test/Driver/Inputs/basic_llvm_linux_tree/include/c++/v1/.keep
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git 
a/clang/test/Driver/Inputs/basic_llvm_linux_tree/include/x86_64-unknown-linux-llvm/.keep
 
b/clang/test/Driver/Inputs/basic_llvm_linux_tree/include/x86_64-unknown-linux-llvm/.keep
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git 
a/clang/test/Driver/Inputs/basic_llvm_linux_tree/include/x86_64-unknown-linux-llvm/c++/v1/.keep
 
b/clang/test/Driver/Inputs/basic_llvm_linux_tree/include/x86_64-unknown-linux-llvm/c++/v1/.keep
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git 
a/clang/test/Driver/Inputs/basic_llvm_linux_tree/lib/x86_64-unknown-linux-llvm/.keep
 
b/clang/test/Driver/Inputs/basic_llvm_linux_tree/lib/x86_64-unknown-linux-llvm/.keep
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git 
a/clang/test/Driver/Inputs/basic_llvm_linux_tree/lib/x86_64-unknown-linux-llvm/crt0.o
 
b/clang/test/Driver/Inputs/basic_llvm_linux_tree/lib/x86_64-unknown-linux-llvm/crt0.o
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/linux-llvm-toolchain.c 
b/clang/test/Driver/linux-llvm-toolchain.c
new file mode 100644
index 0000000000000..46632de779f25
--- /dev/null
+++ b/clang/test/Driver/linux-llvm-toolchain.c
@@ -0,0 +1,3 @@
+// RUN:   %clang -### --target=x86_64-unknown-linux-llvm 
--sysroot=%S/Inputs/basic_llvm_linux_tree \
+// RUN:     -ccc-install-dir %S/Inputs/basic_llvm_linux_tree/bin %s 2>&1 | 
FileCheck %s --check-prefix=CHECK-HEADERS
+// CHECK-HEADERS: "-cc1"{{.*}}"-isysroot"{{.*}}"-internal-isystem" 
"{{.*}}include/x86_64-unknown-linux-llvm"

>From a55e7a1e7b0105fe4dc87076caae5c5c5a39a088 Mon Sep 17 00:00:00 2001
From: Joseph Huber <[email protected]>
Date: Tue, 27 Jan 2026 12:07:54 -0600
Subject: [PATCH 2/5] Redo to all Linux

---
 clang/lib/Driver/ToolChains/Linux.cpp               |  8 +++-----
 .../usr}/bin/.keep                                  |  0
 .../usr/include/x86_64-unknown-linux-gnu}/.keep     |  0
 .../include/x86_64-unknown-linux-llvm/.keep         |  0
 .../include/x86_64-unknown-linux-llvm/c++/v1/.keep  |  0
 .../lib/x86_64-unknown-linux-llvm/.keep             |  0
 .../lib/x86_64-unknown-linux-llvm/crt0.o            |  0
 clang/test/Driver/linux-header-search.cpp           | 13 +++++++++++++
 clang/test/Driver/linux-llvm-toolchain.c            |  3 ---
 9 files changed, 16 insertions(+), 8 deletions(-)
 rename clang/test/Driver/Inputs/{basic_llvm_linux_tree => 
basic_linux_tree/usr}/bin/.keep (100%)
 rename clang/test/Driver/Inputs/{basic_llvm_linux_tree/include/c++/v1 => 
basic_linux_tree/usr/include/x86_64-unknown-linux-gnu}/.keep (100%)
 delete mode 100644 
clang/test/Driver/Inputs/basic_llvm_linux_tree/include/x86_64-unknown-linux-llvm/.keep
 delete mode 100644 
clang/test/Driver/Inputs/basic_llvm_linux_tree/include/x86_64-unknown-linux-llvm/c++/v1/.keep
 delete mode 100644 
clang/test/Driver/Inputs/basic_llvm_linux_tree/lib/x86_64-unknown-linux-llvm/.keep
 delete mode 100644 
clang/test/Driver/Inputs/basic_llvm_linux_tree/lib/x86_64-unknown-linux-llvm/crt0.o
 delete mode 100644 clang/test/Driver/linux-llvm-toolchain.c

diff --git a/clang/lib/Driver/ToolChains/Linux.cpp 
b/clang/lib/Driver/ToolChains/Linux.cpp
index 9e78f0acf6bed..7631781310d60 100644
--- a/clang/lib/Driver/ToolChains/Linux.cpp
+++ b/clang/lib/Driver/ToolChains/Linux.cpp
@@ -760,12 +760,10 @@ void Linux::AddClangSystemIncludeArgs(const ArgList 
&DriverArgs,
   if (DriverArgs.hasArg(options::OPT_nostdlibinc))
     return;
 
-  // The LLVM-libc environment stores its C headers in the Clang include
+  // After the resource directory, we prioritize the standard clang include
   // directory.
-  if (getTriple().getEnvironment() == llvm::Triple::LLVM) {
-    if (std::optional<std::string> Path = getStdlibIncludePath())
-      addSystemInclude(DriverArgs, CC1Args, *Path);
-  }
+  if (std::optional<std::string> Path = getStdlibIncludePath())
+    addSystemInclude(DriverArgs, CC1Args, *Path);
 
   // LOCAL_INCLUDE_DIR
   addSystemInclude(DriverArgs, CC1Args, concat(SysRoot, "/usr/local/include"));
diff --git a/clang/test/Driver/Inputs/basic_llvm_linux_tree/bin/.keep 
b/clang/test/Driver/Inputs/basic_linux_tree/usr/bin/.keep
similarity index 100%
rename from clang/test/Driver/Inputs/basic_llvm_linux_tree/bin/.keep
rename to clang/test/Driver/Inputs/basic_linux_tree/usr/bin/.keep
diff --git 
a/clang/test/Driver/Inputs/basic_llvm_linux_tree/include/c++/v1/.keep 
b/clang/test/Driver/Inputs/basic_linux_tree/usr/include/x86_64-unknown-linux-gnu/.keep
similarity index 100%
rename from clang/test/Driver/Inputs/basic_llvm_linux_tree/include/c++/v1/.keep
rename to 
clang/test/Driver/Inputs/basic_linux_tree/usr/include/x86_64-unknown-linux-gnu/.keep
diff --git 
a/clang/test/Driver/Inputs/basic_llvm_linux_tree/include/x86_64-unknown-linux-llvm/.keep
 
b/clang/test/Driver/Inputs/basic_llvm_linux_tree/include/x86_64-unknown-linux-llvm/.keep
deleted file mode 100644
index e69de29bb2d1d..0000000000000
diff --git 
a/clang/test/Driver/Inputs/basic_llvm_linux_tree/include/x86_64-unknown-linux-llvm/c++/v1/.keep
 
b/clang/test/Driver/Inputs/basic_llvm_linux_tree/include/x86_64-unknown-linux-llvm/c++/v1/.keep
deleted file mode 100644
index e69de29bb2d1d..0000000000000
diff --git 
a/clang/test/Driver/Inputs/basic_llvm_linux_tree/lib/x86_64-unknown-linux-llvm/.keep
 
b/clang/test/Driver/Inputs/basic_llvm_linux_tree/lib/x86_64-unknown-linux-llvm/.keep
deleted file mode 100644
index e69de29bb2d1d..0000000000000
diff --git 
a/clang/test/Driver/Inputs/basic_llvm_linux_tree/lib/x86_64-unknown-linux-llvm/crt0.o
 
b/clang/test/Driver/Inputs/basic_llvm_linux_tree/lib/x86_64-unknown-linux-llvm/crt0.o
deleted file mode 100644
index e69de29bb2d1d..0000000000000
diff --git a/clang/test/Driver/linux-header-search.cpp 
b/clang/test/Driver/linux-header-search.cpp
index 70a85deac89e4..d0e72607b36b2 100644
--- a/clang/test/Driver/linux-header-search.cpp
+++ b/clang/test/Driver/linux-header-search.cpp
@@ -1,6 +1,19 @@
 // General tests that the header search paths detected by the driver and passed
 // to CC1 are sane.
 //
+// Test to see that the compiler include directory is present.
+// RUN: %clang -### %s -fsyntax-only 2>&1 \
+// RUN:     --target=x86_64-unknown-linux-gnu \
+// RUN:     -stdlib=libc++ \
+// RUN:     -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin \
+// RUN:     -resource-dir=%S/Inputs/resource_dir \
+// RUN:     --sysroot=%S/Inputs/basic_linux_tree/ \
+// RUN:   | FileCheck --check-prefix=CHECK-BASIC-CLANG-SYSROOT-SLASH %s
+// CHECK-BASIC-CLANG-SYSROOT-SLASH: "-cc1"
+// CHECK-BASIC-CLANG-SYSROOT-SLASH-SAME: "-isysroot" "[[SYSROOT:[^"]+/]]"
+// CHECK-BASIC-CLANG-SYSROOT-SLASH-SAME: "-internal-isystem" 
"[[SYSROOT]]usr[[SEP:/|\\\\]]bin[[SEP]]..[[SEP]]include[[SEP]]x86_64-unknown-linux-gnu"
+// CHECK-BASIC-CLANG-SYSROOT-SLASH-SAME: "-internal-isystem" 
"[[SYSROOT]]usr/local/include"
+//
 // Test a simulated installation of libc++ on Linux, both through sysroot and
 // the installation path of Clang.
 // RUN: %clang -### %s -fsyntax-only 2>&1 \
diff --git a/clang/test/Driver/linux-llvm-toolchain.c 
b/clang/test/Driver/linux-llvm-toolchain.c
deleted file mode 100644
index 46632de779f25..0000000000000
--- a/clang/test/Driver/linux-llvm-toolchain.c
+++ /dev/null
@@ -1,3 +0,0 @@
-// RUN:   %clang -### --target=x86_64-unknown-linux-llvm 
--sysroot=%S/Inputs/basic_llvm_linux_tree \
-// RUN:     -ccc-install-dir %S/Inputs/basic_llvm_linux_tree/bin %s 2>&1 | 
FileCheck %s --check-prefix=CHECK-HEADERS
-// CHECK-HEADERS: "-cc1"{{.*}}"-isysroot"{{.*}}"-internal-isystem" 
"{{.*}}include/x86_64-unknown-linux-llvm"

>From 3be178e6600bc7de451862359e95441dc90a7e56 Mon Sep 17 00:00:00 2001
From: Joseph Huber <[email protected]>
Date: Tue, 27 Jan 2026 15:27:25 -0600
Subject: [PATCH 3/5] fix test

---
 clang/test/Driver/linux-cross.cpp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/clang/test/Driver/linux-cross.cpp 
b/clang/test/Driver/linux-cross.cpp
index 7f46211b6ed8b..419df5047b954 100644
--- a/clang/test/Driver/linux-cross.cpp
+++ b/clang/test/Driver/linux-cross.cpp
@@ -32,6 +32,7 @@
 // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/x86_64-linux-gnu/c++/10"
 // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/backward"
 // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
+// DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" 
"[[BINROOT:[^"]+]]/usr/bin/../include/x86_64-unknown-linux-gnu"
 // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT]]/usr/local/include"
 // DEBIAN_X86_64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include"
 /// We set explicit -ccc-install-dir ensure that Clang does not pick up extra
@@ -61,6 +62,7 @@
 // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/x86_64-linux-gnu/c++/10/32"
 // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/backward"
 // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
+// DEBIAN_X86_64-M32-SAME: {{^}} "-internal-isystem" 
"[[BINROOT:[^"]+]]/usr/bin/../include/x86_64-unknown-linux-gnu"
 // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT]]/usr/local/include"
 // DEBIAN_X86_64_M32-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT:[^"]+]]/usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/include"
 // DEBIAN_X86_64_M32:      "-internal-externc-isystem"
@@ -112,6 +114,7 @@
 // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-linux-gnu/10/../../../../include/i386-linux-gnu/c++/10/64"
 // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-linux-gnu/10/../../../../include/c++/10/backward"
 // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]/include"
+// DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" 
"[[BINROOT:[^"]+]]/usr/bin/../include/x86_64-unknown-linux-gnu"
 // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT]]/usr/local/include"
 // DEBIAN_I686_M64-SAME: {{^}} "-internal-isystem" 
"[[SYSROOT:[^"]+]]/usr/lib/gcc/i686-linux-gnu/10/../../../../i686-linux-gnu/include"
 // DEBIAN_I686_M64:      "-internal-externc-isystem"

>From 8198656f1966828a2e8e038d126a595a3e32e6be Mon Sep 17 00:00:00 2001
From: Joseph Huber <[email protected]>
Date: Wed, 28 Jan 2026 09:19:35 -0600
Subject: [PATCH 4/5] Try to fix Windows

---
 clang/test/Driver/linux-header-search.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/test/Driver/linux-header-search.cpp 
b/clang/test/Driver/linux-header-search.cpp
index d0e72607b36b2..c50f3fbf53430 100644
--- a/clang/test/Driver/linux-header-search.cpp
+++ b/clang/test/Driver/linux-header-search.cpp
@@ -11,7 +11,7 @@
 // RUN:   | FileCheck --check-prefix=CHECK-BASIC-CLANG-SYSROOT-SLASH %s
 // CHECK-BASIC-CLANG-SYSROOT-SLASH: "-cc1"
 // CHECK-BASIC-CLANG-SYSROOT-SLASH-SAME: "-isysroot" "[[SYSROOT:[^"]+/]]"
-// CHECK-BASIC-CLANG-SYSROOT-SLASH-SAME: "-internal-isystem" 
"[[SYSROOT]]usr[[SEP:/|\\\\]]bin[[SEP]]..[[SEP]]include[[SEP]]x86_64-unknown-linux-gnu"
+// CHECK-BASIC-CLANG-SYSROOT-SLASH-SAME: "-internal-isystem" 
"[[BINROOT:[^"]+]]/usr/bin/../include/x86_64-unknown-linux-gnu"
 // CHECK-BASIC-CLANG-SYSROOT-SLASH-SAME: "-internal-isystem" 
"[[SYSROOT]]usr/local/include"
 //
 // Test a simulated installation of libc++ on Linux, both through sysroot and

>From 3d9eb33e7fc941539fe5e6f584de531abcbd87fc Mon Sep 17 00:00:00 2001
From: Joseph Huber <[email protected]>
Date: Thu, 29 Jan 2026 08:33:17 -0600
Subject: [PATCH 5/5] Try to fix Windows again

---
 clang/test/Driver/linux-header-search.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/test/Driver/linux-header-search.cpp 
b/clang/test/Driver/linux-header-search.cpp
index c50f3fbf53430..e15d8f1a3b934 100644
--- a/clang/test/Driver/linux-header-search.cpp
+++ b/clang/test/Driver/linux-header-search.cpp
@@ -11,7 +11,7 @@
 // RUN:   | FileCheck --check-prefix=CHECK-BASIC-CLANG-SYSROOT-SLASH %s
 // CHECK-BASIC-CLANG-SYSROOT-SLASH: "-cc1"
 // CHECK-BASIC-CLANG-SYSROOT-SLASH-SAME: "-isysroot" "[[SYSROOT:[^"]+/]]"
-// CHECK-BASIC-CLANG-SYSROOT-SLASH-SAME: "-internal-isystem" 
"[[BINROOT:[^"]+]]/usr/bin/../include/x86_64-unknown-linux-gnu"
+// CHECK-BASIC-CLANG-SYSROOT-SLASH-SAME: "-internal-isystem" 
"[[BINROOT:[^"]+]]/usr/bin[[SEP:/|\\\\]]..[[SEP]]include[[SEP]]x86_64-unknown-linux-gnu"
 // CHECK-BASIC-CLANG-SYSROOT-SLASH-SAME: "-internal-isystem" 
"[[SYSROOT]]usr/local/include"
 //
 // Test a simulated installation of libc++ on Linux, both through sysroot and

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

Reply via email to