222 lines
6.0 KiB
Bash
Executable File
222 lines
6.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
if (( $EUID == 0 )); then
|
|
echo "Do not run as root."
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$DISPLAY" ]; then
|
|
export DISPLAY=:0.0
|
|
fi
|
|
|
|
# help function:
|
|
function printhelp {
|
|
echo "usage examples:"
|
|
echo "Download latest working cemu + cemuhook + graphic packs and install to ~/.cemu (default):"
|
|
echo "./cemutil.sh -a"
|
|
echo "Download latest cemu + cemuhook + graphic packs and install to ~/.cemu (default):"
|
|
echo "./cemutil.sh -l"
|
|
echo "Use local zips and install to ~/Documents/cemu:"
|
|
echo "./cemutil.sh -c cemu.zip -h cemuhook.zip -g graphicpacks.zip -i ~/Documents/cemu"
|
|
exit 1
|
|
}
|
|
|
|
function download {
|
|
echo "Downloading ${cemu_version}"
|
|
wget -q --show-progress -O cemutemp.zip http://cemu.info/releases/${cemu_version}.zip
|
|
echo "Downloading latest cemuhook"
|
|
wget -q --show-progress -O cemuhooktemp.zip $(curl -s https://cemuhook.sshnuke.net |grep .zip |awk -F '"' NR==2{'print $2'})
|
|
echo "Downloading latest graphics packs"
|
|
wget -q --show-progress -O gfxpacktemp.zip https://github.com$(curl https://github.com/slashiee/cemu_graphic_packs/releases |grep graphicPacks |awk -F '"' NR==1{'print $2'})
|
|
echo "Downloading cemuhook shared fonts"
|
|
wget -q --show-progress -O sharedFonts.zip https://github.com/HengiFettlich/cemutil/raw/master/sharedFonts.zip
|
|
return
|
|
}
|
|
|
|
#Check installed software
|
|
declare -a reqsw=("wine" "bsdtar" "unzip" "glxinfo" "curl" "wget" "winetricks")
|
|
for i in "${reqsw[@]}"
|
|
do
|
|
if ! [ -x "$(command -v $i)" ]; then
|
|
echo "You must install $i"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
if $(glxinfo | grep -q -e "NVIDIA"); then
|
|
skipgfxcheck=1
|
|
fi
|
|
|
|
function checkgfxver {
|
|
echo "Checking graphics packages are new enough. To skip this check, run with -f flag."
|
|
if ! $(glxinfo | grep -q -e 'Mesa 18.2' -e 'Mesa 18.3' -e 'Mesa 18.4' -e 'Mesa 19'); then
|
|
echo "You must install at least Mesa 18.2.0"
|
|
exit 1
|
|
fi
|
|
|
|
if ! $(glxinfo | grep -q -e "LLVM 9" -e "LLVM 8" -e "LLVM 7"); then
|
|
echo "You must install Mesa built with at least LLVM 7"
|
|
exit 1
|
|
fi
|
|
|
|
if ! $(glxinfo | grep -q "4.5 (Compat"); then
|
|
echo "Your hardware doesn't support the required OpenGL version."
|
|
echo "You may attempt using MESA_GL_VERSION_OVERRIDE=4.4COMPAT in the LaunchCEMU script."
|
|
echo "This isn't officially supported, and may cause heavy glitches or not work. Proceeding as usual..."
|
|
fi
|
|
return
|
|
}
|
|
|
|
#Check for args
|
|
if [[ ! $@ =~ ^\-.+ ]]
|
|
then
|
|
printhelp;
|
|
fi
|
|
|
|
#Handle args
|
|
while getopts ":c:h:g:alfi:" opt; do
|
|
case ${opt} in
|
|
c )
|
|
cemuzip=$OPTARG
|
|
if [ ! -f "$cemuzip" ]; then
|
|
echo "cemu zip doesn't exist"
|
|
exit 1
|
|
fi
|
|
;;
|
|
h )
|
|
cemuhookzip=$OPTARG
|
|
if [ ! -f "$cemuhookzip" ]; then
|
|
echo "cemuhook zip doesn't exist"
|
|
exit 1
|
|
fi
|
|
;;
|
|
g )
|
|
gfxpackzip=$OPTARG
|
|
if [ ! -f "$gfxpackzip" ]; then
|
|
echo "graphic packs zip doesn't exist"
|
|
exit 1
|
|
fi
|
|
;;
|
|
a )
|
|
cemu_version="cemu_1.15.11"
|
|
download
|
|
;;
|
|
l )
|
|
cemu_version=$(curl -s http://cemu.info | grep -Po 'cemu_.+?(?=\.zip)')
|
|
download
|
|
;;
|
|
f )
|
|
skipgfxcheck=1
|
|
;;
|
|
i )
|
|
instdir=$OPTARG
|
|
;;
|
|
\? )
|
|
printhelp
|
|
;;
|
|
: )
|
|
echo "Invalid option: $OPTARG requires an argument" 1>&2
|
|
printhelp
|
|
;;
|
|
esac
|
|
done
|
|
shift $((OPTIND -1))
|
|
|
|
#check gfx package vers
|
|
if [[ "$skipgfxcheck" == "" ]]; then
|
|
checkgfxver
|
|
fi
|
|
|
|
#Set opts if unset
|
|
if [[ "$instdir" == "" ]]; then
|
|
instdir=$HOME/.cemu
|
|
fi
|
|
if [[ "$cemuzip" == "" ]]; then
|
|
cemuzip=cemutemp.zip
|
|
fi
|
|
if [[ "$cemuhookzip" == "" ]]; then
|
|
cemuhookzip=cemuhooktemp.zip
|
|
fi
|
|
if [[ "$gfxpackzip" == "" ]]; then
|
|
gfxpackzip=gfxpacktemp.zip
|
|
fi
|
|
if [[ "$sharedFonts" == "" ]]; then
|
|
sharedFonts=sharedFonts.zip
|
|
fi
|
|
|
|
#Extract zips
|
|
echo "Extracting zips"
|
|
mkdir -p $instdir
|
|
|
|
|
|
#Unpack downloaded zips if applicable
|
|
if [ -f "$cemuzip" ]; then
|
|
bsdtar -xf "$cemuzip" -s'|[^/]*/||' -C $instdir
|
|
fi
|
|
if [ -f "$cemuhookzip" ]; then
|
|
unzip -q -o "$cemuhookzip" -d $instdir
|
|
fi
|
|
if [ -f "$gfxpackzip" ]; then
|
|
rm -rf ${instdir}/graphicPacks/* #remove old versions of Graphic Packs to help with major changes
|
|
unzip -q -o "$gfxpackzip" -d ${instdir}/graphicPacks/
|
|
fi
|
|
|
|
if [ -f "$sharedFonts" ]; then
|
|
unzip -q -o "$sharedFonts" -d $instdir
|
|
fi
|
|
|
|
#Delete downloaded zips if applicable
|
|
if [ -f "gfxpacktemp.zip" ]; then
|
|
rm -rf gfxpacktemp.zip
|
|
fi
|
|
if [ -f "cemutemp.zip" ]; then
|
|
rm -rf cemutemp.zip
|
|
fi
|
|
if [ -f "cemuhooktemp.zip" ]; then
|
|
rm -rf cemuhooktemp.zip
|
|
fi
|
|
|
|
if [ -f "sharedFonts.zip" ]; then
|
|
rm -rf sharedFonts.zip
|
|
fi
|
|
|
|
#Configure wine prefix
|
|
echo "Configuring new wine prefix"
|
|
export WINEPREFIX=$(realpath $instdir)/wine
|
|
winetricks -q vcrun2017
|
|
winetricks settings win7
|
|
|
|
#Create cemuhook.ini, enabling cemuhook h264 as default
|
|
cat > $instdir/cemuhook.ini << EOF1
|
|
[Debug]
|
|
useH264Decoder = true
|
|
EOF1
|
|
|
|
#Create launch scripts
|
|
cat > LaunchCEMU << EOF1
|
|
#!/bin/bash
|
|
export WINEPREFIX="$(realpath $instdir)/wine"
|
|
#for cemuhook
|
|
export WINEDLLOVERRIDES="mscoree=;mshtml=;dbghelp.dll=n,b"
|
|
|
|
cd $(realpath $instdir)
|
|
mesa_glthread=true __GL_THREADED_OPTIMIZATIONS=1 vblank_mode=0 WINEESYNC=1 wine Cemu.exe "\$@"
|
|
EOF1
|
|
chmod +x LaunchCEMU
|
|
|
|
cat > LaunchCEMUgcn3BOTW << EOF1
|
|
#!/bin/bash
|
|
export WINEPREFIX="$(realpath $instdir)/wine"
|
|
#for cemuhook
|
|
export WINEDLLOVERRIDES="mscoree=;mshtml=;dbghelp.dll=n,b"
|
|
|
|
cd $(realpath $instdir)
|
|
R600_DEBUG=nohyperz mesa_glthread=true vblank_mode=0 WINEESYNC=1 wine Cemu.exe "\$@"
|
|
EOF1
|
|
chmod +x LaunchCEMUgcn3BOTW
|
|
|
|
echo "Successfully installed to $(realpath $instdir)"
|
|
echo "You may now run CEMU with LaunchCEMU written in this directory"
|
|
echo "You may place LaunchCEMU anywhere, and even pass arguments to it just like Cemu.exe on Windows"
|
|
echo "Note2: gcn3 (radeon 300-500 series) users should use the gcn3BOTW script for launching BOTW"
|