Author: tyan0
Date: 2026-07-17T14:04:06+03:00
New Revision: 671c0a275a1f304f22855fabb299090233fdbd54

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

LOG: [Clang][Driver] Fix compiler-rt library directory for cygwin (#208925)

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 <[email protected]>

Added: 
    
clang/test/Driver/Inputs/resource_dir/lib/cygwin/libclang_rt.builtins-x86_64.a
    
clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/x86_64-pc-windows-cygnus/libclang_rt.builtins.a
    clang/test/Driver/cygwin-print-file-name.c

Modified: 
    clang/lib/Driver/ToolChain.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 53e4583e5d9d0..0002d40bf1aa3 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:

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..467ecd376e2c2
--- /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


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

Reply via email to