DavidSpickett added a comment.

+1 from me also, but someone else should check that this is a reasonable way to 
implement it cmake wise (not that this is a horrible hack but I never can tell 
with cmake).

One more question, does this same issue potentially apply to llvm-tblgen and 
has that got any special cmake changes to account for it? (if it doesn't, leave 
it as is, but as a comparison point)



================
Comment at: clang/lib/Support/CMakeLists.txt:21
+  # libLLVM-*.so, to be used by clang-tblgen. This is so clang-tblgen doesn't
+  # accidentally link against libLLVMSupport twice (once statically and once 
via
+  # libLLVM-*.so).
----------------
nhaehnle wrote:
> DavidSpickett wrote:
> > Without this change, is it the case that it will always link against 
> > libLLVMSupport twice with the DYLIB conifg?
> > 
> > "accidentally" sounds like you could stumble into it but from what I see, 
> > it's always been doing this and once your other change lands, it would 
> > always result in an error.
> > ```
> > This is so clang-tblgen doesn't link against libLLVMSupport twice (once 
> > statically and once via libLLVM-*.so).
> > ```
> I meant "accidentally" in the sense that *-tblgen isn't supposed to link 
> against libLLVM-*.so, but ended up doing so after clangSupport was added 
> earlier this year. Perhaps I should just remover the adverb?
That would work, otherwise it seems like a thing that sometimes happens under 
conditions that aren't explained.


================
Comment at: clang/lib/Support/CMakeLists.txt:26
+    DISABLE_LLVM_LINK_LLVM_DYLIB
+    ${clangSupport_sources})
+endif()
----------------
nhaehnle wrote:
> DavidSpickett wrote:
> > Can you detail which targets link to/include what and how the problem 
> > happens? I'm trying to understand why we can't just use 
> > `DISABLE_LLVM_LINK_LLVM_DYLIB` on its own here.
> clangSupport is included by clang-tblgen but also by libclangcpp. The 
> underlying idea is that of all the users of clangSupport, clang-tblgen is 
> special because it uses the DISABLE_LLVM_LINK_LLVM_DYLIB override.
> 
> clangSupport links against Support, which becomes a link against libLLVM-*.so 
> with LLVM_LINK_LLVM_DYLIB=ON. So, in an LLVM_LINK_LLVM_DYLIB=ON build, we get 
> with this change:
> 
> - clangSupport links against Support, which becomes dynamically linking 
> against libLLVM-*.so (this is unchanged)
> - clangSupport_tablegen links against Support statically
> - clang-tblgen links against clangSupport_tablegen (and also directly against 
> Support) statically
> - other users of clangSupport link against clangSupport somehow, and then 
> transitively dynamically against libLLVM-*.so
> 
> Does that answer your questions?
> 
> Specifically, if we were to just add DISABLE_LLVM_LINK_LLVM_DYLIB to 
> clangSupport, then we risk a situation where some other user of clangSupport 
> links against Support twice; once via the copy of Support that is statically 
> linked to from clangSupport; and once via libLLVM-*.so that gets pulled in 
> via other dependencies. To be honest, I don't know for certain whether that 
> is a problem that would happen, but it seemed likely enough to me that I 
> wouldn't want to risk it.
> Does that answer your questions?

Yes but I don't think I have the expertise to say this is a good way to 
implement this change.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D134637/new/

https://reviews.llvm.org/D134637

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to