#!/bin/bash
set -e
SCRIPT_PATH=$(readlink -f "${BASH_SOURCE:-$0}")
SCRIPT_DIR=$(dirname "$SCRIPT_PATH")
SERVER_MODS=${STK_SERVER_MODULES:=""}
exec_spacetime() {
# args: target, environment, build root, modules
echo "[*] Running configure command: 'python3 $SCRIPT_DIR/spacetime_py/spacetime.py $1 $2 $SCRIPT_DIR $SPACETIME_VERBOSE'"
python3 "$SCRIPT_DIR/spacetime_py/spacetime.py" "$1" "$2" "$SCRIPT_DIR" "$SPACETIME_VERBOSE" "$4"
}
exec_ninja() {
# args: target
echo "[*] Running build command: 'ninja -C $SCRIPT_DIR $1'"
ninja -C "$SCRIPT_DIR" "$1"
}
sub_help() {
echo "Spacetime - StarKingdoms build utility"
echo "Spacetime is a small utility program to generate Ninja build manifests for compiling StarKingdoms."
echo "Available targets:"
echo " help - Show this help screen" # done
echo " run_http - Compile the client and run a development http server for testing it" # done
echo " run_server (default) - Compile and run the game server" # done
echo " build_server - Compile the game server" # done
echo " run_server_prod - Compile and run the game server with optimizations enabled" # done
echo " build_server_prod - Compile the game server with optimizations enabled" # done
echo " run_api - Compile and run the API server"
echo " build_api - Compile the API server"
echo " run_api_prod - Compile and run the API server with optimizations enabled"
echo " build_api_prod - Compile the API server with optimizations enabled"
echo " install_tooling - Install the compilation utilities required for compiling StarKingdoms" # done
echo " build_assets - Compile spritesheets in all three texture sizes for textures-fast" # done
echo " build_assets_full - Compile spritesheets in full size for textures-fast" # done
echo " build_assets_375 - Commpile 37.5% spritesheets for textures-fast" # done
echo " build_assets_125 - Compile 12.5% spritesheets for textures-fast" # done
echo " clean - Remove all generated files" # done
}
check_install_cargo() {
echo "[*] Checking for $1"
if ! command -v "$1" &> /dev/null
then
echo "[+] $1 was not found, installing via Cargo..."
cargo install "$2" $3
fi
}
check() {
echo "[*] Checking for $1"
if ! command -v "$1" &> /dev/null
then
echo "[x] $1 was not found but is required for the build process to continue. Install it with your system package manager, or, if supported, 'st install_tooling'"
exit 1
fi
}
check_all() {
check inkscape
check protoc
check atlasify
}
sub_clean() {
rm -rf web/dist
rm -rf assets/dist
rm -rf assets/final
rm -rf target
rm -rf client/pkg
}
sub_install_tooling() {
check inkscape
check protoc
check atlasify
echo "[*] All required tools are installed"
}
sub_run_http() {
check_all
exec_spacetime client prod "$SCRIPT_DIR" "$CLIENT_MODS"
exec_ninja asset
cd client && yarn && yarn run dev
}
sub_build_server() {
check_all
exec_spacetime server dev "$SCRIPT_DIR" "$SERVER_MODS"
exec_ninja server
}
sub_run_server() {
check_all
exec_spacetime server dev "$SCRIPT_DIR" "$SERVER_MODS"
exec_ninja server
exec "$SCRIPT_DIR/target/debug/starkingdoms-server"
}
sub_build_server_prod() {
check_all
exec_spacetime server prod "$SCRIPT_DIR" "$SERVER_MODS"
exec_ninja server
}
sub_run_server_prod() {
check_all
exec_spacetime server prod "$SCRIPT_DIR" "$SERVER_MODS"
exec_ninja server
exec "$SCRIPT_DIR/target/release/starkingdoms-server"
}
sub_build_api() {
check_all
exec_spacetime api dev "$SCRIPT_DIR" "$SERVER_MODS"
exec_ninja api
}
sub_run_api() {
check_all
exec_spacetime api dev "$SCRIPT_DIR" "$SERVER_MODS"
exec_ninja api
cd api && exec "$SCRIPT_DIR/target/debug/starkingdoms-api"
}
sub_build_api_prod() {
check_all
exec_spacetime api prod "$SCRIPT_DIR" "$SERVER_MODS"
exec_ninja api
}
sub_run_api_prod() {
check_all
exec_spacetime api prod "$SCRIPT_DIR" "$SERVER_MODS"
exec_ninja api
cd api && exec "$SCRIPT_DIR/target/release/starkingdoms-api"
}
sub_build_assets() {
check_all
exec_spacetime asset dev "$SCRIPT_DIR"
exec_ninja asset
}
sub_build_assets_full() {
check_all
exec_spacetime asset dev "$SCRIPT_DIR"
exec_ninja asset-full
}
sub_build_assets_375() {
check_all
exec_spacetime asset dev "$SCRIPT_DIR"
exec_ninja asset-375
}
sub_build_assets_125() {
check_all
exec_spacetime asset dev "$SCRIPT_DIR"
exec_ninja asset-125
}
subcommand=$1
case $subcommand in
"" | "-h" | "--help" | "help")
sub_help
;;
*)
echo "[*] Running build command $subcommand"
shift
sub_${subcommand} $@
if [ $? = 127 ]; then
echo "Error: '$subcommand' is not a known subcommand." >&2
echo " Run 'st --help' for a list of known subcommands." >&2
exit 1
fi
;;
esac