From: Chris Bieneman Date: Fri, 18 Sep 2015 21:08:32 +0000 (+0000) Subject: [CMake] Adding ALWAYS_GENERATE option to symlink utility functions. X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=907451c6d653f5d0f4efa55fb42a84dae67a37cc [CMake] Adding ALWAYS_GENERATE option to symlink utility functions. This implements the behavior required for clang symlinks which should be always generated. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@248039 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake index 45a374f95e7..dea560182a4 100644 --- a/cmake/modules/AddLLVM.cmake +++ b/cmake/modules/AddLLVM.cmake @@ -1024,17 +1024,25 @@ function(add_lit_testsuites project directory) endfunction() function(llvm_install_symlink name dest) + cmake_parse_arguments(ARG "ALWAYS_GENERATE" "" "" ${ARGN}) foreach(path ${CMAKE_MODULE_PATH}) if(EXISTS ${path}/LLVMInstallSymlink.cmake) set(INSTALL_SYMLINK ${path}/LLVMInstallSymlink.cmake) break() endif() endforeach() + + if(ARG_ALWAYS_GENERATE) + set(component ${dest}) + else() + set(component ${name}) + endif() + install(SCRIPT ${INSTALL_SYMLINK} CODE "install_symlink(${name} ${dest})" - COMPONENT ${name}) + COMPONENT ${component}) - if (NOT CMAKE_CONFIGURATION_TYPES) + if (NOT CMAKE_CONFIGURATION_TYPES AND NOT ARG_ALWAYS_GENERATE) add_custom_target(install-${name} DEPENDS ${name} ${dest} install-${dest} COMMAND "${CMAKE_COMMAND}" @@ -1044,6 +1052,7 @@ function(llvm_install_symlink name dest) endfunction() function(add_llvm_tool_symlink name dest) + cmake_parse_arguments(ARG "ALWAYS_GENERATE" "" "" ${ARGN}) if(UNIX) set(LLVM_LINK_OR_COPY create_symlink) set(dest_binary "${dest}${CMAKE_EXECUTABLE_SUFFIX}") @@ -1054,28 +1063,32 @@ function(add_llvm_tool_symlink name dest) set(output_path "${LLVM_RUNTIME_OUTPUT_INTDIR}/${name}${CMAKE_EXECUTABLE_SUFFIX}") - add_custom_command(OUTPUT ${output_path} + if(ARG_ALWAYS_GENERATE) + set_property(DIRECTORY APPEND PROPERTY + ADDITIONAL_MAKE_CLEAN_FILES ${dest_binary}) + add_custom_command(TARGET ${dest} 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(${name} ALL DEPENDS ${output_path}) + set_target_properties(${name} PROPERTIES FOLDER Tools) - add_custom_target(${name} ALL DEPENDS ${output_path}) - set_target_properties(${name} PROPERTIES FOLDER Tools) - set_property(DIRECTORY APPEND PROPERTY - ADDITIONAL_MAKE_CLEAN_FILES ${dest_binary}) - - # Make sure the parent tool is a toolchain tool, otherwise exclude this tool - list(FIND LLVM_TOOLCHAIN_TOOLS ${dest} LLVM_IS_${dest}_TOOLCHAIN_TOOL) - if (NOT LLVM_IS_${dest}_TOOLCHAIN_TOOL GREATER -1) - set(LLVM_IS_${name}_TOOLCHAIN_TOOL ${LLVM_IS_${dest}_TOOLCHAIN_TOOL}) - else() - list(FIND LLVM_TOOLCHAIN_TOOLS ${name} LLVM_IS_${name}_TOOLCHAIN_TOOL) - endif() + # Make sure the parent tool is a toolchain tool, otherwise exclude this tool + list(FIND LLVM_TOOLCHAIN_TOOLS ${dest} LLVM_IS_${dest}_TOOLCHAIN_TOOL) + if (NOT LLVM_IS_${dest}_TOOLCHAIN_TOOL GREATER -1) + set(LLVM_IS_${name}_TOOLCHAIN_TOOL ${LLVM_IS_${dest}_TOOLCHAIN_TOOL}) + else() + list(FIND LLVM_TOOLCHAIN_TOOLS ${name} LLVM_IS_${name}_TOOLCHAIN_TOOL) + endif() - # LLVM_IS_${name}_TOOLCHAIN_TOOL will only be greater than -1 if both this - # tool and its parent tool are in LLVM_TOOLCHAIN_TOOLS - if (LLVM_IS_${name}_TOOLCHAIN_TOOL GREATER -1 OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY) - if( LLVM_BUILD_TOOLS ) - llvm_install_symlink(${name} ${dest}) + # LLVM_IS_${name}_TOOLCHAIN_TOOL will only be greater than -1 if both this + # tool and its parent tool are in LLVM_TOOLCHAIN_TOOLS + if (LLVM_IS_${name}_TOOLCHAIN_TOOL GREATER -1 OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY) + if( LLVM_BUILD_TOOLS ) + llvm_install_symlink(${name} ${dest}) + endif() endif() endif() endfunction()