https://github.com/quic-garvgupt created https://github.com/llvm/llvm-project/pull/146849
Baremetal and RISCVToolchain used different paths for clangrt builtins relative to resource-dir before RISCVToolChain got removed in commit f8cb798 This created a discrepancy in behavior for riscv target when GCCInstallation is valid. This patch fixes this difference in behavior. After this fix - With valid GCCInstallation <resource-dir>/<llvm-rel-ver>/lib/<target-triple>libclang_rt.builtins.a Without valid GCCInstallation <resource-dir>/<llvm-rel-ver>/lib/baremetal/libclang_rt.builtins-<target>.a >From f46d7cce35748114997de7264291f6dc004d1dc9 Mon Sep 17 00:00:00 2001 From: Garvit Gupta <quic_garvg...@quicinc.com> Date: Thu, 3 Jul 2025 02:56:01 -0700 Subject: [PATCH] [Driver][RISCV] Fix and print appropriate compiler-rt path when GCCInstallation is valid RISCVToolChain which recently got removed in commit f8cb798, used a different compiler-rt path relative to resource-dir. However, this behavior got override when it was merged in BareMetal toolchain. This patch fixes that. Without valid GCCInstallation: <resource-dir>/<llvm-rel-ver>/lib/baremetal/libclang_rt.builtins-<target>.a With valid GCCInstalltion: <resource-dir>/<llvm-rel-ver>/lib/<target-triple>libclang_rt.builtins.a Change-Id: I37670b24019e3d473139ad6df8c3e6b92196fa6d --- clang/lib/Driver/ToolChains/BareMetal.cpp | 9 +++++++++ clang/lib/Driver/ToolChains/BareMetal.h | 1 + clang/test/Driver/print-libgcc-file-name-clangrt.c | 9 +++++++++ 3 files changed, 19 insertions(+) diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp index 981395deb9dbc..cd4c3104b6deb 100644 --- a/clang/lib/Driver/ToolChains/BareMetal.cpp +++ b/clang/lib/Driver/ToolChains/BareMetal.cpp @@ -206,6 +206,15 @@ std::string BareMetal::computeSysRoot() const { return computeClangRuntimesSysRoot(D, /*IncludeTriple*/ true); } +std::string BareMetal::getCompilerRTPath() const { + if (IsGCCInstallationValid || detectGCCToolchainAdjacent(getDriver())) { + SmallString<128> Path(getDriver().ResourceDir); + llvm::sys::path::append(Path, "lib"); + return std::string(Path.str()); + } + return ToolChain::getCompilerRTPath(); +} + static void addMultilibsFilePaths(const Driver &D, const MultilibSet &Multilibs, const Multilib &Multilib, StringRef InstallPath, diff --git a/clang/lib/Driver/ToolChains/BareMetal.h b/clang/lib/Driver/ToolChains/BareMetal.h index cc57fa21867a2..d3d415b337a0b 100644 --- a/clang/lib/Driver/ToolChains/BareMetal.h +++ b/clang/lib/Driver/ToolChains/BareMetal.h @@ -76,6 +76,7 @@ class LLVM_LIBRARY_VISIBILITY BareMetal : public Generic_ELF { addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const override; std::string computeSysRoot() const override; + std::string getCompilerRTPath() const override; SanitizerMask getSupportedSanitizers() const override; SmallVector<std::string> diff --git a/clang/test/Driver/print-libgcc-file-name-clangrt.c b/clang/test/Driver/print-libgcc-file-name-clangrt.c index a902eedc85209..e376d469cad6b 100644 --- a/clang/test/Driver/print-libgcc-file-name-clangrt.c +++ b/clang/test/Driver/print-libgcc-file-name-clangrt.c @@ -63,3 +63,12 @@ // RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-CLANGRT-ARM-BAREMETAL-PER-TARGET %s // CHECK-CLANGRT-ARM-BAREMETAL-PER-TARGET: libclang_rt.builtins.a + +// RUN: %clang -rtlib=compiler-rt -print-libgcc-file-name \ +// RUN: --target=riscv32-unknown-elf \ +// RUN: --sysroot=%S/Inputs/resource_dir_with_arch_subdir \ +// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \ +// RUN: --gcc-toolchain=%S/Inputs/basic_riscv32_tree 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-RISCV-BAREMETALTOOLCHAIN %s +// CHECK-RISCV-BAREMETALTOOLCHAIN-NOT: baremetal{{/|\\}}libclang_rt.builtins-riscv32.a +// CHECK-RISCV-BAREMETALTOOLCHAIN: libclang_rt.builtins.a _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits