diff options
author | Alexey Edelev <alexey.edelev@qt.io> | 2021-06-15 13:09:57 +0200 |
---|---|---|
committer | Alexey Edelev <alexey.edelev@qt.io> | 2021-06-18 23:18:26 +0200 |
commit | 3329212815777e33dfb4697b748d10927d73f44c (patch) | |
tree | 0140f48a9c145d22f7c080633f70a70930123b7c /cmake/QtPublicTargetHelpers.cmake | |
parent | df316963213e765de5b94469622df48b0c9a9e6e (diff) |
Move the linking logic of the object libraries to a common function
The linking logic of object libraries should be reusable outside of the
resource context. This introduces a
__qt_internal_propagate_object_library function that prepares all the
necessary genexes to link and propagate the object library to the
end-point executable.
Rename resource object finalizer API to make the naming more generic
to object libraries of any kind.
Amends 5fb99e3860eb43f4bacacec7f4a4626cb0159b14
Pick-to: 6.2
Task-number: QTBUG-93002
Task-number: QTBUG-94528
Change-Id: I69d0f34c0dadbd67232de91035aaa53af93d1fa1
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'cmake/QtPublicTargetHelpers.cmake')
-rw-r--r-- | cmake/QtPublicTargetHelpers.cmake | 78 |
1 files changed, 40 insertions, 38 deletions
diff --git a/cmake/QtPublicTargetHelpers.cmake b/cmake/QtPublicTargetHelpers.cmake index be76efd835..94bda88d66 100644 --- a/cmake/QtPublicTargetHelpers.cmake +++ b/cmake/QtPublicTargetHelpers.cmake @@ -87,8 +87,8 @@ function(__qt_internal_check_link_order_matters) endif() endfunction() -function(__qt_internal_process_dependency_resource_objects target) - # The CMake versions greater than 3.21 take care about the resource object files order in a +function(__qt_internal_process_dependency_object_libraries target) + # The CMake versions greater than 3.21 take care about the order of object files in a # linker line, it's expected that all object files are located at the beginning of the linker # line. # So circular dependencies between static libraries and object files are resolved and no need @@ -98,68 +98,68 @@ function(__qt_internal_process_dependency_resource_objects target) if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.21) return() endif() - get_target_property(processed ${target} _qt_resource_object_finalizers_processed) + get_target_property(processed ${target} _qt_object_libraries_finalizer_processed) if(processed) return() endif() - set_target_properties(${target} PROPERTIES _qt_resource_object_finalizers_processed TRUE) + set_target_properties(${target} PROPERTIES _qt_object_libraries_finalizer_processed TRUE) __qt_internal_check_finalizer_mode(${target} use_finalizer_mode - resource_objects + object_libraries ) if(NOT use_finalizer_mode) return() endif() - __qt_internal_collect_dependency_resource_objects(${target} resource_objects) - target_sources(${target} PRIVATE "${resource_objects}") + __qt_internal_collect_dependency_object_libraries(${target} objects) + target_sources(${target} PRIVATE "${objects}") endfunction() -function(__qt_internal_collect_dependency_resource_objects target out_var) - set_property(GLOBAL PROPERTY _qt_resource_processed_targets "") +function(__qt_internal_collect_dependency_object_libraries target out_var) + set_property(GLOBAL PROPERTY _qt_processed_object_libraries "") - __qt_internal_collect_resource_objects_recursively(resource_targets ${target} ${target}) + __qt_internal_collect_object_libraries_recursively(object_libraries ${target} ${target}) - # Collect resource objects of plugins and plugin dependencies. + # Collect object libraries of plugins and plugin dependencies. __qt_internal_collect_plugin_targets_from_dependencies(${target} plugin_targets) - __qt_internal_collect_dependency_plugin_resource_objects(${target} + __qt_internal_collect_dependency_plugin_object_libraries(${target} "${plugin_targets}" - plugin_resource_objects + plugin_objects ) - set_property(GLOBAL PROPERTY _qt_resource_processed_targets "") + set_property(GLOBAL PROPERTY _qt_processed_object_libraries "") - list(REMOVE_DUPLICATES resource_targets) - set(resource_objects "") - foreach(dep IN LISTS resource_targets) - list(PREPEND resource_objects "$<TARGET_OBJECTS:${dep}>") + list(REMOVE_DUPLICATES object_libraries) + set(objects "") + foreach(dep IN LISTS object_libraries) + list(PREPEND objects "$<TARGET_OBJECTS:${dep}>") endforeach() - set(${out_var} "${plugin_resource_objects};${resource_objects}" PARENT_SCOPE) + set(${out_var} "${plugin_objects};${objects}" PARENT_SCOPE) endfunction() -function(__qt_internal_collect_dependency_plugin_resource_objects target plugin_targets out_var) - set(plugin_resource_objects "") +function(__qt_internal_collect_dependency_plugin_object_libraries target plugin_targets out_var) + set(plugin_objects "") foreach(plugin_target IN LISTS plugin_targets) - __qt_internal_collect_resource_objects_recursively(plugin_resource_targets + __qt_internal_collect_object_libraries_recursively(plugin_object_libraries "${QT_CMAKE_EXPORT_NAMESPACE}::${plugin_target}" ${target} ) __qt_internal_get_static_plugin_condition_genex("${plugin_target}" plugin_condition) - foreach(plugin_resource_target IN LISTS plugin_resource_targets) - list(APPEND plugin_resource_objects - "$<${plugin_condition}:$<TARGET_OBJECTS:${plugin_resource_target}>>" + foreach(plugin_object_library IN LISTS plugin_object_libraries) + list(APPEND plugin_objects + "$<${plugin_condition}:$<TARGET_OBJECTS:${plugin_object_library}>>" ) endforeach() endforeach() - set(${out_var} "${plugin_resource_objects}" PARENT_SCOPE) + set(${out_var} "${plugin_objects}" PARENT_SCOPE) endfunction() -function(__qt_internal_collect_resource_objects_recursively out_var target initial_target) - get_property(resource_processed_targets GLOBAL PROPERTY _qt_resource_processed_targets) +function(__qt_internal_collect_object_libraries_recursively out_var target initial_target) + get_property(processed_object_libraries GLOBAL PROPERTY _qt_processed_object_libraries) set(interface_libs "") set(libs "") @@ -171,7 +171,7 @@ function(__qt_internal_collect_resource_objects_recursively out_var target initi get_target_property(libs ${target} LINK_LIBRARIES) endif() - set(resource_targets "") + set(object_libraries "") foreach(lib IN LISTS libs interface_libs) if(TARGET ${lib}) get_target_property(aliased_target ${lib} ALIASED_TARGET) @@ -179,26 +179,28 @@ function(__qt_internal_collect_resource_objects_recursively out_var target initi set(lib ${aliased_target}) endif() - if(${lib} IN_LIST resource_processed_targets) + if(${lib} IN_LIST processed_object_libraries) continue() else() - list(APPEND resource_processed_targets ${lib}) - set_property(GLOBAL APPEND PROPERTY _qt_resource_processed_targets ${lib}) + list(APPEND processed_object_libraries ${lib}) + set_property(GLOBAL APPEND PROPERTY _qt_processed_object_libraries ${lib}) endif() - get_target_property(is_qt_resource ${lib} _is_qt_resource_target) - if(is_qt_resource) - list(APPEND resource_targets ${lib}) + get_target_property(is_qt_propagated_object_library ${lib} + _is_qt_propagated_object_library + ) + if(is_qt_propagated_object_library) + list(APPEND object_libraries ${lib}) else() - __qt_internal_collect_resource_objects_recursively(next_level_resources + __qt_internal_collect_object_libraries_recursively(next_level_object_libraries ${lib} ${initial_target} ) - list(APPEND resource_targets ${next_level_resources}) + list(APPEND object_libraries ${next_level_object_libraries}) endif() endif() endforeach() - set(${out_var} "${resource_targets}" PARENT_SCOPE) + set(${out_var} "${object_libraries}" PARENT_SCOPE) endfunction() function(__qt_internal_promote_target_to_global target) |