https://sourceware.org/bugzilla/show_bug.cgi?id=33198

--- Comment #7 from Sam James <sam at gentoo dot org> ---
(In reply to H.J. Lu from comment #6)
> (In reply to Sam James from comment #4)
> > (In reply to H.J. Lu from comment #2)
> > 
> > +    if [info exists CLANG_FOR_TARGET] then {
> > +   set llvm_plug_so [string trim [exec $CLANG_FOR_TARGET
> > -print-file-name=LLVMgold.so]]
> > +   if { $llvm_plug_so ne "LLVMgold.so" } then {
> > +       set llvm_plug_opt "--plugin $llvm_plug_so"
> > +   }
> > +    }
> > 
> > This doesn't work for me:
> > 
> > ```
> > $ clang -print-file-name=LLVMgold.so
> > LLVMgold.so
> > 
> > $ ls -hal /usr/lib/llvm/20/lib64/LLVMgold.so
> > -rwxr-xr-x 1 root root 119K Jul 19 14:11 /usr/lib/llvm/20/lib64/LLVMgold.so
> > ```
> > => llvm_plug_opt is empty and then the test is UNTESTED unnecessarily. 
> > 
> > But we create the
> > /usr/x86_64-pc-linux-gnu/binutils-bin/lib/bfd-plugins/LLVMgold.so symlink to
> > /usr/lib/llvm/20/lib64/LLVMgold.so, so --plugin isn't needed.
> > 
> > We can test it by creating a simple test program with clang -fuse-ld=bfd
> > foo.c. If it fails with:
> > ```
> > clang: error: no such file or directory:
> > '/usr/x86_64-pc-linux-gnu/binutils-bin/lib/bfd-plugins/LLVMgold.so'
> > ```
> > 
> > Then --plugin is needed and we can use the existing test.
> 
> Can you find a reliable way to locate LLVMgold.so from clang?

I don't think there's a way. We install LLVMgold.so to the default location its
CMake puts it and clang doesn't even look there. But it works because they pass
--plugin via some hardcoded CLANG_INSTALL_LIBDIR_BASENAME (which is not
queryable via clang, but you can get it with `llvm-config --libdir`):

```
    const char *PluginPrefix = IsOSAIX ? "-bplugin:" : "";
    const char *PluginName = IsOSAIX ? "/libLTO" : "/LLVMgold";
[...]
    SmallString<1024> Plugin;
    llvm::sys::path::native(Twine(D.Dir) +
                                "/../" CLANG_INSTALL_LIBDIR_BASENAME +
                                PluginName + Suffix,
                            Plugin);
```

I suggest:
1) Try `clang -print-file-name=libLLVM.so`. If it gives a path, use it.
2) Try build a test program with `clang -fuse-ld=bfd -flto main.c`. If the
plugin can't be found, it will error out.
3) Try `--plugin $(llvm-config --libdir)/LLVMgold.so` (I don't think we need
this step).

I will attach a patch.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to