From 7ed0abb70893b1d3965c99e2c03fb772f5f9f285 Mon Sep 17 00:00:00 2001 From: Eric Date: Tue, 25 Jul 2023 12:05:20 -0700 Subject: [PATCH] added cmake-modular-server builds --- .efrocachemap | 56 ++++++------- .idea/dictionaries/ericf.xml | 1 + CHANGELOG.md | 36 +++++---- Makefile | 29 ++++++- .../.idea/dictionaries/ericf.xml | 1 + tools/batools/build.py | 7 +- tools/batools/spinoff/_context.py | 8 ++ tools/batools/staging.py | 79 ++++++++++++------- 8 files changed, 139 insertions(+), 78 deletions(-) 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 = {