[llvm] r288632 - [CMake] Refactor add_llvm_tool_symlink for reuse
Chris Bieneman via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 5 09:13:58 PST 2016
I think this is squared away with r288679. I tested with the Xcode generator, and it seems to be doing the right thing. Can you verify that it fixes VS as well?
Thanks,
-Chris
> On Dec 5, 2016, at 8:42 AM, Chris Bieneman via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>
> Looking into this now. Thanks for the heads up.
>
> -Chris
>
>> On Dec 5, 2016, at 5:20 AM, Greg Bedwell <gregbedwell at gmail.com <mailto:gregbedwell at gmail.com>> wrote:
>>
>> Hi,
>>
>> Looks like this commit has caused new failures when using the multi-configuration Visual Studio CMake generators (e.g. "Visual Studio 14 2015 Win64". All the regular executables are going to the expected place: "<build>/Release/bin", "<build>/Debug/bin", etc. but the "symlink" files (actually just copies on Windows) now get placed in "<build>/bin" instead:
>>
>> Failing Tests (6):
>> LLVM :: LibDriver/infer-output-path.test
>> LLVM :: LibDriver/libpath.test
>> LLVM :: LibDriver/no-inputs.test
>> LLVM :: LibDriver/thin.test
>> LLVM :: Object/archive-symtab.test
>> LLVM :: Object/nm-archive.test
>>
>> The fails are all of this sort of form:
>> "'C:/work/public-git/upstream-llvm/build-vs2015-ps4-master/Release/bin/llvm-lib': command not found"
>>
>> Cheers,
>> Greg
>>
>>
>>
>> On 5 December 2016 at 03:28, Chris Bieneman via llvm-commits <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>> wrote:
>> Author: cbieneman
>> Date: Sun Dec 4 21:28:03 2016
>> New Revision: 288632
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=288632&view=rev <http://llvm.org/viewvc/llvm-project?rev=288632&view=rev>
>> Log:
>> [CMake] Refactor add_llvm_tool_symlink for reuse
>>
>> The old implementation of add_llvm_tool_symlink could fail in odd ways when building out of tree. This version solves that problem by not using the LLVM_* variables, and instead reaeding the target's properties.
>>
>> Modified:
>> llvm/trunk/cmake/modules/AddLLVM.cmake
>>
>> Modified: llvm/trunk/cmake/modules/AddLLVM.cmake
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddLLVM.cmake?rev=288632&r1=288631&r2=288632&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddLLVM.cmake?rev=288632&r1=288631&r2=288632&view=diff>
>> ==============================================================================
>> --- llvm/trunk/cmake/modules/AddLLVM.cmake (original)
>> +++ llvm/trunk/cmake/modules/AddLLVM.cmake Sun Dec 4 21:28:03 2016
>> @@ -1288,43 +1288,54 @@ function(llvm_install_symlink name dest)
>> endif()
>> endfunction()
>>
>> -function(add_llvm_tool_symlink name dest)
>> - cmake_parse_arguments(ARG "ALWAYS_GENERATE" "" "" ${ARGN})
>> +function(add_llvm_tool_symlink link_name target)
>> + cmake_parse_arguments(ARG "ALWAYS_GENERATE" "OUTPUT_DIR" "" ${ARGN})
>> + if(NOT ARG_OUTPUT_DIR)
>> + get_target_property(target_type ${target} TYPE)
>> + if(${target_type} STREQUAL "STATIC_LIBRARY")
>> + get_target_property(ARG_OUTPUT_DIR ${target} ARCHIVE_OUTPUT_DIRECTORY)
>> + elseif(UNIX AND ${target_type} STREQUAL "SHARED_LIBRARY")
>> + get_target_property(ARG_OUTPUT_DIR ${target} LIBRARY_OUTPUT_DIRECTORY)
>> + else()
>> + get_target_property(ARG_OUTPUT_DIR ${target} RUNTIME_OUTPUT_DIRECTORY)
>> + endif()
>> + endif()
>> +
>> if(UNIX)
>> set(LLVM_LINK_OR_COPY create_symlink)
>> - set(dest_binary "${dest}${CMAKE_EXECUTABLE_SUFFIX}")
>> + set(dest_binary "$<TARGET_FILE_NAME:${target}>")
>> else()
>> set(LLVM_LINK_OR_COPY copy)
>> - set(dest_binary "${LLVM_RUNTIME_OUTPUT_INTDIR}/${dest}${CMAKE_EXECUTABLE_SUFFIX}")
>> + set(dest_binary "$<TARGET_FILE:${target}>")
>> endif()
>>
>> - set(output_path "${LLVM_RUNTIME_OUTPUT_INTDIR}/${name}${CMAKE_EXECUTABLE_SUFFIX}")
>> + set(output_path "${ARG_OUTPUT_DIR}/${link_name}${CMAKE_EXECUTABLE_SUFFIX}")
>>
>> - set(target_name ${name})
>> - if(TARGET ${name})
>> - set(target_name ${name}-link)
>> + set(target_name ${link_name})
>> + if(TARGET ${link_name})
>> + set(target_name ${link_name}-link)
>> endif()
>>
>>
>> if(ARG_ALWAYS_GENERATE)
>> set_property(DIRECTORY APPEND PROPERTY
>> ADDITIONAL_MAKE_CLEAN_FILES ${dest_binary})
>> - add_custom_command(TARGET ${dest} POST_BUILD
>> + add_custom_command(TARGET ${target} POST_BUILD
>> COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${dest_binary}" "${output_path}")
>> else()
>> add_custom_command(OUTPUT ${output_path}
>> COMMAND ${CMAKE_COMMAND} -E ${LLVM_LINK_OR_COPY} "${dest_binary}" "${output_path}"
>> - DEPENDS ${dest})
>> - add_custom_target(${target_name} ALL DEPENDS ${output_path})
>> + DEPENDS ${target})
>> + add_custom_target(${target_name} ALL DEPENDS ${target} ${output_path})
>> set_target_properties(${target_name} PROPERTIES FOLDER Tools)
>>
>> # Make sure both the link and target are toolchain tools
>> - if (${name} IN_LIST LLVM_TOOLCHAIN_TOOLS AND ${dest} IN_LIST LLVM_TOOLCHAIN_TOOLS)
>> + if (${link_name} IN_LIST LLVM_TOOLCHAIN_TOOLS AND ${target} IN_LIST LLVM_TOOLCHAIN_TOOLS)
>> set(TOOL_IS_TOOLCHAIN ON)
>> endif()
>>
>> if ((TOOL_IS_TOOLCHAIN OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY) AND LLVM_BUILD_TOOLS)
>> - llvm_install_symlink(${name} ${dest})
>> + llvm_install_symlink(${link_name} ${target})
>> endif()
>> endif()
>> endfunction()
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits>
>>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161205/775ff748/attachment.html>
More information about the llvm-commits
mailing list