Skip to content

Commit

Permalink
Don't use -ffunction-sections if -fno-function-sections is not suppor…
Browse files Browse the repository at this point in the history
…ted in the compiler.

This will disable -ffunction-sections in older versions of Clang where it
breaks build of sanitizer runtime library.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200695 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
eugenis committed Feb 3, 2014
1 parent 17fec83 commit 7db79d9
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion cmake/modules/HandleLLVMOptions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -350,13 +350,23 @@ if (UNIX AND
append("-fcolor-diagnostics" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
endif()

# Clang prior to 3.5 ignored -fno-function-sections.
# It's pretty hard to test directly, so we rely on the version number.
if( ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5) )
set(LLVM_COMPILER_HAS_BROKEN_FNO_FUNCTION_SECTIONS ON)
endif()

# Add flags for add_dead_strip().
# FIXME: With MSVS, consider compiling with /Gy and linking with /OPT:REF?
# But MinSizeRel seems to add that automatically, so maybe disable these
# flags instead if LLVM_NO_DEAD_STRIP is set.
if(NOT CYGWIN AND NOT WIN32)
if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
append("-ffunction-sections -fdata-sections" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
# Don't add -ffunction-section if it can be disabled with -fno-function-sections.
# Doing so will break sanitizers.
if (NOT LLVM_COMPILER_HAS_BROKEN_FNO_FUNCTION_SECTIONS)
append("-ffunction-sections -fdata-sections" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
endif()
endif()
endif()

Expand Down

0 comments on commit 7db79d9

Please sign in to comment.