mirror of
https://github.com/reactos/CMake.git
synced 2024-12-13 22:58:41 +00:00
d2c764ad8d
Refactoring in commit a2514f15
(Simplify cmNinjaTargetGenerator using
cmGeneratorTarget, 2012-03-13) accidentally removed mapping of .def file
paths through ConvertToNinjaPath (via GetSourceFilePath). Take the
ModuleDefinitionFile value from cmGeneratorTarget and map it correctly
through ConvertToNinjaPath.
In addition to generating cleaner paths in the ninja build files this
correctly links up references to a generated .def file with the custom
command output that produces it.
127 lines
4.0 KiB
C++
127 lines
4.0 KiB
C++
/*============================================================================
|
|
CMake - Cross Platform Makefile Generator
|
|
Copyright 2011 Peter Collingbourne <peter@pcc.me.uk>
|
|
Copyright 2011 Nicolas Despres <nicolas.despres@gmail.com>
|
|
|
|
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.
|
|
============================================================================*/
|
|
#ifndef cmNinjaTargetGenerator_h
|
|
#define cmNinjaTargetGenerator_h
|
|
|
|
#include "cmStandardIncludes.h"
|
|
#include "cmNinjaTypes.h"
|
|
#include "cmLocalNinjaGenerator.h"
|
|
|
|
class cmTarget;
|
|
class cmGlobalNinjaGenerator;
|
|
class cmGeneratedFileStream;
|
|
class cmGeneratorTarget;
|
|
class cmMakefile;
|
|
class cmSourceFile;
|
|
class cmCustomCommand;
|
|
|
|
class cmNinjaTargetGenerator
|
|
{
|
|
public:
|
|
/// Create a cmNinjaTargetGenerator according to the @a target's type.
|
|
static cmNinjaTargetGenerator* New(cmTarget* target);
|
|
|
|
/// Build a NinjaTargetGenerator.
|
|
cmNinjaTargetGenerator(cmTarget* target);
|
|
|
|
/// Destructor.
|
|
virtual ~cmNinjaTargetGenerator();
|
|
|
|
virtual void Generate() = 0;
|
|
|
|
std::string GetTargetPDB() const;
|
|
std::string GetTargetName() const;
|
|
|
|
protected:
|
|
cmGeneratedFileStream& GetBuildFileStream() const;
|
|
cmGeneratedFileStream& GetRulesFileStream() const;
|
|
|
|
cmTarget* GetTarget() const
|
|
{ return this->Target; }
|
|
|
|
cmLocalNinjaGenerator* GetLocalGenerator() const
|
|
{ return this->LocalGenerator; }
|
|
|
|
cmGlobalNinjaGenerator* GetGlobalGenerator() const;
|
|
|
|
cmMakefile* GetMakefile() const
|
|
{ return this->Makefile; }
|
|
|
|
const char* GetConfigName() const;
|
|
|
|
std::string LanguageCompilerRule(const std::string& lang) const
|
|
{ return lang + "_COMPILER"; }
|
|
|
|
const char* GetFeature(const char* feature);
|
|
bool GetFeatureAsBool(const char* feature);
|
|
void AddFeatureFlags(std::string& flags, const char* lang);
|
|
|
|
/**
|
|
* Compute the flags for compilation of object files for a given @a language.
|
|
* @note Generally it is the value of the variable whose name is computed
|
|
* by LanguageFlagsVarName().
|
|
*/
|
|
std::string ComputeFlagsForObject(cmSourceFile *source,
|
|
const std::string& language);
|
|
|
|
std::string ComputeDefines(cmSourceFile *source,
|
|
const std::string& language);
|
|
|
|
std::string ConvertToNinjaPath(const char *path) const {
|
|
return this->GetLocalGenerator()->ConvertToNinjaPath(path);
|
|
}
|
|
cmLocalNinjaGenerator::map_to_ninja_path MapToNinjaPath() const {
|
|
return this->GetLocalGenerator()->MapToNinjaPath();
|
|
}
|
|
|
|
/// @return the list of link dependency for the given target @a target.
|
|
cmNinjaDeps ComputeLinkDeps() const;
|
|
|
|
/// @return the source file path for the given @a source.
|
|
std::string GetSourceFilePath(cmSourceFile* source) const;
|
|
|
|
/// @return the object file path for the given @a source.
|
|
std::string GetObjectFilePath(cmSourceFile* source) const;
|
|
|
|
/// @return the file path where the target named @a name is generated.
|
|
std::string GetTargetFilePath(const std::string& name) const;
|
|
|
|
/// @return the output path for the target.
|
|
virtual std::string GetTargetOutputDir() const;
|
|
|
|
void WriteLanguageRules(const std::string& language);
|
|
void WriteCompileRule(const std::string& language);
|
|
void WriteObjectBuildStatements();
|
|
void WriteObjectBuildStatement(cmSourceFile* source);
|
|
void WriteCustomCommandBuildStatement(cmCustomCommand *cc);
|
|
|
|
cmNinjaDeps GetObjects() const
|
|
{ return this->Objects; }
|
|
|
|
// Helper to add flag for windows .def file.
|
|
void AddModuleDefinitionFlag(std::string& flags);
|
|
|
|
private:
|
|
cmTarget* Target;
|
|
cmGeneratorTarget* GeneratorTarget;
|
|
cmMakefile* Makefile;
|
|
cmLocalNinjaGenerator* LocalGenerator;
|
|
/// List of object files for this target.
|
|
cmNinjaDeps Objects;
|
|
|
|
// The windows module definition source file (.def), if any.
|
|
std::string ModuleDefinitionFile;
|
|
};
|
|
|
|
#endif // ! cmNinjaTargetGenerator_h
|