summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmake/QtBuild.cmake25
-rw-r--r--configure.cmake3
-rw-r--r--qmake/CMakeLists.txt2
-rw-r--r--src/corelib/CMakeLists.txt2
-rw-r--r--src/tools/bootstrap/CMakeLists.txt2
-rwxr-xr-xutil/cmake/configurejson2cmake.py4
6 files changed, 30 insertions, 8 deletions
diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake
index ea0d92a7cb..0778987b6a 100644
--- a/cmake/QtBuild.cmake
+++ b/cmake/QtBuild.cmake
@@ -1409,7 +1409,15 @@ function(qt_internal_add_link_flags_no_undefined target)
endif()
endfunction()
-function(qt_internal_add_link_flags_gc_sections target visibility)
+function(qt_internal_apply_gc_binaries_conditional target visibility)
+ # Should only be applied when the feature is enabled, aka for static builds.
+ if(NOT QT_FEATURE_gc_binaries)
+ return()
+ endif()
+ qt_internal_apply_gc_binaries("${target}" "${visibility}")
+endfunction()
+
+function(qt_internal_apply_gc_binaries target visibility)
set(possible_visibilities PRIVATE INTERFACE PUBLIC)
list(FIND possible_visibilities "${visibility}" known_visibility)
if (known_visibility EQUAL "-1")
@@ -1419,13 +1427,22 @@ function(qt_internal_add_link_flags_gc_sections target visibility)
if ((GCC OR CLANG) AND NOT EMSCRIPTEN)
if(APPLE)
set(gc_sections_flag "-Wl,-dead_strip")
- elseif(LINUX OR BSD OR SOLARIS OR WIN32 OR ANDROID)
+ elseif(SOLARIS)
+ set(gc_sections_flag "-Wl,-z,ignore")
+ elseif(LINUX OR BSD OR WIN32 OR ANDROID)
set(gc_sections_flag "-Wl,--gc-sections")
- else()
- message(FATAL_ERROR "Platform linker doesn't support gc sections. Target:\"${target}\".")
endif()
+ endif()
+ if(gc_sections_flag)
target_link_options("${target}" ${visibility} "${gc_sections_flag}")
endif()
+
+ if((GCC OR CLANG OR ICC) AND NOT EMSCRIPTEN)
+ set(split_sections_flags "-ffunction-sections" "-fdata-sections")
+ endif()
+ if(split_sections_flags)
+ target_compile_options("${target}" ${visibility} ${split_sections_flags})
+ endif()
endfunction()
function(qt_internal_add_linker_version_script target)
diff --git a/configure.cmake b/configure.cmake
index fa20b94333..3863f34285 100644
--- a/configure.cmake
+++ b/configure.cmake
@@ -355,6 +355,9 @@ qt_feature("cross_compile" PUBLIC
)
qt_feature_config("cross_compile" QMAKE_PUBLIC_CONFIG)
qt_feature_config("cross_compile" QMAKE_PRIVATE_CONFIG)
+qt_feature("gc_binaries" PRIVATE
+ CONDITION NOT QT_FEATURE_shared
+)
qt_feature("use_bfd_linker"
LABEL "bfd"
AUTODETECT false
diff --git a/qmake/CMakeLists.txt b/qmake/CMakeLists.txt
index c12cb03237..efc6c81da4 100644
--- a/qmake/CMakeLists.txt
+++ b/qmake/CMakeLists.txt
@@ -270,7 +270,7 @@ set_target_properties(${target_name} PROPERTIES
AUTOUIC OFF
)
-qt_internal_add_link_flags_gc_sections(${target_name} PRIVATE) # special case
+qt_internal_apply_gc_binaries(${target_name} PRIVATE) # special case
qt_enable_msvc_cplusplus_define(${target_name} PUBLIC) # special case
qt_skip_warnings_are_errors(${target_name}) # special case
diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt
index 9f22828fbf..2b1cd8c837 100644
--- a/src/corelib/CMakeLists.txt
+++ b/src/corelib/CMakeLists.txt
@@ -1272,7 +1272,7 @@ if(WIN32)
set_target_properties(Core PROPERTIES COMPILE_DEFINITIONS "${defines}")
endif()
-qt_internal_add_link_flags_gc_sections(Core PRIVATE)
+qt_internal_apply_gc_binaries_conditional(Core PUBLIC)
if(WIN32)
set(isExe $<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>)
diff --git a/src/tools/bootstrap/CMakeLists.txt b/src/tools/bootstrap/CMakeLists.txt
index b734f4fc5d..8b3a6e96d0 100644
--- a/src/tools/bootstrap/CMakeLists.txt
+++ b/src/tools/bootstrap/CMakeLists.txt
@@ -261,7 +261,7 @@ qt_extend_target(Bootstrap CONDITION MINGW AND WIN32
# QMAKE_CFLAGS = "$$QMAKE_CFLAGS_SHSTK"
# special case begin
-qt_internal_add_link_flags_gc_sections(Bootstrap PUBLIC)
+qt_internal_apply_gc_binaries(Bootstrap PUBLIC)
set_target_properties(Bootstrap PROPERTIES AUTOMOC OFF AUTOUIC OFF AUTORCC OFF)
qt_internal_add_target_aliases(Bootstrap)
qt_enable_msvc_cplusplus_define(Bootstrap PUBLIC)
diff --git a/util/cmake/configurejson2cmake.py b/util/cmake/configurejson2cmake.py
index 11bb01a17a..ce032fafaf 100755
--- a/util/cmake/configurejson2cmake.py
+++ b/util/cmake/configurejson2cmake.py
@@ -863,7 +863,9 @@ def get_feature_mapping():
"framework": {
"condition": "APPLE AND BUILD_SHARED_LIBS AND NOT CMAKE_BUILD_TYPE STREQUAL Debug"
},
- "gc_binaries": None,
+ "gc_binaries": {
+ "condition" : "NOT QT_FEATURE_shared"
+ },
"gcc-sysroot": None,
"gcov": None,
"gnu-libiconv": {