Index: llvm/cmake/modules/HandleLLVMOptions.cmake =================================================================== --- llvm/cmake/modules/HandleLLVMOptions.cmake +++ llvm/cmake/modules/HandleLLVMOptions.cmake @@ -96,9 +96,6 @@ set(LLVM_PLUGIN_EXT ${CMAKE_SHARED_LIBRARY_SUFFIX}) if(APPLE) - if(LLVM_ENABLE_LLD AND LLVM_ENABLE_LTO) - message(FATAL_ERROR "lld does not support LTO on Darwin") - endif() # Darwin-specific linker flags for loadable modules. set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-flat_namespace -Wl,-undefined -Wl,suppress") endif() @@ -147,9 +144,18 @@ endif() endfunction() -if(LLVM_ENABLE_LLD) - check_cxx_compiler_flag("-fuse-ld=lld" CXX_SUPPORTS_LLD) - append_if(CXX_SUPPORTS_LLD "-fuse-ld=lld" +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") + set(LLVM_USE_LINKER "lld") +endif() + +if( LLVM_USE_LINKER ) + check_cxx_compiler_flag("-fuse-ld=${LLVM_USE_LINKER}" CXX_SUPPORTS_CUSTOM_LINKER) + if ( NOT CXX_SUPPORTS_CUSTOM_LINKER ) + message(FATAL_ERROR "Host compiler don't support '-fuse-ld=${LLVM_USE_LINKER}'") + endif() + append("-fuse-ld=${LLVM_USE_LINKER}" CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) endif() Index: llvm/docs/CMake.rst =================================================================== --- llvm/docs/CMake.rst +++ llvm/docs/CMake.rst @@ -382,6 +382,17 @@ lines, enabling link-time optimization. Possible values are ``Off``, ``On``, ``Thin`` and ``Full``. Defaults to OFF. +**LLVM_USE_LINKER**:STRING + Add ``-fuse-ld={name}`` to the link invocation. The value can be an absolute + path to your custom linker, otherwise clang will prefix the name with ``ld.`` + and apply its usual search. For example to link LLVM with the Gold linker, + cmake can be invoked with ``-DLLVM_USE_LINKER=gold``. + +**LLVM_ENABLE_LLD**:BOOL + This option is equivalent to `-DLLVM_USE_LINKER=lld`, except during a 2-stage + build where a dependency is added from the first stage to the second ensuring + that lld is built before stage2 begins. + **LLVM_PARALLEL_COMPILE_JOBS**:STRING Define the maximum number of concurrent compilation jobs.