aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Merry <kde@randomguy3.me.uk>2014-01-28 16:39:10 +0000
committerAlex Merry <kde@randomguy3.me.uk>2014-01-29 13:18:36 +0000
commit455483e482f9bcc861d20e178c3d2ba3223a22e0 (patch)
tree027ac8e78c86f8b7f5f95de245cb7773c7722e5f
parent4e867a836bafd113c6d4b34c17eeb564089308a2 (diff)
downloadextra-cmake-modules-455483e482f9bcc861d20e178c3d2ba3223a22e0.tar.gz
extra-cmake-modules-455483e482f9bcc861d20e178c3d2ba3223a22e0.tar.bz2
Move and comment -fno-common setting
REVIEW: 115363
-rw-r--r--kde-modules/KDECompilerSettings.cmake23
1 files changed, 11 insertions, 12 deletions
diff --git a/kde-modules/KDECompilerSettings.cmake b/kde-modules/KDECompilerSettings.cmake
index 6b94668b..bcc11284 100644
--- a/kde-modules/KDECompilerSettings.cmake
+++ b/kde-modules/KDECompilerSettings.cmake
@@ -103,6 +103,17 @@ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" AND NOT WIN32)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
endif()
+# Do not merge uninitialized global variables.
+# This is mostly a "principle of least surprise" thing, but also
+# has performance benefits.
+# See https://www.ibm.com/developerworks/community/blogs/zTPF/entry/benefits_of_the_fnocommon_compile_option_peter_lemieszewski?lang=en
+# Note that this only applies to C code; C++ already behaves like this.
+if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
+ "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR
+ ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" AND NOT WIN32))
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-common")
+endif()
+
# Default to hidden visibility for symbols
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
@@ -292,11 +303,6 @@ endif()
############################################################
if (APPLE)
- # FIXME: is this still needed?
- # Apple's Mach-O linker apparently does not like having uninitialized global
- # variables in a common block (only relevant for C code)
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-common")
-
# FIXME: why are these needed?
set (CMAKE_SHARED_LINKER_FLAGS "-single_module -multiply_defined suppress ${CMAKE_SHARED_LINKER_FLAGS}")
set (CMAKE_MODULE_LINKER_FLAGS "-multiply_defined suppress ${CMAKE_MODULE_LINKER_FLAGS}")
@@ -318,10 +324,3 @@ if (MINGW AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--export-all-symbols")
endif()
-if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
- "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR
- ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" AND NOT WIN32))
- # FIXME: why?
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-common")
-endif()
-