<div dir="ltr"><div>-f<flag> options are typically used for flags that control code generation, that's what <a href="https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html">https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html</a> says as well. Neither of these flags are related to code generation. Have you considered using just -use-ld= and -ld-path= and deprecating -fuse-ld= altogether? I think that would also be more consistent with other --*-path flags we have such as --cuda-path= or ptxas-path=.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jul 6, 2020 at 12:36 PM Fangrui Song via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 2020-07-06, David Blaikie wrote:<br>
>The design then is to support composing -fuse-ld and -fld-path? So<br>
>things like -fuse-ld=gold<br>
>-fld-path=some-thing-like-gold-but-maybe-not-quite (if I want the<br>
>clang driver gold-specific behavior, but to use my custom linker<br>
>binary?)?<br>
<br>
Yes. -fuse-ld= specifies the flavor: bfd, gold, lld.<br>
This can affect clang driver decisions on linker options.<br>
(see <a href="https://github.com/llvm/llvm-project/blob/master/clang/lib/Driver/ToolChains/Fuchsia.cpp#L57" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/blob/master/clang/lib/Driver/ToolChains/Fuchsia.cpp#L57</a> )<br>
<br>
When -fuse-ld=lld is specified, you can still specify<br>
-fld-path= to use a non-standard path, e.g.  -fuse-ld=lld -fld-path=/tmp/opt/bin/ld.lld<br>
<br>
>On Wed, Jul 1, 2020 at 5:54 PM Fangrui Song via cfe-dev<br>
><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>> wrote:<br>
>><br>
>> On 2020-06-16, Fangrui Song wrote:<br>
>> >On 2020-06-03, Fangrui Song wrote:<br>
>> >>On 2020-06-03, David Chisnall via cfe-dev wrote:<br>
>> >>>On 02/06/2020 19:47, Fangrui Song via cfe-dev wrote:<br>
>> >>>>If they use a relative path, they can't be benefiting from ld. prefix<br>
>> >>><br>
>> >>>This depends on how they specify the path.  If they specify a path<br>
>> >>>for the linker via -fuse-ld, they don't get the prefix.  Most<br>
>> >>>cross-compile toolchains that I've seen don't do that.  Instead,<br>
>> >>>they use -B to specify a path to find *all* of the tools and then<br>
>> >>>use -fuse-ld={lld,gold,bfd,proprietary linker's name}.<br>
>> >>><br>
>> >>>That is the use case I'm concerned about breaking.  The behaviour<br>
>> >>>of -B is to prepend a search path, but still fall back to the<br>
>> >>>default paths if a tool is not found there.  For example, if I<br>
>> >>>have:<br>
>> >>><br>
>> >>>/usr/bin/lld<br>
>> >>>/my/custom/sdk/bin/ld.lld<br>
>> >>><br>
>> >>>If I run:<br>
>> >>><br>
>> >>>$ clang -B /my/custom/sdk/bin/ -fuse-ld=lld ...<br>
>> >>><br>
>> >>>Today, I will run my cross-compile toolchain's linker.  With your<br>
>> >>>proposed change, I will run my system LLD install.  As a user, I<br>
>> >>>will see very confusing error messages from the system linker if<br>
>> >>>it can't handle my cross-compile target.  Worse, I may see a<br>
>> >>>binary linked with a linker that defaults to a different linker<br>
>> >>>script, but still produces some output.<br>
>> >>><br>
>> >>>David<br>
>> >><br>
>> >>-fuse-ld={bfd,gold,lld} is compatible with the previous behavior.<br>
>> >><br>
>> >>Do you propose that:<br>
>> >><br>
>> >>* -fuse-ld={bfd,gold.lld} should find "ld.{bfd,gold,lld}" in COMPILER_PATH<br>
>> >>* all -fuse-ld=word should find "word" in COMPILER_PATH<br>
>> >>* -fuse-ld=relative/path should find "relative/path" in PATH?<br>
>> ><br>
>> >Thoughts?<br>
>><br>
>> Created <a href="https://reviews.llvm.org/D83015" rel="noreferrer" target="_blank">https://reviews.llvm.org/D83015</a> [Driver] Add -fld-path= and deprecate -fuse-ld=/abs/path and -fuse-ld=rel/path<br>
>><br>
>> This should resolve jyknight's concern.<br>
>><br>
>> I think GCC will be happy with whatever reasonable consensus we can reach:<br>
>> <a href="https://gcc.gnu.org/pipermail/gcc-patches/2020-July/549236.html" rel="noreferrer" target="_blank">https://gcc.gnu.org/pipermail/gcc-patches/2020-July/549236.html</a><br>
>> _______________________________________________<br>
>> cfe-dev mailing list<br>
>> <a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
>> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div></div>