aboutsummaryrefslogtreecommitdiff
path: root/lld/cmake
diff options
context:
space:
mode:
authorAlexandre Ganea <37383324+aganea@users.noreply.github.com>2024-01-11 19:05:46 -0500
committerGitHub <noreply@github.com>2024-01-11 19:05:46 -0500
commit4cee0e3c88d4e5c96cda0a4c3e2e91d4d4b1df69 (patch)
treeb924b1d6fe5323635aca172a67d9b19bf499e2b3 /lld/cmake
parent93b47053c6bce5862ba4a5f7d9f6d5cbaa8cbf41 (diff)
downloadllvm-4cee0e3c88d4e5c96cda0a4c3e2e91d4d4b1df69.zip
llvm-4cee0e3c88d4e5c96cda0a4c3e2e91d4d4b1df69.tar.gz
llvm-4cee0e3c88d4e5c96cda0a4c3e2e91d4d4b1df69.tar.bz2
[LLD] Fix llvm-driver cmake integration for LLD (#76305)
Previously, even though LLD was linked as part of llvm-driver when using `cmake ... -DLLVM_TOOL_LLVM_DRIVER_BUILD=ON`, there were build issues when compiling incrementally. Sometimes link errors when linking LLD, other times, the `llvm.exe` would be impropely be replaced by `lld.exe`.
Diffstat (limited to 'lld/cmake')
-rw-r--r--lld/cmake/modules/AddLLD.cmake50
1 files changed, 34 insertions, 16 deletions
diff --git a/lld/cmake/modules/AddLLD.cmake b/lld/cmake/modules/AddLLD.cmake
index d3924f7..2ee066b 100644
--- a/lld/cmake/modules/AddLLD.cmake
+++ b/lld/cmake/modules/AddLLD.cmake
@@ -37,30 +37,48 @@ macro(add_lld_executable name)
endmacro(add_lld_executable)
macro(add_lld_tool name)
+ cmake_parse_arguments(ARG "DEPENDS;GENERATE_DRIVER" "" "" ${ARGN})
if (NOT LLD_BUILD_TOOLS)
set(EXCLUDE_FROM_ALL ON)
endif()
+ if(ARG_GENERATE_DRIVER
+ AND LLVM_TOOL_LLVM_DRIVER_BUILD
+ AND (NOT LLVM_DISTRIBUTION_COMPONENTS OR ${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS)
+ )
+ set(get_obj_args ${ARGN})
+ list(FILTER get_obj_args EXCLUDE REGEX "^SUPPORT_PLUGINS$")
+ generate_llvm_objects(${name} ${get_obj_args})
+ add_custom_target(${name} DEPENDS llvm-driver)
+ else()
+ add_lld_executable(${name} ${ARGN})
- add_lld_executable(${name} ${ARGN})
-
- if (LLD_BUILD_TOOLS)
- get_target_export_arg(${name} LLD export_to_lldtargets)
- install(TARGETS ${name}
- ${export_to_lldtargets}
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
- COMPONENT ${name})
-
- if(NOT CMAKE_CONFIGURATION_TYPES)
- add_llvm_install_targets(install-${name}
- DEPENDS ${name}
+ if (LLD_BUILD_TOOLS)
+ get_target_export_arg(${name} LLD export_to_lldtargets)
+ install(TARGETS ${name}
+ ${export_to_lldtargets}
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
COMPONENT ${name})
+
+ if(NOT CMAKE_CONFIGURATION_TYPES)
+ add_llvm_install_targets(install-${name}
+ DEPENDS ${name}
+ COMPONENT ${name})
+ endif()
+ set_property(GLOBAL APPEND PROPERTY LLD_EXPORTS ${name})
endif()
- set_property(GLOBAL APPEND PROPERTY LLD_EXPORTS ${name})
endif()
endmacro()
macro(add_lld_symlink name dest)
- llvm_add_tool_symlink(LLD ${name} ${dest} ALWAYS_GENERATE)
- # Always generate install targets
- llvm_install_symlink(LLD ${name} ${dest} ALWAYS_GENERATE)
+ get_property(LLVM_DRIVER_TOOLS GLOBAL PROPERTY LLVM_DRIVER_TOOLS)
+ if(LLVM_TOOL_LLVM_DRIVER_BUILD
+ AND ${dest} IN_LIST LLVM_DRIVER_TOOLS
+ AND (NOT LLVM_DISTRIBUTION_COMPONENTS OR ${dest} IN_LIST LLVM_DISTRIBUTION_COMPONENTS)
+ )
+ set_property(GLOBAL APPEND PROPERTY LLVM_DRIVER_TOOL_ALIASES_${dest} ${name})
+ else()
+ llvm_add_tool_symlink(LLD ${name} ${dest} ALWAYS_GENERATE)
+ # Always generate install targets
+ llvm_install_symlink(LLD ${name} ${dest} ALWAYS_GENERATE)
+ endif()
endmacro()