cmGeneratorTarget: Compute consumed object libraries on demand.
Remove up-front object library computation from cmGlobalGenerator. Adjust tests for message coming from the generator expression evaluation.
This commit is contained in:
parent
c355d10865
commit
fdcefe3c42
|
@ -503,57 +503,6 @@ void cmGeneratorTarget::GetSourceFiles(std::vector<cmSourceFile*> &files) const
|
||||||
this->Target->GetSourceFiles(files);
|
this->Target->GetSourceFiles(files);
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
|
||||||
void cmGeneratorTarget::LookupObjectLibraries()
|
|
||||||
{
|
|
||||||
std::vector<std::string> const& objLibs =
|
|
||||||
this->Target->GetObjectLibraries();
|
|
||||||
for(std::vector<std::string>::const_iterator oli = objLibs.begin();
|
|
||||||
oli != objLibs.end(); ++oli)
|
|
||||||
{
|
|
||||||
std::string const& objLibName = *oli;
|
|
||||||
if(cmTarget* objLib = this->Makefile->FindTargetToUse(objLibName))
|
|
||||||
{
|
|
||||||
if(objLib->GetType() == cmTarget::OBJECT_LIBRARY)
|
|
||||||
{
|
|
||||||
if(this->Target->GetType() != cmTarget::EXECUTABLE &&
|
|
||||||
this->Target->GetType() != cmTarget::STATIC_LIBRARY &&
|
|
||||||
this->Target->GetType() != cmTarget::SHARED_LIBRARY &&
|
|
||||||
this->Target->GetType() != cmTarget::MODULE_LIBRARY)
|
|
||||||
{
|
|
||||||
this->GlobalGenerator->GetCMakeInstance()
|
|
||||||
->IssueMessage(cmake::FATAL_ERROR,
|
|
||||||
"Only executables and non-OBJECT libraries may "
|
|
||||||
"reference target objects.",
|
|
||||||
this->Target->GetBacktrace());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this->ObjectLibraries.push_back(objLib);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cmOStringStream e;
|
|
||||||
e << "Objects of target \"" << objLibName
|
|
||||||
<< "\" referenced but is not an OBJECT library.";
|
|
||||||
this->GlobalGenerator->GetCMakeInstance()
|
|
||||||
->IssueMessage(cmake::FATAL_ERROR, e.str(),
|
|
||||||
this->Target->GetBacktrace());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
cmOStringStream e;
|
|
||||||
e << "Objects of target \"" << objLibName
|
|
||||||
<< "\" referenced but no such target exists.";
|
|
||||||
this->GlobalGenerator->GetCMakeInstance()
|
|
||||||
->IssueMessage(cmake::FATAL_ERROR, e.str(),
|
|
||||||
this->Target->GetBacktrace());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
std::string cmGeneratorTarget::GetModuleDefinitionFile() const
|
std::string cmGeneratorTarget::GetModuleDefinitionFile() const
|
||||||
{
|
{
|
||||||
|
@ -566,9 +515,26 @@ std::string cmGeneratorTarget::GetModuleDefinitionFile() const
|
||||||
void
|
void
|
||||||
cmGeneratorTarget::UseObjectLibraries(std::vector<std::string>& objs) const
|
cmGeneratorTarget::UseObjectLibraries(std::vector<std::string>& objs) const
|
||||||
{
|
{
|
||||||
|
std::vector<cmSourceFile const*> objectFiles;
|
||||||
|
this->GetExternalObjects(objectFiles);
|
||||||
|
std::vector<cmTarget*> objectLibraries;
|
||||||
|
std::set<cmTarget*> emitted;
|
||||||
|
for(std::vector<cmSourceFile const*>::const_iterator
|
||||||
|
it = objectFiles.begin(); it != objectFiles.end(); ++it)
|
||||||
|
{
|
||||||
|
std::string objLib = (*it)->GetObjectLibrary();
|
||||||
|
if (cmTarget* tgt = this->Makefile->FindTargetToUse(objLib))
|
||||||
|
{
|
||||||
|
if (emitted.insert(tgt).second)
|
||||||
|
{
|
||||||
|
objectLibraries.push_back(tgt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for(std::vector<cmTarget*>::const_iterator
|
for(std::vector<cmTarget*>::const_iterator
|
||||||
ti = this->ObjectLibraries.begin();
|
ti = objectLibraries.begin();
|
||||||
ti != this->ObjectLibraries.end(); ++ti)
|
ti != objectLibraries.end(); ++ti)
|
||||||
{
|
{
|
||||||
cmTarget* objLib = *ti;
|
cmTarget* objLib = *ti;
|
||||||
cmGeneratorTarget* ogt =
|
cmGeneratorTarget* ogt =
|
||||||
|
|
|
@ -84,8 +84,6 @@ public:
|
||||||
*/
|
*/
|
||||||
void TraceDependencies();
|
void TraceDependencies();
|
||||||
|
|
||||||
void LookupObjectLibraries();
|
|
||||||
|
|
||||||
/** Get sources that must be built before the given source. */
|
/** Get sources that must be built before the given source. */
|
||||||
std::vector<cmSourceFile*> const*
|
std::vector<cmSourceFile*> const*
|
||||||
GetSourceDepends(cmSourceFile const* sf) const;
|
GetSourceDepends(cmSourceFile const* sf) const;
|
||||||
|
@ -127,7 +125,6 @@ private:
|
||||||
|
|
||||||
std::map<cmSourceFile const*, std::string> Objects;
|
std::map<cmSourceFile const*, std::string> Objects;
|
||||||
std::set<cmSourceFile const*> ExplicitObjectName;
|
std::set<cmSourceFile const*> ExplicitObjectName;
|
||||||
std::vector<cmTarget*> ObjectLibraries;
|
|
||||||
mutable std::map<std::string, std::vector<std::string> > SystemIncludesCache;
|
mutable std::map<std::string, std::vector<std::string> > SystemIncludesCache;
|
||||||
|
|
||||||
void ConstructSourceFileFlags() const;
|
void ConstructSourceFileFlags() const;
|
||||||
|
|
|
@ -1457,7 +1457,6 @@ void cmGlobalGenerator::ComputeGeneratorTargetObjects()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
cmGeneratorTarget* gt = ti->second;
|
cmGeneratorTarget* gt = ti->second;
|
||||||
gt->LookupObjectLibraries();
|
|
||||||
this->ComputeTargetObjects(gt);
|
this->ComputeTargetObjects(gt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
CMake Error at BadSourceExpression2.cmake:1 \(add_library\):
|
CMake Error at BadSourceExpression2.cmake:1 \(add_library\):
|
||||||
|
Error evaluating generator expression:
|
||||||
|
|
||||||
|
\$<TARGET_OBJECTS:DoesNotExist>
|
||||||
|
|
||||||
Objects of target "DoesNotExist" referenced but no such target exists.
|
Objects of target "DoesNotExist" referenced but no such target exists.
|
||||||
Call Stack \(most recent call first\):
|
Call Stack \(most recent call first\):
|
||||||
CMakeLists.txt:3 \(include\)
|
CMakeLists.txt:3 \(include\)
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
CMake Error at BadSourceExpression3.cmake:2 \(add_library\):
|
CMake Error at BadSourceExpression3.cmake:2 \(add_library\):
|
||||||
|
Error evaluating generator expression:
|
||||||
|
|
||||||
|
\$<TARGET_OBJECTS:NotObjLib>
|
||||||
|
|
||||||
Objects of target "NotObjLib" referenced but is not an OBJECT library.
|
Objects of target "NotObjLib" referenced but is not an OBJECT library.
|
||||||
Call Stack \(most recent call first\):
|
Call Stack \(most recent call first\):
|
||||||
CMakeLists.txt:3 \(include\)
|
CMakeLists.txt:3 \(include\)
|
||||||
|
|
Loading…
Reference in New Issue