smeenai added subscribers: beanz, smeenai.
smeenai added a comment.

In D58418#1577349 <https://reviews.llvm.org/D58418#1577349>, @jkorous wrote:

> Thanks for the revert.
>
> There's actually one more problem - seems like ninja doesn't like the 
> generated build.ninja file on Linux.
>
>   ninja: error: build.ninja:52390: bad $-escape (literal $ must be written as 
> $$)
>
>
> http://lab.llvm.org:8011/builders/clang-with-lto-ubuntu/builds/13617/steps/build-stage1-compiler/logs/stdio


We ran into this as well, and I was curious about what was going on, so I dug 
into it.

When you add a private dependency to static library target, as you're doing in 
this change with `${DIRECTORY_WATCHER_LINK_LIBS}`, CMake adds the dependency to 
the target's INTERFACE_LINK_LIBRARIES property using the `$<LINK_ONLY:...>` 
generator expression. The code for clang-shlib iterates through all the clang 
libraries and uses generator expressions to gather their 
INTERFACE_LINK_LIBRARIES, but if those generator expressions themselves 
evaluate to generator expressions (`$<LINK_ONLY:...>` in this case), the second 
level of generator expressions won't get evaluated and will just end up in the 
ninja file directly, hence the complaint about the dollar. The clang-shlib code 
in question is 
https://github.com/llvm/llvm-project/blob/3837f4273fcc40cc519035479aefe78e5cbd3055/clang/tools/clang-shlib/CMakeLists.txt#L10.

Here's a simple repro (where `empty.c` is literally an empty file). Running 
`cmake -G Ninja` on this and then running `ninja` should demonstrate the issue.

  cmake_minimum_required(VERSION 3.4.3)
  project(dollartest C)
  
  add_library(a STATIC empty.c)
  add_library(b_obj OBJECT empty.c)
  add_library(b STATIC empty.c)
  target_link_libraries(b PRIVATE a)
  
  add_library(c SHARED empty.c)
  target_link_libraries(c PRIVATE
    b_object
    $<TARGET_PROPERTY:b,INTERFACE_LINK_LIBRARIES>
    $<TARGET_PROPERTY:b,LINK_LIBRARIES>
    )

@beanz, thoughts on how best to handle this?


Repository:
  rL LLVM

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

https://reviews.llvm.org/D58418



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

Reply via email to