summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2014-02-04 08:15:46 +0000
committerAlexey Samsonov <samsonov@google.com>2014-02-04 08:15:46 +0000
commitc55ee815d49693df6511ae72b03600bf7afe7863 (patch)
treed09089bd5d1c7f9618c082a1f98ce1b298de8fff /cmake
parentcaeb7f94c75dbc8fcf30607f72546c8f097d1b42 (diff)
downloadllvm-c55ee815d49693df6511ae72b03600bf7afe7863.tar.gz
llvm-c55ee815d49693df6511ae72b03600bf7afe7863.tar.bz2
llvm-c55ee815d49693df6511ae72b03600bf7afe7863.tar.xz
[CMake] Revert r200695 and fix the problem with missing -fno-function-sections in a different way.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200745 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'cmake')
-rw-r--r--cmake/modules/HandleLLVMOptions.cmake22
1 files changed, 12 insertions, 10 deletions
diff --git a/cmake/modules/HandleLLVMOptions.cmake b/cmake/modules/HandleLLVMOptions.cmake
index 8e4b6bbdaf..b40103ca18 100644
--- a/cmake/modules/HandleLLVMOptions.cmake
+++ b/cmake/modules/HandleLLVMOptions.cmake
@@ -335,23 +335,25 @@ 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")
- # 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)
+ check_c_compiler_flag("-Werror -fno-function-sections" C_SUPPORTS_FNO_FUNCTION_SECTIONS)
+ if (C_SUPPORTS_FNO_FUNCTION_SECTIONS)
+ # Don't add -ffunction-section if it can be disabled with -fno-function-sections.
+ # Doing so will break sanitizers.
+ check_c_compiler_flag("-Werror -ffunction-sections" C_SUPPORTS_FFUNCTION_SECTIONS)
+ check_cxx_compiler_flag("-Werror -ffunction-sections" CXX_SUPPORTS_FFUNCTION_SECTIONS)
+ append_if(C_SUPPORTS_FFUNCTION_SECTIONS "-ffunction-sections" CMAKE_C_FLAGS)
+ append_if(CXX_SUPPORTS_FFUNCTION_SECTIONS "-ffunction-sections" CMAKE_CXX_FLAGS)
endif()
+ check_c_compiler_flag("-Werror -fdata-sections" C_SUPPORTS_FDATA_SECTIONS)
+ check_cxx_compiler_flag("-Werror -fdata-sections" CXX_SUPPORTS_FDATA_SECTIONS)
+ append_if(C_SUPPORTS_FDATA_SECTIONS "-fdata-sections" CMAKE_C_FLAGS)
+ append_if(CXX_SUPPORTS_FDATA_SECTIONS "-fdata-sections" CMAKE_CXX_FLAGS)
endif()
endif()