diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-06-12 19:12:26 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-06-12 22:34:12 +0200 |
commit | a08bf7f00ab64fd3ae7376d8dd50ca8a37bee3e3 (patch) | |
tree | ab209fc07b14123c8f9f554b3a9f5f790609209b /cmake | |
parent | 2158e764dc374239fa346656d5a93ac2ffd7af33 (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.cmake | 25 |
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) |