| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- /*============================================================================
- CMake - Cross Platform Makefile Generator
- Copyright 2000-2015 Kitware, Inc., Insight Software Consortium
- Distributed under the OSI-approved BSD License (the "License");
- see accompanying file Copyright.txt for details.
- This software is distributed WITHOUT ANY WARRANTY; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the License for more information.
- ============================================================================*/
- #include "cmCommonTargetGenerator.h"
- #include "cmGeneratorTarget.h"
- #include "cmGlobalCommonGenerator.h"
- #include "cmLocalCommonGenerator.h"
- #include "cmMakefile.h"
- #include "cmTarget.h"
- cmCommonTargetGenerator::cmCommonTargetGenerator(cmGeneratorTarget* gt)
- : GeneratorTarget(gt)
- , Target(gt->Target)
- , Makefile(gt->Makefile)
- , LocalGenerator(static_cast<cmLocalCommonGenerator*>(gt->LocalGenerator))
- , GlobalGenerator(static_cast<cmGlobalCommonGenerator*>(
- gt->LocalGenerator->GetGlobalGenerator()))
- , ConfigName(LocalGenerator->GetConfigName())
- , ModuleDefinitionFile(GeneratorTarget->GetModuleDefinitionFile(ConfigName))
- {
- }
- cmCommonTargetGenerator::~cmCommonTargetGenerator()
- {
- }
- std::string const& cmCommonTargetGenerator::GetConfigName() const
- {
- return this->ConfigName;
- }
- //----------------------------------------------------------------------------
- const char* cmCommonTargetGenerator::GetFeature(const std::string& feature)
- {
- return this->GeneratorTarget->GetFeature(feature, this->ConfigName);
- }
- //----------------------------------------------------------------------------
- bool cmCommonTargetGenerator::GetFeatureAsBool(const std::string& feature)
- {
- return this->GeneratorTarget->GetFeatureAsBool(feature, this->ConfigName);
- }
- //----------------------------------------------------------------------------
- void cmCommonTargetGenerator::AddFeatureFlags(
- std::string& flags, const std::string& lang
- )
- {
- // Add language-specific flags.
- this->LocalGenerator->AddLanguageFlags(flags, lang, this->ConfigName);
- if(this->GetFeatureAsBool("INTERPROCEDURAL_OPTIMIZATION"))
- {
- this->LocalGenerator->AppendFeatureOptions(flags, lang, "IPO");
- }
- }
- //----------------------------------------------------------------------------
- void cmCommonTargetGenerator::AddModuleDefinitionFlag(std::string& flags)
- {
- if(this->ModuleDefinitionFile.empty())
- {
- return;
- }
- // TODO: Create a per-language flag variable.
- const char* defFileFlag =
- this->Makefile->GetDefinition("CMAKE_LINK_DEF_FILE_FLAG");
- if(!defFileFlag)
- {
- return;
- }
- // Append the flag and value. Use ConvertToLinkReference to help
- // vs6's "cl -link" pass it to the linker.
- std::string flag = defFileFlag;
- flag += (this->LocalGenerator->ConvertToLinkReference(
- this->ModuleDefinitionFile));
- this->LocalGenerator->AppendFlags(flags, flag);
- }
|