146 lines
3.6 KiB
Bash
Executable File
146 lines
3.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
export PLAYDATE_SDK_PATH="/home/ut3usw/PlaydateSDK-2.5.0"
|
|
|
|
# Check for color by variable and tput command
|
|
if [[ -z $NOCOLOR && -n $(command -v tput) ]]; then
|
|
RED=$(tput setaf 1)
|
|
CYN=$(tput setaf 6)
|
|
YEL=$(tput setaf 3)
|
|
RST=$(tput sgr0)
|
|
fi
|
|
|
|
function display_help() {
|
|
printf "%s\n\n" "${0} build|run|-h|--help|"
|
|
printf "%-16s\n" "build: Builds the project and runs the Simulator"
|
|
printf "%-16s\n" "run : Skips building the project and runs the Simulator"
|
|
printf "\n"
|
|
printf "%s\n\n" "Set NOCOLOR=1 to disable terminal coloring"
|
|
exit 0
|
|
}
|
|
|
|
# We don't need fancy flags/operators for two commands
|
|
case $1 in
|
|
"build")
|
|
BUILD=1
|
|
;;
|
|
"run")
|
|
BUILD=0
|
|
;;
|
|
*)
|
|
display_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Set some paths
|
|
BUILD_DIR="./builds"
|
|
SOURCE_DIR="./source"
|
|
PDX_PATH="${BUILD_DIR}/$(basename $(pwd)).pdx"
|
|
|
|
# Logging functions
|
|
function log() {
|
|
printf "%s\n" "${CYN}>> $1${RST}"
|
|
}
|
|
function log_warn() {
|
|
printf "%s\n" "${YEL}>! $1${RST}"
|
|
}
|
|
function log_err() {
|
|
printf "%s\n >> %s\n" "${RED}!! ERROR !!" "$1${RST}"
|
|
}
|
|
|
|
function check_pdxinfo() {
|
|
if [[ -f ./source/pdxinfo ]]; then
|
|
if grep "com.organization.package" ./source/pdxinfo 2>&1 >/dev/null; then
|
|
log_warn "PDXINFO NOTICE:"
|
|
log_warn "Don't forget to change your unique project info in 'source/pdxinfo': 'bundleID', 'name', 'author', 'description'."
|
|
log_warn "It's critical to change your game bundleID, so there will be no collisions with other games, installed via sideload."
|
|
log_warn "Read more about pdxinfo here: https://sdk.play.date/Inside%20Playdate.html#pdxinfo"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function chk_err() {
|
|
# Check for errors in last process and bail if needed
|
|
if [[ $? > 0 ]]; then
|
|
log_err "There was an issue with the previous command; exiting!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function check_close_sim() {
|
|
# Check if we have 'pidof'
|
|
PIDOF=$(command -v pidof2)
|
|
|
|
# Prefer 'pidof'; use ps if not
|
|
if [[ -n $PIDOF ]]; then
|
|
SIMPID=$($PIDOF "PlaydateSimulator")
|
|
if [[ -n $SIMPID ]]; then
|
|
log "Found existing Simulator, closing..."
|
|
kill -9 $SIMPID
|
|
chk_err
|
|
fi
|
|
else
|
|
SIMPID=$(ps aux | grep PlaydateSimulator | grep -v grep | awk '{print $2}')
|
|
if [[ -n $SIMPID ]]; then
|
|
log "Found existing Simulator, closing..."
|
|
kill -9 $SIMPID
|
|
chk_err
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Create build dir
|
|
function make_build_dir() {
|
|
if [[ ! -d "${BUILD_DIR}" ]]; then
|
|
log "Creating build directory..."
|
|
mkdir -p "${BUILD_DIR}"
|
|
chk_err
|
|
fi
|
|
}
|
|
|
|
# Clean build dir
|
|
function clean_build_dir() {
|
|
if [[ -d "${BUILD_DIR}" ]]; then
|
|
log "Cleaning build directory..."
|
|
rm -rfv "${BUILD_DIR}/*"
|
|
chk_err
|
|
fi
|
|
}
|
|
|
|
# Compile the PDX
|
|
function build_pdx() {
|
|
if [[ $BUILD == 1 ]]; then
|
|
log "Building PDX with 'pdc'..."
|
|
$PLAYDATE_SDK_PATH/bin/pdc -sdkpath "${PLAYDATE_SDK_PATH}" "${SOURCE_DIR}" "${PDX_PATH}"
|
|
chk_err
|
|
fi
|
|
}
|
|
|
|
# Run the PDX with Simulator
|
|
function run_pdx() {
|
|
if [[ -d "${PDX_PATH}" ]]; then
|
|
log "Running PDX with Simulator..."
|
|
$PLAYDATE_SDK_PATH/bin/PlaydateSimulator "${PDX_PATH}"
|
|
else
|
|
log_err "PDX doesn't exist! Please 'build' the project first!"
|
|
fi
|
|
}
|
|
|
|
|
|
#### MAIN SCRIPT ####
|
|
if [[ $BUILD == 1 ]]; then
|
|
log "Attempting a build and run of PDX..."
|
|
make_build_dir
|
|
clean_build_dir
|
|
check_pdxinfo
|
|
build_pdx
|
|
check_close_sim
|
|
run_pdx
|
|
else
|
|
log "Attempting to run PDX: ${PDX_PATH}..."
|
|
check_close_sim
|
|
run_pdx
|
|
fi
|
|
|