batools package¶
Build/tool functionality specific to the Ballistica project.
This stuff can be a bit more sloppy/loosey-goosey since it is not used by the game itself.
Subpackages¶
Submodules¶
batools.android module¶
Functionality related to android builds.
batools.androidsdkutils module¶
Utilities for wrangling Android SDK bits.
batools.appmodule module¶
Generates parts of babase._app.py.
This includes things like subsystem attributes for all feature-sets that want them and default app-intent handling.
batools.apprun module¶
Utils for wrangling running the app as part of a build.
Manages constructing or downloading it as well as running it.
- batools.apprun.acquire_binary(assets: bool, purpose: str) str [source]¶
Return path to a runnable binary, building/downloading as needed.
If ‘assets’ is False, only the binary itself will be fetched or assembled; no scripts or assets. This generally saves some time, but must only be used for very simple ‘-c’ command cases where no assets will be needed.
Be aware that it is up to the particular environment whether a gui or headless binary will be provided. Commands should be designed to work with either.
By default, downloaded prefab builds will be used here. This allows people without full compiler setups to still perform app runs for things like dummy-module generation. However, someone who is able to compile their own binaries might prefer to use their own binaries here so that changes to their local repo are properly reflected in app runs and whatnot. Set environment variable BA_APP_RUN_ENABLE_BUILDS=1 to enable that.
When local builds are enabled, we use the same gui build targets as the ‘make cmake-build’ command. This works well if you are iterating using that build target anyway, minimizing redundant rebuilds. You may, however, prefer to instead assemble headless builds for various reasons including faster build times and fewer dependencies (equivalent to ‘make cmake-server-build’). To do so, set environment variable BA_APP_RUN_BUILD_HEADLESS=1.
- batools.apprun.acquire_binary_for_python_command(purpose: str) str [source]¶
Run acquire_binary as used for python_command call.
batools.assetsmakefile module¶
Updates src/assets/Makefile based on source assets present.
batools.bacloud module¶
A tool for interacting with ballistica’s cloud services. This facilitates workflows such as creating asset-packages, etc.
- class batools.bacloud.StateData(login_token: str | None = None)[source]¶
Bases:
object
Persistent state data stored to disk.
batools.build module¶
General functionality related to running builds.
- class batools.build.LazyBuildCategory(*values)[source]¶
Bases:
Enum
Types of sources.
- ASSETS = 'assets_src'¶
- CMAKE = 'cmake_src'¶
- DUMMYMODULES = 'dummymodules_src'¶
- META = 'meta_src'¶
- RESOURCES = 'resources_src'¶
- WIN = 'win_src'¶
- class batools.build.PrefabPlatform(*values)[source]¶
Bases:
Enum
Distinct os/cpu-arch/etc. combos we support for prefab builds.
- LINUX_ARM64 = 'linux_arm64'¶
- LINUX_X86_64 = 'linux_x86_64'¶
- MAC_ARM64 = 'mac_arm64'¶
- MAC_X86_64 = 'mac_x86_64'¶
- WINDOWS_X86 = 'windows_x86'¶
- classmethod get_current(wsl_targets_windows: bool | None = None) PrefabPlatform [source]¶
Get an identifier for the platform running this build.
Pass a bool wsl_targets_windows value to cause WSL to target either native Windows (True) or Linux (False). If this value is not passed, the env var BA_WSL_TARGETS_WINDOWS is used, and if that is not set, the default is False (Linux builds).
Throws a RuntimeError on unsupported platforms.
- class batools.build.PrefabTarget(*values)[source]¶
Bases:
Enum
Types of prefab builds able to be run.
- GUI_DEBUG = 'gui-debug'¶
- GUI_RELEASE = 'gui-release'¶
- SERVER_DEBUG = 'server-debug'¶
- SERVER_RELEASE = 'server-release'¶
- batools.build.archive_old_builds(ssh_server: str, builds_dir: str, ssh_args: list[str]) None [source]¶
Stuff our old public builds into the ‘old’ dir.
(called after we push newer ones)
- batools.build.cmake_prep_dir(dirname: str, verbose: bool = False) None [source]¶
Create a dir, recreating it when cmake/python/etc. versions change.
Useful to prevent builds from breaking when cmake or other components are updated.
batools.changelog module¶
Generates a pretty html changelog from our markdown.
batools.docker module¶
General functionality related to docker builds.
- batools.docker.docker_build(platform: str | None = 'linux/amd64', headless_build: bool | str | None = None, build_type: str | None = None) None [source]¶
Build docker image. platform == ‘linux/arm64’ or platform == ‘linux/amd64’
batools.docs module¶
Documentation generation functionality.
- class batools.docs.AttributeInfo(name: str, attr_type: str | None = None, docs: str | None = None)[source]¶
Bases:
object
Info about an attribute of a class.
- class batools.docs.SphinxSettings(project_name: str, project_author: str, copyright: str, version: str, buildnum: int, logo_small: str, logo_large: str)[source]¶
Bases:
object
Our settings for sphinx stuff.
- batools.docs.get_sphinx_settings(projroot: str) SphinxSettings [source]¶
Settings for our Sphinx runs.
batools.dummymodule module¶
Generates dummy .py modules based on binary modules.
This allows us to use code introspection tools such as pylint without spinning up the engine, and also allows external scripts to import game scripts successfully (albeit with limited functionality).
batools.enumspython module¶
Generate a Python module containing Enum classes from C++ code.
Note that the general strategy moving forward is the opposite of this: to generate C++ code as needed from Python sources. That is generally a better direction to go since introspecting Python objects or source code ast is more foolproof than the text based parsing we are doing here.
batools.featureset module¶
Functionality for working with spinoff feature-sets.
Feature-sets are logical groupings of functionality that can be stripped out of or added in to spinoff dst projects. This allows for more high level dependency management and organization than would be possible through filtering alone.
- class batools.featureset.FeatureSet(name: str)[source]¶
Bases:
object
Defines a feature-set.
- allow_as_soft_requirement: bool¶
If True, feature-set ‘foo_bar’, will be allowed to be listed as a soft-requirement of other feature sets and its python-app-subsystem will be annotated as type ‘bafoobar.FooBarSubsystem | None’ instead of simply ‘bafoobar.FooBarSubsystem’. This forces type-checked code to account for the possibility that it will not be present. Note that this currently requires has_python_app_subsystem to be True (because if a soft-required feature-set is missing we must assume that is the case anyway because there’s no way to know).
- cpp_namespace_check_disable_files: set[str]¶
Paths of files we should disable c++ namespace checks for. (generally external-originating code that doesn’t conform to our ballistica feature-set based namespace scheme)
- dummy_module_def: DummyModuleDef¶
Override this to customize how your dummy module is generated.
- classmethod get_active() FeatureSet [source]¶
Return the FeatureSet currently being defined.
For use by settings scripts.
- classmethod get_all_for_project(project_root: str) list[FeatureSet] [source]¶
Return all feature-sets for the current project.
- has_python_app_subsystem: bool¶
If True, for feature-set ‘foo_bar’, the build system will define a ‘babase.app.foo_bar’ attr which points to a lazy loaded instance of type ‘bafoobar.FooBarSubsystem’.
- has_python_binary_module: bool¶
Whether this featureset defines a native Python module within its C++ code. The build process will try to create dummy modules for all native modules, so to avoid errors you must tell it if you don’t have one.
- property path_native_source: str¶
Project-relative path for this feature-set’s native source.
Note that this does not mean that such source actually exists; this just shows where it would.
- property path_python_package: str¶
Project-relative path for this feature-set’s Python package.
Note that this does not mean that the package actually exists; this just shows where it would.
- property path_python_package_meta: str¶
Project-relative path for this feature-set’s Python meta package.
Note that this does not mean that the package actually exists; this just shows where it would.
- property path_python_package_tests: str¶
Project-relative path for this feature-set’s Python tests package.
Note that this does not mean that the package actually exists; this just shows where it would.
- property paths: list[str]¶
Return all file/dir paths associated with this feature-set.
Paths are project relative and may not actually exist; this just gives their theoretical locations.
- python_app_subsystem_dependencies: set[str]¶
By default, Python app subsystems will be created in alphabetical order based on their feature set name. All subsystem callbacks adhere to this ordering. If there are any feature sets whose subsystems should always be created before this one’s, list them here. Note that this does not affect whether or not the feature set is included in the build; only the init order in cases when it is.
- requirements: set[str]¶
Other feature-sets this one requires. Any spinoff project this feature-set is included in will implicitly include these as well.
- classmethod resolve_requirements(featuresets: list[FeatureSet], reqs: set[str]) set[str] [source]¶
Resolve all required feature-sets based on a given set of them.
Throws descriptive CleanErrors if any are missing.
- soft_requirements: set[str]¶
Feature-sets this one can use but can survive without. Note that each of these requirements must have ‘allow_as_soft_requirement’ enabled. While it is possible to programmatically check for the presence of any feature-set, officially listing soft-requirements ensures that any expected python-app-subsystems are in place even for feature-sets not included in the spinoff project (though be aware their type annotations will be ‘Any | None’ in that case instead of the usual ‘FooBarSubsystem | None’ due to ‘FooBarSubsystem’ not actually existing).
batools.metabuild module¶
Functionality used in meta-builds (dynamically generated sources).
batools.metamakefile module¶
Procedurally regenerates our code Makefile.
This Makefiles builds our generated code such as encrypted python strings, node types, etc).
- class batools.metamakefile.MetaMakefileGenerator(projroot: str, existing_data: str)[source]¶
Bases:
object
Thing that does the thing.
batools.pcommandmain module¶
A collection of commands for use with this project.
All top level functions here can be run by passing them as the first argument on the command line. (or pass no arguments to get a list of them).
batools.pcommands module¶
A nice collection of ready-to-use pcommands for this package.
- batools.pcommands.androidaddr() None [source]¶
Return the source file location for an android program-counter.
command line args: archive_dir architecture addr
- batools.pcommands.archive_old_builds() None [source]¶
Stuff our old public builds into the ‘old’ dir.
(called after we push newer ones)
- batools.pcommands.check_clean_safety() None [source]¶
Ensure all files are are added to git or in gitignore.
Use to avoid losing work if we accidentally do a clean without adding something.
- batools.pcommands.cmake_prep_dir() None [source]¶
Create dir & recreate when cmake/python/etc. version changes.
Useful to prevent builds from breaking when cmake or other components are updated.
- batools.pcommands.compose_docker_arm64_gui_debug() None [source]¶
Build the docker image with bombsquad cmake for arm64.
- batools.pcommands.compose_docker_arm64_gui_release() None [source]¶
Build the docker image with bombsquad cmake for arm64.
- batools.pcommands.compose_docker_arm64_server_debug() None [source]¶
Build the docker image with bombsquad cmake server for arm64.
- batools.pcommands.compose_docker_arm64_server_release() None [source]¶
Build the docker image with bombsquad cmake server for arm64.
- batools.pcommands.compose_docker_gui_debug() None [source]¶
Build the docker image with bombsquad debug cmake gui.
- batools.pcommands.compose_docker_gui_release() None [source]¶
Build the docker image with bombsquad cmake gui.
- batools.pcommands.compose_docker_server_debug() None [source]¶
Build the docker image with bombsquad debug cmake server.
- batools.pcommands.compose_docker_server_release() None [source]¶
Build the docker image with bombsquad cmake server.
- batools.pcommands.efrocache_update() None [source]¶
Build & push files to efrocache for public access.
- batools.pcommands.ensure_prefab_platform() None [source]¶
Ensure we are running on a particular prefab platform.
Note that prefab platform may not exactly match hardware/os. For example, when running in Linux under a WSL environment, the prefab platform may be Windows; not Linux. Also, a 64-bit os may be targeting a 32-bit platform.
- batools.pcommands.gen_flat_data_code() None [source]¶
Generate a C++ include file from a Python file.
- batools.pcommands.gen_python_enums_module() None [source]¶
Update our procedurally generated python enums.
- batools.pcommands.get_master_asset_src_dir() None [source]¶
Print master-asset-source dir for this repo.
- batools.pcommands.lazy_increment_build() None [source]¶
Increment build number only if C++ sources have changed.
This is convenient to place in automatic commit/push scripts. It could make sense to auto update build number when scripts/assets change too, but a build number change requires rebuilding all binaries so I’ll leave that as an explicit choice to save work.
- batools.pcommands.printcolors() None [source]¶
Print all colors available in efro.terminals.TerminalColor.
- batools.pcommands.prune_includes() None [source]¶
Check for unnecessary includes in C++ files.
Pass –commit to actually modify files.
- batools.pcommands.python_android_patch() None [source]¶
Patches Python to prep for building for Android.
- batools.pcommands.python_android_patch_ssl() None [source]¶
Patches Python ssl to prep for building for Android.
- batools.pcommands.python_apple_patch() None [source]¶
Patches Python to prep for building for Apple platforms.
- batools.pcommands.python_build_android_debug() None [source]¶
Build embeddable Android Python lib (debug ver).
- batools.pcommands.python_build_apple_debug() None [source]¶
Build embeddable python for mac/ios/tvos (dbg ver).
- batools.pcommands.python_gather() None [source]¶
Gather build python components into the project.
This assumes all embeddable py builds have been run successfully.
- batools.pcommands.remove_docker_images() None [source]¶
Remove the bombsquad images loaded in docker.
- batools.pcommands.resize_image() None [source]¶
Resize an image and save it to a new location.
args: xres, yres, src, dst
- batools.pcommands.update_project() None [source]¶
Update project files.
This command is in charge of generating Makefiles, IDE project files, etc. based on the current structure of the project. It can also perform sanity checks or cleanup tasks.
Updating should be explicitly run by the user through commands such as ‘make update’, ‘make check’ or ‘make preflight’. Other make targets should avoid running this command as it can modify the project structure arbitrarily which is not a good idea in the middle of a build.
If this command is invoked with a –check argument, it should not modify any files but instead fail if any modifications would have been made. (used in CI builds to make sure things are kosher).
batools.pcommands2 module¶
A nice collection of ready-to-use pcommands for this package.
- batools.pcommands2.asset_package_assemble() None [source]¶
Assemble asset package data and its manifest.
- batools.pcommands2.asset_package_resolve() None [source]¶
Resolve exact asset-package-version we’ll use (if any).
- batools.pcommands2.clean_orphaned_assets() None [source]¶
Remove asset files that are no longer part of the build.
- batools.pcommands2.gen_monolithic_register_modules() None [source]¶
Generate .h file for registering py modules.
- batools.pcommands2.py_examine() None [source]¶
Run a python examination at a given point in a given file.
- batools.pcommands2.spinoff_check_submodule_parent() None [source]¶
Make sure this dst proj has a submodule parent.
- batools.pcommands2.tests_warm_start() None [source]¶
Warm-start some stuff needed by tests.
This keeps logs clearer by showing any binary builds/downloads we need to do instead of having those silently happen as part of tests.
- batools.pcommands2.update_cmake_prefab_lib() None [source]¶
Update prefab internal libs; run as part of a build.
batools.pruneincludes module¶
Utility to scan for unnecessary includes in c++ files.
batools.resourcesmakefile module¶
Generate our resources Makefile.
(builds things like icons, banners, images, etc.)
batools.staging module¶
Stage files for builds.
batools.toplevelmakefile module¶
Updates top level Makefile based on project elements present.
batools.version module¶
Util to get ballisticakit versions.
- class batools.version.Mode(*values)[source]¶
Bases:
Enum
Mode we can run this command in.
- API = 'api'¶
- BUILD = 'build'¶
- INFO = 'info'¶
- VERSION = 'version'¶
batools.xcodeproject module¶
XCode related functionality.