Java Example - binarycounter/Westonpack GitHub Wiki
Running Java Games
Prerequisites:
- Your game needs to include arm64 libraries for any dependencies.
Required Runtimes:
- Westonpack 0.2.5 or higher (
weston_pkg_0.2.squashfs
) - Mesapack 0.1.1 or higher (
mesa_pkg_0.1.squashfs
) (Only if Open GL is used) - JRE 17 or higher (
zulu17.54.21-ca-jre17.0.13-linux.squashfs
)
Example Script (No GL, pure Xlib)
#!/bin/bash
# PortMaster preamble
XDG_DATA_HOME=${XDG_DATA_HOME:-$HOME/.local/share}
if [ -d "/opt/system/Tools/PortMaster/" ]; then
controlfolder="/opt/system/Tools/PortMaster"
elif [ -d "/opt/tools/PortMaster/" ]; then
controlfolder="/opt/tools/PortMaster"
elif [ -d "$XDG_DATA_HOME/PortMaster/" ]; then
controlfolder="$XDG_DATA_HOME/PortMaster"
else
controlfolder="/roms/ports/PortMaster"
fi
source $controlfolder/control.txt
get_controls
# Adjust these to your paths and desired java version
GAMEDIR=/$directory/ports/your_port_folder
java_runtime="zulu17.54.21-ca-jre17.0.13-linux"
jar_filename="YourGame.jar"
gptk_filename="YourControls.gptk"
# Logging
> "$GAMEDIR/log.txt" && exec > >(tee "$GAMEDIR/log.txt") 2>&1
# Create directory for save files
CONFDIR="$GAMEDIR/conf/"
$ESUDO mkdir -p "${CONFDIR}"
# Mount Weston runtime
weston_dir=/tmp/weston
$ESUDO mkdir -p "${weston_dir}"
weston_runtime="weston_pkg_0.2"
if [ ! -f "$controlfolder/libs/${weston_runtime}.squashfs" ]; then
if [ ! -f "$controlfolder/harbourmaster" ]; then
pm_message "This port requires the latest PortMaster to run, please go to https://portmaster.games/ for more info."
sleep 5
exit 1
fi
$ESUDO $controlfolder/harbourmaster --quiet --no-check runtime_check "${weston_runtime}.squashfs"
fi
if [ "$PM_CAN_MOUNT" != "N" ](/binarycounter/Westonpack/wiki/-"$PM_CAN_MOUNT"-!=-"N"-); then
$ESUDO umount "${weston_dir}"
fi
$ESUDO mount "$controlfolder/libs/${weston_runtime}.squashfs" "${weston_dir}"
# Mount Java runtime
export JAVA_HOME="/tmp/javaruntime/"
$ESUDO mkdir -p "${JAVA_HOME}"
if [ ! -f "$controlfolder/libs/${java_runtime}.squashfs" ]; then
if [ ! -f "$controlfolder/harbourmaster" ]; then
pm_message "This port requires the latest PortMaster to run, please go to https://portmaster.games/ for more info."
sleep 5
exit 1
fi
$ESUDO $controlfolder/harbourmaster --quiet --no-check runtime_check "${java_runtime}.squashfs"
fi
if [ "$PM_CAN_MOUNT" != "N" ](/binarycounter/Westonpack/wiki/-"$PM_CAN_MOUNT"-!=-"N"-); then
$ESUDO umount "${JAVA_HOME}"
fi
$ESUDO mount "$controlfolder/libs/${java_runtime}.squashfs" "${JAVA_HOME}"
export PATH="$JAVA_HOME/bin:$PATH"
cd $GAMEDIR
$GPTOKEYB "java" -c "$GAMEDIR/$gptk_filename" &
# Start Westonpack and Java
$ESUDO env $weston_dir/westonwrap.sh drm gl kiosk system \
PATH="$PATH" JAVA_HOME="$JAVA_HOME" XDG_DATA_HOME="$GAMEDIR" WAYLAND_DISPLAY= \
java -jar $GAMEDIR/$jar_filename
#Clean up after ourselves
$ESUDO $weston_dir/westonwrap.sh cleanup
if [ "$PM_CAN_MOUNT" != "N" ](/binarycounter/Westonpack/wiki/-"$PM_CAN_MOUNT"-!=-"N"-); then
$ESUDO umount "${weston_dir}"
$ESUDO umount "${JAVA_HOME}"
fi
pm_finish
Example Script (OpenGL 2.1, through Mesapack/VirGL)
#!/bin/bash
# PortMaster preamble
XDG_DATA_HOME=${XDG_DATA_HOME:-$HOME/.local/share}
if [ -d "/opt/system/Tools/PortMaster/" ]; then
controlfolder="/opt/system/Tools/PortMaster"
elif [ -d "/opt/tools/PortMaster/" ]; then
controlfolder="/opt/tools/PortMaster"
elif [ -d "$XDG_DATA_HOME/PortMaster/" ]; then
controlfolder="$XDG_DATA_HOME/PortMaster"
else
controlfolder="/roms/ports/PortMaster"
fi
source $controlfolder/control.txt
get_controls
# Adjust these to your paths and desired java version
GAMEDIR=/$directory/ports/your_port_folder
java_runtime="zulu17.54.21-ca-jre17.0.13-linux"
jar_filename="YourGame.jar"
gptk_filename="YourControls.gptk"
# Logging
> "$GAMEDIR/log.txt" && exec > >(tee "$GAMEDIR/log.txt") 2>&1
# Create directory for save files
CONFDIR="$GAMEDIR/conf/"
$ESUDO mkdir -p "${CONFDIR}"
# Mount Weston runtime
weston_dir=/tmp/weston
$ESUDO mkdir -p "${weston_dir}"
weston_runtime="weston_pkg_0.2"
if [ ! -f "$controlfolder/libs/${weston_runtime}.squashfs" ]; then
if [ ! -f "$controlfolder/harbourmaster" ]; then
pm_message "This port requires the latest PortMaster to run, please go to https://portmaster.games/ for more info."
sleep 5
exit 1
fi
$ESUDO $controlfolder/harbourmaster --quiet --no-check runtime_check "${weston_runtime}.squashfs"
fi
if [ "$PM_CAN_MOUNT" != "N" ](/binarycounter/Westonpack/wiki/-"$PM_CAN_MOUNT"-!=-"N"-); then
$ESUDO umount "${weston_dir}"
fi
$ESUDO mount "$controlfolder/libs/${weston_runtime}.squashfs" "${weston_dir}"
# Mount Mesa runtime
mesa_dir=/tmp/mesa
$ESUDO mkdir -p "${mesa_dir}"
mesa_runtime="mesa_pkg_0.1"
if [ ! -f "$controlfolder/libs/${mesa_runtime}.squashfs" ]; then
if [ ! -f "$controlfolder/harbourmaster" ]; then
pm_message "This port requires the latest PortMaster to run, please go to https://portmaster.games/ for more info."
sleep 5
exit 1
fi
$ESUDO $controlfolder/harbourmaster --quiet --no-check runtime_check "${mesa_runtime}.squashfs"
fi
if [ "$PM_CAN_MOUNT" != "N" ](/binarycounter/Westonpack/wiki/-"$PM_CAN_MOUNT"-!=-"N"-); then
$ESUDO umount "${mesa_dir}"
fi
$ESUDO mount "$controlfolder/libs/${mesa_runtime}.squashfs" "${mesa_dir}"
# Mount Java runtime
export JAVA_HOME="/tmp/javaruntime/"
$ESUDO mkdir -p "${JAVA_HOME}"
if [ ! -f "$controlfolder/libs/${java_runtime}.squashfs" ]; then
if [ ! -f "$controlfolder/harbourmaster" ]; then
pm_message "This port requires the latest PortMaster to run, please go to https://portmaster.games/ for more info."
sleep 5
exit 1
fi
$ESUDO $controlfolder/harbourmaster --quiet --no-check runtime_check "${java_runtime}.squashfs"
fi
if [ "$PM_CAN_MOUNT" != "N" ](/binarycounter/Westonpack/wiki/-"$PM_CAN_MOUNT"-!=-"N"-); then
$ESUDO umount "${JAVA_HOME}"
fi
$ESUDO mount "$controlfolder/libs/${java_runtime}.squashfs" "${JAVA_HOME}"
export PATH="$JAVA_HOME/bin:$PATH"
cd $GAMEDIR
$GPTOKEYB "java" -c "$GAMEDIR/$gptk_filename" &
# Start Westonpack and Java
# Put CRUSTY_SHOW_CURSOR=1 after "env" if you need a mouse cursor
$ESUDO env $weston_dir/westonwrap.sh drm gl kiosk virgl \
PATH="$PATH" JAVA_HOME="$JAVA_HOME" XDG_DATA_HOME="$GAMEDIR" WAYLAND_DISPLAY= \
java -jar $GAMEDIR/$jar_filename
#Clean up after ourselves
$ESUDO $weston_dir/westonwrap.sh cleanup
if [ "$PM_CAN_MOUNT" != "N" ](/binarycounter/Westonpack/wiki/-"$PM_CAN_MOUNT"-!=-"N"-); then
$ESUDO umount "${weston_dir}"
$ESUDO umount "${mesa_dir}"
$ESUDO umount "${JAVA_HOME}"
fi
pm_finish