cmGlobalGhsMultiGenerator.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /*============================================================================
  2. CMake - Cross Platform Makefile Generator
  3. Copyright 2015 Geoffrey Viola <[email protected]>
  4. Distributed under the OSI-approved BSD License (the "License");
  5. see accompanying file Copyright.txt for details.
  6. This software is distributed WITHOUT ANY WARRANTY; without even the
  7. implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  8. See the License for more information.
  9. ============================================================================*/
  10. #ifndef cmGhsMultiGenerator_h
  11. #define cmGhsMultiGenerator_h
  12. #include "cmGlobalGeneratorFactory.h"
  13. #include "cmGlobalGenerator.h"
  14. #include "cmGhsMultiGpj.h"
  15. class cmGeneratedFileStream;
  16. class cmGlobalGhsMultiGenerator : public cmGlobalGenerator
  17. {
  18. public:
  19. /// The default name of GHS MULTI's build file. Typically: monolith.gpj.
  20. static const char *FILE_EXTENSION;
  21. cmGlobalGhsMultiGenerator(cmake* cm);
  22. ~cmGlobalGhsMultiGenerator();
  23. static cmGlobalGeneratorFactory *NewFactory()
  24. { return new cmGlobalGeneratorSimpleFactory<cmGlobalGhsMultiGenerator>(); }
  25. ///! create the correct local generator
  26. virtual cmLocalGenerator *CreateLocalGenerator(cmMakefile* mf);
  27. /// @return the name of this generator.
  28. static std::string GetActualName() { return "Green Hills MULTI"; }
  29. ///! Get the name for this generator
  30. virtual std::string GetName() const { return this->GetActualName(); }
  31. /// Overloaded methods. @see cmGlobalGenerator::GetDocumentation()
  32. static void GetDocumentation(cmDocumentationEntry &entry);
  33. /**
  34. * Utilized by the generator factory to determine if this generator
  35. * supports toolsets.
  36. */
  37. static bool SupportsToolset() { return false; }
  38. /**
  39. * Try to determine system information such as shared library
  40. * extension, pthreads, byte order etc.
  41. */
  42. virtual void EnableLanguage(std::vector<std::string> const &languages,
  43. cmMakefile *, bool optional);
  44. /*
  45. * Determine what program to use for building the project.
  46. */
  47. virtual void FindMakeProgram(cmMakefile *);
  48. cmGeneratedFileStream *GetBuildFileStream()
  49. {
  50. return this->TargetFolderBuildStreams[""];
  51. }
  52. static void OpenBuildFileStream(std::string const &filepath,
  53. cmGeneratedFileStream **filestream);
  54. static void OpenBuildFileStream(cmGeneratedFileStream *filestream);
  55. static void CloseBuildFileStream(cmGeneratedFileStream **filestream);
  56. /// Write the common disclaimer text at the top of each build file.
  57. static void WriteDisclaimer(std::ostream *os);
  58. std::vector<std::string> GetLibDirs() { return this->LibDirs; }
  59. static void AddFilesUpToPath(
  60. cmGeneratedFileStream *mainBuildFile,
  61. std::map<std::string, cmGeneratedFileStream *> *targetFolderBuildStreams,
  62. char const *homeOutputDirectory, std::string const &path,
  63. GhsMultiGpj::Types projType, std::string const &relPath = "");
  64. static void Open(std::string const &mapKeyName, std::string const &fileName,
  65. std::map<std::string, cmGeneratedFileStream *> *fileMap);
  66. static std::string trimQuotes(std::string const &str);
  67. inline bool IsOSDirRelative() { return this->OSDirRelative; }
  68. protected:
  69. virtual void Generate();
  70. virtual void GenerateBuildCommand(
  71. std::vector<std::string> &makeCommand, const std::string &makeProgram,
  72. const std::string &projectName, const std::string &projectDir,
  73. const std::string &targetName, const std::string &config, bool fast,
  74. bool verbose,
  75. std::vector<std::string> const& makeOptions = std::vector<std::string>()
  76. );
  77. private:
  78. std::string const &GetGhsBuildCommand();
  79. std::string FindGhsBuildCommand();
  80. std::string GetCompRoot();
  81. std::vector<std::string> GetCompRootHardPaths();
  82. std::vector<std::string> GetCompRootRegistry();
  83. void OpenBuildFileStream();
  84. void WriteMacros();
  85. void WriteHighLevelDirectives();
  86. void WriteCompilerOptions(std::string const &fOSDir);
  87. static void AddFilesUpToPathNewBuildFile(
  88. cmGeneratedFileStream *mainBuildFile,
  89. std::map<std::string, cmGeneratedFileStream *> *targetFolderBuildStreams,
  90. char const *homeOutputDirectory, std::string const &pathUpTo,
  91. bool isFirst, std::string const &relPath, GhsMultiGpj::Types projType);
  92. static void AddFilesUpToPathAppendNextFile(
  93. std::map<std::string, cmGeneratedFileStream *> *targetFolderBuildStreams,
  94. std::string const &pathUpTo,
  95. std::vector<cmsys::String>::const_iterator splitPathI,
  96. std::vector<cmsys::String>::const_iterator end,
  97. GhsMultiGpj::Types projType);
  98. static std::string GetFileNameFromPath(std::string const &path);
  99. void UpdateBuildFiles(std::vector<cmGeneratorTarget*> tgts);
  100. bool IsTgtForBuild(const cmGeneratorTarget *tgt);
  101. std::vector<cmGeneratedFileStream *> TargetSubProjects;
  102. std::map<std::string, cmGeneratedFileStream *> TargetFolderBuildStreams;
  103. std::vector<std::string> LibDirs;
  104. bool OSDirRelative;
  105. bool GhsBuildCommandInitialized;
  106. std::string GhsBuildCommand;
  107. static const char *DEFAULT_MAKE_PROGRAM;
  108. };
  109. #endif