[LLVMdev] CMake: Gold linker detection
Sumanth Gundapaneni
sgundapa at codeaurora.org
Tue Jan 27 16:00:07 PST 2015
I reacted as per my case. You need CFLAGS in order to what linker you might be using.
In case of clang, you can use “-fuse-ld” to control the invocation of linker.
In my opinion, it is not necessary to carry forward LDFLAGS unless you want to control specific parts of the linker.
In my case, I have a cross compiler for ARM and I usually compile the code with
Clang –sysroot=<path_to_sysroot> --gcc-toolchain=<path_to_toolchain> -target=<triple> file.c
Where I pass “–sysroot=<path_to_sysroot> --gcc-toolchain=<path_to_toolchain> -target=<triple>” as CMAKE_C_FLAGS :)
With out –gcc-toolchain, clang cannot find the linker and picks the system linker which is usually /usr/bin/ld on a linux system.
--Sumanth G
From: C Bergström [mailto:cbergstrom at pathscale.com]
Sent: Tuesday, January 27, 2015 11:51 AM
To: Sumanth Gundapaneni
Cc: llvmdev at cs.uiuc.edu; Rafael Ávila de Espíndola; Takumi NAKAMURA
Subject: Re: [LLVMdev] CMake: Gold linker detection
On Wed, Jan 28, 2015 at 2:27 AM, Sumanth Gundapaneni <sgundapa at codeaurora.org <mailto:sgundapa at codeaurora.org> > wrote:
Hi Rafael,
I looked at the code which you pushed a while ago to check for the gold linker.
Code below:
execute_process(
COMMAND ${CMAKE_C_COMPILER} -Wl,--version
OUTPUT_VARIABLE stdout
ERROR_QUIET)
if("${stdout}" MATCHES "GNU gold")
set(LLVM_LINKER_IS_GOLD ON)
endif()
I was trying to build runtime libraries (compiler-rt) for ARM using “clang” which includes this code.
A while ago, I saw the error message until geek4civic fixed it with “ERROR_QUIET”.
I usually specify my sysroot and tool chain(linker) through CFLAGS.
To fortify the logic, “${CMAKE_C_COMPILER} ${CMAKE_C_FLAGS} -Wl, --version” would be ideal than “${CMAKE_C_COMPILER} -Wl, --version” which works mostly for gnu compilers.
Let me know, I can push a patch
execute_process(
- COMMAND ${CMAKE_C_COMPILER} -Wl,--version
+ COMMAND “${CMAKE_C_COMPILER} ${CMAKE_C_FLAGS}” -Wl,--version
OUTPUT_VARIABLE stdout
ERROR_QUIET)
if("${stdout}" MATCHES "GNU gold")
set(LLVM_LINKER_IS_GOLD ON)
endif()
While this may be convenient I don't think it's strictly correct.
CFLAGS != LDFLAGS
I think if extra flags are going to be passed it should be LD specific since that's what this is intended to check.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150127/c0a574aa/attachment.html>
More information about the llvm-dev
mailing list