More work on prefab system

This commit is contained in:
Eric Froemling 2020-10-11 14:53:48 -07:00
parent 1a7c0ef728
commit 24cc7e9e99
6 changed files with 197 additions and 238 deletions

View File

@ -3948,8 +3948,8 @@
"build/prefab/lib/linux_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/32/03/d4dd9c398eab7c7da62b2e7a4096", "build/prefab/lib/linux_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/32/03/d4dd9c398eab7c7da62b2e7a4096",
"build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/11/f5/cb2b3a42e4384d6ac4dfe7a98213", "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/11/f5/cb2b3a42e4384d6ac4dfe7a98213",
"build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/06/aa/fc55996ce9a1a3e898d1348873ff", "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/06/aa/fc55996ce9a1a3e898d1348873ff",
"build/prefab/lib/mac_x86_64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/f7/16/01f6978b6262c3033aadfb4ad24f", "build/prefab/lib/mac_x86_64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/41/6b/19bf8c7fa531a27076d1c0babaff",
"build/prefab/lib/mac_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d8/21/d65fb091c26cc7b683768ea19705", "build/prefab/lib/mac_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/fd/66/69bc3327543d711753013b9fc821",
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/13/0c/a2f421ae193496383524772a1e76", "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/80/37/41e0842744af078a54e2477045e0",
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c9/a7/f55ab74860ab4f6ef4983e144e76" "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/cf/f5/f2df776067491dbc09500c9c3966"
} }

View File

@ -541,6 +541,7 @@
<w>dstattr</w> <w>dstattr</w>
<w>dstbase</w> <w>dstbase</w>
<w>dstdata</w> <w>dstdata</w>
<w>dstdirname</w>
<w>dstfile</w> <w>dstfile</w>
<w>dstfin</w> <w>dstfin</w>
<w>dstjson</w> <w>dstjson</w>
@ -1098,6 +1099,7 @@
<w>levelname</w> <w>levelname</w>
<w>lfull</w> <w>lfull</w>
<w>lfval</w> <w>lfval</w>
<w>libballisticacore</w>
<w>libcrypto</w> <w>libcrypto</w>
<w>libdir</w> <w>libdir</w>
<w>libegl</w> <w>libegl</w>
@ -1262,6 +1264,7 @@
<w>modders</w> <w>modders</w>
<w>modename</w> <w>modename</w>
<w>modestr</w> <w>modestr</w>
<w>modeval</w>
<w>modpack</w> <w>modpack</w>
<w>modtimes</w> <w>modtimes</w>
<w>moduledir</w> <w>moduledir</w>
@ -1794,6 +1797,7 @@
<w>servercfg</w> <w>servercfg</w>
<w>servercmd</w> <w>servercmd</w>
<w>serverdialog</w> <w>serverdialog</w>
<w>serverdst</w>
<w>serverget</w> <w>serverget</w>
<w>servermanager</w> <w>servermanager</w>
<w>servermode</w> <w>servermode</w>

166
Makefile
View File

