[clang] [Driver] Search for compiler-rt libraries in sysroot/lib if not found in the resource directory (PR #132443)
Kostiantyn Lazukin via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 24 07:57:35 PDT 2025
https://github.com/Sunday111 updated https://github.com/llvm/llvm-project/pull/132443
>From 9a88ff05af21a5d5357780293f2d011ffe457041 Mon Sep 17 00:00:00 2001
From: Kostiantyn Lazukin
<koslaz01 at ip-10-252-21-142.eu-west-1.compute.internal>
Date: Thu, 20 Mar 2025 16:54:06 +0000
Subject: [PATCH] [Driver] Search for compiler-rt libraries in sysroot/lib if
not found in the resource directory
This patch improves support for embedded Linux toolchains with multiple
sysroots, each containing different built-in libraries. If compiler-rt
libraries are not found in the resource directory, the Clang driver will
fallback to searching in the sysroot/lib directory.
This change preserves the standard behavior for regular Linux toolchains
while allowing greater flexibility in toolchains with multiple sysroots.
---
clang/lib/Driver/ToolChains/Linux.cpp | 2 ++
.../Inputs/musl_sysroot_with_builtins/lib/Scrt1.o | 0
.../lib/clang_rt.crtbegin.o | 0
.../musl_sysroot_with_builtins/lib/clang_rt.crtend.o | 0
.../Inputs/musl_sysroot_with_builtins/lib/crti.o | 0
.../Inputs/musl_sysroot_with_builtins/lib/crtn.o | 0
.../lib/libclang_rt.builtins.a | 0
clang/test/Driver/Inputs/resource_dir_empty/keep | 0
clang/test/Driver/linux-musl-library-search.cpp | 11 +++++++++++
9 files changed, 13 insertions(+)
create mode 100644 clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/Scrt1.o
create mode 100644 clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/clang_rt.crtbegin.o
create mode 100644 clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/clang_rt.crtend.o
create mode 100644 clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/crti.o
create mode 100644 clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/crtn.o
create mode 100644 clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/libclang_rt.builtins.a
create mode 100644 clang/test/Driver/Inputs/resource_dir_empty/keep
create mode 100644 clang/test/Driver/linux-musl-library-search.cpp
diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
index 1e9bd3de75f04..1bd8daafa8091 100644
--- a/clang/lib/Driver/ToolChains/Linux.cpp
+++ b/clang/lib/Driver/ToolChains/Linux.cpp
@@ -354,6 +354,8 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
addPathIfExists(D, concat(SysRoot, "/lib"), Paths);
addPathIfExists(D, concat(SysRoot, "/usr/lib"), Paths);
+
+ addPathIfExists(D, concat(SysRoot, "/lib"), getLibraryPaths());
}
ToolChain::RuntimeLibType Linux::GetDefaultRuntimeLibType() const {
diff --git a/clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/Scrt1.o b/clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/Scrt1.o
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/clang_rt.crtbegin.o b/clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/clang_rt.crtbegin.o
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/clang_rt.crtend.o b/clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/clang_rt.crtend.o
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/crti.o b/clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/crti.o
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/crtn.o b/clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/crtn.o
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/libclang_rt.builtins.a b/clang/test/Driver/Inputs/musl_sysroot_with_builtins/lib/libclang_rt.builtins.a
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/Inputs/resource_dir_empty/keep b/clang/test/Driver/Inputs/resource_dir_empty/keep
new file mode 100644
index 0000000000000..e69de29bb2d1d
diff --git a/clang/test/Driver/linux-musl-library-search.cpp b/clang/test/Driver/linux-musl-library-search.cpp
new file mode 100644
index 0000000000000..7bfdc58af1dcd
--- /dev/null
+++ b/clang/test/Driver/linux-musl-library-search.cpp
@@ -0,0 +1,11 @@
+// RUN: %clang -### %s 2>&1 \
+// RUN: --target=aarch64-unknown-linux-musl \
+// RUN: -ccc-install-dir %S/Inputs/basic_linux_tree/usr/bin \
+// RUN: -resource-dir=%S/Inputs/resource_dir_empty \
+// RUN: --sysroot=%S/Inputs/musl_sysroot_with_builtins \
+// RUN: -static \
+// RUN: -rtlib=compiler-rt \
+// RUN: | FileCheck %s
+
+// CHECK-DAG: "--sysroot={{[^"]+}}/Inputs/musl_sysroot_with_builtins"
+// CHECK-DAG: "{{[^"]+}}/Inputs/musl_sysroot_with_builtins/lib/libclang_rt.builtins.a"
More information about the cfe-commits
mailing list