From 5fa6e097088bcac765eeef85505106828b857154 Mon Sep 17 00:00:00 2001 From: Mehdi Amini Date: Sun, 15 Jan 2017 03:21:30 +0000 Subject: [PATCH] Add a LLVM_USE_LINKER that defines the linker to use when building LLVM Summary: This string parameter is passed to -fuse-ld when linking. It can be an absolute path to your custom linker, otherwise clang will look for `ld.{name}`. Reviewers: davide, tejohnson, pcc Subscribers: llvm-commits, mgorny Differential Revision: https://reviews.llvm.org/D28738 llvm-svn: 292047 --- cmake/modules/HandleLLVMOptions.cmake | 16 +++++++++++++--- docs/CMake.rst | 12 ++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/cmake/modules/HandleLLVMOptions.cmake b/cmake/modules/HandleLLVMOptions.cmake index 1825b55ed54..22ec8b546c8 100644 --- a/cmake/modules/HandleLLVMOptions.cmake +++ b/cmake/modules/HandleLLVMOptions.cmake @@ -147,9 +147,19 @@ function(add_flag_or_print_warning flag name) 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") + endif() + 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 does not 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() diff --git a/docs/CMake.rst b/docs/CMake.rst index 28b6ea3959b..05885779efd 100644 --- a/docs/CMake.rst +++ b/docs/CMake.rst @@ -382,6 +382,18 @@ LLVM-specific variables 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 possible value depend on + your compiler, for clang 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.