diff options
author | Brad King <brad.king@kitware.com> | 2009-10-02 17:52:13 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-10-02 17:52:13 (GMT) |
commit | c513962701dd6fbab8113ae104deb0eaa76a16e1 (patch) | |
tree | 2dd039d951e1b24c2d8318b275c7033e22f9a851 /Source | |
parent | 1e482435912f44e05b5e67f19b1bc14ff58a3169 (diff) | |
download | CMake-c513962701dd6fbab8113ae104deb0eaa76a16e1.zip CMake-c513962701dd6fbab8113ae104deb0eaa76a16e1.tar.gz CMake-c513962701dd6fbab8113ae104deb0eaa76a16e1.tar.bz2 |
Create INTERPROCEDURAL_OPTIMIZATION build feature
This commit creates target and directory properties to enable the Intel
interprocedural optimization support on Linux. Enabling it adds the
compiler option '-ipo' and uses 'xiar' to create archives.
See issue #9615.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmMakefile.cxx | 13 | ||||
-rw-r--r-- | Source/cmMakefileLibraryTargetGenerator.cxx | 6 | ||||
-rw-r--r-- | Source/cmMakefileTargetGenerator.cxx | 5 | ||||
-rw-r--r-- | Source/cmTarget.cxx | 13 |
4 files changed, 37 insertions, 0 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index afe5324..ce425d0 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -3555,6 +3555,19 @@ void cmMakefile::DefineProperties(cmake *cm) "be followed. See the include_regular_expression command.", false); cm->DefineProperty + ("INTERPROCEDURAL_OPTIMIZATION", cmProperty::DIRECTORY, + "Enable interprocedural optimization for targets in a directory.", + "If set to true, enables interprocedural optimizations " + "if they are known to be supported by the compiler."); + + cm->DefineProperty + ("INTERPROCEDURAL_OPTIMIZATION_<CONFIG>", cmProperty::DIRECTORY, + "Per-configuration interprocedural optimization for a directory.", + "This is a per-configuration version of INTERPROCEDURAL_OPTIMIZATION. " + "If set, this property overrides the generic property " + "for the named configuration."); + + cm->DefineProperty ("VARIABLES", cmProperty::DIRECTORY, "List of variables defined in the current directory.", "This read-only property specifies the list of CMake variables " diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx index 24b037f..4070a3b 100644 --- a/Source/cmMakefileLibraryTargetGenerator.cxx +++ b/Source/cmMakefileLibraryTargetGenerator.cxx @@ -113,6 +113,12 @@ void cmMakefileLibraryTargetGenerator::WriteStaticLibraryRules() } linkRuleVar += "_CREATE_STATIC_LIBRARY"; + if(this->GetFeatureAsBool("INTERPROCEDURAL_OPTIMIZATION") && + this->Makefile->GetDefinition((linkRuleVar+"_IPO").c_str())) + { + linkRuleVar += "_IPO"; + } + std::string extraFlags; this->LocalGenerator->AppendFlags (extraFlags,this->Target->GetProperty("STATIC_LIBRARY_FLAGS")); diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index e353c3d..7ccccee 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -1780,4 +1780,9 @@ void cmMakefileTargetGenerator::AddFeatureFlags( { // Add language-specific flags. this->LocalGenerator->AddLanguageFlags(flags, lang, this->ConfigName); + + if(this->GetFeatureAsBool("INTERPROCEDURAL_OPTIMIZATION")) + { + this->LocalGenerator->AppendFeatureOptions(flags, lang, "IPO"); + } } diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 9233a1d..63a1ae5 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -421,6 +421,19 @@ void cmTarget::DefineProperties(cmake *cm) "created."); cm->DefineProperty + ("INTERPROCEDURAL_OPTIMIZATION", cmProperty::TARGET, + "Enable interprocedural optimization for a target.", + "If set to true, enables interprocedural optimizations " + "if they are known to be supported by the compiler."); + + cm->DefineProperty + ("INTERPROCEDURAL_OPTIMIZATION_<CONFIG>", cmProperty::TARGET, + "Per-configuration interprocedural optimization for a target.", + "This is a per-configuration version of INTERPROCEDURAL_OPTIMIZATION. " + "If set, this property overrides the generic property " + "for the named configuration."); + + cm->DefineProperty ("LABELS", cmProperty::TARGET, "Specify a list of text labels associated with a target.", "Target label semantics are currently unspecified."); |