[godot] Fixe Live++ patch for v4, fix VSC build task.

This commit is contained in:
badlogic 2023-01-24 17:41:11 +01:00
parent 0b5621ccd4
commit 63d0cb5ed2
4 changed files with 247 additions and 28 deletions

View File

@ -10,11 +10,23 @@
"cwd": "${workspaceFolder}/godot" "cwd": "${workspaceFolder}/godot"
}, },
"args": [ "args": [
"-j 16", "-j",
"16",
"target=editor",
"dev_build=yes", "dev_build=yes",
"custom_modules=\"${workspaceFolder}/spine_godot" "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", "label": "build-v3",
@ -25,13 +37,15 @@
"cwd": "${workspaceFolder}/godot" "cwd": "${workspaceFolder}/godot"
}, },
"args": [ "args": [
"-j 16", "-j",
"16",
"target=debug", "target=debug",
"custom_modules=\"${workspaceFolder}/spine_godot" "custom_modules=\"${workspaceFolder}/spine_godot"
], ],
"windows": { "windows": {
"args": [ "args": [
"-j 16", "-j",
"16",
"target=debug", "target=debug",
"custom_modules=\"${workspaceFolder}/spine_godot", "custom_modules=\"${workspaceFolder}/spine_godot",
"livepp=${env:LIVEPP}" "livepp=${env:LIVEPP}"

View File

@ -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 <platform>"
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 <Godot branch or tag> <dev> 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

View File

@ -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 <target>"
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 <Godot branch or tag> <dev> 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

View File

@ -1,58 +1,60 @@
diff --git a/methods.py b/methods.py diff --git a/methods.py b/methods.py
index fe84641e9d0625b4f0c4d90a65839337d6120ff8..51ef8550d3a9def0a2ff88a2fde4fa096c085de9 100644 index 7ede259..4e0b2e6 100644
--- a/methods.py --- a/methods.py
+++ b/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}", f"target={configuration_getter}",
"progress=no", "progress=no",
"tools=!tools!",
+ "livepp=%s" % env["livepp"], + "livepp=%s" % env["livepp"],
"-j%s" % num_jobs, "-j%s" % num_jobs,
] ]
diff --git a/platform/windows/detect.py b/platform/windows/detect.py 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 --- a/platform/windows/detect.py
+++ b/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(): def get_opts():
- from SCons.Variables import BoolVariable, EnumVariable - from SCons.Variables import BoolVariable, EnumVariable
+ from SCons.Variables import BoolVariable, EnumVariable, PathVariable + from SCons.Variables import BoolVariable, EnumVariable, PathVariable
mingw32 = "" mingw = os.getenv("MINGW_PREFIX", "")
mingw64 = ""
@@ -73,6 +73,7 @@ def get_opts(): @@ -189,6 +189,7 @@ def get_opts():
BoolVariable("use_thinlto", "Use ThinLTO", False),
BoolVariable("use_static_cpp", "Link MinGW/MSVC C++ runtime libraries statically", True), BoolVariable("use_static_cpp", "Link MinGW/MSVC C++ runtime libraries statically", True),
BoolVariable("use_asan", "Use address sanitizer (ASAN)", False), 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), + 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)]) env.AppendUnique(LINKFLAGS=["/STACK:" + str(STACK_SIZE)])
+ # Check if LIVEPP_PATH is set and add #define. Perform + # Check if LIVEPP_PATH is set and add #define. Perform
+ # some sanity checks. + # some sanity checks.
+ if env.get("livepp"): + if env.get("livepp"):
+ if env["target"] == "release_debug" or env["target"] == "debug": + if env["target"] == "editor":
+ print("Found Live++ at %s" % env.get("livepp")) + if os.path.exists(env.get("livepp")):
+ env.AppendUnique(CPPDEFINES=["LIVEPP_PATH=%s" % env.get("livepp")]) + print("Found Live++ at %s" % env.get("livepp"))
+ env.AppendUnique(CPPPATH=[env.get("livepp")]) + env.AppendUnique(CPPDEFINES=["LIVEPP_PATH=%s" % env.get("livepp")])
+ env.AppendUnique(LINKFLAGS=["/FUNCTIONPADMIN"]) + env.AppendUnique(CPPPATH=[env.get("livepp")])
+ env.AppendUnique(LINKFLAGS=["/FUNCTIONPADMIN"])
+ else:
+ printf("Specified Live++ path does not exist")
+ else: + else:
+ print("Live++ can only be used with targets 'debug' and 'release_debug'") + print("Live++ can only be used with targets 'editor'")
+ else: + else:
+ print("No Live++ specified.") + print("No Live++ specified.")
+
def configure_mingw(env): def configure_mingw(env):
# Workaround for MinGW. See: # Workaround for MinGW. See:
diff --git a/platform/windows/godot_windows.cpp b/platform/windows/godot_windows.cpp 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 --- a/platform/windows/godot_windows.cpp
+++ b/platform/windows/godot_windows.cpp +++ b/platform/windows/godot_windows.cpp
@@ -34,6 +34,11 @@ @@ -34,6 +34,11 @@
@ -67,7 +69,7 @@ index 8de3ef294a99c6f02f6f1380e331e4bb598864ce..8e4c15dd66d1b640a352ed826b25b239
// For export templates, add a section; the exporter will patch it to enclose // For export templates, add a section; the exporter will patch it to enclose
// the data appended to the executable (bundled PCK) // the data appended to the executable (bundled PCK)
#ifndef TOOLS_ENABLED #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) { int widechar_main(int argc, wchar_t **argv) {
@ -84,7 +86,7 @@ index 8de3ef294a99c6f02f6f1380e331e4bb598864ce..8e4c15dd66d1b640a352ed826b25b239
OS_Windows os(nullptr); OS_Windows os(nullptr);
setlocale(LC_CTYPE, ""); 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; delete[] argv_utf8;
@ -97,12 +99,12 @@ index 8de3ef294a99c6f02f6f1380e331e4bb598864ce..8e4c15dd66d1b640a352ed826b25b239
} }
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp 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 --- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp +++ b/platform/windows/os_windows.cpp
@@ -53,6 +53,11 @@ @@ -55,6 +55,11 @@
#include <regstr.h>
#include <shlobj.h> #include <shlobj.h>
#include <wbemcli.h>
+#ifdef LIVEPP_PATH +#ifdef LIVEPP_PATH
+#include "API/LPP_API.h" +#include "API/LPP_API.h"
@ -112,10 +114,11 @@ index 8755bc65dce7e4b88fd509d0cbdbec576356c5f5..50e0d8d0b06bf76d5f4d085d010cf6a6
extern "C" { extern "C" {
__declspec(dllexport) DWORD NvOptimusEnablement = 1; __declspec(dllexport) DWORD NvOptimusEnablement = 1;
__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 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()) { if (Main::iteration()) {
break; break;
} }
+
+#ifdef LIVEPP_PATH +#ifdef LIVEPP_PATH
+ lpp::lppSyncPoint(livePP); + lpp::lppSyncPoint(livePP);
+#endif +#endif