aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kde-modules/KDECompilerSettings.cmake26
-rw-r--r--kde-modules/KDEFrameworkCompilerSettings.cmake1
2 files changed, 26 insertions, 1 deletions
diff --git a/kde-modules/KDECompilerSettings.cmake b/kde-modules/KDECompilerSettings.cmake
index 1c3b3715..872edf18 100644
--- a/kde-modules/KDECompilerSettings.cmake
+++ b/kde-modules/KDECompilerSettings.cmake
@@ -135,7 +135,6 @@ on a target that has source files in a language other than C++.
Enables exceptions for C++ source files compiled for the
CMakeLists.txt file in the current directory and all subdirectories.
-
Example usages:
.. code-block:: cmake
@@ -184,6 +183,19 @@ Example usages:
-DQT_NO_FOREACH
)
+Inclusion of this module defines the following variables:
+
+``ENABLE_BSYMBOLICFUNCTIONS``
+ indicates whether we make use of -Bsymbolic-functions for linking.
+ It ensures libraries bind global function references locally rather than
+ at runtime.
+ This option only has an effect on ELF-based systems.
+
+ The option is disabled by default except when using
+ KDEFrameworkCompilerSettings.cmake where it's enabled. Projects can enable
+ it by calling set(ENABLE_BSYMBOLICFUNCTIONS ON) or passing -DENABLE
+ BSYMBOLICFUNCTIONS=ON when configuring the build directory.
+
Since pre-1.0.0.
#]=======================================================================]
@@ -584,6 +596,18 @@ if (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4661")
endif()
+option(ENABLE_BSYMBOLICFUNCTIONS "Make use of -Bsymbolic-functions" OFF)
+if (ENABLE_BSYMBOLICFUNCTIONS)
+ set(_SYMBOLIC_FUNCTIONS_COMPILER_OPTION "-Wl,-Bsymbolic-functions")
+ list(APPEND CMAKE_REQUIRED_LIBRARIES "${_SYMBOLIC_FUNCTIONS_COMPILER_OPTION}")
+ check_cxx_source_compiles( "int main () { return 0; }" BSYMBOLICFUNCTIONS_AVAILABLE )
+ list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "${_SYMBOLIC_FUNCTIONS_COMPILER_OPTION}")
+ if (BSYMBOLICFUNCTIONS_AVAILABLE)
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${_SYMBOLIC_FUNCTIONS_COMPILER_OPTION}")
+ set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${_SYMBOLIC_FUNCTIONS_COMPILER_OPTION}")
+ endif()
+endif()
+
if (WIN32)
# Disable deprecation warnings for some API
# FIXME: do we really want this?
diff --git a/kde-modules/KDEFrameworkCompilerSettings.cmake b/kde-modules/KDEFrameworkCompilerSettings.cmake
index d7165f57..6b17fde9 100644
--- a/kde-modules/KDEFrameworkCompilerSettings.cmake
+++ b/kde-modules/KDEFrameworkCompilerSettings.cmake
@@ -38,6 +38,7 @@ if (NOT CMAKE_CXX_STANDARD)
endif()
set(KDE_COMPILERSETTINGS_LEVEL 5.84.0)
+set(ENABLE_BSYMBOLICFUNCTIONS ON)
include(KDECompilerSettings NO_POLICY_SCOPE)
add_definitions(-DQT_NO_CAST_TO_ASCII