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