'-DCMAKE_CXX_FLAGS=-fno-omit-frame-pointer -Wno-maybe-uninitialized
-fPIC -fPIE'
-- The C compiler identification is GNU 4.8.1
-- The CXX compiler identification is GNU 4.8.1
-- Check for working C compiler:
/home/engshare/third-party2/gcc/4.8.1/centos6-native/cc6c9dc/bin/gcc
-- Check for working C compiler:
/home/engshare/third-party2/gcc/4.8.1/centos6-native/cc6c9dc/bin/gcc --
works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler:
/home/engshare/third-party2/gcc/4.8.1/centos6-native/cc6c9dc/bin/g++
-- Check for working CXX compiler:
/home/engshare/third-party2/gcc/4.8.1/centos6-native/cc6c9dc/bin/g++ --
works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PythonInterp:
/home/engshare/third-party2/python/2.7.5/centos6-native/da39a3e/bin/python2.7
(found version "2.7.5")
-- Looking for unwind.h
-- Looking for unwind.h - found
-- Performing Test COMPILER_RT_HAS_FPIC_FLAG
-- Performing Test COMPILER_RT_HAS_FPIC_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FPIE_FLAG
-- Performing Test COMPILER_RT_HAS_FPIE_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FNO_BUILTIN_FLAG
-- Performing Test COMPILER_RT_HAS_FNO_BUILTIN_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FNO_EXCEPTIONS_FLAG
-- Performing Test COMPILER_RT_HAS_FNO_EXCEPTIONS_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FOMIT_FRAME_POINTER_FLAG
-- Performing Test COMPILER_RT_HAS_FOMIT_FRAME_POINTER_FLAG - Success
I’m not sure if the CMAKE_CXX_FLAGS is used in LLVM. We have our own flags for different configurations. I don’t remember if our ones inherit from CMAKE_CXX_FLAGS or override it completely. Anyway, they are:
- CMAKE_CXX_FLAGS_DEBUG
- CMAKE_CXX_FLAGS_MINSIZEREL
- CMAKE_CXX_FLAGS_RELEASE
- CMAKE_CXX_FLAGS_RELWITHDEBINFO
The one of those you get depends on what you set CMAKE_BUILD_TYPE to. Options are ‘Debug, Release, RelWithDebInfo, MinSizeRel’
I also tried CMAKE_CXX_FLAGS_RELEASE
with the same effect.
Ah, thats me out of ideas
Can you post your full cmake invocation and maybe even the cmake log. I don’t know compiler-rt so i may not be any help, but other people who can help would find that useful too.
I regularly use '-DCMAKE_CXX_FLAGS' when configuring CLang/LLVM to distinguish my builds (Alpha/Beta/Final) or to build custom versions, usually by adding additional '-D' flags, but I discovered I had to add the ':STRING' qualifier to it when invoking 'cmake'. With 'gmake' this is equivalent to '--with-extra-options="whatever flags":
-DCMAKE_CXX_FLAGS:STRING="whatever flags"
This works regardless of whether it is a Debug or Release build.
I don’t know if we explicitly don’t support -fno-omit-frame-pointer for compiler-rt, but in general compiler-rt is generally built differently from LLVM & Clang for a reason.
Why do you need -fno-omit-frame-pointer for compiler-rt?
At the moment I don’t believe we support building ASAN with -fno-omit-frame-pointer because doing so would likely have significant adverse impact on performance. Samsonov would know better, but especially if you’re looking to run profiling tools you really don’t want frame pointers for the runtime libraries.
Yes, we explicitly add -fomit-frame-pointer when we build sanitizer
runtimes, and it may override what you set in CMAKE_CXX_FLAGS. It is indeed
related to performance overhead, which is especially critical for slower
tools like ThreadSanitizer, which inserts a call into runtime for *every*
load/store in the original problem.