[clang] [Clang][Driver] Fix compiler-rt library directory for cygwin (PR #208925)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 16 06:35:57 PDT 2026
https://github.com/tyan0 updated https://github.com/llvm/llvm-project/pull/208925
>From d8c0b95372cc294daf23a1cc347e6b5dbf6e698b Mon Sep 17 00:00:00 2001
From: Takashi Yano <takashi.yano at nifty.ne.jp>
Date: Sun, 12 Jul 2026 01:00:33 +0900
Subject: [PATCH 1/3] Fix compiler-rt library directory for cygwin
If compiler-rt is built with LLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF,
its search directory is incorrect.
Specifically, ToolChain::getOSLibName() returns `windows` instead
of `cygwin` in a Cygwin environment, due to falling back to getOS().
This results in a link error against compiler-rt.
This patch makes getOSLibName() return `cygwin`, ensuring that
compiler-rt is linked correctly.
Signed-off-by: Takashi Yano <takashi.yano at nifty.ne.jp>
---
clang/lib/Driver/ToolChain.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index f894a0635de13..f26fcbc39b37f 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -852,6 +852,8 @@ static StringRef getArchNameForCompilerRTLib(const ToolChain &TC,
StringRef ToolChain::getOSLibName() const {
if (Triple.isOSDarwin())
return "darwin";
+ if (Triple.isWindowsCygwinEnvironment())
+ return "cygwin";
switch (Triple.getOS()) {
case llvm::Triple::FreeBSD:
>From fd16a28be4d92a18ce7e15c35868e945243f8032 Mon Sep 17 00:00:00 2001
From: Takashi Yano <takashi.yano at nifty.ne.jp>
Date: Thu, 16 Jul 2026 12:25:40 +0900
Subject: [PATCH 2/3] Add a test for the path used with -rtlib=compiler-rt on
Cygwin
---
.../lib/cygwin/libclang_rt.builtins-x86_64.a | 0
.../libclang_rt.builtins.a | 0
clang/test/Driver/cygwin-print-file-name.c | 15 +++++++++++++++
3 files changed, 15 insertions(+)
create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/cygwin/libclang_rt.builtins-x86_64.a
create mode 100644 clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/x86_64-pc-windows-cygnus/libclang_rt.builtins.a
create mode 100644 clang/test/Driver/cygwin-print-file-name.c
diff --git a/clang/test/Driver/Inputs/resource_dir/lib/cygwin/libclang_rt.builtins-x86_64.a b/clang/test/Driver/Inputs/resource_dir/lib/cygwin/libclang_rt.builtins-x86_64.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/x86_64-pc-windows-cygnus/libclang_rt.builtins.a b/clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/x86_64-pc-windows-cygnus/libclang_rt.builtins.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/cygwin-print-file-name.c b/clang/test/Driver/cygwin-print-file-name.c
new file mode 100644
index 0000000000000..1095ac9d138e3
--- /dev/null
+++ b/clang/test/Driver/cygwin-print-file-name.c
@@ -0,0 +1,15 @@
+// Test for compiler-rt library path for cygwin
+//
+// RUN: %clang --sysroot=%S/Inputs/basic_cygwin_tree \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --target=x86_64-pc-windows-cygnus \
+// RUN: -print-file-name=libclang_rt.builtins-x86_64.a \
+// RUN: | FileCheck --check-prefix=CHECK %s
+// CHECK: {{.*}}/lib/cygwin/libclang_rt.builtins-x86_64.a
+//
+// RUN: %clang --sysroot=%S/Inputs/basic_cygwin_tree \
+// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
+// RUN: --target=x86_64-pc-windows-cygnus \
+// RUN: -print-file-name=libclang_rt.builtins.a \
+// RUN: | FileCheck --check-prefix=CHECK_PER_TARGET %s
+// CHECK_PER_TARGET: {{.*}}/lib/x86_64-pc-windows-cygnus/libclang_rt.builtins.a
>From 973668770723ac13c9ea912116fa5cf49c9a0cb3 Mon Sep 17 00:00:00 2001
From: Takashi Yano <takashi.yano at nifty.ne.jp>
Date: Thu, 16 Jul 2026 22:34:06 +0900
Subject: [PATCH 3/3] Allow backslash as well as slash in paths in
cygwin-print-file-name.c
---
clang/test/Driver/cygwin-print-file-name.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/clang/test/Driver/cygwin-print-file-name.c b/clang/test/Driver/cygwin-print-file-name.c
index 1095ac9d138e3..d16117eaec60a 100644
--- a/clang/test/Driver/cygwin-print-file-name.c
+++ b/clang/test/Driver/cygwin-print-file-name.c
@@ -5,11 +5,11 @@
// RUN: --target=x86_64-pc-windows-cygnus \
// RUN: -print-file-name=libclang_rt.builtins-x86_64.a \
// RUN: | FileCheck --check-prefix=CHECK %s
-// CHECK: {{.*}}/lib/cygwin/libclang_rt.builtins-x86_64.a
+// CHECK: {{.*}}{{/|\\}lib{{\|//}}cygwin{{/|\\}}libclang_rt.builtins-x86_64.a
//
// RUN: %clang --sysroot=%S/Inputs/basic_cygwin_tree \
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
// RUN: --target=x86_64-pc-windows-cygnus \
// RUN: -print-file-name=libclang_rt.builtins.a \
// RUN: | FileCheck --check-prefix=CHECK_PER_TARGET %s
-// CHECK_PER_TARGET: {{.*}}/lib/x86_64-pc-windows-cygnus/libclang_rt.builtins.a
+// CHECK_PER_TARGET: {{.*}}{{/|\\}}lib{{/|\\}}x86_64-pc-windows-cygnus{{/|\\}}libclang_rt.builtins.a
More information about the cfe-commits
mailing list