Port Android server runtime to GaCy Go

This commit is contained in:
CAtlas0784 committed 2026-11-02 02:39:37 +07:00
1 parent 92a4b4f545
commit 3c1186c781
20 files changed
+830 -798

No files matched your search

+54
View File
@@ -0,0 +1,54 @@
"""Build GaCy Go for Android and package its runtime data.
Usage: python tools/package_go_runtime.py PATH_TO_GAC_GO
The source checkout is read only; its current source/resources are packaged.
Mutable saves are seeded from the checkout's committed defaults, never from
the operator's live working files.
"""
import os
from pathlib import Path
import subprocess
import sys
import zipfile
root = Path(__file__).resolve().parents[1]
source = Path(sys.argv[1]).resolve()
if not (source / "go.mod").is_file():
raise SystemExit("Expected a GaC-hkrpg-go checkout")
native = root / "app/src/main/jniLibs/arm64-v8a"
native.mkdir(parents=True, exist_ok=True)
env = os.environ.copy()
env.update(GOOS="android", GOARCH="arm64", CGO_ENABLED="0")
for name in ("sdkserver", "gameserver"):
subprocess.run(["go", "build", "-o", str(native / f"libgacy_{name}.so"), f"./cmd/{name}"],
cwd=source, env=env, check=True)
# Optional emulator-only binaries use Linux syscalls on the x86_64 emulator.
# They are excluded from ordinary ARM64 builds.
if "--emulator" in sys.argv[2:]:
emulator = root / "app/src/debug/jniLibs/x86_64"
emulator.mkdir(parents=True, exist_ok=True)
env.update(GOOS="linux", GOARCH="amd64", CGO_ENABLED="0")
for name in ("sdkserver", "gameserver"):
subprocess.run(["go", "build", "-o", str(emulator / f"libgacy_{name}.so"), f"./cmd/{name}"],
cwd=source, env=env, check=True)
archive = root / "app/src/goAssets/gacy-go-data.zip"
archive.parent.mkdir(parents=True, exist_ok=True)
resources = ("server.json", "hotfix.json", "versions.json", "res.json",
"teleports.json", "challenge_data.json", "mission_unlocks.json")
scripts = ("damage_analyst_live.lua", "fps_settings_120.lua", "freecam.lua",
"hide_ui.lua", "navigation_profiles.lua", "ping_rainbow.lua")
with zipfile.ZipFile(archive, "w", zipfile.ZIP_DEFLATED, compresslevel=6) as z:
for name in resources:
z.write(source / name, name)
for path in (source / "resources").rglob("*"):
if path.is_file():
z.write(path, path.relative_to(source).as_posix())
for name in scripts:
z.write(source / "scripts" / name, "scripts/" + name)
for name in ("persistent", "freesr-data.json"):
data = subprocess.check_output(["git", "show", f"HEAD:{name}"], cwd=source)
z.writestr(name, data)
print(f"Packaged Go runtime: {archive}")