cmExportBuildAndroidMKGenerator.cxx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #include "cmExportBuildAndroidMKGenerator.h"
  4. #include <sstream>
  5. #include <vector>
  6. #include "cmGeneratorExpression.h"
  7. #include "cmGeneratorTarget.h"
  8. #include "cmPolicies.h"
  9. #include "cmStateTypes.h"
  10. #include "cmStringAlgorithms.h"
  11. #include "cmSystemTools.h"
  12. #include "cmTarget.h"
  13. cmExportBuildAndroidMKGenerator::cmExportBuildAndroidMKGenerator() = default;
  14. bool cmExportBuildAndroidMKGenerator::GenerateMainFile(std::ostream& os)
  15. {
  16. if (!this->CollectExports([&](cmGeneratorTarget const*) {})) {
  17. return false;
  18. }
  19. // Create all the imported targets.
  20. for (auto const& exp : this->Exports) {
  21. cmGeneratorTarget* gte = exp.Target;
  22. this->GenerateImportTargetCode(os, gte, this->GetExportTargetType(gte));
  23. gte->Target->AppendBuildInterfaceIncludes();
  24. ImportPropertyMap properties;
  25. if (!this->PopulateInterfaceProperties(gte, properties)) {
  26. return false;
  27. }
  28. bool const newCMP0022Behavior =
  29. gte->GetPolicyStatusCMP0022() != cmPolicies::WARN &&
  30. gte->GetPolicyStatusCMP0022() != cmPolicies::OLD;
  31. if (newCMP0022Behavior) {
  32. this->PopulateInterfaceLinkLibrariesProperty(
  33. gte, cmGeneratorExpression::BuildInterface, properties);
  34. }
  35. this->GenerateInterfaceProperties(gte, os, properties);
  36. }
  37. return true;
  38. }
  39. void cmExportBuildAndroidMKGenerator::GenerateImportHeaderCode(
  40. std::ostream& os, std::string const&)
  41. {
  42. os << "LOCAL_PATH := $(call my-dir)\n\n";
  43. }
  44. void cmExportBuildAndroidMKGenerator::GenerateImportTargetCode(
  45. std::ostream& os, cmGeneratorTarget const* target,
  46. cmStateEnums::TargetType /*targetType*/)
  47. {
  48. std::string targetName = cmStrCat(this->Namespace, target->GetExportName());
  49. os << "include $(CLEAR_VARS)\n";
  50. os << "LOCAL_MODULE := ";
  51. os << targetName << "\n";
  52. os << "LOCAL_SRC_FILES := ";
  53. std::string const noConfig; // FIXME: What config to use here?
  54. std::string path =
  55. cmSystemTools::ConvertToOutputPath(target->GetFullPath(noConfig));
  56. os << path << "\n";
  57. }