Skip to content

Add NEO_INSTALL_ENGINE_BUNDLE, support for Linux and Windows#2026

Closed
sunmachine wants to merge 1 commit into
NeotokyoRebuild:masterfrom
sunmachine:engine-build-with-linux-support
Closed

Add NEO_INSTALL_ENGINE_BUNDLE, support for Linux and Windows#2026
sunmachine wants to merge 1 commit into
NeotokyoRebuild:masterfrom
sunmachine:engine-build-with-linux-support

Conversation

@sunmachine

@sunmachine sunmachine commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

Description

Following the NEO_INSTALL_LIBRARIES/NEO_INSTALL_RESOURCES patterns.
Stages everything to run without the SDK installed as a dependency, created from the 2013 Source MP SDK.

  • bin/, hl2/, platform/: engine and base content, exact filename casing preserved
  • Valve's stock launch chain, renamed to ntre.*
  • a gameinfo.txt with plain relative search paths instead of |appid_243750| tokens

For local staging and testing. The payload comes entirely from the SDK install, so nothing needs to be compiled first. This PR should update the CI steps as well before leaving draft.

cmake --preset linux-release -DNEO_INSTALL_ENGINE_BUNDLE=ON
cmake --install build/linux-release --prefix <dir>

Overlay the output onto the existing game content. That's the depot.

Depot notes: Launch options must pass -game neo. -steam only won't work and that's intentional at this point. The upload pipeline must preserve filename casing.

Cause

The Linux launch is broken by two case-sensitivity bugs: the engine lowercases the SDK folder name when resolving |appid_243750| mounts (so base content silently fails to mount), and the depot shipped lowercased binary names like gameui.so that the engine dlopens by exact name. Relative paths skip the buggy (or exactly as designed? we'll never know) lookup entirely. Same packaging model as the original NEOTOKYO.

Toolchain

  • Linux GCC 10 Sniper 3.0

TODO

Windows is completely untested at time of writing. Halp!

  • Linux verification: launches and plays from the Play button on a real install, including with SDK Base renamed away. In-game path table resolves every mount inside the install dir.
  • Windows verification: confirm the staged bootstraps (hl2.exe to ntre.exe, hl2_win64.exe to ntre64.exe) match what the depot ships, then a Play-button run.
  • Update CI steps.

Install the engine binaries, hl2 and platform base content, and the launch
chain from a local Source SDK Base 2013 Multiplayer install, plus a
gameinfo.txt with plain relative search paths. Overlaid onto the game
content the release pipeline already produces, the depot then runs without
SDK Base installed.

Relative search paths avoid |appid_243750| resolution, which breaks on
case-sensitive filesystems: the engine lowercases the SDK install folder
name when resolving those mounts, so all base content silently fails to
mount on Linux. Engine binary filenames must also keep their exact casing
(GameUI.so and ServerBrowser.so are loaded by name), so the depot pipeline
must preserve case.

The Linux layout is verified end to end through the Steam Play button. The
Windows flow is untested and needs scrutiny before use.
@sunmachine

Copy link
Copy Markdown
Contributor Author

@DESTROYGIRL Give the windows side a spin!

Comment thread src/CMakeLists.txt
option(NEO_INSTALL_ENGINE_BUNDLE "Install the engine, base content, and launch chain for a self-contained depot" OFF)
if(OS_WINDOWS)
set(NEO_SDK_BASE_DIR "C:/Program Files (x86)/Steam/steamapps/common/Source SDK Base 2013 Multiplayer" CACHE PATH "Source SDK Base 2013 Multiplayer install directory")
else()

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's no switch statement in CMAKE right? Google-fu failed.

@sunmachine sunmachine closed this Jul 18, 2026
@sunmachine

Copy link
Copy Markdown
Contributor Author

LOL NOPE NOT THIS! Look at #2019 instead!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant