From: Louis Dionne Date: Fri, 31 Jul 2020 15:18:01 +0000 (-0400) Subject: [libc++] Fix eager generator expression in DefineLinkerScript X-Git-Tag: llvmorg-13-init~16160 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d275da17e4f0a17615b24c352aab0d34f647bfa7;p=platform%2Fupstream%2Fllvm.git [libc++] Fix eager generator expression in DefineLinkerScript As explained in https://gitlab.kitware.com/cmake/cmake/-/issues/21045, both branches of an $ 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. --- diff --git a/libcxx/cmake/Modules/DefineLinkerScript.cmake b/libcxx/cmake/Modules/DefineLinkerScript.cmake index 41426bf..be7f026 100644 --- a/libcxx/cmake/Modules/DefineLinkerScript.cmake +++ b/libcxx/cmake/Modules/DefineLinkerScript.cmake @@ -34,7 +34,13 @@ function(define_linker_script target) if ("${lib}" STREQUAL "cxx-headers") continue() endif() - set(libname "$,$,${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 "$,${lib},${target}>") + set(libname "$,$,${lib}>") list(APPEND link_libraries "${CMAKE_LINK_LIBRARY_FLAG}${libname}") endforeach() endif()