JSBind.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. //
  2. // Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
  3. // LICENSE: Atomic Game Engine Editor and Tools EULA
  4. // Please see LICENSE_ATOMIC_EDITOR_AND_TOOLS.md in repository root for
  5. // license information: https://github.com/AtomicGameEngine/AtomicGameEngine
  6. //
  7. #include <Atomic/Core/ProcessUtils.h>
  8. #include <Atomic/IO/FileSystem.h>
  9. #include "JSBPackage.h"
  10. #include "JSBind.h"
  11. #include "JavaScript/JSPackageWriter.h"
  12. #include "CSharp/CSPackageWriter.h"
  13. namespace ToolCore
  14. {
  15. JSBind::JSBind(Context* context) : Object(context),
  16. package_(new JSBPackage(context))
  17. {
  18. }
  19. JSBind::~JSBind()
  20. {
  21. }
  22. bool JSBind::LoadPackage(const String& sourceRootFolder, const String& packageFolder, const String& platform)
  23. {
  24. sourceRootFolder_ = sourceRootFolder;
  25. packageFolder_ = packageFolder;
  26. platform_ = platform;
  27. package_->Load(sourceRootFolder_ + packageFolder_);
  28. return true;
  29. }
  30. bool JSBind::GenerateCSharpBindings()
  31. {
  32. String modulesFolder = "Artifacts/Build/Source/Generated/" + platform_ + "/CSharp/Packages/";
  33. modulesFolder += package_->GetName() + "/";
  34. String nativeOutputFolder = sourceRootFolder_ + "/" + modulesFolder + "Native/";
  35. String managedOutputFolder = sourceRootFolder_ + "/" + modulesFolder + "Managed/";
  36. FileSystem* fs = GetSubsystem<FileSystem>();
  37. if (!fs->CreateDirs(sourceRootFolder_, modulesFolder + "Native/") || !fs->DirExists(nativeOutputFolder))
  38. {
  39. String error = "Unable to create bindings native output folder: " + nativeOutputFolder;
  40. ErrorExit(error.CString());
  41. }
  42. if (!fs->CreateDirs(sourceRootFolder_, modulesFolder + "Managed/") || !fs->DirExists(managedOutputFolder))
  43. {
  44. String error = "Unable to create bindings managed output folder: " + managedOutputFolder;
  45. ErrorExit(error.CString());
  46. }
  47. destScriptFolder_ = managedOutputFolder;
  48. destNativeFolder_ = nativeOutputFolder;
  49. CSPackageWriter writer(package_);
  50. package_->GenerateSource(writer);
  51. return true;
  52. }
  53. bool JSBind::GenerateJavaScriptBindings()
  54. {
  55. String modulesFolder = "Artifacts/Build/Source/Generated/" + platform_ + "/Javascript/Packages/";
  56. modulesFolder += package_->GetName() + "/";
  57. String outputFolder = sourceRootFolder_ + "/" + modulesFolder;
  58. FileSystem* fs = GetSubsystem<FileSystem>();
  59. if (!fs->CreateDirs(sourceRootFolder_, modulesFolder) || !fs->DirExists(outputFolder))
  60. {
  61. String error = "Unable to create bindings output folder: " + outputFolder;
  62. ErrorExit(error.CString());
  63. }
  64. destScriptFolder_ = String::EMPTY;
  65. destNativeFolder_ = outputFolder;
  66. JSPackageWriter writer(package_);
  67. package_->GenerateSource(writer);
  68. return true;
  69. }
  70. }