Skip to content

Commit

Permalink
Properly support LLVM_ENABLE_LLD on Windows
Browse files Browse the repository at this point in the history
Currently, setting -DLLVM_ENABLE_LLD=ON on windows also requires setting
-DCMAKE_LINKER=lld-link.exe. This is both misleading and redundant.

Fix this by trying to find llvm-link.exe when -DLLVM_ENABLE_LLD=ON is
set and CMAKE_LINKER is not, and aborting otherwise.

Differential Revision: https://reviews.llvm.org/D140534
  • Loading branch information
serge-sans-paille committed Dec 22, 2022
1 parent 5df34e9 commit 8d3ab9d
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion llvm/cmake/modules/HandleLLVMOptions.cmake
Expand Up @@ -293,10 +293,23 @@ if( LLVM_ENABLE_LLD )
if ( LLVM_USE_LINKER )
message(FATAL_ERROR "LLVM_ENABLE_LLD and LLVM_USE_LINKER can't be set at the same time")
endif()

# In case of MSVC cmake always invokes the linker directly, so the linker
# should be specified by CMAKE_LINKER cmake variable instead of by -fuse-ld
# compiler option.
if ( NOT MSVC )
if ( MSVC )
if(NOT CMAKE_LINKER MATCHES "lld-link")
get_filename_component(CXX_COMPILER_DIR ${CMAKE_CXX_COMPILER} DIRECTORY)
get_filename_component(C_COMPILER_DIR ${CMAKE_C_COMPILER} DIRECTORY)
find_program(LLD_LINK NAMES "lld-link" "lld-link.exe" HINTS ${CXX_COMPILER_DIR} ${C_COMPILER_DIR} DOC "lld linker")
if(NOT LLD_LINK)
message(FATAL_ERROR
"LLVM_ENABLE_LLD set, but cannot find lld-link. "
"Consider setting CMAKE_LINKER to lld-link path.")
endif()
set(CMAKE_LINKER ${LLD_LINK})
endif()
else()
set(LLVM_USE_LINKER "lld")
endif()
endif()
Expand Down

0 comments on commit 8d3ab9d

Please sign in to comment.