<div dir="ltr">I think the bug is that clang won't use a response file unless it thinks the tool it is running supports them. The MinGW linker tool doesn't claim to support response files today. I think this would be a simple fix:<div><br></div><div>$ git diff<br>diff --git a/clang/lib/Driver/ToolChains/MinGW.h b/clang/lib/Driver/ToolChains/MinGW.h<br>index 08298e910eb..41c466337b7 100644<br>--- a/clang/lib/Driver/ToolChains/MinGW.h<br>+++ b/clang/lib/Driver/ToolChains/MinGW.h<br>@@ -34,7 +34,7 @@ public:<br><br> class LLVM_LIBRARY_VISIBILITY Linker : public Tool {<br> public:<br>-  Linker(const ToolChain &TC) : Tool("MinGW::Linker", "linker", TC) {}<br>+  Linker(const ToolChain &TC) : Tool("MinGW::Linker", "linker", TC, RF_Full) {}<br><br>   bool hasIntegratedCPP() const override { return false; }<br>   bool isLinkJob() const override { return true; }</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jul 24, 2019 at 6:43 AM Harry Wagstaff via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-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"><div dir="ltr"><div>Hi all,</div><div><br></div><div>I'm currently trying to use clang to build a largish project on Windows using MinGW. I'm currently performing all of the compilation using g++, and then linking with clang++ with lld (due to separate issues I'm having with compiling with clang with MinGW). Compiling with g++ and then linking with clang+lld seems to work fine for small programs.<br></div><div><br></div><div>I'm invoking clang++ something like this:</div><div>$ clang++ -target x86_64-pc-windows-gnu -fuse-ld=lld {lots of linker parameters} @{path to a response file}</div><div><br></div><div>I then receive an error message:<br></div>clang++: error: unable to execute command: Couldn't execute program '(path to ld.lld)': The filename or extension is too long.<br><div><div><br></div><div>If I then rerun clang++ with -v, I get the full command line passed to lld (which is approximately 44KB). It looks like there was previously a patch that tried to address this issue for certain platforms (<a href="https://reviews.llvm.org/rL334295" target="_blank">https://reviews.llvm.org/rL334295</a>) but this doesn't seem to have fixed the issue in my case. <br></div><div><br></div><div>Is there some way to work around this issue? Since the decision of whether to use a response file or not seems to be based on a heuristic ('keep half of the space available for environment variables'), perhaps an option should be provided to force a response file to be used?<br></div><div><br></div><div>Thanks,</div><div>Harry Wagstaff<br></div></div></div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>