summaryrefslogtreecommitdiffstats
path: root/Source/cmLocalGenerator.cxx
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2020-05-23 16:16:49 (GMT)
committerCraig Scott <craig.scott@crascit.com>2020-12-15 11:26:09 (GMT)
commit0fe9c40494be0e15e6603a245f181bc74d8cf481 (patch)
treebe46d0672e9a1c867eb8cffda5522e1aba6b477b /Source/cmLocalGenerator.cxx
parent82b25be80afc92da045d04a37e121a3fa97392c0 (diff)
downloadCMake-0fe9c40494be0e15e6603a245f181bc74d8cf481.zip
CMake-0fe9c40494be0e15e6603a245f181bc74d8cf481.tar.gz
CMake-0fe9c40494be0e15e6603a245f181bc74d8cf481.tar.bz2
Unity Build: Add option for generating per-file unique id
Fixes: #21477
Diffstat (limited to 'Source/cmLocalGenerator.cxx')
-rw-r--r--Source/cmLocalGenerator.cxx17
1 files changed, 14 insertions, 3 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 9f9d725..be28522 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -2753,8 +2753,15 @@ inline void RegisterUnitySources(cmGeneratorTarget* target, cmSourceFile* sf,
inline void IncludeFileInUnitySources(cmGeneratedFileStream& unity_file,
std::string const& sf_full_path,
cmProp beforeInclude,
- cmProp afterInclude)
+ cmProp afterInclude, cmProp uniqueIdName)
{
+
+ if (uniqueIdName && !uniqueIdName->empty()) {
+ unity_file << "#undef " << *uniqueIdName << "\n"
+ << "#define " << *uniqueIdName << " unity_"
+ << cmSystemTools::ComputeStringMD5(sf_full_path) << "\n";
+ }
+
if (beforeInclude) {
unity_file << *beforeInclude << "\n";
}
@@ -2775,6 +2782,8 @@ std::vector<std::string> AddUnityFilesModeAuto(
batchSize = filtered_sources.size();
}
+ cmProp uniqueIdName = target->GetProperty("UNITY_BUILD_UNIQUE_ID");
+
std::vector<std::string> unity_files;
for (size_t itemsLeft = filtered_sources.size(), chunk, batch = 0;
itemsLeft > 0; itemsLeft -= chunk, ++batch) {
@@ -2798,7 +2807,7 @@ std::vector<std::string> AddUnityFilesModeAuto(
cmSourceFile* sf = filtered_sources[begin];
RegisterUnitySources(target, sf, filename);
IncludeFileInUnitySources(file, sf->ResolveFullPath(), beforeInclude,
- afterInclude);
+ afterInclude, uniqueIdName);
}
}
cmSystemTools::MoveFileIfDifferent(filename_tmp, filename);
@@ -2829,6 +2838,8 @@ std::vector<std::string> AddUnityFilesModeGroup(
}
}
+ cmProp uniqueIdName = target->GetProperty("UNITY_BUILD_UNIQUE_ID");
+
for (auto const& item : explicit_mapping) {
auto const& name = item.first;
std::string filename = cmStrCat(filename_base, "unity_", name,
@@ -2844,7 +2855,7 @@ std::vector<std::string> AddUnityFilesModeGroup(
for (cmSourceFile* sf : item.second) {
RegisterUnitySources(target, sf, filename);
IncludeFileInUnitySources(file, sf->ResolveFullPath(), beforeInclude,
- afterInclude);
+ afterInclude, uniqueIdName);
}
}
cmSystemTools::MoveFileIfDifferent(filename_tmp, filename);