From d06d566f6553cf5e3eabd414874f69d0f40a6ccf Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 5 Apr 2026 22:41:28 +0300 Subject: [PATCH 1/3] add output file argument --- src/logic/scripting/lua/libs/libapp.cpp | 2 +- src/util/platform.cpp | 30 ++++++++++++++++++++++--- src/util/platform.hpp | 4 +++- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/logic/scripting/lua/libs/libapp.cpp b/src/logic/scripting/lua/libs/libapp.cpp index 09ea33ce3..39acd97c0 100644 --- a/src/logic/scripting/lua/libs/libapp.cpp +++ b/src/logic/scripting/lua/libs/libapp.cpp @@ -362,7 +362,7 @@ static int l_start_debug_instance(lua::State* L) { args.emplace_back(io::resolve(std::string(projectPath)).string()); } - platform::new_engine_instance(std::move(args)); + platform::new_engine_instance(std::move(args), ""); return lua::pushinteger(L, port); } diff --git a/src/util/platform.cpp b/src/util/platform.cpp index f9ecf070d..f113641e5 100644 --- a/src/util/platform.cpp +++ b/src/util/platform.cpp @@ -215,7 +215,9 @@ std::filesystem::path platform::get_executable_path() { #endif } -void platform::new_engine_instance(const std::vector& args) { +void platform::new_engine_instance( + const std::vector& args, std::filesystem::path outputFile +) { auto executable = get_executable_path(); #ifdef _WIN32 @@ -250,6 +252,24 @@ void platform::new_engine_instance(const std::vector& args) { auto commandString = toWString(ss.str()); STARTUPINFOW si = { sizeof(si) }; + if (!outputFile.empty()) { + si.dwFlags |= STARTF_USESTDHANDLES; + si.hStdOutput = CreateFileW( + toWString(outputFile.u8string()).data(), + GENERIC_WRITE, + FILE_SHARE_WRITE | FILE_SHARE_READ, + nullptr, + CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL, + nullptr + ); + if (si.hStdOutput == INVALID_HANDLE_VALUE) { + throw std::runtime_error( + "CreateFileW failed with code: " + + std::to_string(GetLastError()) + ); + } + } PROCESS_INFORMATION pi = { 0 }; DWORD flags = CREATE_NEW_PROCESS_GROUP | DETACHED_PROCESS; // | CREATE_NO_WINDOW; @@ -280,7 +300,11 @@ void platform::new_engine_instance(const std::vector& args) { for (int i = 0; i < args.size(); i++) { ss << " " << util::quote(args[i]); } - ss << " >/dev/null &"; + if (outputFile.empty()) { + ss << " >/dev/null &"; + } else { + ss << " >" << util::quote(outputFile.u8string()) << " &"; + } auto command = ss.str(); logger.info() << command; @@ -302,4 +326,4 @@ bool platform::stdin_has_data() { fds.events = POLLIN; return poll(&fds, 1, 0) == 1; #endif -} \ No newline at end of file +} diff --git a/src/util/platform.hpp b/src/util/platform.hpp index 620178fc1..54c56a0c5 100644 --- a/src/util/platform.hpp +++ b/src/util/platform.hpp @@ -18,7 +18,9 @@ namespace platform { /// @brief Get current process running executable path std::filesystem::path get_executable_path(); /// @brief Run a separate engine instance with specified arguments - void new_engine_instance(const std::vector& args); + void new_engine_instance( + const std::vector& args, std::filesystem::path outputFile + ); /// @brief Open URL in web browser bool open_url(const std::string& url); /// @brief Check if stdin has input From 9ce7726cab79f4df88d0dfb159fda728f3a2f4c6 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 5 Apr 2026 23:56:09 +0300 Subject: [PATCH 2/3] cleanup --- .github/workflows/windows-clang.yml | 2 +- src/main.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/windows-clang.yml b/.github/workflows/windows-clang.yml index af0b060ae..5dd91a576 100644 --- a/.github/workflows/windows-clang.yml +++ b/.github/workflows/windows-clang.yml @@ -4,7 +4,7 @@ on: push: branches: [ "main", "release-**"] pull_request: - branches: [ "main", "dev" ] + branches: [ "main", "dev" ] workflow_call: inputs: build_name: diff --git a/src/main.cpp b/src/main.cpp index ea6ad550e..77175bd8a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,7 +15,9 @@ static void sigterm_handler(int signum) { int main(int argc, char** argv) { #ifdef VC_BUILD_NAME - logger.info() << "build: " << VC_BUILD_NAME; + if constexpr (VC_BUILD_NAME[0]) { + logger.info() << "build: " << VC_BUILD_NAME; + } #endif CoreParameters coreParameters; From 0773e34fe44f7deffde20326f6fe472ddb1dfabf Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 6 Apr 2026 00:43:53 +0300 Subject: [PATCH 3/3] add app.start_debug_instance output file argument --- src/logic/scripting/lua/libs/libapp.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/logic/scripting/lua/libs/libapp.cpp b/src/logic/scripting/lua/libs/libapp.cpp index 39acd97c0..6442fcbad 100644 --- a/src/logic/scripting/lua/libs/libapp.cpp +++ b/src/logic/scripting/lua/libs/libapp.cpp @@ -350,6 +350,7 @@ static int l_start_debug_instance(lua::State* L) { } } auto projectPath = lua::isstring(L, 2) ? lua::require_lstring(L, 2) : ""; + auto outputPath = lua::isstring(L, 3) ? lua::require_lstring(L, 3) : ""; const auto& paths = engine->getPaths(); std::vector args { @@ -362,7 +363,10 @@ static int l_start_debug_instance(lua::State* L) { args.emplace_back(io::resolve(std::string(projectPath)).string()); } - platform::new_engine_instance(std::move(args), ""); + platform::new_engine_instance( + std::move(args), + outputPath.empty() ? "" : io::resolve(std::string(outputPath)) + ); return lua::pushinteger(L, port); }