From 35c4294a9cb107d9eaab9b445917ed22db32a224 Mon Sep 17 00:00:00 2001 From: badlogic Date: Tue, 24 Jan 2023 16:05:10 +0100 Subject: [PATCH 1/4] [godot] Fixes for latest Godot 4.0, VS Code settings, tasks, and launch configs. --- .gitignore | 2 + spine-godot/.vscode/launch.json | 47 +++++++++++++++++++ spine-godot/.vscode/settings.json | 4 ++ spine-godot/.vscode/tasks.json | 35 ++++++++++++++ spine-godot/build/build.sh | 1 + .../spine_godot/GodotSpineExtension.cpp | 4 ++ spine-godot/spine_godot/SpineEditorPlugin.cpp | 9 ++++ spine-godot/spine_godot/SpineEditorPlugin.h | 3 ++ .../spine_godot/SpineSkeletonFileResource.cpp | 4 ++ spine-godot/spine_godot/register_types.cpp | 16 +++++-- 10 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 spine-godot/.vscode/launch.json create mode 100644 spine-godot/.vscode/settings.json create mode 100644 spine-godot/.vscode/tasks.json diff --git a/.gitignore b/.gitignore index 8bc5fe74a..cee580293 100644 --- a/.gitignore +++ b/.gitignore @@ -181,3 +181,5 @@ spine-ts/spine-ts.zip spine-godot/.clang-format spine-ts/spine-phaser/dist +spine-godot/.cache +spine-godot/build/compile_commands.json diff --git a/spine-godot/.vscode/launch.json b/spine-godot/.vscode/launch.json new file mode 100644 index 000000000..6b425359a --- /dev/null +++ b/spine-godot/.vscode/launch.json @@ -0,0 +1,47 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "cppvsdbg", + "request": "launch", + "name": "debug scene v4", + "program": "godot/bin/godot.windows.editor.dev.x86_64.exe", + "args": [ + "--path", + "example-v4", + "examples/01-helloworld/helloworld.tscn" + ], + "cwd": "${workspaceFolder}", + "preLaunchTask": "build-v4" + }, + { + "type": "cppvsdbg", + "request": "launch", + "name": "debug editor v4", + "program": "godot/bin/godot.windows.editor.dev.x86_64.exe", + "args": [ + "-e", + "--path", + "example-v4", + ], + "cwd": "${workspaceFolder}", + "preLaunchTask": "build-v4" + }, + { + "type": "cppvsdbg", + "request": "launch", + "name": "debug scene v3", + "program": "godot/bin/godot.windows.editor.dev.x86_64.exe", + "args": [ + "--path", + "example", + "examples/01-helloworld/helloworld.tscn" + ], + "cwd": "${workspaceFolder}", + "preLaunchTask": "build-v3" + } + ] +} \ No newline at end of file diff --git a/spine-godot/.vscode/settings.json b/spine-godot/.vscode/settings.json new file mode 100644 index 000000000..621800919 --- /dev/null +++ b/spine-godot/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "cmake.configureOnOpen": false, + "C_Cpp.intelliSenseEngine": "disabled", +} \ No newline at end of file diff --git a/spine-godot/.vscode/tasks.json b/spine-godot/.vscode/tasks.json new file mode 100644 index 000000000..7daba2cb0 --- /dev/null +++ b/spine-godot/.vscode/tasks.json @@ -0,0 +1,35 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build-v4", + "group": "build", + "type": "shell", + "command": "scons", + "options": { + "cwd": "${workspaceFolder}/godot" + }, + "args": [ + "-j 8", + "dev_build=yes", + "custom_modules=\"${workspaceFolder}/spine_godot" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "build-v3", + "group": "build", + "type": "shell", + "command": "scons", + "options": { + "cwd": "${workspaceFolder}/godot" + }, + "args": [ + "-j 8", + "debug", + "custom_modules=\"${workspaceFolder}/spine_godot" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/spine-godot/build/build.sh b/spine-godot/build/build.sh index 52b231929..2abaed21a 100755 --- a/spine-godot/build/build.sh +++ b/spine-godot/build/build.sh @@ -61,6 +61,7 @@ else target="$target vsproj=yes livepp=$LIVEPP" fi scons $target compiledb=yes custom_modules="../spine_godot" --jobs=$cpus + cp compile_commands.json ../build if [ -f "bin/godot.x11.opt.tools.64" ]; then strip bin/godot.x11.opt.tools.64 chmod a+x bin/godot.x11.opt.tools.64 diff --git a/spine-godot/spine_godot/GodotSpineExtension.cpp b/spine-godot/spine_godot/GodotSpineExtension.cpp index c37b91a3a..877e767aa 100644 --- a/spine-godot/spine_godot/GodotSpineExtension.cpp +++ b/spine-godot/spine_godot/GodotSpineExtension.cpp @@ -61,7 +61,11 @@ void GodotSpineExtension::_free(void *mem, const char *file, int line) { char *GodotSpineExtension::_readFile(const spine::String &path, int *length) { Error error; +#if VERSION_MAJOR > 3 + auto res = FileAccess::get_file_as_bytes(String(path.buffer()), &error); +#else auto res = FileAccess::get_file_as_array(String(path.buffer()), &error); +#endif if (error != OK) { if (length) *length = 0; return NULL; diff --git a/spine-godot/spine_godot/SpineEditorPlugin.cpp b/spine-godot/spine_godot/SpineEditorPlugin.cpp index e5cbeeeb0..4ecdb6594 100644 --- a/spine-godot/spine_godot/SpineEditorPlugin.cpp +++ b/spine-godot/spine_godot/SpineEditorPlugin.cpp @@ -31,6 +31,7 @@ #include "SpineEditorPlugin.h" #include "SpineAtlasResource.h" #include "SpineSkeletonFileResource.h" +#include "editor/editor_undo_redo_manager.h" #if VERSION_MAJOR > 3 Error SpineAtlasResourceImportPlugin::import(const String &source_file, const String &save_path, const HashMap &options, List *platform_variants, List *gen_files, Variant *metadata) { @@ -253,7 +254,11 @@ void SpineEditorPropertyAnimationMix::_bind_methods() { void SpineEditorPropertyAnimationMix::data_changed(const String &property, const Variant &value, const String &name, bool changing) { auto mix = Object::cast_to(get_edited_object()->get(get_edited_property())); +#if VERSION_MAJOR > 3 + auto undo_redo = EditorUndoRedoManager::get_singleton(); +#else auto undo_redo = EditorNode::get_undo_redo(); +#endif undo_redo->create_action("Set mix property " + property); undo_redo->add_do_property(mix, property, value); undo_redo->add_undo_property(mix, property, mix->get(property)); @@ -273,7 +278,11 @@ void SpineEditorPropertyAnimationMix::update_property() { if (container) { memdelete(container); +#if VERSION_MAJOR > 3 + SceneTree::get_singleton()->queue_delete(container); +#else container->queue_delete(); +#endif container = nullptr; } diff --git a/spine-godot/spine_godot/SpineEditorPlugin.h b/spine-godot/spine_godot/SpineEditorPlugin.h index 013a0f23f..38aab3a4f 100644 --- a/spine-godot/spine_godot/SpineEditorPlugin.h +++ b/spine-godot/spine_godot/SpineEditorPlugin.h @@ -32,6 +32,9 @@ #ifdef TOOLS_ENABLED #include "SpineCommon.h" #include "SpineSprite.h" +#if VERSION_MAJOR > 3 +#include "editor/import/editor_import_plugin.h" +#endif #include "editor/editor_node.h" #include "editor/editor_properties.h" #include "editor/editor_properties_array_dict.h" diff --git a/spine-godot/spine_godot/SpineSkeletonFileResource.cpp b/spine-godot/spine_godot/SpineSkeletonFileResource.cpp index afc96925c..07308c9b1 100644 --- a/spine-godot/spine_godot/SpineSkeletonFileResource.cpp +++ b/spine-godot/spine_godot/SpineSkeletonFileResource.cpp @@ -122,7 +122,11 @@ Error SpineSkeletonFileResource::load_from_file(const String &path) { if (error != OK) return error; if (!checkJson(json.utf8())) return ERR_INVALID_DATA; } else { +#if VERSION_MAJOR > 3 + binary = FileAccess::get_file_as_bytes(path, &error); +#else binary = FileAccess::get_file_as_array(path, &error); +#endif if (error != OK) return error; if (!checkBinary((const char *) binary.ptr(), binary.size())) return ERR_INVALID_DATA; } diff --git a/spine-godot/spine_godot/register_types.cpp b/spine-godot/spine_godot/register_types.cpp index 603c87bde..fadc83ba6 100644 --- a/spine-godot/spine_godot/register_types.cpp +++ b/spine-godot/spine_godot/register_types.cpp @@ -28,6 +28,7 @@ *****************************************************************************/ #include "SpineCommon.h" +#include "modules/register_module_types.h" #include "register_types.h" #include "SpineAtlasResource.h" #include "SpineSkeletonFileResource.h" @@ -70,12 +71,20 @@ static void editor_init_callback() { #if VERSION_MAJOR > 3 void initialize_spine_godot_module(ModuleInitializationLevel level) { + if (level == MODULE_INITIALIZATION_LEVEL_EDITOR) { +#ifdef TOOLS_ENABLED + EditorNode::add_init_callback(editor_init_callback); + GDREGISTER_CLASS(SpineEditorPropertyAnimationMixes); + return; +#endif + } + if (level != MODULE_INITIALIZATION_LEVEL_CORE) return; #else void register_spine_godot_types() { -#endif #ifdef TOOLS_ENABLED EditorNode::add_init_callback(editor_init_callback); GDREGISTER_CLASS(SpineEditorPropertyAnimationMixes); +#endif #endif spine::Bone::setYDown(true); GDREGISTER_CLASS(SpineObjectWrapper); @@ -140,13 +149,14 @@ void register_spine_godot_types() { #if VERSION_MAJOR > 3 void uninitialize_spine_godot_module(ModuleInitializationLevel level) { + if (level != MODULE_INITIALIZATION_LEVEL_CORE) return; #else void unregister_spine_godot_types() { #endif - ResourceLoader::remove_resource_format_loader(atlas_loader); + /*ResourceLoader::remove_resource_format_loader(atlas_loader); ResourceSaver::remove_resource_format_saver(atlas_saver); ResourceLoader::remove_resource_format_loader(skeleton_file_loader); - ResourceSaver::remove_resource_format_saver(skeleton_file_saver); + ResourceSaver::remove_resource_format_saver(skeleton_file_saver);*/ /*memdelete(atlas_loader); memdelete(atlas_saver); From 0b5621ccd4b1954904198ccaab5845540df8127a Mon Sep 17 00:00:00 2001 From: badlogic Date: Tue, 24 Jan 2023 16:52:33 +0100 Subject: [PATCH 2/4] [godot] Fix v3 Live++ patch, launch configs and tasks. --- spine-godot/.vscode/launch.json | 43 ++++++++++++++++-- spine-godot/.vscode/tasks.json | 14 ++++-- spine-godot/build/livepp.patch | 44 ++++++++++--------- spine-godot/build/setup.sh | 9 +++- spine-godot/spine_godot/SpineEditorPlugin.cpp | 2 +- 5 files changed, 83 insertions(+), 29 deletions(-) diff --git a/spine-godot/.vscode/launch.json b/spine-godot/.vscode/launch.json index 6b425359a..bcbe0d713 100644 --- a/spine-godot/.vscode/launch.json +++ b/spine-godot/.vscode/launch.json @@ -34,14 +34,51 @@ "type": "cppvsdbg", "request": "launch", "name": "debug scene v3", - "program": "godot/bin/godot.windows.editor.dev.x86_64.exe", + "cwd": "${workspaceFolder}", + "program": "godot/bin/godot.windows.tools.64.exe", "args": [ "--path", "example", "examples/01-helloworld/helloworld.tscn" ], + "preLaunchTask": "build-v3", + "linux": { + "type": "cppdbg", + "request": "launch", + "name": "debug scene v3", + "program": "godot/bin/godot.windows.tools.64.exe", + }, + "osx": { + "type": "cppdbg", + "request": "launch", + "name": "debug scene v3", + "program": "godot/bin/godot.tools.64.exe", + }, + }, + { + "type": "cppvsdbg", + "request": "launch", + "name": "debug editor v3", + "program": "godot/bin/godot.windows.tools.64.exe", + "args": [ + "-e", + "--path", + "example", + ], "cwd": "${workspaceFolder}", - "preLaunchTask": "build-v3" - } + "preLaunchTask": "build-v3", + "linux": { + "type": "cppdbg", + "request": "launch", + "name": "debug editor v3", + "program": "godot/bin/godot.windows.tools.64.exe", + }, + "osx": { + "type": "cppdbg", + "request": "launch", + "name": "debug editor v3", + "program": "godot/bin/godot.tools.64.exe", + }, + }, ] } \ No newline at end of file diff --git a/spine-godot/.vscode/tasks.json b/spine-godot/.vscode/tasks.json index 7daba2cb0..7724d5648 100644 --- a/spine-godot/.vscode/tasks.json +++ b/spine-godot/.vscode/tasks.json @@ -10,7 +10,7 @@ "cwd": "${workspaceFolder}/godot" }, "args": [ - "-j 8", + "-j 16", "dev_build=yes", "custom_modules=\"${workspaceFolder}/spine_godot" ], @@ -25,10 +25,18 @@ "cwd": "${workspaceFolder}/godot" }, "args": [ - "-j 8", - "debug", + "-j 16", + "target=debug", "custom_modules=\"${workspaceFolder}/spine_godot" ], + "windows": { + "args": [ + "-j 16", + "target=debug", + "custom_modules=\"${workspaceFolder}/spine_godot", + "livepp=${env:LIVEPP}" + ] + }, "problemMatcher": "$msCompile" } ] diff --git a/spine-godot/build/livepp.patch b/spine-godot/build/livepp.patch index e45be6175..6826e7ea8 100644 --- a/spine-godot/build/livepp.patch +++ b/spine-godot/build/livepp.patch @@ -1,17 +1,17 @@ diff --git a/methods.py b/methods.py -index 9b8cb38c0c1c0fd4ba2917815fdfb7efafb4b646..874e10bcc637632db26b4ac062a5359cd44eaa25 100644 +index 436fe63..d6c81b9 100644 --- a/methods.py +++ b/methods.py -@@ -688,6 +688,7 @@ def generate_vs_project(env, num_jobs): - "target=$(Configuration)", - "progress=no", - "tools=!tools!", -+ "livepp=%s" % env["livepp"], - "-j%s" % num_jobs, - ] +@@ -782,6 +782,7 @@ def generate_vs_project(env, num_jobs): + f"target={configuration_getter}", + "progress=no", + "tools=!tools!", ++ "livepp=%s" % env["livepp"], + "-j%s" % num_jobs, + ] diff --git a/platform/windows/detect.py b/platform/windows/detect.py -index e4facad816b7584fe38dc760356310e0a3937288..2d9da3df65cd3a0b0882ace984002320ebf6c3fc 100644 +index e6829ae..3a7e38d 100644 --- a/platform/windows/detect.py +++ b/platform/windows/detect.py @@ -44,7 +44,7 @@ def can_build(): @@ -23,7 +23,7 @@ index e4facad816b7584fe38dc760356310e0a3937288..2d9da3df65cd3a0b0882ace984002320 mingw32 = "" mingw64 = "" -@@ -72,6 +72,7 @@ def get_opts(): +@@ -73,6 +73,7 @@ def get_opts(): BoolVariable("use_thinlto", "Use ThinLTO", False), BoolVariable("use_static_cpp", "Link MinGW/MSVC C++ runtime libraries statically", True), BoolVariable("use_asan", "Use address sanitizer (ASAN)", False), @@ -31,7 +31,7 @@ index e4facad816b7584fe38dc760356310e0a3937288..2d9da3df65cd3a0b0882ace984002320 ] -@@ -296,6 +297,18 @@ def configure_msvc(env, manual_msvc_config): +@@ -305,6 +306,22 @@ def configure_msvc(env, manual_msvc_config): env.AppendUnique(LINKFLAGS=["/STACK:" + str(STACK_SIZE)]) @@ -39,19 +39,23 @@ index e4facad816b7584fe38dc760356310e0a3937288..2d9da3df65cd3a0b0882ace984002320 + # some sanity checks. + if env.get("livepp"): + if env["target"] == "release_debug" or env["target"] == "debug": -+ print("Found Live++ at %s" % env.get("livepp")) -+ env.AppendUnique(CPPDEFINES=["LIVEPP_PATH=%s" % env.get("livepp")]) -+ env.AppendUnique(CPPPATH=[env.get("livepp")]) -+ env.AppendUnique(LINKFLAGS=["/FUNCTIONPADMIN"]) ++ if os.path.exists(env.get("livepp")): ++ print("Found Live++ at %s" % env.get("livepp")) ++ env.AppendUnique(CPPDEFINES=["LIVEPP_PATH=%s" % env.get("livepp")]) ++ env.AppendUnique(CPPPATH=[env.get("livepp")]) ++ env.AppendUnique(LINKFLAGS=["/FUNCTIONPADMIN"]) ++ else: ++ printf("Specified Live++ path does not exist") + else: + print("Live++ can only be used with targets 'debug' and 'release_debug'") + else: + print("No Live++ specified.") ++ def configure_mingw(env): # Workaround for MinGW. See: diff --git a/platform/windows/godot_windows.cpp b/platform/windows/godot_windows.cpp -index d7d9e4eace00a696abbb47cb9632f40e183a4ec4..e362320e51c725cd01f292887bd93442752c1c48 100644 +index ef70c33..957158e 100644 --- a/platform/windows/godot_windows.cpp +++ b/platform/windows/godot_windows.cpp @@ -34,6 +34,11 @@ @@ -66,7 +70,7 @@ index d7d9e4eace00a696abbb47cb9632f40e183a4ec4..e362320e51c725cd01f292887bd93442 // For export templates, add a section; the exporter will patch it to enclose // the data appended to the executable (bundled PCK) #ifndef TOOLS_ENABLED -@@ -136,6 +141,16 @@ char *wc_to_utf8(const wchar_t *wc) { +@@ -147,6 +152,16 @@ char *wc_to_utf8(const wchar_t *wc) { } __declspec(dllexport) int widechar_main(int argc, wchar_t **argv) { @@ -83,7 +87,7 @@ index d7d9e4eace00a696abbb47cb9632f40e183a4ec4..e362320e51c725cd01f292887bd93442 OS_Windows os(NULL); setlocale(LC_CTYPE, ""); -@@ -170,6 +185,11 @@ __declspec(dllexport) int widechar_main(int argc, wchar_t **argv) { +@@ -180,6 +195,11 @@ __declspec(dllexport) int widechar_main(int argc, wchar_t **argv) { } delete[] argv_utf8; @@ -96,7 +100,7 @@ index d7d9e4eace00a696abbb47cb9632f40e183a4ec4..e362320e51c725cd01f292887bd93442 }; diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp -index 8b28cbf1f23d6574aac41a3676fea64ddf786fc4..0124d4ac9652df9ba682ab8cc18b4008461d74cf 100644 +index 4977d11..6642be9 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp @@ -53,6 +53,11 @@ @@ -111,7 +115,7 @@ index 8b28cbf1f23d6574aac41a3676fea64ddf786fc4..0124d4ac9652df9ba682ab8cc18b4008 static const WORD MAX_CONSOLE_LINES = 1500; extern "C" { -@@ -3371,6 +3376,9 @@ void OS_Windows::run() { +@@ -3542,6 +3547,9 @@ void OS_Windows::run() { process_events(); // get rid of pending events if (Main::iteration()) break; diff --git a/spine-godot/build/setup.sh b/spine-godot/build/setup.sh index 9e85a8532..6085f78c8 100755 --- a/spine-godot/build/setup.sh +++ b/spine-godot/build/setup.sh @@ -29,8 +29,13 @@ if [ $dev = "true" ]; then if [ "$OSTYPE" = "msys" ]; then pushd godot - git apply ../build/livepp.patch - git apply ../build/livepp-v4.patch + if [[ $branch == 3* ]]; then + echo "Applying V3 Live++ patch" + git apply ../build/livepp.patch + else + echo "Applying V4 Live++ patch" + git apply ../build/livepp-v4.patch + fi popd fi diff --git a/spine-godot/spine_godot/SpineEditorPlugin.cpp b/spine-godot/spine_godot/SpineEditorPlugin.cpp index 4ecdb6594..1c6e8e09c 100644 --- a/spine-godot/spine_godot/SpineEditorPlugin.cpp +++ b/spine-godot/spine_godot/SpineEditorPlugin.cpp @@ -31,9 +31,9 @@ #include "SpineEditorPlugin.h" #include "SpineAtlasResource.h" #include "SpineSkeletonFileResource.h" -#include "editor/editor_undo_redo_manager.h" #if VERSION_MAJOR > 3 +#include "editor/editor_undo_redo_manager.h" Error SpineAtlasResourceImportPlugin::import(const String &source_file, const String &save_path, const HashMap &options, List *platform_variants, List *gen_files, Variant *metadata) { #else Error SpineAtlasResourceImportPlugin::import(const String &source_file, const String &save_path, const Map &options, List *platform_variants, List *gen_files, Variant *metadata) { From 63d0cb5ed20c102611b176d3b4166cdd564c8fe8 Mon Sep 17 00:00:00 2001 From: badlogic Date: Tue, 24 Jan 2023 17:41:11 +0100 Subject: [PATCH 3/4] [godot] Fixe Live++ patch for v4, fix VSC build task. --- spine-godot/.vscode/tasks.json | 22 +++- spine-godot/build/build-templates-v4.sh | 127 ++++++++++++++++++++++++ spine-godot/build/build-v4.sh | 75 ++++++++++++++ spine-godot/build/livepp-v4.patch | 51 +++++----- 4 files changed, 247 insertions(+), 28 deletions(-) create mode 100644 spine-godot/build/build-templates-v4.sh create mode 100644 spine-godot/build/build-v4.sh diff --git a/spine-godot/.vscode/tasks.json b/spine-godot/.vscode/tasks.json index 7724d5648..3305fafb3 100644 --- a/spine-godot/.vscode/tasks.json +++ b/spine-godot/.vscode/tasks.json @@ -10,11 +10,23 @@ "cwd": "${workspaceFolder}/godot" }, "args": [ - "-j 16", + "-j", + "16", + "target=editor", "dev_build=yes", "custom_modules=\"${workspaceFolder}/spine_godot" ], - "problemMatcher": "$msCompile" + "problemMatcher": "$msCompile", + "windows": { + "args": [ + "-j", + "16", + "target=editor", + "dev_build=yes", + "custom_modules=\"${workspaceFolder}/spine_godot", + "livepp=${env:LIVEPP}" + ] + }, }, { "label": "build-v3", @@ -25,13 +37,15 @@ "cwd": "${workspaceFolder}/godot" }, "args": [ - "-j 16", + "-j", + "16", "target=debug", "custom_modules=\"${workspaceFolder}/spine_godot" ], "windows": { "args": [ - "-j 16", + "-j", + "16", "target=debug", "custom_modules=\"${workspaceFolder}/spine_godot", "livepp=${env:LIVEPP}" diff --git a/spine-godot/build/build-templates-v4.sh b/spine-godot/build/build-templates-v4.sh new file mode 100644 index 000000000..57bc7cfac --- /dev/null +++ b/spine-godot/build/build-templates-v4.sh @@ -0,0 +1,127 @@ +#!/bin/bash +set -e + +dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" +pushd $dir > /dev/null + +if [ ! "$#" -eq 1 ]; then + echo "Usage: ./build-templates.sh " + echo + echo "e.g.:" + echo " ./build-templates.sh windows" + echo " ./build-templates.sh linux" + echo " ./build-templates.sh macos" + echo " ./build-templates.sh ios" + echo " ./build-templates.sh android" + echo " ./build-templates.sh web" + echo + exit 1 +fi + +if [ ! -d ../godot ]; then + echo "No Godot clone found. Run ./setup.sh first." + exit 1 +fi + +platform=${1%/} + +cpus=2 +if [ "$OSTYPE" = "msys" ]; then + cpus=$NUMBER_OF_PROCESSORS +elif [[ "$OSTYPE" = "darwin"* ]]; then + cpus=$(sysctl -n hw.logicalcpu) +else + cpus=$(grep -c ^processor /proc/cpuinfo) +fi + +pushd ../godot +if [ "$platform" = "windows" ]; then + # --- Windows --- + #generates windows_64_debug.exe and windows_64_release.exe + scons platform=windows tools=no target=release custom_modules="../spine_godot" --jobs=$cpus + scons platform=windows tools=no target=release_debug custom_modules="../spine_godot" --jobs=$cpus + cp bin/godot.windows.opt.64.exe bin/windows_64_release.exe + cp bin/godot.windows.opt.debug.64.exe bin/windows_64_debug.exe + +elif [ "$platform" = "macos" ]; then + # --- macOS --- + # generates osx.zip + + scons platform=osx tools=no target=release arch=x86_64 custom_modules="../spine_godot" --jobs=$cpus + scons platform=osx tools=no target=release_debug arch=x86_64 custom_modules="../spine_godot" --jobs=$cpus + scons platform=osx tools=no target=release arch=arm64 custom_modules="../spine_godot" --jobs=$cpus + scons platform=osx tools=no target=release_debug arch=arm64 custom_modules="../spine_godot" --jobs=$cpus + lipo -create bin/godot.osx.opt.x86_64 bin/godot.osx.opt.arm64 -output bin/godot.osx.opt.universal + lipo -create bin/godot.osx.opt.debug.x86_64 bin/godot.osx.opt.debug.arm64 -output bin/godot.osx.opt.debug.universal + strip -S -x bin/godot.osx.opt.universal + + pushd bin + cp -r ../misc/dist/osx_template.app . + mkdir -p osx_template.app/Contents/MacOS + cp godot.osx.opt.universal osx_template.app/Contents/MacOS/godot_osx_release.64 + cp godot.osx.opt.debug.universal osx_template.app/Contents/MacOS/godot_osx_debug.64 + chmod +x osx_template.app/Contents/MacOS/godot_osx* + rm -rf osx.zip + zip -q -9 -r osx.zip osx_template.app + popd +elif [ "$platform" = "ios" ]; then + # --- iOS -- + # generates iphone.zip + + scons p=iphone tools=no target=release arch=arm64 custom_modules="../spine_godot" --jobs=$cpus + scons p=iphone tools=no target=release_debug arch=arm64 custom_modules="../spine_godot" --jobs=$cpus + scons p=iphone tools=no target=release arch=arm64 ios_simulator=yes custom_modules="../spine_godot" --jobs=$cpus + scons p=iphone tools=no target=release arch=x86_64 ios_simulator=yes custom_modules="../spine_godot" --jobs=$cpus + scons p=iphone tools=no target=release_debug arch=arm64 ios_simulator=yes custom_modules="../spine_godot" --jobs=$cpus + scons p=iphone tools=no target=release_debug arch=x86_64 ios_simulator=yes custom_modules="../spine_godot" --jobs=$cpus + lipo -create bin/libgodot.iphone.opt.arm64.simulator.a bin/libgodot.iphone.opt.x86_64.simulator.a -output bin/libgodot.iphone.opt.simulator.a + lipo -create bin/libgodot.iphone.opt.debug.arm64.simulator.a bin/libgodot.iphone.opt.debug.x86_64.simulator.a -output bin/libgodot.iphone.opt.debug.simulator.a + strip -S -x bin/libgodot.iphone.opt.arm64.a + strip -S -x bin/libgodot.iphone.opt.simulator.a + + pushd bin + cp -r ../misc/dist/ios_xcode . + cp libgodot.iphone.opt.arm64.a ios_xcode/libgodot.iphone.release.xcframework/ios-arm64/libgodot.a + cp libgodot.iphone.opt.simulator.a ios_xcode/libgodot.iphone.release.xcframework/ios-arm64_x86_64-simulator/libgodot.a + cp libgodot.iphone.opt.debug.arm64.a ios_xcode/libgodot.iphone.debug.xcframework/ios-arm64/libgodot.a + cp libgodot.iphone.opt.debug.simulator.a ios_xcode/libgodot.iphone.debug.xcframework/ios-arm64_x86_64-simulator/libgodot.a + rm -rf iphone.zip + pushd ios_xcode + zip -q -9 -r ../iphone.zip * + popd + popd +elif [ "$platform" = "web" ]; then + # --- WEB --- + # generates webassembly_debug.zip, webassembly_release.zip + scons platform=javascript tools=no target=release custom_modules="../spine_godot" --jobs=$cpus + scons platform=javascript tools=no target=release_debug custom_modules="../spine_godot" --jobs=$cpus + mv bin/godot.javascript.opt.zip bin/webassembly_release.zip + mv bin/godot.javascript.opt.debug.zip bin/webassembly_debug.zip +elif [ "$platform" = "android" ]; then + # --- ANROID --- + # generates android_release.apk, android_debug.apk, android_source.zip + scons platform=android target=release android_arch=armv7 custom_modules="../spine_godot" --jobs=$cpus + scons platform=android target=release_debug android_arch=armv7 custom_modules="../spine_godot" --jobs=$cpus + scons platform=android target=release android_arch=arm64v8 custom_modules="../spine_godot" --jobs=$cpus + scons platform=android target=release_debug android_arch=arm64v8 custom_modules="../spine_godot" --jobs=$cpus + + pushd platform/android/java + chmod a+x gradlew + ./gradlew generateGodotTemplates + popd +elif [ "$platform" = "linux" ]; then + # --- Linix --- + # generates linux_x11_64_release, linux_x11_64_debug + scons platform=x11 tools=no target=release bits=64 custom_modules="../spine_godot" --jobs=$cpus + scons platform=x11 tools=no target=release_debug bits=64 custom_modules="../spine_godot" --jobs=$cpus + strip bin/godot.x11.opt.64 + strip bin/godot.x11.opt.debug.64 + chmod a+x bin/godot.x11.opt.64 + chmod a+x bin/godot.x11.opt.debug.64 + cp bin/godot.x11.opt.64 bin/linux_x11_64_release + cp bin/godot.x11.opt.debug.64 bin/linux_x11_64_debug +else + echo "Unknown platform: $platform" + exit 1 +fi +popd diff --git a/spine-godot/build/build-v4.sh b/spine-godot/build/build-v4.sh new file mode 100644 index 000000000..652f37375 --- /dev/null +++ b/spine-godot/build/build-v4.sh @@ -0,0 +1,75 @@ +#!/bin/bash +set -e + +dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" +pushd $dir > /dev/null + +if [ ! "$#" -eq 1 ]; then + echo "Usage: ./build-v4.sh " + echo + echo "e.g.:" + echo " ./build.sh editor" + echo " ./build.sh template_debug" + echo + exit 1 +fi + +if [ ! -d ../godot ]; then + echo "No Godot clone found. Run ./setup.sh first." + exit 1 +fi + +target="target=${1%/}" +dev="false" +if [ -f "../godot/custom.py" ]; then + dev="true" +fi + +cpus=2 +if [ "$OSTYPE" = "msys" ]; then + cpus=$NUMBER_OF_PROCESSORS +elif [[ "$OSTYPE" = "darwin"* ]]; then + cpus=$(sysctl -n hw.logicalcpu) +else + cpus=$(grep -c ^processor /proc/cpuinfo) +fi + +echo "CPUS: $cpus" + +pushd ../godot +if [ `uname` == 'Darwin' ] && [ $dev = "false" ]; then + scons $target arch=x86_64 compiledb=yes custom_modules="../spine_godot" --jobs=$cpus + scons $target arch=arm64 compiledb=yes custom_modules="../spine_godot" --jobs=$cpus + + pushd bin + cp -r ../misc/dist/osx_tools.app . + mv osx_tools.app Godot.app + mkdir -p Godot.app/Contents/MacOS + if [ "$target" = "debug" ]; then + lipo -create godot.osx.tools.x86_64 godot.osx.tools.arm64 -output godot.osx.tools.universal + strip -S -x godot.osx.tools.universal + cp godot.osx.tools.universal Godot.app/Contents/MacOS/Godot + else + lipo -create godot.osx.opt.tools.x86_64 godot.osx.opt.tools.arm64 -output godot.osx.opt.tools.universal + strip -S -x godot.osx.opt.tools.universal + cp godot.osx.opt.tools.universal Godot.app/Contents/MacOS/Godot + fi + chmod +x Godot.app/Contents/MacOS/Godot + popd +else + if [ "$OSTYPE" = "msys" ]; then + target="$target vsproj=yes livepp=$LIVEPP" + fi + if [ "$dev" = "true" ]; then + target="$target dev_build=true" + fi + scons $target compiledb=yes custom_modules="../spine_godot" --jobs=$cpus + cp compile_commands.json ../build + if [ -f "bin/godot.x11.opt.tools.64" ]; then + strip bin/godot.x11.opt.tools.64 + chmod a+x bin/godot.x11.opt.tools.64 + fi +fi +popd + +popd > /dev/null \ No newline at end of file diff --git a/spine-godot/build/livepp-v4.patch b/spine-godot/build/livepp-v4.patch index 7557a8351..b5cabc509 100644 --- a/spine-godot/build/livepp-v4.patch +++ b/spine-godot/build/livepp-v4.patch @@ -1,58 +1,60 @@ diff --git a/methods.py b/methods.py -index fe84641e9d0625b4f0c4d90a65839337d6120ff8..51ef8550d3a9def0a2ff88a2fde4fa096c085de9 100644 +index 7ede259..4e0b2e6 100644 --- a/methods.py +++ b/methods.py -@@ -734,6 +734,7 @@ def generate_vs_project(env, num_jobs): +@@ -809,6 +809,7 @@ def generate_vs_project(env, num_jobs): + "platform=windows", f"target={configuration_getter}", "progress=no", - "tools=!tools!", + "livepp=%s" % env["livepp"], "-j%s" % num_jobs, ] diff --git a/platform/windows/detect.py b/platform/windows/detect.py -index 0b18fb74fb145e4d2e88ee91abe99f8f39312a46..04880a8fa8209c4002b49f964d86227974ce9ca8 100644 +index 1b55574..8bc0fb1 100644 --- a/platform/windows/detect.py +++ b/platform/windows/detect.py -@@ -44,7 +44,7 @@ def can_build(): +@@ -164,7 +164,7 @@ def detect_build_env_arch(): def get_opts(): - from SCons.Variables import BoolVariable, EnumVariable + from SCons.Variables import BoolVariable, EnumVariable, PathVariable - mingw32 = "" - mingw64 = "" -@@ -73,6 +73,7 @@ def get_opts(): - BoolVariable("use_thinlto", "Use ThinLTO", False), + mingw = os.getenv("MINGW_PREFIX", "") + +@@ -189,6 +189,7 @@ def get_opts(): BoolVariable("use_static_cpp", "Link MinGW/MSVC C++ runtime libraries statically", True), BoolVariable("use_asan", "Use address sanitizer (ASAN)", False), + BoolVariable("debug_crt", "Compile with MSVC's debug CRT (/MDd)", False), + PathVariable("livepp", "Path to the Live++ installation", "", PathVariable.PathAccept), ] -@@ -310,6 +311,19 @@ def configure_msvc(env, manual_msvc_config): +@@ -458,6 +459,21 @@ def configure_msvc(env, vcvars_msvc_config): env.AppendUnique(LINKFLAGS=["/STACK:" + str(STACK_SIZE)]) + # Check if LIVEPP_PATH is set and add #define. Perform + # some sanity checks. + if env.get("livepp"): -+ if env["target"] == "release_debug" or env["target"] == "debug": -+ print("Found Live++ at %s" % env.get("livepp")) -+ env.AppendUnique(CPPDEFINES=["LIVEPP_PATH=%s" % env.get("livepp")]) -+ env.AppendUnique(CPPPATH=[env.get("livepp")]) -+ env.AppendUnique(LINKFLAGS=["/FUNCTIONPADMIN"]) ++ if env["target"] == "editor": ++ if os.path.exists(env.get("livepp")): ++ print("Found Live++ at %s" % env.get("livepp")) ++ env.AppendUnique(CPPDEFINES=["LIVEPP_PATH=%s" % env.get("livepp")]) ++ env.AppendUnique(CPPPATH=[env.get("livepp")]) ++ env.AppendUnique(LINKFLAGS=["/FUNCTIONPADMIN"]) ++ else: ++ printf("Specified Live++ path does not exist") + else: -+ print("Live++ can only be used with targets 'debug' and 'release_debug'") ++ print("Live++ can only be used with targets 'editor'") + else: + print("No Live++ specified.") -+ def configure_mingw(env): # Workaround for MinGW. See: diff --git a/platform/windows/godot_windows.cpp b/platform/windows/godot_windows.cpp -index 8de3ef294a99c6f02f6f1380e331e4bb598864ce..8e4c15dd66d1b640a352ed826b25b23917f72cc4 100644 +index a26d3ba..8b8e2a8 100644 --- a/platform/windows/godot_windows.cpp +++ b/platform/windows/godot_windows.cpp @@ -34,6 +34,11 @@ @@ -67,7 +69,7 @@ index 8de3ef294a99c6f02f6f1380e331e4bb598864ce..8e4c15dd66d1b640a352ed826b25b239 // For export templates, add a section; the exporter will patch it to enclose // the data appended to the executable (bundled PCK) #ifndef TOOLS_ENABLED -@@ -147,6 +152,16 @@ char *wc_to_utf8(const wchar_t *wc) { +@@ -149,6 +154,16 @@ char *wc_to_utf8(const wchar_t *wc) { } int widechar_main(int argc, wchar_t **argv) { @@ -84,7 +86,7 @@ index 8de3ef294a99c6f02f6f1380e331e4bb598864ce..8e4c15dd66d1b640a352ed826b25b239 OS_Windows os(nullptr); setlocale(LC_CTYPE, ""); -@@ -179,6 +194,11 @@ int widechar_main(int argc, wchar_t **argv) { +@@ -185,6 +200,11 @@ int widechar_main(int argc, wchar_t **argv) { } delete[] argv_utf8; @@ -97,12 +99,12 @@ index 8de3ef294a99c6f02f6f1380e331e4bb598864ce..8e4c15dd66d1b640a352ed826b25b239 } diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp -index 8755bc65dce7e4b88fd509d0cbdbec576356c5f5..50e0d8d0b06bf76d5f4d085d010cf6a683a9e64f 100644 +index 08299d9..362de3b 100644 --- a/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp -@@ -53,6 +53,11 @@ - #include +@@ -55,6 +55,11 @@ #include + #include +#ifdef LIVEPP_PATH +#include "API/LPP_API.h" @@ -112,10 +114,11 @@ index 8755bc65dce7e4b88fd509d0cbdbec576356c5f5..50e0d8d0b06bf76d5f4d085d010cf6a6 extern "C" { __declspec(dllexport) DWORD NvOptimusEnablement = 1; __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; -@@ -677,6 +682,9 @@ void OS_Windows::run() { +@@ -1296,6 +1301,10 @@ void OS_Windows::run() { if (Main::iteration()) { break; } ++ +#ifdef LIVEPP_PATH + lpp::lppSyncPoint(livePP); +#endif From 1914c7eac5a97f85e5e973eef2a2499505b62ad4 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Tue, 24 Jan 2023 20:51:21 +0100 Subject: [PATCH 4/4] [godot] Fix S3 upload. --- .github/workflows/spine-godot.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/spine-godot.yml b/.github/workflows/spine-godot.yml index 6755d8c82..2ee44e09f 100644 --- a/.github/workflows/spine-godot.yml +++ b/.github/workflows/spine-godot.yml @@ -350,8 +350,8 @@ jobs: run: | BRANCH=${GITHUB_REF#refs/heads/} echo "branch: $BRANCH" - mv godot.windows.opt.tools.64.s.exe godot-$BRANCH-$GODOT_TAG.exe - mv godot.x11.opt.tools.64s godot-$BRANCH-$GODOT_TAG + mv godot.windows.opt.tools.64.exe godot-$BRANCH-$GODOT_TAG.exe + mv godot.x11.opt.tools.64 godot-$BRANCH-$GODOT_TAG zip godot-editor-windows.zip godot-$BRANCH-$GODOT_TAG.exe zip godot-editor-linux.zip godot-$BRANCH-$GODOT_TAG aws s3 cp godot-editor-windows.zip s3://spine-godot/$BRANCH/$GODOT_TAG/