cmGhsMultiTargetGenerator.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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 cmGhsMultiTargetGenerator_h
  11. #define cmGhsMultiTargetGenerator_h
  12. #include "cmStandardIncludes.h"
  13. #include "cmTarget.h"
  14. #include "cmGhsMultiGpj.h"
  15. class cmGeneratedFileStream;
  16. class cmGlobalGhsMultiGenerator;
  17. class cmLocalGhsMultiGenerator;
  18. class cmMakefile;
  19. class cmSourceFile;
  20. class cmGeneratedFileStream;
  21. class cmCustomCommand;
  22. class cmGhsMultiTargetGenerator
  23. {
  24. public:
  25. cmGhsMultiTargetGenerator(cmGeneratorTarget* target);
  26. virtual ~cmGhsMultiTargetGenerator();
  27. virtual void Generate();
  28. bool IncludeThisTarget();
  29. std::vector<cmSourceFile *> GetSources() const;
  30. GhsMultiGpj::Types GetGpjTag() const;
  31. static GhsMultiGpj::Types GetGpjTag(const cmGeneratorTarget* target);
  32. const char *GetAbsBuildFilePath() const
  33. {
  34. return this->AbsBuildFilePath.c_str();
  35. }
  36. const char *GetRelBuildFileName() const
  37. {
  38. return this->RelBuildFileName.c_str();
  39. }
  40. const char *GetAbsBuildFileName() const
  41. {
  42. return this->AbsBuildFileName.c_str();
  43. }
  44. const char *GetAbsOutputFileName() const
  45. {
  46. return this->AbsOutputFileName.c_str();
  47. }
  48. static std::string GetRelBuildFilePath(const cmGeneratorTarget *target);
  49. static std::string GetAbsPathToRoot(const cmGeneratorTarget *target);
  50. static std::string GetAbsBuildFilePath(const cmGeneratorTarget *target);
  51. static std::string GetRelBuildFileName(const cmGeneratorTarget *target);
  52. static std::string GetBuildFileName(const cmGeneratorTarget *target);
  53. static std::string AddSlashIfNeededToPath(std::string const &input);
  54. private:
  55. cmGlobalGhsMultiGenerator *GetGlobalGenerator() const;
  56. cmGeneratedFileStream *GetFolderBuildStreams()
  57. {
  58. return this->FolderBuildStreams[""];
  59. };
  60. bool IsTargetGroup() const { return this->TargetGroup; }
  61. void WriteTypeSpecifics(const std::string &config, bool notKernel);
  62. void WriteCompilerFlags(const std::string &config,
  63. const std::string &language);
  64. void WriteCompilerDefinitions(const std::string &config,
  65. const std::string &language);
  66. void SetCompilerFlags(std::string const &config, const std::string &language,
  67. bool const notKernel);
  68. std::string GetDefines(const std::string &langugae,
  69. std::string const &config);
  70. void WriteIncludes(const std::string &config, const std::string &language);
  71. void WriteTargetLinkLibraries();
  72. void WriteCustomCommands();
  73. void
  74. WriteCustomCommandsHelper(std::vector<cmCustomCommand> const &commandsSet,
  75. cmTarget::CustomCommandType commandType);
  76. void WriteSources(std::vector<cmSourceFile *> const &objectSources);
  77. static void WriteObjectLangOverride(cmGeneratedFileStream *fileStream,
  78. cmSourceFile *sourceFile);
  79. static void WriteObjectDir(cmGeneratedFileStream *fileStream,
  80. std::string const &dir);
  81. std::string GetOutputDirectory(const std::string &config) const;
  82. std::string GetOutputFilename(const std::string &config) const;
  83. bool IsNotKernel(std::string const &config, const std::string &language);
  84. static bool DetermineIfTargetGroup(const cmGeneratorTarget* target);
  85. bool DetermineIfDynamicDownload(std::string const &config,
  86. const std::string &language);
  87. cmGeneratorTarget* GeneratorTarget;
  88. cmLocalGhsMultiGenerator *LocalGenerator;
  89. cmMakefile *Makefile;
  90. std::string AbsBuildFilePath;
  91. std::string RelBuildFilePath;
  92. std::string AbsBuildFileName;
  93. std::string RelBuildFileName;
  94. std::string RelOutputFileName;
  95. std::string AbsOutputFileName;
  96. std::map<std::string, cmGeneratedFileStream *> FolderBuildStreams;
  97. bool TargetGroup;
  98. bool DynamicDownload;
  99. static std::string const DDOption;
  100. std::map<std::string, std::string> FlagsByLanguage;
  101. std::map<std::string, std::string> DefinesByLanguage;
  102. };
  103. #endif // ! cmGhsMultiTargetGenerator_h