Author: Garvit Gupta Date: 2025-07-07T16:54:42+05:30 New Revision: 8315167a76e4d229fd2e6b77a646a4ed7e744489
URL: https://github.com/llvm/llvm-project/commit/8315167a76e4d229fd2e6b77a646a4ed7e744489 DIFF: https://github.com/llvm/llvm-project/commit/8315167a76e4d229fd2e6b77a646a4ed7e744489.diff LOG: [Driver][RISCV] Fix incorrect compiler-rt path override in BareMetal toolchain after RISCVToolChain removal (#146849) The RISCVToolChain, which was removed in commit f8cb798, used a different compiler-rt path relative to the resource-dir when GCCInstallation was valid. However, this behavior was unintentionally overridden when it was merged into the BareMetal toolchain. This patch restores the correct path handling logic. 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` Added: Modified: clang/lib/Driver/ToolChains/BareMetal.cpp clang/lib/Driver/ToolChains/BareMetal.h clang/test/Driver/print-libgcc-file-name-clangrt.c Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp index 981395deb9dbc..e670696cd59ae 100644 --- a/clang/lib/Driver/ToolChains/BareMetal.cpp +++ b/clang/lib/Driver/ToolChains/BareMetal.cpp @@ -206,6 +206,16 @@ std::string BareMetal::computeSysRoot() const { return computeClangRuntimesSysRoot(D, /*IncludeTriple*/ true); } +std::string BareMetal::getCompilerRTPath() const { + const Driver &D = getDriver(); + if (IsGCCInstallationValid || detectGCCToolchainAdjacent(getDriver())) { + SmallString<128> Path(D.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..1cb28d43748ec 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-CLANGRT-RISCV-BAREMETAL %s +// CHECK-CLANGRT-RISCV-BAREMETAL-NOT: baremetal{{/|\\}}libclang_rt.builtins-riscv32.a +// CHECK-CLANGRT-RISCV-BAREMETAL: libclang_rt.builtins.a _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits