[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"
},
"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}"

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
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 <regstr.h>
@@ -55,6 +55,11 @@
#include <shlobj.h>
#include <wbemcli.h>
+#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