[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