| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- /*============================================================================
- CMake - Cross Platform Makefile Generator
- Copyright 2011 Peter Collingbourne <[email protected]>
- Copyright 2011 Nicolas Despres <[email protected]>
- 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 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;
- 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
|