[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