<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Dec 23, 2015 at 11:25 AM, Aaron Ballman via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Wed, Dec 23, 2015 at 1:55 PM, Jakob Bornecrantz <<a href="mailto:wallbraker@gmail.com">wallbraker@gmail.com</a>> wrote:<br>
> On Wed, Dec 23, 2015 at 5:49 PM, Aaron Ballman <<a href="mailto:aaron@aaronballman.com">aaron@aaronballman.com</a>> wrote:<br>
>> On Wed, Dec 23, 2015 at 11:29 AM, Jakob Bornecrantz via llvm-dev<br>
>> <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br>
>>> I'm building on Windows x64 using cmake, Ninja and VS 2013 express on Windows 7.<br>
>>><br>
>>> So I have been using the LLVMSharp method on getting a usable loadable<br>
>>> LLVM.dll[1][2].<br></span></blockquote><div><br></div><div>One day, I would like to make it easier to make LLVM.dll...</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">> Further investigation show that for the MinGW build OLE32 is added to<br>
> the dependencies for LLVMSupport.lib in the CMakeLists.txt file, there<br>
> are a couple of other libraries added as well. This lead me to find<br>
> that those where added for the MSVC build with a pragma(lib, xx), so I<br>
> added such a pragma for OLE32 and that fixes my script that is<br>
> generating LLVM.dll, will also fix other peoples problems with OLE32<br>
> missing as well.<br>
<br>
</span>Generally speaking, static libraries like LLVMSupport are just an<br>
archive of a bunch of compiled object files, and whatever ultimately<br>
consumes that library is responsible for providing external<br>
definitions. So, for instance, clang.exe consumes LLVMSupport.lib and<br>
so it also links in OLE32. I believe that we usually only use<br>
#pragma(lib) to signal that non-standard libraries need to be linked<br>
in, otherwise every source file in an archive would wind up with an<br>
unwieldy number of pragmas for all its imports, or you would have to<br>
manually maintain that list in some common header file. I don't think<br>
that the pragma(lib) for advapi32.lib should be there either, FWIW,<br>
but I don't know that we've ever had a hard-and-fast rule for this<br>
sort of thing.<br></blockquote><div><br></div><div>Sure, but the fact that static libraries can't encode their dependencies has always been an annoying missing feature, not something that we want to follow if we can avoid it.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I'm not opposed to this patch, per se, but it feels like a slippery<br>
slope as to what makes the cut and what does not. I would rather see<br>
*less* non-standard pragma usage instead of more.<br></blockquote><div><br></div><div>For these kinds of DLLs that are available on all modern versions of Windows, I think it's perfectly reasonable to use the 'pragma comment lib' auto linking mechanism. Realistically, no consumer of LLVMSupport.lib is going to be surprised if it needs ole32.dll.</div></div></div></div>