@ -235,32 +235,11 @@ prefab-mac-arm64-server-debug: prefab-mac-arm64-server-debug-build
prefab-mac-x86-64-server-debug-build: prereqs assets-cmake \ prefab-mac-x86-64-server-debug-build: prereqs assets-cmake \
build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless \ build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless \
build/prefab/full/mac_x86_64_server/debug/ballisticacore_server \ @${STAGE_ASSETS} -cmakeserver -debug build/prefab/full/mac_x86_64_server/debug
build/prefab/full/mac_x86_64_server/debug/config_template.yaml \
build/prefab/full/mac_x86_64_server/debug/README.txt
@${STAGE_ASSETS} -cmakeserver build/prefab/full/mac_x86_64_server/debug/dist
prefab-mac-arm64-server-debug-build: prereqs assets-cmake \ prefab-mac-arm64-server-debug-build: prereqs assets-cmake \
build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless \ build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless \
build/prefab/full/mac_arm64_server/debug/ballisticacore_server \ @${STAGE_ASSETS} -cmakeserver -debug build/prefab/full/mac_arm64_server/debug
build/prefab/full/mac_arm64_server/debug/config_template.yaml \
build/prefab/full/mac_arm64_server/debug/README.txt
@${STAGE_ASSETS} -cmakeserver build/prefab/full/mac_arm64_server/debug/dist
build/prefab/full/mac_%_server/debug/ballisticacore_server: \
assets/src/server/ballisticacore_server.py tools/batools/pcommand.py
@tools/pcommand stage_server_file debug $< $@
build/prefab/full/mac_%_server/debug/config_template.yaml: \
assets/src/server/config_template.yaml \
tools/batools/build.py \
tools/batools/pcommand.py \
tools/bacommon/servermanager.py
@tools/pcommand stage_server_file debug $< $@
build/prefab/full/mac_%_server/debug/README.txt: \
assets/src/server/README.txt
@cp $< $@
build/prefab/full/mac_%_server/debug/dist/ballisticacore_headless: .efrocachemap build/prefab/full/mac_%_server/debug/dist/ballisticacore_headless: .efrocachemap
@tools/pcommand efrocache_get $@ @tools/pcommand efrocache_get $@
@ -286,32 +265,13 @@ prefab-mac-arm64-server-release: prefab-mac-arm64-server-release-build
prefab-mac-x86-64-server-release-build: prereqs assets-cmake \ prefab-mac-x86-64-server-release-build: prereqs assets-cmake \
build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless \ build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless \
build/prefab/full/mac_x86_64_server/release/ballisticacore_server \ @${STAGE_ASSETS} -cmakeserver -release \
build/prefab/full/mac_x86_64_server/release/config_template.yaml \ build/prefab/full/mac_x86_64_server/release
build/prefab/full/mac_x86_64_server/release/README.txt
@${STAGE_ASSETS} -cmakeserver build/prefab/full/mac_x86_64_server/release/dist
prefab-mac-arm64-server-release-build: prereqs assets-cmake \ prefab-mac-arm64-server-release-build: prereqs assets-cmake \
build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless \ build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless \
build/prefab/full/mac_arm64_server/release/ballisticacore_server \ @${STAGE_ASSETS} -cmakeserver -release \
build/prefab/full/mac_arm64_server/release/config_template.yaml \ build/prefab/full/mac_arm64_server/release
build/prefab/full/mac_arm64_server/release/README.txt
@${STAGE_ASSETS} -cmakeserver build/prefab/full/mac_arm64_server/release/dist
build/prefab/full/mac_%_server/release/ballisticacore_server: \
assets/src/server/ballisticacore_server.py tools/batools/pcommand.py
@tools/pcommand stage_server_file release $< $@
build/prefab/full/mac_%_server/release/config_template.yaml: \
assets/src/server/config_template.yaml \
tools/batools/build.py \
tools/batools/pcommand.py \
tools/bacommon/servermanager.py
@tools/pcommand stage_server_file release $< $@
build/prefab/full/mac_%_server/release/README.txt: \
assets/src/server/README.txt
@cp $< $@
build/prefab/full/mac_%_server/release/dist/ballisticacore_headless: .efrocachemap build/prefab/full/mac_%_server/release/dist/ballisticacore_headless: .efrocachemap
@tools/pcommand efrocache_get $@ @tools/pcommand efrocache_get $@
@ -397,32 +357,13 @@ prefab-linux-arm64-server-debug: prefab-linux-arm64-server-debug-build
prefab-linux-x86-64-server-debug-build: prereqs assets-cmake \ prefab-linux-x86-64-server-debug-build: prereqs assets-cmake \
build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless \ build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless \
build/prefab/full/linux_x86_64_server/debug/ballisticacore_server \ @${STAGE_ASSETS} -cmakeserver -debug \
build/prefab/full/linux_x86_64_server/debug/config_template.yaml \ build/prefab/full/linux_x86_64_server/debug
build/prefab/full/linux_x86_64_server/debug/README.txt
@${STAGE_ASSETS} -cmakeserver build/prefab/full/linux_x86_64_server/debug/dist
prefab-linux-arm64-server-debug-build: prereqs assets-cmake \ prefab-linux-arm64-server-debug-build: prereqs assets-cmake \
build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless \ build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless \
build/prefab/full/linux_arm64_server/debug/ballisticacore_server \ @${STAGE_ASSETS} -cmakeserver -debug \
build/prefab/full/linux_arm64_server/debug/config_template.yaml \ build/prefab/full/linux_arm64_server/debug
build/prefab/full/linux_arm64_server/debug/README.txt
@${STAGE_ASSETS} -cmakeserver build/prefab/full/linux_arm64_server/debug/dist
build/prefab/full/linux_%_server/debug/ballisticacore_server: \
assets/src/server/ballisticacore_server.py tools/batools/pcommand.py
@tools/pcommand stage_server_file debug $< $@
build/prefab/full/linux_%_server/debug/config_template.yaml: \
assets/src/server/config_template.yaml \
tools/batools/build.py \
tools/batools/pcommand.py \
tools/bacommon/servermanager.py
@tools/pcommand stage_server_file debug $< $@
build/prefab/full/linux_%_server/debug/README.txt: \
assets/src/server/README.txt
@cp $< $@
build/prefab/full/linux_%_server/debug/dist/ballisticacore_headless: .efrocachemap build/prefab/full/linux_%_server/debug/dist/ballisticacore_headless: .efrocachemap
@tools/pcommand efrocache_get $@ @tools/pcommand efrocache_get $@
@ -442,28 +383,19 @@ prefab-linux-x86-64-server-release: prefab-linux-x86-64-server-release-build
@tools/pcommand ensure_prefab_platform linux_x86_64 @tools/pcommand ensure_prefab_platform linux_x86_64
@${RUN_PREFAB_LINUX_X86_64_SERVER_RELEASE} @${RUN_PREFAB_LINUX_X86_64_SERVER_RELEASE}
prefab-linux-arm64-server-release: prefab-linux-arm64-server-release-build
@tools/pcommand ensure_prefab_platform linux_arm64
@${RUN_PREFAB_LINUX_ARM64_SERVER_RELEASE}
prefab-linux-x86-64-server-release-build: prereqs assets-cmake \ prefab-linux-x86-64-server-release-build: prereqs assets-cmake \
build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless \ build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless \
build/prefab/full/linux_x86_64_server/release/ballisticacore_server \ @${STAGE_ASSETS} -cmakeserver -release \
build/prefab/full/linux_x86_64_server/release/config_template.yaml \ build/prefab/full/linux_x86_64_server/release
build/prefab/full/linux_x86_64_server/release/README.txt
@${STAGE_ASSETS} \
-cmakeserver build/prefab/full/linux_x86_64_server/release/dist
build/prefab/full/linux_%_server/release/ballisticacore_server: \ prefab-linux-arm64-server-release-build: prereqs assets-cmake \
assets/src/server/ballisticacore_server.py tools/batools/pcommand.py build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless \
@tools/pcommand stage_server_file release $< $@ @${STAGE_ASSETS} -cmakeserver -release \
build/prefab/full/linux_arm64_server/release
build/prefab/full/linux_%_server/release/config_template.yaml: \
assets/src/server/config_template.yaml \
tools/batools/build.py \
tools/batools/pcommand.py \
tools/bacommon/servermanager.py
@tools/pcommand stage_server_file release $< $@
build/prefab/full/linux_%_server/release/README.txt: \
assets/src/server/README.txt
@cp $< $@
build/prefab/full/linux_%_server/release/dist/ballisticacore_headless: .efrocachemap build/prefab/full/linux_%_server/release/dist/ballisticacore_headless: .efrocachemap
@tools/pcommand efrocache_get $@ @tools/pcommand efrocache_get $@
@ -519,35 +451,12 @@ prefab-windows-x86-server-debug: prefab-windows-x86-server-debug-build
prefab-windows-x86-server-debug-build: prereqs \ prefab-windows-x86-server-debug-build: prereqs \
assets-windows-${WINPLAT_X86} \ assets-windows-${WINPLAT_X86} \
build/prefab/full/windows_x86_server/debug/dist/ballisticacore_headless.exe \ build/prefab/full/windows_x86_server/debug/dist/ballisticacore_headless.exe \
build/prefab/full/windows_x86_server/debug/launch_ballisticacore_server.bat \
build/prefab/full/windows_x86_server/debug/ballisticacore_server.py \
build/prefab/full/windows_x86_server/debug/config_template.yaml \
build/prefab/full/windows_x86_server/debug/README.txt
@${STAGE_ASSETS} -winserver-${WINPLAT_X86}-Debug \ @${STAGE_ASSETS} -winserver-${WINPLAT_X86}-Debug \
build/prefab/full/windows_x86_server/debug/dist build/prefab/full/windows_x86_server/debug
build/prefab/full/windows_x86_server/debug/dist/ballisticacore_headless.exe: .efrocachemap build/prefab/full/windows_x86_server/debug/dist/ballisticacore_headless.exe: .efrocachemap
@tools/pcommand efrocache_get $@ @tools/pcommand efrocache_get $@
build/prefab/full/windows_%_server/debug/ballisticacore_server.py: \
assets/src/server/ballisticacore_server.py tools/batools/pcommand.py
@tools/pcommand stage_server_file debug $< $@
build/prefab/full/windows_%_server/debug/launch_ballisticacore_server.bat: \
assets/src/server/launch_ballisticacore_server.bat tools/batools/pcommand.py
@tools/pcommand stage_server_file debug $< $@
build/prefab/full/windows_%_server/debug/config_template.yaml: \
assets/src/server/config_template.yaml \
tools/batools/build.py \
tools/batools/pcommand.py \
tools/bacommon/servermanager.py
@tools/pcommand stage_server_file debug $< $@
build/prefab/full/windows_%_server/debug/README.txt: \
assets/src/server/README.txt
@cp $< $@
# Windows server release: # Windows server release:
RUN_PREFAB_WINDOWS_X86_SERVER_RELEASE = cd \ RUN_PREFAB_WINDOWS_X86_SERVER_RELEASE = cd \
@ -560,36 +469,13 @@ prefab-windows-x86-server-release: prefab-windows-x86-server-release-build
prefab-windows-x86-server-release-build: prereqs \ prefab-windows-x86-server-release-build: prereqs \
assets-windows-${WINPLAT_X86} \ assets-windows-${WINPLAT_X86} \
build/prefab/full/windows_x86_server/release/dist/ballisticacore_headless.exe \ build/prefab/full/windows_x86_server/release/dist/ballisticacore_headless.exe
build/prefab/full/windows_x86_server/release/launch_ballisticacore_server.bat \
build/prefab/full/windows_x86_server/release/ballisticacore_server.py \
build/prefab/full/windows_x86_server/release/config_template.yaml \
build/prefab/full/windows_x86_server/release/README.txt
@${STAGE_ASSETS} -winserver-${WINPLAT_X86}-Release \ @${STAGE_ASSETS} -winserver-${WINPLAT_X86}-Release \
build/prefab/full/windows_x86_server/release/dist build/prefab/full/windows_x86_server/release
build/prefab/full/windows_x86_server/release/dist/ballisticacore_headless.exe: .efrocachemap build/prefab/full/windows_x86_server/release/dist/ballisticacore_headless.exe: .efrocachemap
@tools/pcommand efrocache_get $@ @tools/pcommand efrocache_get $@
build/prefab/full/windows_%_server/release/ballisticacore_server.py: \
assets/src/server/ballisticacore_server.py tools/batools/pcommand.py
@tools/pcommand stage_server_file release $< $@
build/prefab/full/windows_%_server/release/launch_ballisticacore_server.bat: \
assets/src/server/launch_ballisticacore_server.bat tools/batools/pcommand.py
@tools/pcommand stage_server_file release $< $@
build/prefab/full/windows_%_server/release/config_template.yaml: \
assets/src/server/config_template.yaml \
tools/batools/build.py \
tools/batools/pcommand.py \
tools/bacommon/servermanager.py
@tools/pcommand stage_server_file release $< $@
build/prefab/full/windows_%_server/release/README.txt: \
assets/src/server/README.txt
@cp $< $@
# Tell make which of these targets don't represent files. # Tell make which of these targets don't represent files.
.PHONY: prefab-debug prefab-release prefab-debug-build prefab-release-build \ .PHONY: prefab-debug prefab-release prefab-debug-build prefab-release-build \
prefab-server-debug prefab-server-release prefab-server-debug-build \ prefab-server-debug prefab-server-release prefab-server-debug-build \
@ -608,7 +494,9 @@ build/prefab/full/windows_%_server/release/README.txt: \
prefab-linux-x86-64-release-build prefab-linux-arm64-release-build \ prefab-linux-x86-64-release-build prefab-linux-arm64-release-build \
prefab-linux-x86-64-server-debug prefab-linux-arm64-server-debug \ prefab-linux-x86-64-server-debug prefab-linux-arm64-server-debug \
prefab-linux-x86-64-server-debug-build prefab-linux-arm64-server-debug-build \ prefab-linux-x86-64-server-debug-build prefab-linux-arm64-server-debug-build \
prefab-linux-x86-64-server-release prefab-linux-x86-64-server-release-build \ prefab-linux-x86-64-server-release prefab-linux-arm64-server-release \
prefab-linux-x86-64-server-release-build \
prefab-linux-arm64-server-release-build \
prefab-windows-x86-debug prefab-windows-x86-debug-build \ prefab-windows-x86-debug prefab-windows-x86-debug-build \
prefab-windows-x86-release prefab-windows-x86-release-build \ prefab-windows-x86-release prefab-windows-x86-release-build \
prefab-windows-x86-server-debug prefab-windows-x86-server-debug-build \ prefab-windows-x86-server-debug prefab-windows-x86-server-debug-build \
@ -842,7 +730,7 @@ cmake-server: cmake-server-build
cmake-server-build: assets-cmake resources code cmake-server-build: assets-cmake resources code
@tools/pcommand cmake_prep_dir build/cmake/server-$(CM_BT_LC) @tools/pcommand cmake_prep_dir build/cmake/server-$(CM_BT_LC)
@${STAGE_ASSETS} -cmakeserver build/cmake/server-$(CM_BT_LC) @${STAGE_ASSETS} -cmakeserver -${CM_BT_LC} build/cmake/server-$(CM_BT_LC)
@cd build/cmake/server-$(CM_BT_LC) && test -f Makefile \ @cd build/cmake/server-$(CM_BT_LC) && test -f Makefile \
|| cmake -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DHEADLESS=true \ || cmake -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DHEADLESS=true \
../../../ballisticacore-cmake ../../../ballisticacore-cmake

