forked from OSchip/llvm-project
[libc++] Fix eager generator expression in DefineLinkerScript
As explained in https://gitlab.kitware.com/cmake/cmake/-/issues/21045, both branches of an $<IF> generator expression are evaluated eagerly by CMake. As a result, if the non-selected branch contains an invalid generator expression (such as getting the OUTPUT_NAME property of a non-existent target), a hard error will occur. This failed builds using the cxxrt ABI library, which doesn't create a CMake target currently.
This commit is contained in:
parent
cfb955ac37
commit
d275da17e4
|
@ -34,7 +34,13 @@ function(define_linker_script target)
|
|||
if ("${lib}" STREQUAL "cxx-headers")
|
||||
continue()
|
||||
endif()
|
||||
set(libname "$<IF:$<TARGET_EXISTS:${lib}>,$<TARGET_PROPERTY:${lib},OUTPUT_NAME>,${lib}>")
|
||||
# If ${lib} is not a target, we use a dummy target which we know will
|
||||
# have an OUTPUT_NAME property so that CMake doesn't fail when evaluating
|
||||
# the non-selected branch of the `IF`. It doesn't matter what it evaluates
|
||||
# to because it's not selected, but it must not cause an error.
|
||||
# See https://gitlab.kitware.com/cmake/cmake/-/issues/21045.
|
||||
set(output_name_tgt "$<IF:$<TARGET_EXISTS:${lib}>,${lib},${target}>")
|
||||
set(libname "$<IF:$<TARGET_EXISTS:${lib}>,$<TARGET_PROPERTY:${output_name_tgt},OUTPUT_NAME>,${lib}>")
|
||||
list(APPEND link_libraries "${CMAKE_LINK_LIBRARY_FLAG}${libname}")
|
||||
endforeach()
|
||||
endif()
|
||||
|
|
Loading…
Reference in New Issue