spine-runtimes/spine-godot/build/livepp-v4.patch
2023-01-25 10:54:35 +01:00

128 lines
3.8 KiB
Diff

diff --git a/methods.py b/methods.py
index 7ede259..4e0b2e6 100644
--- a/methods.py
+++ b/methods.py
@@ -809,6 +809,7 @@ def generate_vs_project(env, num_jobs):
"platform=windows",
f"target={configuration_getter}",
"progress=no",
+ "livepp=%s" % env["livepp"],
"-j%s" % num_jobs,
]
diff --git a/platform/windows/detect.py b/platform/windows/detect.py
index 1b55574..8bc0fb1 100644
--- a/platform/windows/detect.py
+++ b/platform/windows/detect.py
@@ -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
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),
]
@@ -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"] == "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:
+ print("Specified Live++ path does not exist")
+ else:
+ 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 a26d3ba..8b8e2a8 100644
--- a/platform/windows/godot_windows.cpp
+++ b/platform/windows/godot_windows.cpp
@@ -34,6 +34,11 @@
#include <locale.h>
#include <stdio.h>
+#ifdef LIVEPP_PATH
+#include "API/LPP_API.h"
+HMODULE livePP;
+#endif
+
// For export templates, add a section; the exporter will patch it to enclose
// the data appended to the executable (bundled PCK)
#ifndef TOOLS_ENABLED
@@ -149,6 +154,16 @@ char *wc_to_utf8(const wchar_t *wc) {
}
int widechar_main(int argc, wchar_t **argv) {
+#ifdef LIVEPP_PATH
+#define _MKSTR_L(x) _STR_L(x)
+#define _STR_L(x) L#x
+ livePP = lpp::lppLoadAndRegister(_MKSTR_L(LIVEPP_PATH), "Godot");
+ lpp::lppEnableAllCallingModulesSync(livePP);
+ lpp::lppInstallExceptionHandler(livePP);
+#undef _MKSTR_L
+#undef _STR_L
+#endif
+
OS_Windows os(nullptr);
setlocale(LC_CTYPE, "");
@@ -185,6 +200,11 @@ int widechar_main(int argc, wchar_t **argv) {
}
delete[] argv_utf8;
+#ifdef LIVEPP_PATH
+ lpp::lppShutdown(livePP);
+ ::FreeLibrary(livePP);
+#endif
+
return os.get_exit_code();
}
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index 08299d9..362de3b 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -55,6 +55,11 @@
#include <shlobj.h>
#include <wbemcli.h>
+#ifdef LIVEPP_PATH
+#include "API/LPP_API.h"
+extern HMODULE livePP;
+#endif
+
extern "C" {
__declspec(dllexport) DWORD NvOptimusEnablement = 1;
__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
@@ -1296,6 +1301,10 @@ void OS_Windows::run() {
if (Main::iteration()) {
break;
}
+
+#ifdef LIVEPP_PATH
+ lpp::lppSyncPoint(livePP);
+#endif
}
main_loop->finalize();