cmGhsMultiTargetGenerator.h 4.4 KB

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