diff options
author | Niels Dekker <N.Dekker@lumc.nl> | 2018-09-09 21:04:59 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2018-09-17 14:53:10 (GMT) |
commit | 567fabe88e97c3e39503fd353b484648bcf1cbb2 (patch) | |
tree | 7fb0dd095df92c5425896f900a78e46c6ed75633 /Source/cmVisualStudio10TargetGenerator.cxx | |
parent | ccb6dab9f19bd19968dc2b94806dfc4cf22cdd79 (diff) | |
download | CMake-567fabe88e97c3e39503fd353b484648bcf1cbb2.zip CMake-567fabe88e97c3e39503fd353b484648bcf1cbb2.tar.gz CMake-567fabe88e97c3e39503fd353b484648bcf1cbb2.tar.bz2 |
IPO: INTERPROCEDURAL_OPTIMIZATION (LTCG) for Visual Studio
Add IPO support for Visual Studio (which is referred to by VS as
"Link Time Code Generation" and "Whole Program Optimization"), for
VS version >= 10. This allows CMake/VS users to enable IPO by setting
property `INTERPROCEDURAL_OPTIMIZATION`.
Fixes: #16748
Diffstat (limited to 'Source/cmVisualStudio10TargetGenerator.cxx')
-rw-r--r-- | Source/cmVisualStudio10TargetGenerator.cxx | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 9e74335..c0b0435 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -1122,6 +1122,9 @@ void cmVisualStudio10TargetGenerator::WriteMSToolConfigurationValues( this->GeneratorTarget->GetPropertyAsBool("VS_WINRT_EXTENSIONS")) { e1.Element("WindowsAppContainer", "true"); } + if (this->IPOEnabledConfigurations.count(config) > 0) { + e1.Element("WholeProgramOptimization", "true"); + } } void cmVisualStudio10TargetGenerator::WriteMSToolConfigurationValuesManaged( @@ -2485,8 +2488,10 @@ bool cmVisualStudio10TargetGenerator::ComputeClOptions( clOptions.AddFlag("CompileAs", "CompileAsCpp"); } - // Check IPO related warning/error. - this->GeneratorTarget->IsIPOEnabled(linkLanguage, configName); + // Put the IPO enabled configurations into a set. + if (this->GeneratorTarget->IsIPOEnabled(linkLanguage, configName)) { + this->IPOEnabledConfigurations.insert(configName); + } // Get preprocessor definitions for this directory. std::string defineFlags = this->Makefile->GetDefineFlags(); |