[llvm] r288632 - [CMake] Refactor add_llvm_tool_symlink for reuse
Chris Bieneman via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 5 08:42:28 PST 2016
Looking into this now. Thanks for the heads up.
-Chris
> On Dec 5, 2016, at 5:20 AM, Greg Bedwell <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>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161205/22db5ce4/attachment.html>
More information about the llvm-commits
mailing list