aaronpuchert added inline comments.

================
Comment at: clang/tools/libclang/CMakeLists.txt:115
+clang_target_link_libraries(libclang
+  PRIVATE
+  ${CLANG_LIB_DEPS}
----------------
beanz wrote:
> tstellar wrote:
> > aaronpuchert wrote:
> > > This might not be correct for static builds, I think we need `INTERFACE` 
> > > here.
> > This patch looks OK to me, but you should find someone with more CMake 
> > knowledge to answer this question.
> This part of the patch is a bit tricky.
> 
> As implemented it is fine for the most common build configurations, but will 
> be a problem if `LIBCLANG_BUILD_STATIC=On` or if `LLVM_ENABLE_PIC=Off`.
> 
> The correct solution is probably to wrap this code in `if (ENABLE_SHARED)`, 
> and to have another code block that handles `if (ENABLE_STATIC)`. In that 
> block you need to call this with `INTERFACE` as the linkage type, and you'll 
> need to handle the case where both `ENABLE_SHARED` and `ENABLE_STATIC` is 
> set. In that case the static library target is named `libclang_static`.
I agree with your analysis. What do you think about modifying 
`clang_target_link_libraries` instead? I thought we could make it do what 
`llvm_add_library` does with its `LINK_LIBS` argument (code which we are 
basically replacing here):

```
  if(ARG_STATIC)
    set(libtype INTERFACE)
  else()
    # We can use PRIVATE since SO knows its dependent libs.
    set(libtype PRIVATE)
  endif()

  target_link_libraries(${name} ${libtype}
      ${ARG_LINK_LIBS}
      ${lib_deps}
      ${llvm_libs}
      )
```

We could query `get_target_property(TARGET_TYPE ${target} TYPE)` and use that 
to determine the correct dependency type.

You're also right that it's possible to build both static and dynamic 
libraries. We could check for the existence of `${target}_static` and add the 
dependencies there as well.

If we handle it there, we'll also solve it for other libraries that depend on 
Clang components. (I'm thinking of libraries in clang-tools-extra and lldb, 
where I'd like to propose similar changes to this one.)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D67321



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

Reply via email to