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     
              
======================================================================

--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to