mirror of https://github.com/sm64pc/sm64pc.git
Added script to prep Raspbian / RPi and compile SDL2 / SM64
This commit is contained in:
parent
691d6f382b
commit
1dddd51fc9
|
@ -0,0 +1,395 @@
|
||||||
|
#!/bin/bash
|
||||||
|
clear
|
||||||
|
echo "This script will assist with compiling Super Mario 64 on Raspbian 10"
|
||||||
|
echo "Note that accelerated OpenGL (vc4_drm) is required for maximum performance"
|
||||||
|
echo "Checking Raspberry Pi model..."
|
||||||
|
lowmem=0
|
||||||
|
pi=0
|
||||||
|
pimodel=$(uname -m 2>/dev/null || echo unknown)
|
||||||
|
pitype=$(tr -d '\0' < /sys/firmware/devicetree/base/model)
|
||||||
|
|
||||||
|
if [[ $pimodel =~ "armv6" ]]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
echo "Raspberry Pi Model 1/0(W) detected (LOWMEM)"
|
||||||
|
echo "Warning: Additional steps may be required to safely compile and maximize performance"
|
||||||
|
pi=1;
|
||||||
|
lowmem=1;
|
||||||
|
exp=1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $pimodel =~ "armv7" ]]
|
||||||
|
then
|
||||||
|
echo
|
||||||
|
echo "Raspberry Pi Model 2/3 detected (32bit)"
|
||||||
|
pi=2;
|
||||||
|
lowmem=0;
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $pimodel =~ "aarch64" && $pitype =~ "4" ]]
|
||||||
|
then
|
||||||
|
echo
|
||||||
|
echo "Raspberry Pi Model 4 detected"
|
||||||
|
echo "Audio errors reported"
|
||||||
|
echo "Fixing audio config, reboot after compilation completes to activate"
|
||||||
|
sudo sed -i 's/load-module module-udev-detect/load-module module-udev-detect tsched=0/' /etc/pulse/default.pa
|
||||||
|
#load-module module-udev-detect tsched=0
|
||||||
|
pi=4;
|
||||||
|
lowmem=0;
|
||||||
|
exp=1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [[ $exp == 1 ]]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
echo "Notice: Due to detected Pi version, compilation and execution of Super Mario 64 (RPi) is experimental."
|
||||||
|
echo "Further steps may be required and software / driver compatibility is not guaranteed."
|
||||||
|
read -p "Continue setup & compilation (Y/N): " exp
|
||||||
|
|
||||||
|
if [[ $exp =~ "Y" ]]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Please report any problems encountered to https://github.com/sm64pc/sm64pc issue tracker."
|
||||||
|
echo ""
|
||||||
|
sleep 7
|
||||||
|
fi
|
||||||
|
|
||||||
|
#//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
#//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
clear
|
||||||
|
echo "Super Mario 64 RPi Initial Setup"
|
||||||
|
|
||||||
|
if [[ $pi != 4 ]]
|
||||||
|
then #Dumb idea, but quick hack. We CANNOT enable VC4 for Pi4.
|
||||||
|
|
||||||
|
inxinf=$(inxi -Gx)
|
||||||
|
echo "Checking for pre-enabled VC4 acceleration (inxi -Gx)"
|
||||||
|
|
||||||
|
if [[ $inxinf =~ "not found" ]]
|
||||||
|
then
|
||||||
|
echo "Error: inxi not installed. Installing..."
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install inxi
|
||||||
|
inxi=$(inxi -Gx)
|
||||||
|
|
||||||
|
if [[ $inxinf =~ "not found" ]]
|
||||||
|
then
|
||||||
|
echo "Warning: Setup will not continue unless inxi is installed"
|
||||||
|
echo "Please ensure your Pi is in a state to download and install packages"
|
||||||
|
sleep 3
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $inxinf =~ "vc4_drm" ]]
|
||||||
|
then
|
||||||
|
echo "Success: VC4 OpenGL acceleration found!"
|
||||||
|
echo ""
|
||||||
|
sleep 4
|
||||||
|
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "OpenGL driver not found. opening Raspi-Config..."
|
||||||
|
echo "Please enable raspi-config -> ADV Opt -> OpenGL -> Enable FullKMS Renderer"
|
||||||
|
echo ""
|
||||||
|
sleep 5
|
||||||
|
sudo raspi-config
|
||||||
|
vc4add=$(cat /boot/config.txt | grep -e "dtoverlay=vc4-kms-v3d")
|
||||||
|
|
||||||
|
if [[ $vc4add =~ "vc4" ]]
|
||||||
|
then
|
||||||
|
echo "OGL driver now enabled on reboot"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $lowmem == 1 ]]
|
||||||
|
then
|
||||||
|
fixmem=$(cat /boot/cmdline.txt | grep cma=128M)
|
||||||
|
|
||||||
|
if [[ $fixmem =~ "cma=128M" ]]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
echo "Notice: Low-RAM RasPi model detected, BUT fixes already applied."
|
||||||
|
echo "Continuing setup."
|
||||||
|
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "Warning: VC4 enabled, but your Rasp Pi has 512MB or less RAM"
|
||||||
|
echo "To ensure VC4_DRM and game compilation is succesful, video memory will be reduced"
|
||||||
|
echo "gpu_mem=48M (config.txt) | cma=128M (cmdline.txt) will be written to /boot "
|
||||||
|
echo ""
|
||||||
|
read -p "Fix mem? (Y/N): " fixmem
|
||||||
|
|
||||||
|
if [[ $fixmem =~ "Y" ]]
|
||||||
|
then
|
||||||
|
sudo sh -c "echo 'gpu_mem=48' >> /boot/config.txt"
|
||||||
|
sudo sh -c "echo 'cma=128M' >> /boot/cmdline.txt"
|
||||||
|
sync
|
||||||
|
echo "Wrote configuration changes to SD card."
|
||||||
|
sleep 2
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "Warning: Compilation freezes & errors are likely to occur on your Pi"
|
||||||
|
echo ""
|
||||||
|
sleep 3
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $fixmem =~ "Y" || $vc4add =~ "vc4" ]]
|
||||||
|
then
|
||||||
|
clear
|
||||||
|
echo "System configuration has changed!"
|
||||||
|
read -p "Reboot to enable changes? (Y/N): " fixstart
|
||||||
|
if [[ $fixstart =~ "Y" ]]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
echo "Rebooting RasPi!"
|
||||||
|
sudo reboot
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi #This should never run on a Pi 4
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------------
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
clear
|
||||||
|
echo "Beginning installation"
|
||||||
|
echo ""
|
||||||
|
echo "Step 1. Installing latest dependencies"
|
||||||
|
echo "Allow installation & checking of Super Mario 64 compile dependencies?"
|
||||||
|
read -p "Install? (Y/N): " instdep
|
||||||
|
|
||||||
|
if [[ $instdep =~ "Y" ]]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt install build-essential git python3 libaudiofile-dev libglew-dev libsdl2-dev
|
||||||
|
sync
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "Super Mario 64 dependencies not installed."
|
||||||
|
echo "Please manually install if Raspbian is modified from stock"
|
||||||
|
echo ""
|
||||||
|
sleep 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------------------
|
||||||
|
#-------------------------------------------------------------------------------------
|
||||||
|
clear
|
||||||
|
echo "Optional: Compile SDL2 with 'KMSDRM' for enhanced performance?"
|
||||||
|
echo "KMSDRM allows Super Mario 64 to be run without GUI/Desktop enabled on boot."
|
||||||
|
echo ""
|
||||||
|
echo "Warning: Compile could take up to an hour on older Raspberry Pi models"
|
||||||
|
read -p "Proceed? (Y/N): " sdlcomp
|
||||||
|
|
||||||
|
if [[ $sdlcomp =~ "Y" ]]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
echo "Installing dependencies for SDL2 compilation"
|
||||||
|
|
||||||
|
sudo sed -i '/^#\sdeb-src /s/^#//' "/etc/apt/sources.list"
|
||||||
|
sudo apt build-dep libsdl2
|
||||||
|
sudo apt install libdrm-dev libgbm-dev
|
||||||
|
sync
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Creating folder src in HOME directory for compile"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
mkdir $HOME/src
|
||||||
|
cd $HOME/src
|
||||||
|
mkdir $HOME/src/sdl2
|
||||||
|
cd $HOME/src/sdl2
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
echo "Downloading SDL2 from libsdl.org and unzipping to HOME/src/sdl2/SDL2"
|
||||||
|
wget https://www.libsdl.org/release/SDL2-2.0.10.tar.gz
|
||||||
|
sync
|
||||||
|
tar xzf ./SDL2*.gz
|
||||||
|
sync
|
||||||
|
cd ./SDL2*
|
||||||
|
|
||||||
|
echo "Configuring SDL2 library to enable KMSDRM (Xorg free rendering)"
|
||||||
|
./configure --enable-video-kmsdrm
|
||||||
|
echo "Compiling modified SDL2 and installing."
|
||||||
|
make
|
||||||
|
sudo make install
|
||||||
|
fi
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
#---------------------------------------------------------------------
|
||||||
|
sleep 2
|
||||||
|
clear
|
||||||
|
echo "Super Mario 64 RPi preparation & downloader"
|
||||||
|
echo ""
|
||||||
|
echo "Checking in current directory and"
|
||||||
|
echo "checking in "$HOME"/src/sm64pi/sm64pc/ for existing Super Mario 64 PC files"
|
||||||
|
echo ""
|
||||||
|
sm64dircur=$(ls ./Makefile)
|
||||||
|
sm64dir=$(ls $HOME/src/sm64pi/sm64pc/Makefile)
|
||||||
|
|
||||||
|
if [[ $sm64dircur =~ "Makefile" ]] #If current directory has a makefile
|
||||||
|
then
|
||||||
|
sm64dir=$sm64dircur
|
||||||
|
curdir=1; #If current directory has a Makefile or is git zip
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $sm64dir =~ "Makefile" ]];
|
||||||
|
then
|
||||||
|
echo "Existing Super Mario 64 PC port files found!"
|
||||||
|
echo "Redownload files (fresh compile)?"
|
||||||
|
read -p "Redownload? (Y/N): " sm64git
|
||||||
|
|
||||||
|
if [[ $sm64git =~ "N" ]] # Do NOT redownload, USE current directory for compile
|
||||||
|
then
|
||||||
|
sm64dir=1; # Don't redownload files , use current directory (has sm64 files)
|
||||||
|
curdir=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
else #Do a fresh compile in HOME/src/sm64pi/sm64pc/
|
||||||
|
sm64dir=0;
|
||||||
|
curdir=0;
|
||||||
|
fi
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if [[ $sm64git =~ "Y" || $sm64dir == 0 || $curdir == 0 ]] #If user wants to redownload or NOT git-zip execution
|
||||||
|
then
|
||||||
|
echo "Step 2. Super Mario 64 PC-Port will now be downloaded from github"
|
||||||
|
echo "Current folder will NOT be compiled."
|
||||||
|
read -p "Proceed? (Y/N): " gitins
|
||||||
|
|
||||||
|
if [[ $gitins =~ "Y" ]]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
echo "Creating directory "$HOME"/src/sm64pi"
|
||||||
|
mkdir $HOME/src/
|
||||||
|
cd $HOME/src/
|
||||||
|
mkdir $HOME/src/sm64pi
|
||||||
|
cd $HOME/src/sm64pi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Downloading latest Super Mario 64 PC-port code"
|
||||||
|
git clone https://github.com/sm64pc/sm64pc
|
||||||
|
cd $HOME/src/sm64pi/sm64pc/
|
||||||
|
echo "Download complete"
|
||||||
|
echo ""
|
||||||
|
sleep 2
|
||||||
|
fi #End of downloader
|
||||||
|
fi
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
#------------------------------------------------------------------
|
||||||
|
clear
|
||||||
|
echo "Super Mario 64 RPi compilation"
|
||||||
|
echo ""
|
||||||
|
echo "Step 3. Compiling Super Mario 64 for the Raspberry Pi"
|
||||||
|
echo ""
|
||||||
|
echo "Warning: Super Mario 64 assets are required in order to compile"
|
||||||
|
echo "Assets will be extracted from $HOME/src/sm64pi/sm64pc/baserom.(us/eu/jp).z64 "
|
||||||
|
|
||||||
|
if [[ $curdir == 1 ]]
|
||||||
|
then
|
||||||
|
sm64z64=$(find ./* | grep baserom) #See if current directory is prepped
|
||||||
|
else
|
||||||
|
sm64z64=$(find $HOME/src/sm64pi/sm64pc/* | grep baserom) #see if fresh compile directory is prepped
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $sm64z64 =~ "baserom" ]]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
echo "Super Mario 64 assets found in compilation directory"
|
||||||
|
echo "Continuing with compilation"
|
||||||
|
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
echo "Please satisfy this requirement before continuing."
|
||||||
|
echo "Exiting Super Mario 64 RasPi setup and compilation script."
|
||||||
|
echo "Note: Re-run script once baserom(s) are inserted into"
|
||||||
|
|
||||||
|
if [[ $curdir == 1 ]]
|
||||||
|
then
|
||||||
|
echo $PWD
|
||||||
|
else
|
||||||
|
echo $HOME/src/sm64pi/sm64pc/
|
||||||
|
fi
|
||||||
|
|
||||||
|
sleep 5
|
||||||
|
exit
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
sleep 3
|
||||||
|
clear
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [[ $curdir != 1 ]] # If we're not compiling from a git zip / random directory
|
||||||
|
then
|
||||||
|
cd $HOME/src/sm64pi/sm64pc/
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Beginning Super Mario 64 RasPi compilation!"
|
||||||
|
echo ""
|
||||||
|
echo "Warning: Compilation may take up to an hour on weaker hardware"
|
||||||
|
echo "At least 300MB of free storage AND RAM is recommended"
|
||||||
|
echo ""
|
||||||
|
make clean
|
||||||
|
sync
|
||||||
|
make TARGET_RPI=1
|
||||||
|
sync
|
||||||
|
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------
|
||||||
|
#--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if [[ $curdir == 1 ]]
|
||||||
|
then
|
||||||
|
sm64done=$(find ./build/*/* | grep .arm)
|
||||||
|
else
|
||||||
|
sm64done=$(find $HOME/src/sm64pi/sm64pc/build/*/* | grep .arm)
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
if [[ $sm64done =~ ".arm" ]]
|
||||||
|
then
|
||||||
|
echo "Super Mario 64 RasPi compilation successful!"
|
||||||
|
echo "You may find it in"
|
||||||
|
|
||||||
|
if [[ $curdir == 1 ]]
|
||||||
|
then
|
||||||
|
$sm64loc=$(ls ./build/*pc/*.arm)
|
||||||
|
else
|
||||||
|
$sm64loc=$(ls $HOME/src/sm64pi/sm64pc/build/*pc/*.arm)
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo $sm64loc
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Execute compiled Super Mario 64 RasPi?"
|
||||||
|
read -p "Run game (Y/N): " sm64run
|
||||||
|
|
||||||
|
if [[ $sm64run =~ "Y" ]]
|
||||||
|
then
|
||||||
|
cd
|
||||||
|
chmod +x $sm64loc
|
||||||
|
bash $sm64loc
|
||||||
|
sleep 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "Cannot find compiled sm64*.arm binary..."
|
||||||
|
echo "Please note of any errors during compilation process and report them to"
|
||||||
|
echo "https://github.com/sm64pc/sm64pc"
|
||||||
|
sleep 5
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit
|
Loading…
Reference in New Issue