diff options
author | Alexandre Ganea <37383324+aganea@users.noreply.github.com> | 2024-01-11 19:05:46 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-11 19:05:46 -0500 |
commit | 4cee0e3c88d4e5c96cda0a4c3e2e91d4d4b1df69 (patch) | |
tree | b924b1d6fe5323635aca172a67d9b19bf499e2b3 /lld/cmake | |
parent | 93b47053c6bce5862ba4a5f7d9f6d5cbaa8cbf41 (diff) | |
download | llvm-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.cmake | 50 |
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() |