diff --git a/.efrocachemap b/.efrocachemap
index d0cc41d0..205b29dd 100644
--- a/.efrocachemap
+++ b/.efrocachemap
@@ -4068,26 +4068,26 @@
"build/assets/windows/Win32/ucrtbased.dll": "https://files.ballistica.net/cache/ba1/2d/ef/5335207d41b21b9823f6805997f1",
"build/assets/windows/Win32/vc_redist.x86.exe": "https://files.ballistica.net/cache/ba1/b0/8a/55e2e77623fe657bea24f223a3ae",
"build/assets/windows/Win32/vcruntime140d.dll": "https://files.ballistica.net/cache/ba1/86/5b/2af4d1e26a1a8073c89acb06e599",
- "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/52/15/ab02c6459f5439f526e93d2b7f54",
- "build/prefab/full/linux_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/97/f4/5069754f3c14bc147cbf5a720a7a",
- "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/d6/59/b2b8c3fd93cee8c42e8f0ad52b4e",
- "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/92/fd/cdfb069952a518a5bf2e7cf3392b",
- "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/35/74/92cc2e753dcec2a1b5686e356354",
- "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/7d/87/ab64cdae54b714a12ccba26edd04",
- "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/60/00/041955bb284b8ed8adfeda2dd58f",
- "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/03/55/4003a3204340b5982ee2ccc9e4a1",
- "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/fe/74/c853281985a80ff7697064aecc0e",
- "build/prefab/full/mac_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/32/24/52c5ebf4d681eceba318b9da7b9c",
- "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/0a/cc/4742fe6cf5e8fd5164896e65b967",
- "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/52/0a/fa2d0611dc0c009679fdb46bed31",
- "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/2f/b6/f4e880dbd1d5d8fc65431f9faaf4",
- "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/25/72/e88b3f07c7dc1e33abeb20504ecc",
- "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/86/ec/36d71d58ab16db28a370f1756464",
- "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/92/5f/d3aedaebca5fd7b6bf1733ece902",
- "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/f6/4b/34f50badf8c0145555b3fb793921",
- "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/c3/7a/27057ee8be4d3ce1be25e364ebcb",
- "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/d5/8f/8b90bda67603753391a2c72cd539",
- "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/db/1a/2516790f8fe7c5a794e5e552a0f3",
+ "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/6b/a1/5f560a97ab8641091343c6ee688b",
+ "build/prefab/full/linux_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/50/dd/86cbb96aca3a339318b00574b2db",
+ "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/6b/b4/65070558df0a917c9a1aac8bb280",
+ "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/93/04/19410cb96b5c12fc2cd20dd9c099",
+ "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/36/69/25b4f3e931ff0add15a975383491",
+ "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/16/68/6011835e4db7927b26761847950b",
+ "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/11/bf/aa9df1fd5ae51e9b076a324d8e7a",
+ "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/8a/76/54da9b7ff4d79164d3f4dea2782b",
+ "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/4a/08/bf75de3244efe6fc342139a6da32",
+ "build/prefab/full/mac_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/33/c7/d3534c1d605b5bcc4a541457cde9",
+ "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/0e/58/c7da77e4c0d031073e4db047e4f3",
+ "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/f5/be/f80777972954ebe6fd91b52a6533",
+ "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/e4/20/0f1e3a2e343e48dbe3c3ae8c6ab7",
+ "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/23/46/72f453ea380bd5f04957886c2b57",
+ "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/f8/e3/b7bf2bdd4fe4879e8f95bc56073c",
+ "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/b5/e6/451f3cc73b5b79d21b19c2416d61",
+ "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/b2/0e/778420dfd1a6f81ed457a94f8f1d",
+ "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/00/76/0f4dd3bbf7a98f00221307535b4f",
+ "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/4d/fe/1d4e9c927e74f900766cb3d3c55f",
+ "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/82/99/e0a873f37e95674f2151ea99bf3d",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "https://files.ballistica.net/cache/ba1/b3/a2/5da0c4dc65f469e4a476e0395eb5",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "https://files.ballistica.net/cache/ba1/a9/9a/adb83188f9c7d7b51dafd0f8b8a8",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "https://files.ballistica.net/cache/ba1/b3/a2/5da0c4dc65f469e4a476e0395eb5",
@@ -4104,14 +4104,14 @@
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "https://files.ballistica.net/cache/ba1/59/fe/a3e369f2db87a305641e74ae70ab",
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "https://files.ballistica.net/cache/ba1/be/df/60063a6845e8654958f1a3e37867",
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "https://files.ballistica.net/cache/ba1/59/fe/a3e369f2db87a305641e74ae70ab",
- "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/d1/50/ee04ab770e6128a557e49c82615d",
- "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/37/af/364afe42b7d12c55bff5cff70e92",
- "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/20/45/857c24d456719039f97dc0926ff0",
- "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/07/69/58c0df6421c215ed6a4087c9ff08",
- "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/e0/03/38c940328f966108e8309c301f5c",
- "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/e5/59/28ef0b5b254fa22891d8e2020447",
- "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/3e/31/5640d04cea61f78e430415c6ab1e",
- "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/13/80/e30666a9b6abeb6fdafe78d3b7d8",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/91/2f/362a643d543963de549d830fe604",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/2e/d4/67d6c0f9b372eb5cd92c9def6fc8",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/68/8b/d6049425f1069d256abdaf90004c",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/3e/82/f70e75696765ac05875cb5dd778c",
+ "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/38/ee/56658557aa2ecabd0d30eb01b68e",
+ "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/6b/4c/568766d02bbca174752488850737",
+ "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/3e/5b/1aa2252706188de69075eb7b3656",
+ "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/ab/a7/21bc5acc8a823bd7c7ec940e97bc",
"src/assets/ba_data/python/babase/_mgen/__init__.py": "https://files.ballistica.net/cache/ba1/f8/85/fed7f2ed98ff2ba271f9dbe3391c",
"src/assets/ba_data/python/babase/_mgen/enums.py": "https://files.ballistica.net/cache/ba1/f8/cd/3af311ac63147882590123b78318",
"src/ballistica/base/mgen/pyembed/binding_base.inc": "https://files.ballistica.net/cache/ba1/ee/dd/ad968b176000e31c65be6206a2bc",
diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml
index 4f4cc54f..6304dd3b 100644
--- a/.idea/dictionaries/ericf.xml
+++ b/.idea/dictionaries/ericf.xml
@@ -527,6 +527,7 @@
cmakelist
cmakelists
cmakemodular
+ cmakemodularserver
cmakeserver
cmath
cmathmodule
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 231edd9c..4b044686 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,26 +5,27 @@
by a standard Python interpreter. This new build style is referred to as
'modular'. The traditional form of the app, where we bootstrap Python
ourselves inside a standalone binary, is called 'monolithic'. To build and run
- Ballistica in modular form, you can do `make cmake-modular`. This should make
- it easier to use certain things like Python debuggers with Ballistica. While I
- expect most builds of the game to remain monolithic, this may become the
- default for certain situations such as server builds or possibly Linux builds
- if it seems beneficial. We'll see. Modular mode should work on Linux and Mac
- currently; other platforms remain monolithic-only for now.
+ Ballistica in modular form, you can do `make cmake-modular` or `make
+ cmake-modular-server`. This should make it easier to use certain things like
+ Python debuggers with Ballistica. While I expect most builds of the game to
+ remain monolithic, this may become the default for certain situations such as
+ server builds or possibly Linux builds if it seems beneficial. We'll see.
+ Modular mode should work on Linux and Mac currently; other platforms remain
+ monolithic-only for now.
- Changed builds such as `cmake` and `cmake-server` to be more like the new
- `cmake-monolithic` setup; there is now a `staged` dir that built binaries are
- symlinked into instead of just dumping a `ba_data` into the cmake build dir.
- This keeps things a bit cleaner with fewer build-related files interspersed
- with the stuff that Ballistica expects to be there at runtime. This also
- allows an elegant `-dist` flag to be used with the staging command to copy
- files instead of symlinking them.
+ `cmake-monolithic-*` builds; there is now a `staged` dir that built binaries
+ are symlinked into instead of just dumping a `ba_data` into the cmake build
+ dir. This keeps things a bit cleaner with fewer build-related files
+ interspersed with the stuff that Ballistica expects to be there at runtime.
+ This also allows an elegant `-dist` flag to be used with the staging command
+ to copy files instead of symlinking them.
- Changed path wrangling a bit in baenv.py. All ballistica Python paths
- (including python-site-packages) are now placed before any other existing
+ (including python-site-packages) are now placed *before* any other existing
Python paths. This should provide a more consistent environment and means
Ballistica will always use its own version of things like yaml or certifi or
- typing_extensions instead of one the user has installed via pip. Holler if you
- run into any problems because of this and we can make an option to use the old
- behavior where Ballistica's app and site paths get placed at the end.
+ typing_extensions instead of ones the user has installed via pip. Holler if
+ you run into any problems because of this and we can make an option to use the
+ old behavior where Ballistica's app and site paths get placed at the end.
- It is now possible to manually run the app loop even on monolithic builds;
just do `PYTHONPATH=ba_data/python ./ballisticacore -c "import baenv;
baenv.configure(); import babase; babase.app.run()"`. This is basically the
@@ -43,7 +44,8 @@
than simply asset files so this is a more accurate name.
- Added `babase.fatal_error()`. Mod code should generally never use this, but it
can be useful for core engine code to directly and clearly point out problems
- that cannot be recovered from.
+ that cannot be recovered from (Exceptions in such cases can tend to be
+ 'handled' which leads to a broken or crashing app).
### 1.7.23 (build 21178, api 8, 2023-07-19)
diff --git a/Makefile b/Makefile
index 67699cb2..18de0bc9 100644
--- a/Makefile
+++ b/Makefile
@@ -1088,14 +1088,39 @@ cmake-modular-binary: meta
cmake-modular-clean:
rm -rf build/cmake/modular-$(CM_BT_LC)
+cmake-modular-server: cmake-modular-server-build
+ @cd build/cmake/modular-server-$(CM_BT_LC)/staged && ./ballisticakit_server
+
+cmake-modular-server-build: assets-server meta cmake-modular-server-binary
+ @$(STAGE_BUILD) -cmakemodularserver -$(CM_BT_LC) \
+ -builddir build/cmake/modular-server-$(CM_BT_LC) \
+ build/cmake/modular-server-$(CM_BT_LC)/staged
+ @tools/pcommand echo BLD \
+ Server build complete: BLU build/cmake/modular-server-$(CM_BT_LC)/staged
+
+cmake-modular-server-binary: meta
+ @tools/pcommand cmake_prep_dir build/cmake/modular-server-$(CM_BT_LC)
+ @cd build/cmake/modular-server-$(CM_BT_LC) && test -f Makefile \
+ || cmake -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DHEADLESS=true \
+ $(shell pwd)/ballisticakit-cmake
+ @tools/pcommand update_cmake_prefab_lib server $(CM_BT_LC) \
+ build/cmake/modular-server-$(CM_BT_LC)
+ @cd build/cmake/modular-server-$(CM_BT_LC) && $(MAKE) \
+ -j$(CPUS) ballisticakitso
+
+cmake-modular-server-clean:
+ rm -rf build/cmake/modular-server-$(CM_BT_LC)
+
# Stage assets for building/running within CLion.
clion-staging: assets-cmake resources meta
$(STAGE_BUILD) -cmake -debug build/clion_debug
$(STAGE_BUILD) -cmake -release build/clion_release
# Tell make which of these targets don't represent files.
-.PHONY: cmake cmake-build cmake-clean cmake-server cmake-server-build \
- cmake-server-clean
+.PHONY: cmake cmake-build cmake-clean cmake-server cmake-server-build \
+ cmake-server-clean cmake-modular-build cmake-modular cmake-modular-binary \
+ cmake-modular-clean cmake-modular-server cmake-modular-server-build \
+ cmake-modular-server-binary cmake-modular-server-clean clion-staging
################################################################################
diff --git a/ballisticakit-cmake/.idea/dictionaries/ericf.xml b/ballisticakit-cmake/.idea/dictionaries/ericf.xml
index 17b0f860..ed693e85 100644
--- a/ballisticakit-cmake/.idea/dictionaries/ericf.xml
+++ b/ballisticakit-cmake/.idea/dictionaries/ericf.xml
@@ -329,6 +329,7 @@
cloudtoba
cmakelist
cmakemodular
+ cmakemodularserver
cmath
cmds
cmdspath
diff --git a/tools/batools/build.py b/tools/batools/build.py
index 0fa3e4f1..b9c38e42 100644
--- a/tools/batools/build.py
+++ b/tools/batools/build.py
@@ -693,9 +693,10 @@ def cmake_prep_dir(dirname: str, verbose: bool = False) -> None:
current_value: str
# Start with an entry we can explicitly increment if we want to blow
- # away all cmake builds everywhere (for if we change something in
- # the CMakeList that cmake doesn't properly handle itself, etc.).
- entries: list[Entry] = [Entry('explicit cmake rebuild', '1')]
+ # away all cmake builds everywhere (to keep things clean if we
+ # rename or move something in the build dir or if we change
+ # something cmake doesn't properly handle without a fresh start).
+ entries: list[Entry] = [Entry('explicit cmake rebuild', '2')]
# Start fresh if cmake version changes.
cmake_ver_output = subprocess.run(
diff --git a/tools/batools/spinoff/_context.py b/tools/batools/spinoff/_context.py
index 9d5a4db7..807751f5 100644
--- a/tools/batools/spinoff/_context.py
+++ b/tools/batools/spinoff/_context.py
@@ -894,6 +894,14 @@ class SpinoffContext:
'',
label=src_path,
)
+ text = replace_exact(
+ text,
+ '\t@tools/pcommand update_cmake_prefab_lib server'
+ ' $(CM_BT_LC) \\\n'
+ ' build/cmake/modular-server-$(CM_BT_LC)\n',
+ '',
+ label=src_path,
+ )
return self.default_filter_text(text)
diff --git a/tools/batools/staging.py b/tools/batools/staging.py
index aaf91c11..95effb0d 100755
--- a/tools/batools/staging.py
+++ b/tools/batools/staging.py
@@ -47,7 +47,7 @@ class AssetStager:
self.win_platform: str | None = None
self.win_type: str | None = None
self.include_python_dylib = False
- self.include_shell_launcher = False
+ self.include_shell_executable = False
self.include_audio = True
self.include_meshes = True
self.include_collision_meshes = True
@@ -57,8 +57,8 @@ class AssetStager:
self.include_fonts = True
self.include_json = True
self.include_pylib = False
- self.include_monolithic_binary = False
- self.monolithic_binary_name: str | None = None
+ self.include_binary_executable = False
+ self.executable_name: str | None = None
self.pylib_src_name: str | None = None
self.include_payload_file = False
self.tex_suffix: str | None = None
@@ -105,6 +105,9 @@ class AssetStager:
def _parse_args(self, args: list[str]) -> None:
"""Parse args and apply to ourself."""
+ # pylint: disable=too-many-branches
+ # pylint: disable=too-many-statements
+
if len(args) < 1:
raise RuntimeError('Expected at least one argument.')
platform_arg = args[0]
@@ -144,13 +147,14 @@ class AssetStager:
self.dst = args[-1]
self.tex_suffix = '.dds'
# Link/copy in a binary *if* builddir is provided.
- self.include_monolithic_binary = self.builddir is not None
- self.monolithic_binary_name = 'ballisticakit'
+ self.include_binary_executable = self.builddir is not None
+ self.executable_name = 'ballisticakit'
elif platform_arg == '-cmakemodular':
self.dst = args[-1]
self.tex_suffix = '.dds'
self.include_python_dylib = True
- self.include_shell_launcher = True
+ self.include_shell_executable = True
+ self.executable_name = 'ballisticakit'
elif platform_arg == '-cmakeserver':
self.dst = os.path.join(args[-1], 'dist')
self.serverdst = args[-1]
@@ -158,8 +162,17 @@ class AssetStager:
self.include_audio = False
self.include_meshes = False
# Link/copy in a binary *if* builddir is provided.
- self.include_monolithic_binary = self.builddir is not None
- self.monolithic_binary_name = 'ballisticakit_headless'
+ self.include_binary_executable = self.builddir is not None
+ self.executable_name = 'ballisticakit_headless'
+ elif platform_arg == '-cmakemodularserver':
+ self.dst = os.path.join(args[-1], 'dist')
+ self.serverdst = args[-1]
+ self.include_textures = False
+ self.include_audio = False
+ self.include_meshes = False
+ self.include_python_dylib = True
+ self.include_shell_executable = True
+ self.executable_name = 'ballisticakit_headless'
elif platform_arg == '-xcode-mac':
self.src = os.environ['SOURCE_ROOT'] + '/build/assets'
@@ -398,6 +411,7 @@ class AssetStager:
subprocess.run(cmd, check=True)
def _sync_ba_data(self) -> None:
+ # pylint: disable=too-many-branches
assert self.dst is not None
os.makedirs(f'{self.dst}/ba_data', exist_ok=True)
cmd: list[str] = [
@@ -417,14 +431,17 @@ class AssetStager:
cmd.append('--delete-excluded')
else:
# Shouldn't be trying to do sparse stuff.
- assert (
- self.include_textures
- and self.include_audio
- and self.include_fonts
- and self.include_json
- and self.include_meshes
- and self.include_collision_meshes
- )
+ if self.serverdst is not None:
+ assert self.include_json and self.include_collision_meshes
+ else:
+ assert (
+ self.include_textures
+ and self.include_audio
+ and self.include_fonts
+ and self.include_json
+ and self.include_meshes
+ and self.include_collision_meshes
+ )
# Keep rsync from trying to prune this as an 'empty' dir.
cmd += ['--exclude', '/python-dylib']
@@ -468,17 +485,20 @@ class AssetStager:
]
subprocess.run(cmd, check=True)
- if self.include_monolithic_binary:
- self._sync_monolithic_binary()
+ if self.include_binary_executable:
+ self._sync_binary_executable()
if self.include_python_dylib:
self._sync_python_dylib()
- if self.include_shell_launcher:
- self._sync_shell_launcher()
+ if self.include_shell_executable:
+ self._sync_shell_executable()
- def _sync_shell_launcher(self) -> None:
- path = f'{self.dst}/ballisticakit'
+ def _sync_shell_executable(self) -> None:
+ if self.executable_name is None:
+ raise RuntimeError('Executable name must be set for this staging.')
+
+ path = f'{self.dst}/{self.executable_name}'
# For now this is so simple we just do an ad-hoc write each time;
# not worth setting up files and syncs.
@@ -503,10 +523,10 @@ class AssetStager:
f'{optstuff}'
'\n'
'# Run the app, forwarding along all arguments.\n'
- '# Basically this does:\n'
+ '# Basically this will do:\n'
'# import baenv; baenv.configure();'
' import babase; babase.app.run().\n'
- 'python3.11 ba_data/python/baenv.py $@\n'
+ 'exec python3.11 ba_data/python/baenv.py $@\n'
)
subprocess.run(['chmod', '+x', path], check=True)
@@ -524,13 +544,13 @@ class AssetStager:
relpath = os.path.relpath(srcpath, os.path.dirname(dstpath))
subprocess.run(['ln', '-sf', relpath, dstpath], check=True)
- def _sync_monolithic_binary(self) -> None:
+ def _sync_binary_executable(self) -> None:
if self.builddir is None:
raise RuntimeError("This staging type requires '-builddir' arg.")
- if self.monolithic_binary_name is None:
+ if self.executable_name is None:
raise RuntimeError('monolithic-binary-name is not set.')
- mbname = self.monolithic_binary_name
+ mbname = self.executable_name
self._copy_or_symlink_file(
f'{self.builddir}/{mbname}', f'{self.dst}/{mbname}'
)
@@ -544,8 +564,11 @@ class AssetStager:
dylib_staging_dir = f'{self.dst}/ba_data/python-dylib'
+ if self.executable_name is None:
+ raise RuntimeError('executable_name is not set.')
+
# Name of our single shared library containing all our stuff.
- soname = 'ballisticakit.so'
+ soname = f'{self.executable_name}.so'
# All featuresets in the project with binary modules.
bmodfeaturesets = {