[clang] Fix --print-libgcc-file-name on Darwin platforms (PR #98325)
Louis Dionne via cfe-commits
cfe-commits at lists.llvm.org
Wed Jul 10 09:15:56 PDT 2024
================
@@ -1303,18 +1288,55 @@ void MachO::AddLinkRuntimeLib(const ArgList &Args, ArgStringList &CmdArgs,
// rpaths. This is currently true from this place, but we need to be
// careful if this function is ever called before user's rpaths are emitted.
if (Opts & RLO_AddRPath) {
- assert(DarwinLibName.ends_with(".dylib") && "must be a dynamic library");
+ assert(StringRef(P).ends_with(".dylib") && "must be a dynamic library");
// Add @executable_path to rpath to support having the dylib copied with
// the executable.
CmdArgs.push_back("-rpath");
CmdArgs.push_back("@executable_path");
- // Add the path to the resource dir to rpath to support using the dylib
- // from the default location without copying.
+ // Add the compiler-rt library's directory to rpath to support using the
+ // dylib from the default location without copying.
CmdArgs.push_back("-rpath");
- CmdArgs.push_back(Args.MakeArgString(Dir));
+ CmdArgs.push_back(Args.MakeArgString(llvm::sys::path::parent_path(P)));
+ }
+}
+
+std::string MachO::getCompilerRT(const ArgList &, StringRef Component,
+ FileType Type) const {
+ assert(Type != ToolChain::FT_Object &&
+ "it doesn't make sense to ask for the compiler-rt library name as an "
+ "object file");
+ SmallString<64> MachOLibName = StringRef("libclang_rt");
+ // On MachO, the builtins component is not in the library name
+ if (Component != "builtins") {
+ MachOLibName += '.';
+ MachOLibName += Component;
+ }
+ MachOLibName += Type == ToolChain::FT_Shared ? "_dynamic.dylib" : ".a";
----------------
ldionne wrote:
We only ever have `.a`s in there, so I think we should unconditionally use the `.a` extension to avoid creating confusion.
https://github.com/llvm/llvm-project/pull/98325
More information about the cfe-commits
mailing list