summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2020-06-12 19:12:26 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2020-06-12 22:34:12 +0200
commita08bf7f00ab64fd3ae7376d8dd50ca8a37bee3e3 (patch)
treeab209fc07b14123c8f9f554b3a9f5f790609209b /cmake
parent2158e764dc374239fa346656d5a93ac2ffd7af33 (diff)
CMake: Fix usage of gc_binaries feature
The qt_internal_apply_gc_binaries function should apply both compile and link flags, not just link flags. The flags should be applied publically to all consumers of Bootstrap regardless if the gc_binaries feature is enabled. The flags should be applied publically to Core only in case if the feature is enabled (aka for static builds only). Change-Id: Id42af0d9b527004d74c04eff2c9e3c2be1e76aac Fixes: QTBUG-84461 Task-number: QTBUG-83929 Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/QtBuild.cmake25
1 files changed, 21 insertions, 4 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)