[llvm] 8d3ab9d - Properly support LLVM_ENABLE_LLD on Windows

via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 22 11:07:43 PST 2022


Author: serge-sans-paille
Date: 2022-12-22T20:07:25+01:00
New Revision: 8d3ab9dfc4d49062e045d6d5db419975b81da7e4

URL: https://github.com/llvm/llvm-project/commit/8d3ab9dfc4d49062e045d6d5db419975b81da7e4
DIFF: https://github.com/llvm/llvm-project/commit/8d3ab9dfc4d49062e045d6d5db419975b81da7e4.diff

LOG: Properly support LLVM_ENABLE_LLD on Windows

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

Added: 
    

Modified: 
    llvm/cmake/modules/HandleLLVMOptions.cmake

Removed: 
    


################################################################################
diff  --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake
index 7f141d93d4c2f..4f4a64bc02eb6 100644
--- a/llvm/cmake/modules/HandleLLVMOptions.cmake
+++ b/llvm/cmake/modules/HandleLLVMOptions.cmake
@@ -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()


        


More information about the llvm-commits mailing list