xmake.lua 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package("godotcpp4")
  2. set_homepage("https://godotengine.org/")
  3. set_description("C++ bindings for the Godot 4 script API")
  4. set_urls("https://github.com/godotengine/godot-cpp.git")
  5. add_versions("4.0", "9d1c396c54fc3bdfcc7da4f3abcb52b14f6cce8f")
  6. add_deps("scons")
  7. add_includedirs("gen/include", "include")
  8. on_load(function(package)
  9. assert(not package:is_arch(
  10. "mips",
  11. "mip64",
  12. "mips64",
  13. "mipsel",
  14. "mips64el",
  15. "s390x",
  16. "sh4"),
  17. "architecture " .. package:arch() .. " is not supported")
  18. if package:is_plat("windows") then
  19. package:add("defines", "TYPED_METHOD_BIND", "NOMINMAX")
  20. end
  21. if package:is_debug() then
  22. package:add("defines", "DEBUG_ENABLED", "DEBUG_METHODS_ENABLED")
  23. end
  24. end)
  25. on_install("linux", "windows|x64", "windows|x86", "macosx", "iphoneos", "android", function(package)
  26. if package:is_plat("windows") then
  27. io.replace("tools/targets.py", "/MD", "/" .. package:config("vs_runtime"), {plain = true})
  28. end
  29. local platform = package:plat()
  30. if package:is_plat("mingw") then
  31. platform = "windows"
  32. elseif package:is_plat("macosx") then
  33. platform = "macos"
  34. elseif package:is_plat("iphoneos") then
  35. platform = "ios"
  36. end
  37. local arch = package:arch()
  38. if package:is_arch("x86", "i386") then
  39. arch = "x86_32"
  40. elseif package:is_arch("arm64-v8a") then
  41. arch = "arm64"
  42. elseif package:is_arch("arm", "armeabi", "armeabi-v7a", "armv7s", "armv7k") then
  43. arch = "arm32"
  44. end
  45. local configs = {
  46. "target=" .. (package:is_debug() and "template_debug" or "template_release"),
  47. "platform=" .. platform,
  48. "arch=" .. arch,
  49. "debug_symbols=" .. (package:is_debug() and "yes" or "no")
  50. }
  51. import("package.tools.scons").build(package, configs)
  52. os.cp("bin/*." .. (package:is_plat("windows") and "lib" or "a"), package:installdir("lib"))
  53. os.cp("include/godot_cpp", package:installdir("include"))
  54. os.cp("gen/include/godot_cpp", path.join(package:installdir("gen"), "include", "godot_cpp"))
  55. os.cp("gdextension/gdextension_interface.h", package:installdir("include"))
  56. end)
  57. on_test(function (package)
  58. assert(package:check_cxxsnippets({test = [[
  59. #include <godot_cpp/classes/global_constants.hpp>
  60. #include <godot_cpp/classes/ref_counted.hpp>
  61. #include <godot_cpp/core/binder_common.hpp>
  62. using namespace godot;
  63. class ExampleRef : public RefCounted {
  64. GDCLASS(ExampleRef, RefCounted);
  65. protected:
  66. static void _bind_methods() {
  67. ClassDB::bind_method(D_METHOD("get_id"), &ExampleRef::get_id);
  68. }
  69. public:
  70. int get_id() { return 5; }
  71. };
  72. extern "C" {
  73. GDExtensionBool GDE_EXPORT
  74. example_library_init(const GDExtensionInterface *p_interface,
  75. GDExtensionClassLibraryPtr p_library,
  76. GDExtensionInitialization *r_initialization) {
  77. ClassDB::register_class<ExampleRef>();
  78. return true;
  79. }
  80. }
  81. ]]}, {configs = {languages = "cxx17"}}))
  82. end)