Adds support for Angelscript debugger.
continuous-integration/drone/push Build is failing Details

This commit is contained in:
Deukhoofd 2021-10-22 15:11:52 +02:00
parent 0ebac13c14
commit af50f1cc74
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
9 changed files with 39 additions and 19 deletions

View File

@ -4,6 +4,10 @@ name: default
type: docker type: docker
steps: steps:
- name: submodules
image: alpine/git
commands:
- git submodule update --init --recursive
- name: test-debug-linux - name: test-debug-linux
image: deukhoofd/linux64builder image: deukhoofd/linux64builder
environment: environment:
@ -53,6 +57,6 @@ steps:
- wine64 build-release-windows/pkmnLibTests.exe -s --duration=true --force-colors=true - wine64 build-release-windows/pkmnLibTests.exe -s --duration=true --force-colors=true
--- ---
kind: signature kind: signature
hmac: 72d8b9f3bc34aa773df18741607d197ffaff94e6692deb55cc139715e1726755 hmac: b3b11a98050648beb846956c73c1fccb44395297c7bac25c7f26106d0af5b46f
... ...

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "extern/AngelscriptDebuggerServer"]
path = extern/AngelscriptDebuggerServer
url = https://git.p-epsilon.com/Deukhoofd/AngelscriptDebuggerServer.git

View File

@ -50,4 +50,10 @@ export uint8_t PkmnLib_AngelScriptResolver_RegisterGlobalMethod(AngelScriptResol
void*(func)(void*)) { void*(func)(void*)) {
Try(p->RegisterGlobalMethod(decl, func);) Try(p->RegisterGlobalMethod(decl, func);)
} }
export void PkmnLib_AngelScriptResolve_DefineWord(AngelScriptResolver* p, const char* word) { p->DefineWord(word); } export void PkmnLib_AngelScriptResolver_DefineWord(AngelScriptResolver* p, const char* word) { p->DefineWord(word); }
export void PkmnLib_AngelScriptResolver_AddDebugger(AngelScriptResolver* p, u16 port) {
auto* d = new AngelscriptDebugger();
d->Run(port);
p->SetDebugger(d);
}

View File

@ -92,6 +92,7 @@ if (SCRIPT_PROVIDER STREQUAL "angelscript")
"extern/angelscript_addons/*.h" "extern/angelscript_addons/*.h"
"CInterface/AngelScript/*.cpp" "CInterface/AngelScript/*.cpp"
"CInterface/AngelScript/*.hpp" "CInterface/AngelScript/*.hpp"
"extern/AngelscriptDebuggerServer/src/*.cpp"
) )
ADD_DEFINITIONS(-D AS_USE_ACCESSORS=1) ADD_DEFINITIONS(-D AS_USE_ACCESSORS=1)
endif () endif ()
@ -140,13 +141,13 @@ endif ()
if (STATICC) if (STATICC)
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed") set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed")
message(STATUS "Linking C library statically") message(STATUS "Linking C library statically")
set(_LINKS ${_LINKS} -static-libgcc -static-libstdc++ -Wl,-Bstatic -lm -lstdc++ -lpthread -Wl,-Bdynamic) set(_LINKS ${_LINKS} -Wl,-Bstatic -lm -lgcc -lstdc++ -Wl,-Bdynamic)
SET(_TESTLINKS ${_TESTLINKS} -static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic) SET(_TESTLINKS ${_TESTLINKS} -Wl,-Bstatic -lm -lgcc -lstdc++ -Wl,-Bdynamic)
else () else ()
SET(_LINKS ${_LINKS} -Wl,--whole-archive -lpthread -Wl,--no-whole-archive) SET(_LINKS ${_LINKS} -Wl,--whole-archive -lpthread -Wl,--no-whole-archive)
endif () endif ()
target_link_libraries(pkmnLib PUBLIC ${_LINKS}) target_link_libraries(pkmnLib PRIVATE ${_LINKS})
if (TESTS) if (TESTS)
# Create Test executable # Create Test executable
@ -162,9 +163,4 @@ if (TESTS)
target_compile_definitions(pkmnLibTests PRIVATE TESTS_BUILD) target_compile_definitions(pkmnLibTests PRIVATE TESTS_BUILD)
endif () endif ()
include_directories(extern/AngelscriptDebuggerServer/extern/asio-1.18.2/include)

View File

