cmTarget: Drop internal cache of link interface usage requirements
These use a huge amount of memory that accumulates as generation proceeds. On the Unix Makefiles generator, only GetIncludeDirectories and GetCompileDefinitions are even called more than once per target (once for build files, once for dependency scanning preprocessor info). Another approach will be needed to avoid duplicate computation in the cases where it does occur.
This commit is contained in:
parent
23ec3738a0
commit
a4d58722a4
|
@ -213,23 +213,6 @@ public:
|
|||
void AddInterfaceEntries(
|
||||
cmTarget const* thisTarget, std::string const& config,
|
||||
std::string const& prop, std::vector<TargetPropertyEntry*>& entries);
|
||||
|
||||
std::map<std::string, std::vector<TargetPropertyEntry*> >
|
||||
CachedLinkInterfaceIncludeDirectoriesEntries;
|
||||
std::map<std::string, std::vector<TargetPropertyEntry*> >
|
||||
CachedLinkInterfaceCompileOptionsEntries;
|
||||
std::map<std::string, std::vector<TargetPropertyEntry*> >
|
||||
CachedLinkInterfaceCompileDefinitionsEntries;
|
||||
std::map<std::string, std::vector<TargetPropertyEntry*> >
|
||||
CachedLinkInterfaceSourcesEntries;
|
||||
std::map<std::string, std::vector<TargetPropertyEntry*> >
|
||||
CachedLinkInterfaceCompileFeaturesEntries;
|
||||
|
||||
std::map<std::string, bool> CacheLinkInterfaceIncludeDirectoriesDone;
|
||||
std::map<std::string, bool> CacheLinkInterfaceCompileDefinitionsDone;
|
||||
std::map<std::string, bool> CacheLinkInterfaceCompileOptionsDone;
|
||||
std::map<std::string, bool> CacheLinkInterfaceSourcesDone;
|
||||
std::map<std::string, bool> CacheLinkInterfaceCompileFeaturesDone;
|
||||
};
|
||||
|
||||
cmLinkImplItem cmTargetInternals::TargetPropertyEntry::NoLinkImplItem;
|
||||
|
@ -248,27 +231,9 @@ static void deleteAndClear(
|
|||
entries.clear();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static void deleteAndClear(
|
||||
std::map<std::string,
|
||||
std::vector<cmTargetInternals::TargetPropertyEntry*> > &entries)
|
||||
{
|
||||
for (std::map<std::string,
|
||||
std::vector<cmTargetInternals::TargetPropertyEntry*> >::iterator
|
||||
it = entries.begin(), end = entries.end(); it != end; ++it)
|
||||
{
|
||||
deleteAndClear(it->second);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
cmTargetInternals::~cmTargetInternals()
|
||||
{
|
||||
deleteAndClear(this->CachedLinkInterfaceIncludeDirectoriesEntries);
|
||||
deleteAndClear(this->CachedLinkInterfaceCompileOptionsEntries);
|
||||
deleteAndClear(this->CachedLinkInterfaceCompileFeaturesEntries);
|
||||
deleteAndClear(this->CachedLinkInterfaceCompileDefinitionsEntries);
|
||||
deleteAndClear(this->CachedLinkInterfaceSourcesEntries);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -810,16 +775,16 @@ void cmTarget::GetSourceFiles(std::vector<std::string> &files,
|
|||
config,
|
||||
debugSources);
|
||||
|
||||
if (!this->Internal->CacheLinkInterfaceSourcesDone[config])
|
||||
{
|
||||
std::vector<cmTargetInternals::TargetPropertyEntry*>
|
||||
linkInterfaceSourcesEntries;
|
||||
|
||||
this->Internal->AddInterfaceEntries(
|
||||
this, config, "INTERFACE_SOURCES",
|
||||
this->Internal->CachedLinkInterfaceSourcesEntries[config]);
|
||||
}
|
||||
linkInterfaceSourcesEntries);
|
||||
|
||||
std::vector<std::string>::size_type numFilesBefore = files.size();
|
||||
bool contextDependentInterfaceSources = processSources(this,
|
||||
this->Internal->CachedLinkInterfaceSourcesEntries[config],
|
||||
linkInterfaceSourcesEntries,
|
||||
files,
|
||||
uniqueSrcs,
|
||||
&dagChecker,
|
||||
|
@ -832,14 +797,7 @@ void cmTarget::GetSourceFiles(std::vector<std::string> &files,
|
|||
this->LinkImplementationLanguageIsContextDependent = false;
|
||||
}
|
||||
|
||||
if (!this->Makefile->IsGeneratingBuildSystem())
|
||||
{
|
||||
deleteAndClear(this->Internal->CachedLinkInterfaceSourcesEntries);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->Internal->CacheLinkInterfaceSourcesDone[config] = true;
|
||||
}
|
||||
deleteAndClear(linkInterfaceSourcesEntries);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -2213,11 +2171,11 @@ cmTarget::GetIncludeDirectories(const std::string& config) const
|
|||
config,
|
||||
debugIncludes);
|
||||
|
||||
if (!this->Internal->CacheLinkInterfaceIncludeDirectoriesDone[config])
|
||||
{
|
||||
std::vector<cmTargetInternals::TargetPropertyEntry*>
|
||||
linkInterfaceIncludeDirectoriesEntries;
|
||||
this->Internal->AddInterfaceEntries(
|
||||
this, config, "INTERFACE_INCLUDE_DIRECTORIES",
|
||||
this->Internal->CachedLinkInterfaceIncludeDirectoriesEntries[config]);
|
||||
linkInterfaceIncludeDirectoriesEntries);
|
||||
|
||||
if(this->Makefile->IsOn("APPLE"))
|
||||
{
|
||||
|
@ -2240,31 +2198,20 @@ cmTarget::GetIncludeDirectories(const std::string& config) const
|
|||
cmGeneratorExpression ge;
|
||||
cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
|
||||
ge.Parse(libDir.c_str());
|
||||
this->Internal
|
||||
->CachedLinkInterfaceIncludeDirectoriesEntries[config]
|
||||
linkInterfaceIncludeDirectoriesEntries
|
||||
.push_back(new cmTargetInternals::TargetPropertyEntry(cge));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
processIncludeDirectories(this,
|
||||
this->Internal->CachedLinkInterfaceIncludeDirectoriesEntries[config],
|
||||
linkInterfaceIncludeDirectoriesEntries,
|
||||
includes,
|
||||
uniqueIncludes,
|
||||
&dagChecker,
|
||||
config,
|
||||
debugIncludes);
|
||||
|
||||
if (!this->Makefile->IsGeneratingBuildSystem())
|
||||
{
|
||||
deleteAndClear(
|
||||
this->Internal->CachedLinkInterfaceIncludeDirectoriesEntries);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->Internal->CacheLinkInterfaceIncludeDirectoriesDone[config]
|
||||
= true;
|
||||
}
|
||||
deleteAndClear(linkInterfaceIncludeDirectoriesEntries);
|
||||
|
||||
return includes;
|
||||
}
|
||||
|
@ -2405,29 +2352,22 @@ void cmTarget::GetCompileOptions(std::vector<std::string> &result,
|
|||
config,
|
||||
debugOptions);
|
||||
|
||||
if (!this->Internal->CacheLinkInterfaceCompileOptionsDone[config])
|
||||
{
|
||||
std::vector<cmTargetInternals::TargetPropertyEntry*>
|
||||
linkInterfaceCompileOptionsEntries;
|
||||
|
||||
this->Internal->AddInterfaceEntries(
|
||||
this, config, "INTERFACE_COMPILE_OPTIONS",
|
||||
this->Internal->CachedLinkInterfaceCompileOptionsEntries[config]);
|
||||
}
|
||||
linkInterfaceCompileOptionsEntries);
|
||||
|
||||
processCompileOptions(this,
|
||||
this->Internal->CachedLinkInterfaceCompileOptionsEntries[config],
|
||||
linkInterfaceCompileOptionsEntries,
|
||||
result,
|
||||
uniqueOptions,
|
||||
&dagChecker,
|
||||
config,
|
||||
debugOptions);
|
||||
|
||||
if (!this->Makefile->IsGeneratingBuildSystem())
|
||||
{
|
||||
deleteAndClear(this->Internal->CachedLinkInterfaceCompileOptionsEntries);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->Internal->CacheLinkInterfaceCompileOptionsDone[config] = true;
|
||||
}
|
||||
deleteAndClear(linkInterfaceCompileOptionsEntries);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -2479,11 +2419,11 @@ void cmTarget::GetCompileDefinitions(std::vector<std::string> &list,
|
|||
config,
|
||||
debugDefines);
|
||||
|
||||
if (!this->Internal->CacheLinkInterfaceCompileDefinitionsDone[config])
|
||||
{
|
||||
std::vector<cmTargetInternals::TargetPropertyEntry*>
|
||||
linkInterfaceCompileDefinitionsEntries;
|
||||
this->Internal->AddInterfaceEntries(
|
||||
this, config, "INTERFACE_COMPILE_DEFINITIONS",
|
||||
this->Internal->CachedLinkInterfaceCompileDefinitionsEntries[config]);
|
||||
linkInterfaceCompileDefinitionsEntries);
|
||||
if (!config.empty())
|
||||
{
|
||||
std::string configPropName = "COMPILE_DEFINITIONS_"
|
||||
|
@ -2506,8 +2446,7 @@ void cmTarget::GetCompileDefinitions(std::vector<std::string> &list,
|
|||
cmGeneratorExpression ge;
|
||||
cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
|
||||
ge.Parse(configProp);
|
||||
this->Internal
|
||||
->CachedLinkInterfaceCompileDefinitionsEntries[config]
|
||||
linkInterfaceCompileDefinitionsEntries
|
||||
.push_back(new cmTargetInternals::TargetPropertyEntry(cge));
|
||||
}
|
||||
break;
|
||||
|
@ -2519,26 +2458,15 @@ void cmTarget::GetCompileDefinitions(std::vector<std::string> &list,
|
|||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
processCompileDefinitions(this,
|
||||
this->Internal->CachedLinkInterfaceCompileDefinitionsEntries[config],
|
||||
linkInterfaceCompileDefinitionsEntries,
|
||||
list,
|
||||
uniqueOptions,
|
||||
&dagChecker,
|
||||
config,
|
||||
debugDefines);
|
||||
|
||||
if (!this->Makefile->IsGeneratingBuildSystem())
|
||||
{
|
||||
deleteAndClear(this->Internal
|
||||
->CachedLinkInterfaceCompileDefinitionsEntries);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->Internal->CacheLinkInterfaceCompileDefinitionsDone[config]
|
||||
= true;
|
||||
}
|
||||
deleteAndClear(linkInterfaceCompileDefinitionsEntries);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -2590,29 +2518,21 @@ void cmTarget::GetCompileFeatures(std::vector<std::string> &result,
|
|||
config,
|
||||
debugFeatures);
|
||||
|
||||
if (!this->Internal->CacheLinkInterfaceCompileFeaturesDone[config])
|
||||
{
|
||||
std::vector<cmTargetInternals::TargetPropertyEntry*>
|
||||
linkInterfaceCompileFeaturesEntries;
|
||||
this->Internal->AddInterfaceEntries(
|
||||
this, config, "INTERFACE_COMPILE_FEATURES",
|
||||
this->Internal->CachedLinkInterfaceCompileFeaturesEntries[config]);
|
||||
}
|
||||
linkInterfaceCompileFeaturesEntries);
|
||||
|
||||
processCompileFeatures(this,
|
||||
this->Internal->CachedLinkInterfaceCompileFeaturesEntries[config],
|
||||
linkInterfaceCompileFeaturesEntries,
|
||||
result,
|
||||
uniqueFeatures,
|
||||
&dagChecker,
|
||||
config,
|
||||
debugFeatures);
|
||||
|
||||
if (!this->Makefile->IsGeneratingBuildSystem())
|
||||
{
|
||||
deleteAndClear(this->Internal->CachedLinkInterfaceCompileFeaturesEntries);
|
||||
}
|
||||
else
|
||||
{
|
||||
this->Internal->CacheLinkInterfaceCompileFeaturesDone[config] = true;
|
||||
}
|
||||
deleteAndClear(linkInterfaceCompileFeaturesEntries);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in New Issue