[cmake-developers] [CMake 0014066]: Provided CMAKE_*_LINKER_FLAGS ignored during configuration step
Mantis Bug Tracker
mantis at public.kitware.com
Mon Apr 8 16:19:06 EDT 2013
The following issue has been SUBMITTED.
======================================================================
http://public.kitware.com/Bug/view.php?id=14066
======================================================================
Reported By: Alexandru Ciobanu
Assigned To:
======================================================================
Project: CMake
Issue ID: 14066
Category: CMake
Reproducibility: always
Severity: minor
Priority: normal
Status: new
======================================================================
Date Submitted: 2013-04-08 16:19 EDT
Last Modified: 2013-04-08 16:19 EDT
======================================================================
Summary: Provided CMAKE_*_LINKER_FLAGS ignored during
configuration step
Description:
It seems that if one provides -DCMAKE_C_FLAGS to cmake, these flags are used
during the try-compile steps as part of configuration step, while the provided
linker flags like CMAKE_EXE_LINKER_FLAGS are ignored during the try-compile
steps.
Interestingly, providing the flags via LDFLAGS environment variable, works.
Using the attached tiny repro case:
1. cd build
2. CC=clang cmake -DCMAKE_C_FLAGS="-fsanitize=thread -fPIE"
-DCMAKE_EXE_LINKER_FLAGS="-pie" ..
results in the following error (full error log is attached):
The C compiler "clang" is not able to compile a simple test program.
[...]
/home/builder/rogue_nightly_build/build_utils/llvm/llvm-relass-install/bin/clang
-fsanitize=thread -fPIE
CMakeFiles/cmTryCompileExec998602180.dir/testCCompiler.c.o -o
cmTryCompileExec998602180 -rdynamic
clang-3: error: invalid argument '-fsanitize=thread' only allowed with
'-pie'
[...]
Alternatively, if one uses LDFLAGS for the same purpose, there is no error:
1. cd build
2. LDFLAGS="-pie" CC=clang cmake -DCMAKE_C_FLAGS="-fsanitize=thread -fPIE" ..
results in a successful configuration.
We found this case because we use clang's ThreadSanitizer, which is a tool that
detects race condition with threads and has the following requirement:
- compiler should use -fsanitize=thread -fPIE
- linker should use -fsanitize=thread -pie
Additional Information:
1. cd build
2. CC=clang cmake -DCMAKE_C_FLAGS="-fsanitize=thread -fPIE"
-DCMAKE_EXE_LINKER_FLAGS="-pie" ..
======================================================================
Issue History
Date Modified Username Field Change
======================================================================
2013-04-08 16:19 Alexandru CiobanuNew Issue
2013-04-08 16:19 Alexandru CiobanuFile Added: cmake.link.flags.repro.tar.gz
======================================================================
More information about the cmake-developers
mailing list