cmGhsMultiTargetGenerator.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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. const char* GetAbsBuildFilePath() const
  23. {
  24. return this->AbsBuildFilePath.c_str();
  25. }
  26. const char* GetRelBuildFileName() const
  27. {
  28. return this->RelBuildFileName.c_str();
  29. }
  30. const char* GetAbsBuildFileName() const
  31. {
  32. return this->AbsBuildFileName.c_str();
  33. }
  34. const char* GetAbsOutputFileName() const
  35. {
  36. return this->AbsOutputFileName.c_str();
  37. }
  38. static std::string GetRelBuildFilePath(const cmGeneratorTarget* target);
  39. static std::string GetAbsPathToRoot(const cmGeneratorTarget* target);
  40. static std::string GetAbsBuildFilePath(const cmGeneratorTarget* target);
  41. static std::string GetRelBuildFileName(const cmGeneratorTarget* target);
  42. static std::string GetBuildFileName(const cmGeneratorTarget* target);
  43. static std::string AddSlashIfNeededToPath(std::string const& input);
  44. private:
  45. cmGlobalGhsMultiGenerator* GetGlobalGenerator() const;
  46. cmGeneratedFileStream* GetFolderBuildStreams()
  47. {
  48. return this->FolderBuildStreams[""];
  49. };
  50. void GenerateTarget();
  51. bool IsTargetGroup() const { return this->TargetGroup; }
  52. void WriteTargetSpecifics(std::ostream& fout, const std::string& config,
  53. bool notKernel);
  54. void WriteCompilerFlags(std::ostream& fout, const std::string& config,
  55. const std::string& language);
  56. void WriteCompilerDefinitions(std::ostream& fout, 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(std::ostream& fout, const std::string& config,
  63. const std::string& language);
  64. void WriteTargetLinkLine(std::ostream& fout, std::string const& config);
  65. void WriteCustomCommands(std::ostream& fout);
  66. void WriteCustomCommandsHelper(
  67. std::ostream& fout, std::vector<cmCustomCommand> const& commandsSet,
  68. cmTarget::CustomCommandType commandType);
  69. void WriteSources(std::ostream& fout_proj);
  70. static std::map<const cmSourceFile*, std::string> GetObjectNames(
  71. std::vector<cmSourceFile*>* objectSources,
  72. cmLocalGhsMultiGenerator* localGhsMultiGenerator,
  73. cmGeneratorTarget* generatorTarget);
  74. static void WriteObjectLangOverride(std::ostream* fout,
  75. const cmSourceFile* sourceFile);
  76. std::string GetOutputDirectory(const std::string& config) const;
  77. std::string GetOutputFilename(const std::string& config) const;
  78. static std::string ComputeLongestObjectDirectory(
  79. cmLocalGhsMultiGenerator const* localGhsMultiGenerator,
  80. cmGeneratorTarget* generatorTarget, cmSourceFile* const sourceFile);
  81. bool IsNotKernel(std::string const& config, const std::string& language);
  82. static bool DetermineIfTargetGroup(const cmGeneratorTarget* target);
  83. bool DetermineIfDynamicDownload(std::string const& config,
  84. const std::string& language);
  85. cmGeneratorTarget* GeneratorTarget;
  86. cmLocalGhsMultiGenerator* LocalGenerator;
  87. cmMakefile* Makefile;
  88. std::string AbsBuildFilePath;
  89. std::string RelBuildFilePath;
  90. std::string AbsBuildFileName;
  91. std::string RelBuildFileName;
  92. std::string RelOutputFileName;
  93. std::string AbsOutputFileName;
  94. std::map<std::string, cmGeneratedFileStream*> FolderBuildStreams;
  95. bool TargetGroup;
  96. bool DynamicDownload;
  97. static std::string const DDOption;
  98. std::map<std::string, std::string> FlagsByLanguage;
  99. std::map<std::string, std::string> DefinesByLanguage;
  100. std::string TargetNameReal;
  101. GhsMultiGpj::Types TagType;
  102. std::string const Name;
  103. std::string ConfigName; /* CMAKE_BUILD_TYPE */
  104. };
  105. #endif // ! cmGhsMultiTargetGenerator_h