forked from OSchip/llvm-project
[CMake] Only detect the linker once in AddLLVM.cmake
Summary: Otherwise, the build output contains a bunch of "Linker detection: <xxx>" lines that are really redundant. We also make redundant calls to the linker, although that is a smaller concern. Reviewers: smeenai Subscribers: mgorny, fedor.sergeev, jkorous, dexonsmith, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D68648
This commit is contained in:
parent
376c68539c
commit
84f80b1faa
|
@ -162,49 +162,54 @@ function(add_llvm_symbol_exports target_name export_file)
|
|||
set(LLVM_COMMON_DEPENDS ${LLVM_COMMON_DEPENDS} PARENT_SCOPE)
|
||||
endfunction(add_llvm_symbol_exports)
|
||||
|
||||
if(APPLE)
|
||||
execute_process(
|
||||
COMMAND "${CMAKE_LINKER}" -v
|
||||
ERROR_VARIABLE stderr
|
||||
)
|
||||
set(LLVM_LINKER_DETECTED YES)
|
||||
if("${stderr}" MATCHES "PROJECT:ld64")
|
||||
set(LLVM_LINKER_IS_LD64 YES)
|
||||
message(STATUS "Linker detection: ld64")
|
||||
else()
|
||||
set(LLVM_LINKER_DETECTED NO)
|
||||
message(STATUS "Linker detection: unknown")
|
||||
endif()
|
||||
elseif(NOT WIN32)
|
||||
# Detect what linker we have here
|
||||
if( LLVM_USE_LINKER )
|
||||
set(command ${CMAKE_C_COMPILER} -fuse-ld=${LLVM_USE_LINKER} -Wl,--version)
|
||||
else()
|
||||
separate_arguments(flags UNIX_COMMAND "${CMAKE_EXE_LINKER_FLAGS}")
|
||||
set(command ${CMAKE_C_COMPILER} ${flags} -Wl,--version)
|
||||
endif()
|
||||
execute_process(
|
||||
COMMAND ${command}
|
||||
OUTPUT_VARIABLE stdout
|
||||
ERROR_VARIABLE stderr
|
||||
)
|
||||
set(LLVM_LINKER_DETECTED YES)
|
||||
if("${stdout}" MATCHES "GNU gold")
|
||||
set(LLVM_LINKER_IS_GOLD YES)
|
||||
message(STATUS "Linker detection: GNU Gold")
|
||||
elseif("${stdout}" MATCHES "^LLD")
|
||||
set(LLVM_LINKER_IS_LLD YES)
|
||||
message(STATUS "Linker detection: LLD")
|
||||
elseif("${stdout}" MATCHES "GNU ld")
|
||||
set(LLVM_LINKER_IS_GNULD YES)
|
||||
message(STATUS "Linker detection: GNU ld")
|
||||
elseif("${stderr}" MATCHES "Solaris Link Editors" OR
|
||||
"${stdout}" MATCHES "Solaris Link Editors")
|
||||
set(LLVM_LINKER_IS_SOLARISLD YES)
|
||||
message(STATUS "Linker detection: Solaris ld")
|
||||
else()
|
||||
set(LLVM_LINKER_DETECTED NO)
|
||||
message(STATUS "Linker detection: unknown")
|
||||
if (NOT DEFINED LLVM_LINKER_DETECTED)
|
||||
if(APPLE)
|
||||
execute_process(
|
||||
COMMAND "${CMAKE_LINKER}" -v
|
||||
ERROR_VARIABLE stderr
|
||||
)
|
||||
if("${stderr}" MATCHES "PROJECT:ld64")
|
||||
set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "")
|
||||
set(LLVM_LINKER_IS_LD64 YES CACHE INTERNAL "")
|
||||
message(STATUS "Linker detection: ld64")
|
||||
else()
|
||||
set(LLVM_LINKER_DETECTED NO CACHE INTERNAL "")
|
||||
message(STATUS "Linker detection: unknown")
|
||||
endif()
|
||||
elseif(NOT WIN32)
|
||||
# Detect what linker we have here
|
||||
if( LLVM_USE_LINKER )
|
||||
set(command ${CMAKE_C_COMPILER} -fuse-ld=${LLVM_USE_LINKER} -Wl,--version)
|
||||
else()
|
||||
separate_arguments(flags UNIX_COMMAND "${CMAKE_EXE_LINKER_FLAGS}")
|
||||
set(command ${CMAKE_C_COMPILER} ${flags} -Wl,--version)
|
||||
endif()
|
||||
execute_process(
|
||||
COMMAND ${command}
|
||||
OUTPUT_VARIABLE stdout
|
||||
ERROR_VARIABLE stderr
|
||||
)
|
||||
if("${stdout}" MATCHES "GNU gold")
|
||||
set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "")
|
||||
set(LLVM_LINKER_IS_GOLD YES CACHE INTERNAL "")
|
||||
message(STATUS "Linker detection: GNU Gold")
|
||||
elseif("${stdout}" MATCHES "^LLD")
|
||||
set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "")
|
||||
set(LLVM_LINKER_IS_LLD YES CACHE INTERNAL "")
|
||||
message(STATUS "Linker detection: LLD")
|
||||
elseif("${stdout}" MATCHES "GNU ld")
|
||||
set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "")
|
||||
set(LLVM_LINKER_IS_GNULD YES CACHE INTERNAL "")
|
||||
message(STATUS "Linker detection: GNU ld")
|
||||
elseif("${stderr}" MATCHES "Solaris Link Editors" OR
|
||||
"${stdout}" MATCHES "Solaris Link Editors")
|
||||
set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "")
|
||||
set(LLVM_LINKER_IS_SOLARISLD YES CACHE INTERNAL "")
|
||||
message(STATUS "Linker detection: Solaris ld")
|
||||
else()
|
||||
set(LLVM_LINKER_DETECTED NO CACHE INTERNAL "")
|
||||
message(STATUS "Linker detection: unknown")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
|
Loading…
Reference in New Issue