196 lines
6.7 KiB
Bash
Executable file
196 lines
6.7 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
#./wine/ <-- wine source
|
|
#./build/ <-- built files
|
|
#./dist/ <-- proton build, ready to distribute
|
|
|
|
TOP="$PWD"
|
|
|
|
PLATFORM=$(uname)
|
|
if [ "$PLATFORM" == "Darwin" ]; then
|
|
CC="ccache clang -g"
|
|
AMD64_WRAPPER=""
|
|
I386_WRAPPER=""
|
|
else
|
|
CC="ccache gcc -g"
|
|
AMD64_WRAPPER="schroot --chroot steamrt_scout_beta_amd64 --"
|
|
I386_WRAPPER="schroot --chroot steamrt_scout_beta_i386 --"
|
|
fi
|
|
|
|
if [ "$1" == "--release" ]; then
|
|
STRIP='strip'
|
|
if [ "$PLATFORM" == "Darwin" ]; then
|
|
STRIPFLAGS=''
|
|
else
|
|
STRIPFLAGS='-s'
|
|
fi
|
|
else
|
|
STRIP=''
|
|
STRIPFLAGS=''
|
|
fi
|
|
|
|
DST_DIR="$TOP/build/dist"
|
|
TOOLS_DIR64="$TOP/build/tools.win64"
|
|
TOOLS_DIR32="$TOP/build/tools.win32"
|
|
|
|
mkdir -p dist "$DST_DIR"/bin build/wine.win32 build/dist.win32 build/wine.win64
|
|
|
|
#build wine64
|
|
cd "$TOP"/build/wine.win64
|
|
CC="$CC" $AMD64_WRAPPER "$TOP"/wine/configure --enable-win64 --disable-tests --prefix="$DST_DIR"
|
|
$AMD64_WRAPPER make -j5
|
|
INSTALL_PROGRAM_FLAGS="$STRIPFLAGS" $AMD64_WRAPPER make install-lib
|
|
INSTALL_PROGRAM_FLAGS="$STRIPFLAGS" $AMD64_WRAPPER make prefix="$TOOLS_DIR64" libdir="$TOOLS_DIR64/lib64" dlldir="$TOOLS_DIR64/lib64/wine" install-dev install-lib
|
|
rm -f "$DST_DIR"/bin/{msiexec,notepad,regedit,regsvr32,wineboot,winecfg,wineconsole,winedbg,winefile,winemine,winepath}
|
|
rm -rf "$DST_DIR/share/man/"
|
|
|
|
#build wine32
|
|
cd "$TOP"/build/wine.win32
|
|
CC="$CC" $I386_WRAPPER "$TOP"/wine/configure --disable-tests --prefix="$TOP/build/dist.win32/"
|
|
$I386_WRAPPER make -j5
|
|
INSTALL_PROGRAM_FLAGS="$STRIPFLAGS" $I386_WRAPPER make install-lib
|
|
INSTALL_PROGRAM_FLAGS="$STRIPFLAGS" $I386_WRAPPER make prefix="$TOOLS_DIR32" libdir="$TOOLS_DIR32/lib" dlldir="$TOOLS_DIR32/lib/wine" install-dev install-lib
|
|
|
|
#install 32-bit stuff manually, see
|
|
# https://wiki.winehq.org/Packaging#WoW64_Workarounds
|
|
cd "$TOP"/build/dist.win32/
|
|
cp -a lib "$DST_DIR"/
|
|
cp -a bin/wine "$DST_DIR"/bin/
|
|
if [ "$PLATFORM" != "Darwin" ]; then
|
|
cp -a bin/wine-preloader "$DST_DIR"/bin/
|
|
fi
|
|
cp -a bin/wineserver "$DST_DIR"/bin/wineserver32
|
|
|
|
#build 64-bit lsteamclient
|
|
cd "$TOP"
|
|
rm -rf build/lsteamclient.win64
|
|
cp -a lsteamclient build/lsteamclient.win64
|
|
cd "$TOP"/build/lsteamclient.win64/
|
|
$AMD64_WRAPPER "$TOP"/wine/tools/winemaker/winemaker \
|
|
--nosource-fix --nolower-include --nodlls --nomsvcrt \
|
|
-DSTEAM_API_EXPORTS \
|
|
-I"$TOOLS_DIR64"/include/ \
|
|
-I"$TOOLS_DIR64"/include/wine/ \
|
|
-I"$TOOLS_DIR64"/include/wine/windows/ \
|
|
-L"$TOOLS_DIR64"/lib64/ \
|
|
-L"$TOOLS_DIR64"/lib64/wine/ \
|
|
--dll .
|
|
CXXFLAGS="-Wno-attributes -O2" CFLAGS="-O2" PATH="$TOOLS_DIR64/bin:$PATH" $AMD64_WRAPPER make
|
|
if [ x"$STRIP" != x ]; then
|
|
$AMD64_WRAPPER "$STRIP" lsteamclient.dll.so
|
|
fi
|
|
cp -a lsteamclient.dll.so "$DST_DIR"/lib64/wine/
|
|
|
|
#build 32-bit lsteamclient
|
|
cd "$TOP"
|
|
rm -rf build/lsteamclient.win32
|
|
cp -a lsteamclient build/lsteamclient.win32
|
|
cd "$TOP"/build/lsteamclient.win32/
|
|
$I386_WRAPPER "$TOP"/wine/tools/winemaker/winemaker \
|
|
--nosource-fix --nolower-include --nodlls --nomsvcrt --wine32 \
|
|
-DSTEAM_API_EXPORTS \
|
|
-I"$TOOLS_DIR32"/include/ \
|
|
-I"$TOOLS_DIR32"/include/wine/ \
|
|
-I"$TOOLS_DIR32"/include/wine/windows/ \
|
|
-L"$TOOLS_DIR32"/lib/ \
|
|
-L"$TOOLS_DIR32"/lib/wine/ \
|
|
--dll .
|
|
CXXFLAGS="-Wno-attributes -O2" CFLAGS="-O2" PATH="$TOOLS_DIR32/bin:$PATH" $I386_WRAPPER make
|
|
if [ x"$STRIP" != x ]; then
|
|
$I386_WRAPPER "$STRIP" lsteamclient.dll.so
|
|
fi
|
|
cp -a lsteamclient.dll.so "$DST_DIR"/lib/wine/
|
|
|
|
#build 64-bit vrclient
|
|
cd "$TOP"
|
|
rm -rf build/vrclient_x64
|
|
cp -a vrclient_x64 build/vrclient_x64
|
|
cd "$TOP"/build/vrclient_x64/
|
|
$AMD64_WRAPPER "$TOP"/wine/tools/winemaker/winemaker \
|
|
--nosource-fix --nolower-include --nodlls --nomsvcrt \
|
|
-I"$TOOLS_DIR64"/include/ \
|
|
-I"$TOOLS_DIR64"/include/wine/ \
|
|
-I"$TOOLS_DIR64"/include/wine/windows/ \
|
|
-L"$TOOLS_DIR64"/lib64/ \
|
|
-L"$TOOLS_DIR64"/lib64/wine/ \
|
|
--dll .
|
|
CXXFLAGS="-Wno-attributes -std=c++0x -O2" CFLAGS="-O2" PATH="$TOOLS_DIR64/bin:$PATH" $AMD64_WRAPPER make
|
|
PATH="$TOOLS_DIR64/bin:$PATH" $AMD64_WRAPPER winebuild --dll --fake-module -E vrclient_x64.spec -o vrclient_x64.dll.fake
|
|
if [ x"$STRIP" != x ]; then
|
|
$AMD64_WRAPPER "$STRIP" vrclient_x64.dll.so
|
|
fi
|
|
cp -a vrclient_x64.dll.so "$DST_DIR"/lib64/wine/
|
|
cp -a vrclient_x64.dll.fake "$DST_DIR"/lib64/wine/fakedlls/vrclient_x64.dll
|
|
|
|
#build 32-bit vrclient
|
|
cd "$TOP"
|
|
rm -rf build/vrclient
|
|
cp -a vrclient_x64 build/vrclient
|
|
cd "$TOP"/build/vrclient/
|
|
mv vrclient_x64.spec vrclient.spec
|
|
$I386_WRAPPER "$TOP"/wine/tools/winemaker/winemaker \
|
|
--nosource-fix --nolower-include --nodlls --nomsvcrt --wine32 \
|
|
-I"$TOOLS_DIR32"/include/ \
|
|
-I"$TOOLS_DIR32"/include/wine/ \
|
|
-I"$TOOLS_DIR32"/include/wine/windows/ \
|
|
-L"$TOOLS_DIR32"/lib/ \
|
|
-L"$TOOLS_DIR32"/lib/wine/ \
|
|
--dll .
|
|
CXXFLAGS="-Wno-attributes -std=c++0x -O2" CFLAGS="-O2" PATH="$TOOLS_DIR32/bin:$PATH" $I386_WRAPPER make
|
|
PATH="$TOOLS_DIR32/bin:$PATH" $I386_WRAPPER winebuild --dll --fake-module -E vrclient.spec -o vrclient.dll.fake
|
|
if [ x"$STRIP" != x ]; then
|
|
$I386_WRAPPER "$STRIP" vrclient.dll.so
|
|
fi
|
|
cp -a vrclient.dll.so "$DST_DIR"/lib/wine/
|
|
cp -a vrclient.dll.fake "$DST_DIR"/lib/wine/fakedlls/vrclient.dll
|
|
|
|
#build dxvk
|
|
|
|
#Debian 9 is too old to build dxvk, so I gave up and I'm building it on my Arch
|
|
#Linux box and checking the binaries into Git instead. Blech. --aeikum
|
|
cd "$TOP"
|
|
mkdir -p "$DST_DIR"/lib64/wine/dxvk
|
|
cp "dxvk.win64/dxgi.dll" "$DST_DIR"/lib64/wine/dxvk/
|
|
cp "dxvk.win64/d3d11.dll" "$DST_DIR"/lib64/wine/dxvk/
|
|
mkdir -p "$DST_DIR"/lib/wine/dxvk
|
|
cp "dxvk.win32/dxgi.dll" "$DST_DIR"/lib/wine/dxvk/
|
|
cp "dxvk.win32/d3d11.dll" "$DST_DIR"/lib/wine/dxvk/
|
|
|
|
#unfortunately the Steam runtime chroot is too old to build dxvk, so
|
|
#we have to build it in the host system
|
|
|
|
#requires meson >= 0.43 and posix thread enabled mingw-w64, on debian:
|
|
# update-alternatives --config i686-w64-mingw32-g++
|
|
# update-alternatives --config i686-w64-mingw32-gcc
|
|
# update-alternatives --config x86_64-w64-mingw32-g++
|
|
# update-alternatives --config x86_64-w64-mingw32-gcc
|
|
#cd "$TOP"
|
|
#if [ ! -e dxvk/proton.win64.built ]; then
|
|
# PATH="$TOP"/glslang/bin/:"$PATH" bash ./build_dxvk.sh win64
|
|
#fi
|
|
#if [ ! -e dxvk/proton.win32.built ]; then
|
|
# PATH="$TOP"/glslang/bin/:"$PATH" bash ./build_dxvk.sh win32
|
|
#fi
|
|
#
|
|
#mkdir -p "$DST_DIR"/lib/wine/dxvk
|
|
#cp -a dxvk/dist.win32/bin/dxgi.dll "$DST_DIR"/lib/wine/dxvk/
|
|
#cp -a dxvk/dist.win32/bin/d3d11.dll "$DST_DIR"/lib/wine/dxvk/
|
|
#
|
|
#mkdir -p "$DST_DIR"/lib64/wine/dxvk
|
|
#cp -a dxvk/dist.win64/bin/dxgi.dll "$DST_DIR"/lib64/wine/dxvk/
|
|
#cp -a dxvk/dist.win64/bin/d3d11.dll "$DST_DIR"/lib64/wine/dxvk/
|
|
|
|
echo "Packaging..."
|
|
cd "$TOP"
|
|
|
|
#the difference between -1 and -9 is about 20 MB, so prioritize quick startup over file size
|
|
tar -C build/dist -c . | gzip -c -1 > dist/proton_dist.tar.gz
|
|
|
|
cp -a toolmanifest.vdf dist/
|
|
cp -a proton dist/
|
|
cp -a LICENSE dist/
|
|
date '+%s' > dist/version
|
|
|
|
echo "Proton ready in dist/"
|