@ -14,6 +14,7 @@ ExternalProject_Add(AngelscriptProj
TEST_COMMAND "" TEST_COMMAND ""
) )
function(include_angelscript) function(include_angelscript)
configure_file(CMakeLists.txt.angelscript.in Angelscript/download/CMakeLists.txt) configure_file(CMakeLists.txt.angelscript.in Angelscript/download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .

1
extern/AngelscriptDebuggerServer vendored Submodule

@ -0,0 +1 @@
Subproject commit 6e99c5183e04c614ed7c5638d13115c62c9bd667

View File

@ -121,7 +121,7 @@ void AngelScriptResolver::Initialize(CreatureLib::Battling::BattleLibrary* arg,
_engine->RegisterGlobalProperty("const StaticLibrary@ StaticLib", (void*)staticLib.get()); _engine->RegisterGlobalProperty("const StaticLibrary@ StaticLib", (void*)staticLib.get());
} }
_contextPool = new ContextPool(_engine, _userData); _contextPool = new ContextPool(this, _userData);
asPrepareMultithread(); asPrepareMultithread();
} }

View File

@ -3,6 +3,7 @@
#include <CreatureLib/Battling/ScriptHandling/ScriptResolver.hpp> #include <CreatureLib/Battling/ScriptHandling/ScriptResolver.hpp>
#include <mutex> #include <mutex>
#include "../../../extern/AngelscriptDebuggerServer/src/AngelscriptDebugger.hpp"
#include "../../../extern/angelscript_addons/scriptbuilder/scriptbuilder.h" #include "../../../extern/angelscript_addons/scriptbuilder/scriptbuilder.h"
#include "../../Battling/Library/BattleLibrary.hpp" #include "../../Battling/Library/BattleLibrary.hpp"
#include "AngelScriptEvolutionScript.hpp" #include "AngelScriptEvolutionScript.hpp"
@ -24,6 +25,7 @@ private:
CScriptBuilder _builder = {}; CScriptBuilder _builder = {};
std::string _sourceDirectory = {}; std::string _sourceDirectory = {};
AngelscriptUserdata* _userData; AngelscriptUserdata* _userData;
ArbUt::OptionalUniquePtr<AngelscriptDebugger> _debugger;
ArbUt::Dictionary<ScriptCategory, ArbUt::Dictionary<ArbUt::StringView, AngelScriptTypeInfo*>> _typeDatabase; ArbUt::Dictionary<ScriptCategory, ArbUt::Dictionary<ArbUt::StringView, AngelScriptTypeInfo*>> _typeDatabase;
ArbUt::Dictionary<ArbUt::StringView, asITypeInfo*> _baseTypes; ArbUt::Dictionary<ArbUt::StringView, asITypeInfo*> _baseTypes;
@ -106,6 +108,9 @@ public:
inline ContextPool* GetContextPool() const noexcept { return _contextPool; } inline ContextPool* GetContextPool() const noexcept { return _contextPool; }
inline asIScriptEngine* GetEngine() const noexcept { return _engine; }
inline AngelscriptUserdata* GetUserdata() const noexcept { return _userData; } inline AngelscriptUserdata* GetUserdata() const noexcept { return _userData; }
inline ArbUt::OptionalBorrowedPtr<AngelscriptDebugger> GetDebugger() const noexcept { return _debugger.GetValue(); }
inline void SetDebugger(AngelscriptDebugger* debugger) noexcept { _debugger = debugger; }
}; };
#endif // PKMNLIB_ANGELSCRIPRESOLVER_HPP #endif // PKMNLIB_ANGELSCRIPRESOLVER_HPP

View File

@ -19,7 +19,7 @@ class ContextPool {
}; };
ArbUt::Dictionary<std::thread::id, CtxThreadedPoolStorage*> _pool; ArbUt::Dictionary<std::thread::id, CtxThreadedPoolStorage*> _pool;
asIScriptEngine* _engine; AngelScriptResolver* _resolver;
AngelscriptUserdata* _userData; AngelscriptUserdata* _userData;
CtxThreadedPoolStorage* GetThreadPool() { CtxThreadedPoolStorage* GetThreadPool() {
@ -32,7 +32,8 @@ class ContextPool {
} }
public: public:
ContextPool(asIScriptEngine* engine, AngelscriptUserdata* userData) : _engine(engine), _userData(userData) {} ContextPool(AngelScriptResolver* resolver, AngelscriptUserdata* userData)
: _resolver(resolver), _userData(userData) {}
~ContextPool() { ~ContextPool() {
for (const auto& kv : _pool) { for (const auto& kv : _pool) {
@ -49,9 +50,12 @@ public:
ctx = *pool->Pool.rbegin(); ctx = *pool->Pool.rbegin();
pool->Pool.pop_back(); pool->Pool.pop_back();
} else { } else {
ctx = _engine->CreateContext(); ctx = _resolver->GetEngine()->CreateContext();
ctx->SetUserData(_userData); ctx->SetUserData(_userData);
} }
if (_resolver->GetDebugger().HasValue()) {
_resolver->GetDebugger().GetValue()->RegisterContext(ctx);
}
return ctx; return ctx;
} }