Repository navigation
Fix clean-build release pipeline + null-return interface getters - #5
Merged
Merged
Conversation
…poll The old ISteamNetworkingSockets001-011 interfaces polled connection state via SteamNetConnectionInfo001_t through an unimplemented stub returning false, so UE5's SteamSockets driver never saw the connection reach Connected and never sent data (120s timeout). Implement set_steamnetconnectioninfo_001 (from sns_fix 2589077); keeps a SPLITUX-DEBUG wire trace.
Release builds previously compiled out ALL logging: PRINT_DEBUG expanded to nothing (EMU_RELEASE_BUILD), the global dbg_logger and every dbg_log method body were stripped. That makes a shipped emulator impossible to observe (e.g. LAN lobby matchmaking) without a separate debug build. Compile logging into release too, gated at runtime by the GSE_FORCE_LOG env var (dbg_log::is_active): debug builds always log; release logs only when the var is set. PRINT_DEBUG now wraps its body in 'if (dbg_logger.is_active())' so an inactive logger costs one cached bool check and runs NO side effects — in particular it must not call PRINT_DEBUG_CLEANUP/WSASetLastError, which would clobber the game's last socket error on every call. open() is the single runtime gate; all write paths check out_file, so inactive logging no-ops. Lets us turn on full goldberg logs (STEAM_LOG_<rand>.log next to the exe) on a release DLL by exporting GSE_FORCE_LOG=1, with zero impact when unset.
…version The interface getters in steam_client_interface_getter.cpp called report_missing_impl_and_exit for any version they did not hardcode, which std::exit()'d the whole game. Real steamclient returns null for unknown versions, so emulate that: all 35 getters now log via report_missing_impl and return nullptr. Also drop the blocking 'Missing interface' MessageBox from report_missing_impl (it could fatally stall games under Proton/Wine); it is now a pure non-blocking file logger. Legacy report_missing_impl_and_exit kept but unused. Also fix emu-build-all-win.yml: the ')' inside the 'echo ... (%%A, release)' closed the FOR do( block early, so every per-arch target silently failed and only lib_steam_old shipped. Parens -> brackets.
Three pre-existing breakages stopped the Windows release from producing any steam_api dll (only the no-longer-relevant Steam.dll shipped): 1. Stale deps cache. emu-deps-win.yml skipped rebuild whenever protobuf existed, so a partial cache (protobuf present, zlibstatic.lib missing, stale ImGui / InGameOverlay) was treated as complete forever -> api_regular failed LNK1181 'cannot open input file zlibstatic.lib' and api_experimental failed compiling steam_overlay.cpp against old ImGui/InGameOverlay headers. Fix: add a force_rebuild input that wipes the cache, and strengthen the 'already built' check to also require zlib\install64\lib\zlibstatic.lib so a partial cache refreshes itself. 2. lib_steam_old link error. The GSE_FORCE_LOG refactor (514eb90) made PRINT_DEBUG reference the global dbg_logger in release builds too, and un-gated its definition in base.cpp -- but steam_old_lib/dllmain.cpp still defined dbg_logger only under !EMU_RELEASE_BUILD, so release linked with an unresolved external. Define it unconditionally, matching base.cpp. 3. Build step aborted before packaging. A trailing warn-only target failure (dev-only tool signing, lib_steam_old) leaked a non-zero exit and skipped packaging/release. End the build step with exit /b 0 and add a 'Verify shippable DLLs built' gate that fails the job only when the four regular/experimental steam_api(64).dll outputs are missing.
…ures A from-scratch deps rebuild failed at curl CMake configure: 'CURL_CA_FALLBACK only works with OpenSSL' (CMakeLists.txt:1409). We build curl with MbedTLS (CURL_USE_OPENSSL=OFF), and newer curl hard-errors when CURL_CA_FALLBACK is set without OpenSSL. The flag is an OpenSSL-only CA-cert fallback feature and is meaningless with MbedTLS, so drop it. Latent since the Jan deps bump; masked because the persistent per-runner caches predate it and clean rebuilds were never exercised.
…lean build The current zlib installs its static library as zs.lib, but wild_zlib points protobuf and curl at ZLIB_LIBRARY=.../zlibstatic.lib, so a from-scratch deps build failed: protobuf protoc LNK1181 'cannot open input file zlibstatic.lib'. Warm runners hid it because an older build had left a real zlibstatic.lib in the (uncleaned) install dir. Copy zs.lib -> zlibstatic.lib right after each zlib build so the hardcoded path resolves regardless of runner state.
A clean protobuf build failed with MSB3491: abseil's fetched test helper random_internal_distribution_test_util produces a build/.tlog path that exceeds Windows' 260-char MAX_PATH. Pass BUILD_TESTING=OFF so protobuf's bundled abseil skips test targets entirely (we don't need them), and add a best-effort LongPathsEnabled registry step (ignored if the runner lacks admin) as general protection for other deep dep paths.
…e gate api_regular/api_experimental failed to link on a clean build: LNK1181 cannot open 'absl_bad_any_cast_impl.lib'. premake5.lua's hardcoded abseil lib list was stale vs the abseil protobuf now builds. Drop libs newer abseil no longer produces (absl_bad_any_cast_impl, absl_bad_optional_access, absl_bad_variant_access -> std::; absl_log_entry) and rename absl_random_internal_pool_urbg -> absl_random_internal_entropy_pool. Also harden the release path: wipe build/win/vs2022/release before building (the job checks out clean:false, so stale DLLs from a prior build were lingering and being shipped), and fix the verify gate (set "MISSING=1" + 'if defined' instead of a trailing-space-prone string compare that false-passed).
api_experimental failed to compile against the pinned ingame_overlay's bundled ImGui 1.92 + newer InGameOverlay (upstream gbe_fork has the same skew; it only built on warm caches). Port the two affected call sites: - ImGui 1.92 removed ImFontConfig::GlyphExtraSpacing (ImVec2) -> use GlyphExtraAdvanceX (float, X only); drop the unsupported Y spacing. - InGameOverlay dropped RendererResource_t::SetAutoLoad(); autoload is hook-wide now and GetResourceId() triggers load. Remove the per-resource call. Also set the build job checkout to clean:true: api_regular/api_experimental were linking a stale base_gcmessages.pb.obj (a proto long removed from the repo but left in the clean:false workspace), which dragged in unresolved full-protobuf symbols. net.proto is LITE_RUNTIME and links protobuf-lite fine once the ghost object is gone.
…lay port Remaining clean-build failures after the deps/abseil/protobuf fixes: - api_regular x32 linked steam_api.dll fine, then the --dosstub post-build (file_dos_stub_x32.exe) crashed (exit -1) and removed it, cascading into a SignTool 'file not found'. Drop --dosstub and --winsign from the premake call: the emu DLLs don't need a replaced DOS stub or signature. (Keep --winrsrc.) - api_experimental link: ImGui 1.92 removed ImFontAtlas::Build() (atlas builds lazily now) -> drop the call; and the newer InGameOverlay (mini_detour/system) needs NtQueryInformationThread/Process -> link ntdll. - Verify gate checked the wrong 32-bit dir (x86); the build outputs to x32 (package_win.bat renames to x86 later) -> gate x32.
Reconcile with dev's collective fixes (friend-join, P2P bridge, GSE log, partial ImGui 1.92 overlay port, abseil list, ntdll). Resolution: - overlay/networking/base/common_includes/premake5.lua: take dev's (more complete; dev already has the abseil reconcile, ntdll, and the full overlay port). - premake5-deps.lua: dev's base + re-add the zlib zs.lib -> zlibstatic.lib mirror (dev lacks it; without it protobuf/curl fail to link on a clean build). - Kept my unique fixes that dev lacks: interface getters return null, steam_old_lib dbg_logger defined unconditionally, and the CI hardening (force_rebuild, stronger cache check, clean:true checkout, verify-DLLs gate, dropped flaky dosstub/winsign, echo-loop fix).
dev's collective fixes added SDL3 as a linked dependency, but the warm deps cache (built before SDL was added) lacks SDL3-static.lib, so api_regular/experimental fail LNK1181. Add it to the cache-completeness check so a stale cache rebuilds.
After merging dev's premake, 32-bit DLLs emit to release/{regular,experimental}/x86
(not x32). The verify gate still checked x32 and false-failed even though all four
DLLs built. Point it at x86.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Restores a working clean Windows release build (it had been impossible for months — warm per-runner deps caches masked the breakage, so the nightly only ever shipped
Steam.dll), and makes the interface getters non-fatal so the "Missing interface" class of games (e.g. Voidigo) no longer hard-exits.Verified end-to-end: a from-scratch deps rebuild + build on the self-hosted runners now produces all four
steam_api(64).dll(regular + experimental, x64 + x32) plusSteam.dll, gated by a real verify step.Emulator behaviour
steam_client_interface_getter.cppnow log +return nullptr(matching real steamclient on unknown versions) instead ofreport_missing_impl_and_exit. Dropped the blocking "Missing interface" MessageBox (it could fatally stall under Proton);report_missing_implis now a pure file logger.Clean-build pipeline (all latent, surfaced once a true clean build ran)
echo ... (%%A, release)closed thedo(block early -> onlylib_steam_oldever built. Parens -> brackets.CURL_CA_FALLBACK(OpenSSL-only; hard-errors with MbedTLS); mirror zlibzs.lib->zlibstatic.lib(protobuf/curl link);BUILD_TESTING=OFF+ best-effort long paths (abseil test-helper MAX_PATH / MSB3491);force_rebuildinput + stronger cache-completeness check.dbg_loggerunconditionally (the GSE_FORCE_LOG refactor left it#ifndef EMU_RELEASE_BUILD).absl_bad_any_cast_impl/bad_optional_access/bad_variant_access/log_entry;pool_urbg->entropy_pool).base_gcmessages.pb.objwas dragging in full-protobuf symbols; old DLLs were being shipped).GlyphExtraSpacing->GlyphExtraAdvanceX; removeRendererResource_t::SetAutoLoad; removeImFontAtlas::Build(); linkntdllforNtQueryInformation*. (Upstream Detanup01/gbe_fork has the identical skew.)--dosstub/--winsignpost-build; harden the release gate (realif definedcheck, correctx32paths, wipe stale output).Notes
force_rebuildis available for a full refresh.