View File

@ -16,6 +16,7 @@ from efrotools import PYVER
if TYPE_CHECKING: if TYPE_CHECKING:
from typing import Optional, List from typing import Optional, List
from pathlib import Path
# Suffix for the pyc files we include in stagings. # Suffix for the pyc files we include in stagings.
# We're using deterministic opt pyc files; see PEP 552. # We're using deterministic opt pyc files; see PEP 552.
@ -33,6 +34,7 @@ class Config:
# We always calc src relative to this script. # We always calc src relative to this script.
self.src = self.projroot + '/assets/build' self.src = self.projroot + '/assets/build'
self.dst: Optional[str] = None self.dst: Optional[str] = None
self.serverdst: Optional[str] = None
self.win_extras_src: Optional[str] = None self.win_extras_src: Optional[str] = None
self.win_platform: Optional[str] = None self.win_platform: Optional[str] = None
self.win_type: Optional[str] = None self.win_type: Optional[str] = None
@ -104,12 +106,13 @@ class Config:
self.win_platform = winplt self.win_platform = winplt
self.win_type = wintype self.win_type = wintype
assert winempty == '' assert winempty == ''
self.dst = args[1]
self.tex_suffix = '.dds' self.tex_suffix = '.dds'
if wintype == 'win': if wintype == 'win':
pass self.dst = args[-1]
elif wintype == 'winserver': elif wintype == 'winserver':
self.dst = os.path.join(args[-1], 'dist')
self.serverdst = args[-1]
self.include_textures = False self.include_textures = False
self.include_audio = False self.include_audio = False
self.include_models = False self.include_models = False
@ -143,10 +146,20 @@ class Config:
self.dst = args[1] self.dst = args[1]
self.tex_suffix = '.dds' self.tex_suffix = '.dds'
elif '-cmakeserver' in args: elif '-cmakeserver' in args:
self.dst = args[1] self.dst = os.path.join(args[-1], 'dist')
self.serverdst = args[-1]
self.include_textures = False self.include_textures = False
self.include_audio = False self.include_audio = False
self.include_models = False self.include_models = False
# Require either -debug or -release in args.
if '-debug' in args:
self.debug = True
assert '-release' not in args
elif '-release' in args:
self.debug = False
else:
raise RuntimeError(
"Expected either '-debug' or '-release' in args.")
elif '-xcode-mac' in args: elif '-xcode-mac' in args:
self.src = os.environ['SOURCE_ROOT'] + '/assets/build' self.src = os.environ['SOURCE_ROOT'] + '/assets/build'
self.dst = (os.environ['TARGET_BUILD_DIR'] + '/' + self.dst = (os.environ['TARGET_BUILD_DIR'] + '/' +
@ -314,35 +327,7 @@ def _sync_pylib(cfg: Config) -> None:
_run(cmd) _run(cmd)
def main(projroot: str, args: Optional[List[str]] = None) -> None: def _sync_standard_game_data(cfg: Config) -> None:
"""Stage assets for a build."""
if args is None:
args = sys.argv
cfg = Config(projroot)
cfg.parse_args(args)
# Ok, now for every top level dir in src, come up with a nice single
# command to sync the needed subset of it to dst.
# We can now use simple speedy timestamp based updates since
# we no longer have to try to preserve timestamps to get .pyc files
# to behave (hooray!)
# Do our stripped down pylib dir for platforms that use that.
if cfg.include_pylib:
_sync_pylib(cfg)
else:
if cfg.dst is not None and os.path.isdir(cfg.dst + '/pylib'):
subprocess.run(['rm', '-rf', cfg.dst + '/pylib'], check=True)
# On windows we need to pull in some dlls and this and that
# (we also include a non-stripped-down set of python libs).
if cfg.win_extras_src is not None:
_sync_windows_extras(cfg)
# Now standard common game data.
assert cfg.dst is not None assert cfg.dst is not None
_run('mkdir -p "' + cfg.dst + '/ba_data"') _run('mkdir -p "' + cfg.dst + '/ba_data"')
cmd = ('rsync --recursive --update --delete --delete-excluded' cmd = ('rsync --recursive --update --delete --delete-excluded'
@ -374,15 +359,147 @@ def main(projroot: str, args: Optional[List[str]] = None) -> None:
cfg.dst + '/ba_data/"') cfg.dst + '/ba_data/"')
_run(cmd) _run(cmd)
def _sync_server_files(cfg: Config) -> None:
assert cfg.serverdst is not None
modeval = 'debug' if cfg.debug else 'release'
stage_server_file(projroot=cfg.projroot,
mode=modeval,
infilename='assets/src/server/ballisticacore_server.py',
outfilename=os.path.join(
cfg.serverdst,
'ballisticacore_server.py' if cfg.win_type
is not None else 'ballisticacore_server'))
stage_server_file(projroot=cfg.projroot,
mode=modeval,
infilename='assets/src/server/README.txt',
outfilename=os.path.join(cfg.serverdst, 'README.txt'))
stage_server_file(projroot=cfg.projroot,
mode=modeval,
infilename='assets/src/server/config_template.yaml',
outfilename=os.path.join(cfg.serverdst,
'config_template.yaml'))
if cfg.win_type is not None:
stage_server_file(
projroot=cfg.projroot,
mode=modeval,
infilename='assets/src/server/launch_ballisticacore_server.bat',
outfilename=os.path.join(cfg.serverdst,
'launch_ballisticacore_server.bat'))
def _write_if_changed(path: str,
contents: str,
make_executable: bool = False) -> None:
changed: bool
try:
with open(path) as infile:
existing = infile.read()
changed = (contents != existing)
except FileNotFoundError:
changed = True
if changed:
with open(path, 'w') as outfile:
outfile.write(contents)
if make_executable:
subprocess.run(['chmod', '+x', path], check=True)
def stage_server_file(projroot: str, mode: str, infilename: str,
outfilename: str) -> None:
"""Stage files for the server environment with some filtering."""
import batools.build
from efrotools import replace_one
if mode not in ('debug', 'release'):
raise RuntimeError(f"Invalid server-file-staging mode '{mode}';"
f" expected 'debug' or 'release'.")
print(f'Building server file: {os.path.basename(outfilename)}')
os.makedirs(os.path.dirname(outfilename), exist_ok=True)
basename = os.path.basename(infilename)
if basename == 'config_template.yaml':
# Inject all available config values into the config file.
_write_if_changed(
outfilename,
batools.build.filter_server_config(str(projroot), infilename))
elif basename == 'ballisticacore_server.py':
# Run Python in opt mode for release builds.
with open(infilename) as infile:
lines = infile.read().splitlines()
if mode == 'release':
lines[0] = replace_one(lines[0],
f'#!/usr/bin/env python{PYVER}',
f'#!/usr/bin/env -S python{PYVER} -O')
_write_if_changed(outfilename,
'\n'.join(lines) + '\n',
make_executable=True)
elif basename == 'README.txt':
with open(infilename) as infile:
readme = infile.read()
_write_if_changed(outfilename, readme)
elif basename == 'launch_ballisticacore_server.bat':
# Run Python in opt mode for release builds.
with open(infilename) as infile:
lines = infile.read().splitlines()
if mode == 'release':
lines[1] = replace_one(
lines[1], ':: Python interpreter.', ':: Python interpreter.'
' (in opt mode so we use bundled .opt-1.pyc files)')
lines[2] = replace_one(
lines[2], 'dist\\\\python.exe ballisticacore_server.py',
'dist\\\\python.exe -O ballisticacore_server.py')
else:
# In debug mode we use the bundled debug interpreter.
lines[2] = replace_one(
lines[2], 'dist\\\\python.exe ballisticacore_server.py',
'dist\\\\python_d.exe ballisticacore_server.py')
with open(outfilename, 'w') as outfile:
outfile.write('\n'.join(lines) + '\n')
else:
raise RuntimeError(f"Unknown server file for staging: '{basename}'.")
def main(projroot: str, args: Optional[List[str]] = None) -> None:
"""Stage assets for a build."""
if args is None:
args = sys.argv
cfg = Config(projroot)
cfg.parse_args(args)
# Ok, now for every top level dir in src, come up with a nice single
# command to sync the needed subset of it to dst.
# We can now use simple speedy timestamp based updates since
# we no longer have to try to preserve timestamps to get .pyc files
# to behave (hooray!)
# Do our stripped down pylib dir for platforms that use that.
if cfg.include_pylib:
_sync_pylib(cfg)
else:
if cfg.dst is not None and os.path.isdir(cfg.dst + '/pylib'):
subprocess.run(['rm', '-rf', cfg.dst + '/pylib'], check=True)
# Sync our server files if we're doing that.
if cfg.serverdst is not None:
_sync_server_files(cfg)
# On windows we need to pull in some dlls and this and that
# (we also include a non-stripped-down set of python libs).
if cfg.win_extras_src is not None:
_sync_windows_extras(cfg)
# Standard stuff in ba_data
_sync_standard_game_data(cfg)
# On Android we need to build a payload file so it knows # On Android we need to build a payload file so it knows
# what to pull out of the apk. # what to pull out of the apk.
if cfg.include_payload_file: if cfg.include_payload_file:
assert cfg.dst is not None
_write_payload_file(cfg.dst, cfg.is_payload_full) _write_payload_file(cfg.dst, cfg.is_payload_full)
# if __name__ == '__main__':
# try:
# main()
# except CleanError as exc:
# exc.pretty_print()
# sys.exit(1)

View File

@ -648,15 +648,12 @@ def _get_server_config_template_yaml(projroot: str) -> str:
return '\n'.join(lines_out) return '\n'.join(lines_out)
def filter_server_config(projroot: str, infilepath: str, def filter_server_config(projroot: str, infilepath: str) -> str:
outfilepath: str) -> None:
"""Add commented-out config options to a server config.""" """Add commented-out config options to a server config."""
with open(infilepath) as infile: with open(infilepath) as infile:
cfg = infile.read() cfg = infile.read()
cfg = cfg.replace('#__CONFIG_TEMPLATE_VALUES__', return cfg.replace('#__CONFIG_TEMPLATE_VALUES__',
_get_server_config_template_yaml(projroot)) _get_server_config_template_yaml(projroot))
with open(outfilepath, 'w') as outfile:
outfile.write(cfg)
def update_docs_md(check: bool) -> None: def update_docs_md(check: bool) -> None:

View File

@ -20,61 +20,14 @@ if TYPE_CHECKING:
def stage_server_file() -> None: def stage_server_file() -> None:
"""Stage files for the server environment with some filtering.""" """Stage files for the server environment with some filtering."""
import os
import subprocess
import batools.build
from efro.error import CleanError from efro.error import CleanError
from efrotools import replace_one import batools.assetstaging
from efrotools import PYVER
if len(sys.argv) != 5: if len(sys.argv) != 5:
raise CleanError('Expected 3 args (mode, infile, outfile).') raise CleanError('Expected 3 args (mode, infile, outfile).')
mode, infilename, outfilename = sys.argv[2], sys.argv[3], sys.argv[4] mode, infilename, outfilename = sys.argv[2], sys.argv[3], sys.argv[4]
if mode not in ('debug', 'release'): batools.assetstaging.stage_server_file(str(PROJROOT), mode, infilename,
raise CleanError(f"Invalid mode '{mode}'; expected debug or release.")
print(f'Building server file: {os.path.basename(outfilename)}')
os.makedirs(os.path.dirname(outfilename), exist_ok=True)
basename = os.path.basename(infilename)
if basename == 'config_template.yaml':
# Inject all available config values into the config file.
batools.build.filter_server_config(str(PROJROOT), infilename,
outfilename) outfilename)
elif basename == 'ballisticacore_server.py':
# Run Python in opt mode for release builds.
with open(infilename) as infile:
lines = infile.read().splitlines()
if mode == 'release':
lines[0] = replace_one(lines[0],
f'#!/usr/bin/env python{PYVER}',
f'#!/usr/bin/env -S python{PYVER} -O')
with open(outfilename, 'w') as outfile:
outfile.write('\n'.join(lines) + '\n')
subprocess.run(['chmod', '+x', outfilename], check=True)
elif basename == 'launch_ballisticacore_server.bat':
# Run Python in opt mode for release builds.
with open(infilename) as infile:
lines = infile.read().splitlines()
if mode == 'release':
lines[1] = replace_one(
lines[1], ':: Python interpreter.', ':: Python interpreter.'
' (in opt mode so we use bundled .opt-1.pyc files)')
lines[2] = replace_one(
lines[2], 'dist\\\\python.exe ballisticacore_server.py',
'dist\\\\python.exe -O ballisticacore_server.py')
else:
# In debug mode we use the bundled debug interpreter.
lines[2] = replace_one(
lines[2], 'dist\\\\python.exe ballisticacore_server.py',
'dist\\\\python_d.exe ballisticacore_server.py')
with open(outfilename, 'w') as outfile:
outfile.write('\n'.join(lines) + '\n')
else:
raise CleanError(f"Unknown server file for staging: '{basename}'.")
def py_examine() -> None: def py_examine() -> None:
"""Run a python examination at a given point in a given file.""" """Run a python examination at a given point in a given file."""