qtbase/cmake/QtUnityBuildHelpers.cmake
Alexandru Croitor dcaab5eb8d CMake: Fix unity build for qtgraphs
qtgraphs defines a target in one directory, and then calls
qt_internal_extend_target with NO_UNITY_BUILD_SOURCES in another
subdirectory scope. That in turn calls set_source_files_properties
but only for the latter subdirectory, and not the main target
directory.

Because CMake has per-directory-scope source file properties, the
'no unity sources' option was effectively ignored.

When using CMake 3.18, make sure to specify the TARGET_DIRECTORY
option so that the source file properties are added to the scope of
the defining target.

Pick-to: 6.6 6.5
Change-Id: I4190d4073a2955aa7053b5faaaa57f683bc768a2
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
(cherry picked from commit 081e50d768114aeeb8f0d284989986d4debc6ec3)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
2024-01-23 23:17:36 +00:00

25 lines
1.0 KiB
CMake

# Copyright (C) 2023 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
# Check whether no unity build is requested where it is disabled by default.
function(_qt_internal_validate_no_unity_build prefix)
if(${prefix}_NO_UNITY_BUILD OR ${prefix}_NO_UNITY_BUILD_SOURCES)
message(WARNING
"Unity build is disabled by default for this target, and its sources. "
"You may remove the NO_UNITY_BUILD and/or NO_UNITY_BUILD_SOURCES arguments.")
endif()
endfunction()
function(qt_update_ignore_unity_build_sources target sources)
if(sources)
# We need to add the TARGET_DIRECTORY scope for targets that have qt_internal_extend_target
# calls in different subdirectories, like in qtgraphs.
set(scope_args)
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.18")
set(scope_args TARGET_DIRECTORY ${target})
endif()
set_source_files_properties(${sources} ${scope_args}
PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
endif()
endfunction()