mstorsjo added a comment.

In D136651#4064474 <https://reviews.llvm.org/D136651#4064474>, @glandium wrote:

> In D136651#4064260 <https://reviews.llvm.org/D136651#4064260>, @glandium 
> wrote:
>
>> This broke our mac builds with errors like:
>>
>>   ld64.lld: error: undefined symbol: CFRunLoopRun
>>   >>> referenced by 
>> tools/clang/tools/clang-stat-cache/CMakeFiles/clang-stat-cache.dir/clang-stat-cache.cpp.o:(symbol
>>  main+0x11be)
>>
>> (and many more symbols)
>
> Additional information: those are cross-compiled, and for some reason the 
> `-framework CoreServices` in the CMakeLists.txt doesn't seem to make it to 
> the command line, which is surprising because something similar works fine 
> for e.g. dsymutil.

I ran into similar issues, not when cross compiling, but when compiling 
natively. In my case, I'm building with `-DLLVM_LINK_LLVM_DYLIB=ON`. Without 
that, it builds correctly for me.

The new tool needs to be linked with `-framework CoreServices`. This does get 
set in `clang/tools/clang-stat-cache/CMakeLists.txt` like this:

  if(APPLE)
  set(CLANG_STAT_CACHE_LIB_DEPS
    "-framework CoreServices"
    )
  endif()
  
  clang_target_link_libraries(clang-stat-cache
    PRIVATE
    ${CLANG_STAT_CACHE_LIB_DEPS}
    )

However, `clang_target_link_libraries` ignores extra dependencies when linking 
against the dylib: 
https://github.com/llvm/llvm-project/blob/a033dbbe5c43247b60869b008e67ed86ed230eaa/clang/cmake/modules/AddClang.cmake#L209-L213

  if (CLANG_LINK_CLANG_DYLIB)
    target_link_libraries(${target} ${type} clang-cpp)
  else()
    target_link_libraries(${target} ${type} ${ARGN})
  endif()

I guess `clang_target_link_libraries` needs a mechanism to disambiguate between 
generic clang library dependencies (which need to be dropped when linking 
against `clang-cpp` instead) and other dependencies which always are needed. I 
wonder if there's prior art for such disambiguation in other places - e.g. 
`llvm_add_library` does have similar logic for linking against either other 
llvm libraries or the dylib (and handles lots of other options). (I'm a bit out 
of time for digging further into this right now...)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D136651

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

Reply via email to