mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-23 07:28:51 -06:00
Merge topic 'unity-object-libraries' into release-3.16
fa93b4a59bUnity: Proper handling of object libraries5ae07e7166Unity: Generic source file handling for all generatorsf742f7ac1fUnity/PCH: Skip more target types when adding automatic sources Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !4110
This commit is contained in:
@@ -1558,13 +1558,24 @@ bool cmGlobalGenerator::AddAutomaticSources()
|
||||
for (cmLocalGenerator* lg : this->LocalGenerators) {
|
||||
lg->CreateEvaluationFileOutputs();
|
||||
for (cmGeneratorTarget* gt : lg->GetGeneratorTargets()) {
|
||||
if (gt->GetType() == cmStateEnums::INTERFACE_LIBRARY) {
|
||||
if (gt->GetType() == cmStateEnums::INTERFACE_LIBRARY ||
|
||||
gt->GetType() == cmStateEnums::UTILITY ||
|
||||
gt->GetType() == cmStateEnums::GLOBAL_TARGET) {
|
||||
continue;
|
||||
}
|
||||
lg->AddUnityBuild(gt);
|
||||
lg->AddPchDependencies(gt);
|
||||
}
|
||||
}
|
||||
// The above transformations may have changed the classification of sources.
|
||||
// Clear the source list and classification cache (KindedSources) of all
|
||||
// targets so that it will be recomputed correctly by the generators later
|
||||
// now that the above transformations are done for all targets.
|
||||
for (cmLocalGenerator* lg : this->LocalGenerators) {
|
||||
for (cmGeneratorTarget* gt : lg->GetGeneratorTargets()) {
|
||||
gt->ClearSourcesCache();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -2307,6 +2307,7 @@ void cmLocalGenerator::AddPchDependencies(cmGeneratorTarget* target)
|
||||
}
|
||||
const std::string buildType = cmSystemTools::UpperCase(config);
|
||||
|
||||
// FIXME: Refactor collection of sources to not evaluate object libraries.
|
||||
std::vector<cmSourceFile*> sources;
|
||||
target->GetSourceFiles(sources, buildType);
|
||||
|
||||
@@ -2485,6 +2486,7 @@ void cmLocalGenerator::AddUnityBuild(cmGeneratorTarget* target)
|
||||
cmStrCat(this->GetCurrentBinaryDirectory(), "/CMakeFiles/",
|
||||
target->GetName(), ".dir/Unity/");
|
||||
|
||||
// FIXME: Refactor collection of sources to not evaluate object libraries.
|
||||
std::vector<cmSourceFile*> sources;
|
||||
target->GetSourceFiles(sources, buildType);
|
||||
|
||||
@@ -2535,12 +2537,7 @@ void cmLocalGenerator::AddUnityBuild(cmGeneratorTarget* target)
|
||||
for (; begin != end; ++begin) {
|
||||
cmSourceFile* sf = filtered_sources[begin];
|
||||
|
||||
// Only in Visual Studio generator we keep the source files
|
||||
// for explicit processing.
|
||||
if (!this->GetGlobalGenerator()->IsMultiConfig() ||
|
||||
this->GetGlobalGenerator()->IsXcode()) {
|
||||
target->AddSourceFileToUnityBatch(sf->ResolveFullPath());
|
||||
}
|
||||
target->AddSourceFileToUnityBatch(sf->ResolveFullPath());
|
||||
sf->SetProperty("UNITY_SOURCE_FILE", filename.c_str());
|
||||
|
||||
if (beforeInclude) {
|
||||
|
||||
@@ -2141,7 +2141,6 @@ void cmVisualStudio10TargetGenerator::WriteAllSources(Elem& e0)
|
||||
this->WriteExtraSource(e1, si.Source);
|
||||
break;
|
||||
case cmGeneratorTarget::SourceKindHeader:
|
||||
case cmGeneratorTarget::SourceKindUnityBatched:
|
||||
this->WriteHeaderSource(e1, si.Source);
|
||||
break;
|
||||
case cmGeneratorTarget::SourceKindIDL:
|
||||
@@ -2153,6 +2152,7 @@ void cmVisualStudio10TargetGenerator::WriteAllSources(Elem& e0)
|
||||
case cmGeneratorTarget::SourceKindModuleDefinition:
|
||||
tool = "None";
|
||||
break;
|
||||
case cmGeneratorTarget::SourceKindUnityBatched:
|
||||
case cmGeneratorTarget::SourceKindObjectSource: {
|
||||
const std::string& lang = si.Source->GetLanguage();
|
||||
if (lang == "C" || lang == "CXX") {
|
||||
|
||||
@@ -4,4 +4,10 @@
|
||||
Call Stack \(most recent call first\):
|
||||
CMakeLists.txt:[0-9]+ \(include\)
|
||||
+
|
||||
CMake Error at OwnSources.cmake:[0-9]+ \(add_library\):
|
||||
The SOURCES of "A" use a generator expression that depends on the SOURCES
|
||||
themselves.
|
||||
Call Stack \(most recent call first\):
|
||||
CMakeLists.txt:[0-9]+ \(include\)
|
||||
+
|
||||
CMake Generate step failed\. Build files cannot be regenerated correctly\.$
|
||||
|
||||
@@ -21,3 +21,4 @@ function(run_test name)
|
||||
endfunction()
|
||||
|
||||
run_test(unitybuild_runtest)
|
||||
run_test(unitybuild_object_library)
|
||||
|
||||
13
Tests/RunCMake/UnityBuild/unitybuild_object_library.cmake
Normal file
13
Tests/RunCMake/UnityBuild/unitybuild_object_library.cmake
Normal file
@@ -0,0 +1,13 @@
|
||||
project(unitybuild_object_library C)
|
||||
|
||||
set(CMAKE_UNITY_BUILD ON) # This tests that the variable works in addition to the property
|
||||
|
||||
add_library(lib OBJECT func.c)
|
||||
|
||||
add_library(other-lib STATIC func.c)
|
||||
|
||||
add_executable(main main.c)
|
||||
target_link_libraries(main PRIVATE lib)
|
||||
|
||||
enable_testing()
|
||||
add_test(NAME main COMMAND main)
|
||||
Reference in New Issue
Block a user