5286f43fda
Frustratingly, Ubuntu ships no python binary by default, only python3, so we can't just call python and expect it to work. This will fail on distros that don't ship python3, but them's the breaks.
688 lines
24 KiB
Bash
Executable file
688 lines
24 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
usage()
|
|
{
|
|
echo "$1: [--build component] [--release] [--package] [--with-ffmpeg]"
|
|
echo "Build the Proton Steam Tool"
|
|
echo "Component can be one or more of:"
|
|
echo " wine, wine32, wine64"
|
|
echo " vrclient, vrclient32, vrclient64"
|
|
echo " lsteamclient, lsteamclient32, lsteamclient64"
|
|
echo "or all, which is the default. The 'all' component also implies --package"
|
|
echo "--release causes symbols to be stripped of debug info."
|
|
echo "--package creates the tar ball in dist/."
|
|
echo "--with-ffmpeg builds FFmpeg for WMA audio support"
|
|
}
|
|
|
|
set -e
|
|
|
|
JOBS=-j"$(( $(nproc 2>/dev/null||sysctl -n hw.ncpu 2>/dev/null||echo 4) + 1))"
|
|
PLATFORM=$(uname)
|
|
|
|
[ -z "$STEAM_RUNTIME" ] && STEAM_RUNTIME="$HOME/steam-runtime"
|
|
|
|
#./wine/ <-- wine source
|
|
#./build/ <-- build files
|
|
#./dist/ <-- proton build, ready to distribute
|
|
|
|
function build_freetype
|
|
{
|
|
cd "$TOP"/freetype2
|
|
|
|
if [ ! -e "$TOOLS_DIR64"/lib/libprotonfreetype."$LIB_SUFFIX" ]; then
|
|
sed -i -e 's/^LIBRARY.*/LIBRARY=libprotonfreetype/' builds/unix/unix-cc.in
|
|
|
|
bash ./autogen.sh
|
|
|
|
#freetype 32-bit
|
|
mkdir -p "$TOP"/build/freetype.win32
|
|
cd "$TOP"/build/freetype.win32
|
|
"$TOP"/freetype2/configure --prefix="$TOOLS_DIR32" --without-png --host i686-apple-darwin CFLAGS='-m32 -g -O2' LDFLAGS=-m32 PKG_CONFIG=false
|
|
make $JOBS
|
|
make install
|
|
|
|
#freetype 64-bit
|
|
mkdir -p "$TOP"/build/freetype.win64
|
|
cd "$TOP"/build/freetype.win64
|
|
"$TOP"/freetype2/configure --prefix="$TOOLS_DIR64" --without-png --host x86_64-apple-darwin PKG_CONFIG=false
|
|
make $JOBS
|
|
make install
|
|
fi
|
|
|
|
cp "$TOOLS_DIR32"/lib/libprotonfreetype.dylib "$DST_DIR"/lib
|
|
$STRIP "$DST_DIR"/lib/libprotonfreetype.dylib
|
|
|
|
cp "$TOOLS_DIR64"/lib/libprotonfreetype.dylib "$DST_DIR"/lib64
|
|
$STRIP "$DST_DIR"/lib64/libprotonfreetype.dylib
|
|
}
|
|
|
|
function build_libpng
|
|
{
|
|
cd "$TOP"/libpng
|
|
if [ ! -e 'configure' ]; then
|
|
sed -i -e 's/libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@/libprotonpng@PNGLIB_MAJOR@@PNGLIB_MINOR@/' Makefile.am
|
|
|
|
bash ./autogen.sh
|
|
fi
|
|
|
|
if [ ! -e "$TOOLS_DIR64"/lib/libprotonpng16."$LIB_SUFFIX" ]; then
|
|
#libpng 32-bit
|
|
mkdir -p "$TOP"/build/libpng.win32
|
|
cd "$TOP"/build/libpng.win32
|
|
"$TOP"/libpng/configure --prefix="$TOOLS_DIR32" --host i686-apple-darwin CFLAGS='-m32 -g -O2' LDFLAGS=-m32
|
|
make $JOBS
|
|
make install
|
|
|
|
#libpng 64-bit
|
|
mkdir -p "$TOP"/build/libpng.win64
|
|
cd "$TOP"/build/libpng.win64
|
|
"$TOP"/libpng/configure --prefix="$TOOLS_DIR64" --host x86_64-apple-darwin
|
|
make $JOBS
|
|
make install
|
|
fi
|
|
|
|
cp "$TOOLS_DIR32"/lib/libprotonpng16.dylib "$DST_DIR"/lib
|
|
$STRIP "$DST_DIR"/lib/libprotonpng16.dylib
|
|
|
|
cp "$TOOLS_DIR64"/lib/libprotonpng16.dylib "$DST_DIR"/lib64
|
|
$STRIP "$DST_DIR"/lib64/libprotonpng16.dylib
|
|
}
|
|
|
|
function build_libjpeg
|
|
{
|
|
cd "$TOP"/libjpeg-turbo
|
|
if [ ! -e 'configure' ]; then
|
|
autoreconf -fiv
|
|
fi
|
|
|
|
#if this fails with an nasm error, install a newer nasm with
|
|
#homebrew or the like and put it into your PATH
|
|
|
|
if [ ! -e "$TOOLS_DIR64"/lib/libprotonjpeg."$LIB_SUFFIX" ]; then
|
|
#libjpeg 32-bit
|
|
mkdir -p "$TOP"/build/libjpeg.win32
|
|
cd "$TOP"/build/libjpeg.win32
|
|
"$TOP"/libjpeg-turbo/configure --prefix="$TOOLS_DIR32" --host i686-apple-darwin CFLAGS='-O3 -g -m32' LDFLAGS=-m32
|
|
make $JOBS
|
|
make install
|
|
mv "$TOOLS_DIR32"/lib/lib{,proton}jpeg.dylib
|
|
|
|
#libjpeg 64-bit
|
|
mkdir -p "$TOP"/build/libjpeg.win64
|
|
cd "$TOP"/build/libjpeg.win64
|
|
"$TOP"/libjpeg-turbo/configure --prefix="$TOOLS_DIR64" --host x86_64-apple-darwin
|
|
make $JOBS
|
|
make install
|
|
mv "$TOOLS_DIR64"/lib/lib{,proton}jpeg.dylib
|
|
fi
|
|
|
|
cp "$TOOLS_DIR32"/lib/libprotonjpeg.dylib "$DST_DIR"/lib/
|
|
$STRIP "$DST_DIR"/lib/libprotonjpeg.dylib
|
|
|
|
cp "$TOOLS_DIR64"/lib/libprotonjpeg.dylib "$DST_DIR"/lib64/
|
|
$STRIP "$DST_DIR"/lib64/libprotonjpeg.dylib
|
|
}
|
|
|
|
function build_openal
|
|
{
|
|
if [ ! -e "$TOOLS_DIR64"/lib/libopenal."$LIB_SUFFIX" ]; then
|
|
#openal 32-bit
|
|
cd "$TOP"
|
|
mkdir -p build/openal.win32
|
|
cd build/openal.win32
|
|
$I386_WRAPPER "$CMAKE32" "$TOP"/openal-soft -DCMAKE_C_FLAGS="-m32" -DCMAKE_INSTALL_PREFIX="$TOOLS_DIR32"
|
|
$I386_WRAPPER make $JOBS VERBOSE=1
|
|
$I386_WRAPPER make install VERBOSE=1
|
|
|
|
#openal 64-bit
|
|
cd "$TOP"
|
|
mkdir -p build/openal.win64
|
|
cd build/openal.win64
|
|
$AMD64_WRAPPER "$CMAKE64" "$TOP"/openal-soft -DCMAKE_INSTALL_PREFIX="$TOOLS_DIR64"
|
|
$AMD64_WRAPPER make $JOBS VERBOSE=1
|
|
$AMD64_WRAPPER make install VERBOSE=1
|
|
fi
|
|
|
|
cp -L "$TOOLS_DIR32"/lib/libopenal* "$DST_DIR"/lib/
|
|
cp -L "$TOOLS_DIR64"/lib/libopenal* "$DST_DIR"/lib64/
|
|
$STRIP "$DST_DIR"/lib/libopenal."$LIB_SUFFIX"
|
|
$STRIP "$DST_DIR"/lib64/libopenal."$LIB_SUFFIX"
|
|
}
|
|
|
|
function build_libSDL
|
|
{
|
|
if [ ! -e "$TOOLS_DIR64/lib/libSDL2.$LIB_SUFFIX" ]; then
|
|
cd "$TOP"/SDL-mirror
|
|
bash ./autogen.sh
|
|
|
|
#libsdl2 32-bit
|
|
cd "$TOP"
|
|
mkdir -p build/SDL2.win32
|
|
cd build/SDL2.win32
|
|
"$TOP"/SDL-mirror/configure --prefix="$TOOLS_DIR32" --host i686-apple-darwin CFLAGS='-m32 -g -O2' LDFLAGS=-m32
|
|
make $JOBS
|
|
make install-hdrs
|
|
make install-lib
|
|
|
|
#libsdl2 64-bit
|
|
cd "$TOP"
|
|
mkdir -p build/SDL2.win64
|
|
cd build/SDL2.win64
|
|
"$TOP"/SDL-mirror/configure --prefix="$TOOLS_DIR64" --host x86_64-apple-darwin
|
|
make $JOBS
|
|
make install-hdrs
|
|
make install-lib
|
|
fi
|
|
|
|
cp "$TOOLS_DIR32"/lib/libSDL2."$LIB_SUFFIX" "$DST_DIR"/lib
|
|
$STRIP "$DST_DIR"/lib/libSDL2.dylib
|
|
|
|
cp "$TOOLS_DIR64"/lib/libSDL2."$LIB_SUFFIX" "$DST_DIR"/lib64
|
|
$STRIP "$DST_DIR"/lib64/libSDL2.dylib
|
|
}
|
|
|
|
function build_moltenvk
|
|
{
|
|
#requires Xcode >= 9
|
|
cd "$TOP"/MoltenVK/
|
|
|
|
if [ ! -e "Package/Release/MoltenVK/macOS/libMoltenVK.dylib" ]; then
|
|
./fetchDependencies
|
|
xcodebuild -scheme 'MoltenVK (Release)' build
|
|
fi
|
|
|
|
cp -a Package/Release/MoltenVK/include/* "$TOOLS_DIR64"/include/
|
|
cp -a Package/Release/MoltenVK/macOS/libMoltenVK.dylib "$TOOLS_DIR64"/lib/
|
|
cp -a Package/Release/MoltenVK/macOS/libMoltenVK.dylib "$DST_DIR"/lib64/
|
|
}
|
|
|
|
function build_ffmpeg
|
|
{
|
|
if [ ! -e "$TOOLS_DIR64/lib/libavcodec.$LIB_SUFFIX" ]; then
|
|
#ffmpeg 32-bit
|
|
cd "$TOP"
|
|
mkdir -p build/ffmpeg.win32
|
|
cd build/ffmpeg.win32
|
|
$I386_WRAPPER "$TOP"/ffmpeg/configure \
|
|
--extra-cflags="$FFMPEG_CROSS_CFLAGS" --extra-ldflags="$FFMPEG_CROSS_LDFLAGS" \
|
|
--prefix="$TOOLS_DIR32" \
|
|
--disable-static \
|
|
--enable-shared \
|
|
--disable-programs \
|
|
--disable-doc \
|
|
--disable-avdevice \
|
|
--disable-avformat \
|
|
--disable-swresample \
|
|
--disable-swscale \
|
|
--disable-postproc \
|
|
--disable-avfilter \
|
|
--disable-alsa \
|
|
--disable-iconv \
|
|
--disable-libxcb_shape \
|
|
--disable-libxcb_shm \
|
|
--disable-libxcb_xfixes \
|
|
--disable-sdl2 \
|
|
--disable-xlib \
|
|
--disable-zlib \
|
|
--disable-bzlib \
|
|
--disable-libxcb \
|
|
--disable-vaapi \
|
|
--disable-vdpau \
|
|
--disable-everything \
|
|
--enable-decoder=wmav2 \
|
|
--enable-decoder=adpcm_ms
|
|
$I386_WRAPPER make $JOBS
|
|
$I386_WRAPPER make install
|
|
|
|
|
|
#ffmpeg 64-bit
|
|
cd "$TOP"
|
|
mkdir -p build/ffmpeg.win64
|
|
cd build/ffmpeg.win64
|
|
$AMD64_WRAPPER "$TOP"/ffmpeg/configure --prefix="$TOOLS_DIR64" \
|
|
--disable-static \
|
|
--enable-shared \
|
|
--disable-programs \
|
|
--disable-doc \
|
|
--disable-avdevice \
|
|
--disable-avformat \
|
|
--disable-swresample \
|
|
--disable-swscale \
|
|
--disable-postproc \
|
|
--disable-avfilter \
|
|
--disable-alsa \
|
|
--disable-iconv \
|
|
--disable-libxcb_shape \
|
|
--disable-libxcb_shm \
|
|
--disable-libxcb_xfixes \
|
|
--disable-sdl2 \
|
|
--disable-xlib \
|
|
--disable-zlib \
|
|
--disable-bzlib \
|
|
--disable-libxcb \
|
|
--disable-vaapi \
|
|
--disable-vdpau \
|
|
--disable-everything \
|
|
--enable-decoder=wmav2 \
|
|
--enable-decoder=adpcm_ms
|
|
$AMD64_WRAPPER make $JOBS
|
|
$AMD64_WRAPPER make install
|
|
fi
|
|
|
|
cp -L "$TOOLS_DIR32"/lib/libavcodec* "$DST_DIR"/lib/
|
|
cp -L "$TOOLS_DIR32"/lib/libavutil* "$DST_DIR"/lib/
|
|
cp -L "$TOOLS_DIR64"/lib/libavcodec* "$DST_DIR"/lib64/
|
|
cp -L "$TOOLS_DIR64"/lib/libavutil* "$DST_DIR"/lib64/
|
|
}
|
|
|
|
function build_wine64
|
|
{
|
|
cd "$TOP"/build/wine.win64
|
|
STRIP="$STRIP" CFLAGS="-I$TOOLS_DIR64/include -g -O2" LDFLAGS="-L$TOOLS_DIR64/lib" PKG_CONFIG_PATH="$TOOLS_DIR64/lib/pkgconfig" CC="$CC" \
|
|
PNG_CFLAGS="$PNG64_CFLAGS" PNG_LIBS="$PNG64_LIBS" ac_cv_lib_soname_png="$ac_cv_lib_soname_png64" \
|
|
JPEG_CFLAGS="$JPEG64_CFLAGS" JPEG_LIBS="$JPEG64_LIBS" ac_cv_lib_soname_jpeg="$ac_cv_lib_soname_jpeg64" \
|
|
FREETYPE_CFLAGS="$FREETYPE64_CFLAGS" FREETYPE_LIBS="$FREETYPE64_LIBS" ac_cv_lib_soname_freetype="$ac_cv_lib_soname_freetype64" \
|
|
$AMD64_WRAPPER "$TOP"/wine/configure \
|
|
--without-curses "$WITHOUT_X" \
|
|
--enable-win64 --disable-tests --prefix="$DST_DIR"
|
|
STRIP="$STRIP" $AMD64_WRAPPER make $JOBS
|
|
INSTALL_PROGRAM_FLAGS="$INSTALL_PROGRAM_FLAGS" STRIP="$STRIP" $AMD64_WRAPPER make install-lib
|
|
INSTALL_PROGRAM_FLAGS="$INSTALL_PROGRAM_FLAGS" STRIP="$STRIP" $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/"
|
|
}
|
|
|
|
function build_wine32
|
|
{
|
|
cd "$TOP"/build/wine.win32
|
|
STRIP="$STRIP" CFLAGS="-I$TOOLS_DIR32/include -g -O2" LDFLAGS="-L$TOOLS_DIR32/lib" PKG_CONFIG_PATH="$TOOLS_DIR32/lib/pkgconfig" CC="$CC" \
|
|
PNG_CFLAGS="$PNG32_CFLAGS" PNG_LIBS="$PNG32_LIBS" ac_cv_lib_soname_png="$ac_cv_lib_soname_png32" \
|
|
JPEG_CFLAGS="$JPEG32_CFLAGS" JPEG_LIBS="$JPEG32_LIBS" ac_cv_lib_soname_jpeg="$ac_cv_lib_soname_jpeg32" \
|
|
FREETYPE_CFLAGS="$FREETYPE32_CFLAGS" FREETYPE_LIBS="$FREETYPE32_LIBS" ac_cv_lib_soname_freetype="$ac_cv_lib_soname_freetype32" \
|
|
$I386_WRAPPER "$TOP"/wine/configure \
|
|
--without-curses "$WITHOUT_X" \
|
|
--disable-tests --prefix="$TOP/build/dist.win32/"
|
|
STRIP="$STRIP" $I386_WRAPPER make $JOBS
|
|
INSTALL_PROGRAM_FLAGS="$INSTALL_PROGRAM_FLAGS" STRIP="$STRIP" $I386_WRAPPER make install-lib
|
|
INSTALL_PROGRAM_FLAGS="$INSTALL_PROGRAM_FLAGS" STRIP="$STRIP" $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
|
|
}
|
|
|
|
function build_lsteamclient64
|
|
{
|
|
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 -g" PATH="$TOOLS_DIR64/bin:$PATH" $AMD64_WRAPPER make $JOBS
|
|
if [ x"$STRIP" != x ]; then
|
|
$AMD64_WRAPPER $STRIP lsteamclient.dll.so
|
|
fi
|
|
cp -a lsteamclient.dll.so "$DST_DIR"/lib64/wine/
|
|
}
|
|
|
|
function build_lsteamclient32
|
|
{
|
|
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 -g" PATH="$TOOLS_DIR32/bin:$PATH" $I386_WRAPPER make $JOBS
|
|
if [ x"$STRIP" != x ]; then
|
|
$I386_WRAPPER $STRIP lsteamclient.dll.so
|
|
fi
|
|
cp -a lsteamclient.dll.so "$DST_DIR"/lib/wine/
|
|
}
|
|
|
|
function build_vrclient64
|
|
{
|
|
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/ \
|
|
-I.. \
|
|
-L"$TOOLS_DIR64"/lib64/ \
|
|
-L"$TOOLS_DIR64"/lib64/wine/ \
|
|
--dll vrclient_x64
|
|
CXXFLAGS="-Wno-attributes -std=c++0x -O2 -g" CFLAGS="-O2 -g" PATH="$TOOLS_DIR64/bin:$PATH" $AMD64_WRAPPER make $JOBS -C vrclient_x64
|
|
PATH="$TOOLS_DIR64/bin:$PATH" $AMD64_WRAPPER winebuild --dll --fake-module -E vrclient_x64/vrclient_x64.spec -o vrclient_x64.dll.fake
|
|
if [ x"$STRIP" != x ]; then
|
|
$AMD64_WRAPPER $STRIP vrclient_x64/vrclient_x64.dll.so
|
|
fi
|
|
cp -a vrclient_x64/vrclient_x64.dll.so "$DST_DIR"/lib64/wine/
|
|
cp -a vrclient_x64.dll.fake "$DST_DIR"/lib64/wine/fakedlls/vrclient_x64.dll
|
|
}
|
|
|
|
function build_vrclient64_tests
|
|
{
|
|
build_vrclient64
|
|
|
|
cp -a vrclient_x64/flatapi.c tests/
|
|
$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/ \
|
|
-I../vrclient_x64/ \
|
|
-L"$TOOLS_DIR64"/lib64/ \
|
|
-L"$TOOLS_DIR64"/lib64/wine/ \
|
|
tests
|
|
CXXFLAGS="-Wno-attributes -std=c++0x -O2 -g" CFLAGS="-O2 -g" PATH="$TOOLS_DIR64/bin:$PATH" $AMD64_WRAPPER make $JOBS -C tests
|
|
}
|
|
|
|
function build_vrclient32
|
|
{
|
|
cd "$TOP"
|
|
rm -rf build/vrclient
|
|
cp -a vrclient_x64 build/vrclient
|
|
cd "$TOP"/build/vrclient/
|
|
mv vrclient_x64 vrclient
|
|
mv vrclient/vrclient_x64.spec vrclient/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/ \
|
|
-I.. \
|
|
-L"$TOOLS_DIR32"/lib/ \
|
|
-L"$TOOLS_DIR32"/lib/wine/ \
|
|
--dll vrclient
|
|
CXXFLAGS="-Wno-attributes -std=c++0x -O2 -g" CFLAGS="-O2 -g" PATH="$TOOLS_DIR32/bin:$PATH" $I386_WRAPPER make $JOBS -C vrclient
|
|
PATH="$TOOLS_DIR32/bin:$PATH" $I386_WRAPPER winebuild --dll --fake-module -E vrclient/vrclient.spec -o vrclient.dll.fake
|
|
if [ x"$STRIP" != x ]; then
|
|
$I386_WRAPPER $STRIP vrclient/vrclient.dll.so
|
|
fi
|
|
cp -a vrclient/vrclient.dll.so "$DST_DIR"/lib/wine/
|
|
cp -a vrclient.dll.fake "$DST_DIR"/lib/wine/fakedlls/vrclient.dll
|
|
}
|
|
|
|
function build_vrclient32_tests
|
|
{
|
|
build_vrclient32
|
|
|
|
cp -a vrclient/flatapi.c tests/
|
|
$I386_WRAPPER "$TOP"/wine/tools/winemaker/winemaker \
|
|
--nosource-fix --nolower-include --nodlls --nomsvcrt \
|
|
-I"$TOOLS_DIR32"/include/ \
|
|
-I"$TOOLS_DIR32"/include/wine/ \
|
|
-I"$TOOLS_DIR32"/include/wine/windows/ \
|
|
-I../vrclient/ \
|
|
-L"$TOOLS_DIR32"/lib/ \
|
|
-L"$TOOLS_DIR32"/lib/wine/ \
|
|
tests
|
|
CXXFLAGS="-Wno-attributes -std=c++0x -O2 -g" CFLAGS="-O2 -g" PATH="$TOOLS_DIR32/bin:$PATH" $I386_WRAPPER make $JOBS -C tests
|
|
}
|
|
|
|
function build_dxvk
|
|
{
|
|
#unfortunately the Steam chroots are too old to build DXVK, so we have to
|
|
#build it in the host system
|
|
if [ ! -e "$TOP/build/dxvk.win64/bin/d3d11.dll" ]; then
|
|
cd "$TOP"/dxvk
|
|
mkdir -p "$TOP"/build/dxvk.win32
|
|
cd "$TOP"/dxvk
|
|
PATH="$TOP/glslang/bin/:$PATH" meson --strip --buildtype="release" --prefix="$TOP"/build/dxvk.win32 --cross-file build-win32.txt "$TOP"/build/dxvk.win32
|
|
cd "$TOP"/build/dxvk.win32
|
|
PATH="$TOP/glslang/bin/:$PATH" ninja
|
|
PATH="$TOP/glslang/bin/:$PATH" ninja install
|
|
|
|
cd "$TOP"/dxvk
|
|
mkdir -p "$TOP"/build/dxvk.win64
|
|
PATH="$TOP/glslang/bin/:$PATH" meson --strip --buildtype="release" --prefix="$TOP"/build/dxvk.win64 --cross-file build-win64.txt "$TOP"/build/dxvk.win64
|
|
cd "$TOP"/build/dxvk.win64
|
|
PATH="$TOP/glslang/bin/:$PATH" ninja
|
|
PATH="$TOP/glslang/bin/:$PATH" ninja install
|
|
fi
|
|
|
|
cd "$TOP"
|
|
mkdir -p "$DST_DIR"/lib64/wine/dxvk
|
|
cp "$TOP/build/dxvk.win64/bin/dxgi.dll" "$DST_DIR"/lib64/wine/dxvk/
|
|
cp "$TOP/build/dxvk.win64/bin/d3d11.dll" "$DST_DIR"/lib64/wine/dxvk/
|
|
git submodule status -- dxvk > "$DST_DIR"/lib64/wine/dxvk/version
|
|
|
|
mkdir -p "$DST_DIR"/lib/wine/dxvk
|
|
cp "$TOP/build/dxvk.win32/bin/dxgi.dll" "$DST_DIR"/lib/wine/dxvk/
|
|
cp "$TOP/build/dxvk.win32/bin/d3d11.dll" "$DST_DIR"/lib/wine/dxvk/
|
|
git submodule status -- dxvk > "$DST_DIR"/lib/wine/dxvk/version
|
|
}
|
|
|
|
|
|
|
|
PACKAGE=false
|
|
BUILD_COMPONENTS='all'
|
|
INSTALL_PROGRAM_FLAGS=''
|
|
for (( i=1; i <= $#; i++)); do
|
|
param="${!i}"
|
|
if [ "$param" == "--release" ]; then
|
|
RELEASE_BUILD=1
|
|
INSTALL_PROGRAM_FLAGS='-s'
|
|
elif [ "$param" == "--package" ]; then
|
|
PACKAGE=true
|
|
elif [ "$param" == "--build" ]; then
|
|
i=$((i+1))
|
|
if [ "$i" -gt "$#" ]; then
|
|
usage "$(basename "$0")"
|
|
exit 1
|
|
fi
|
|
BUILD_COMPONENTS="${!i}"
|
|
elif [ "$param" == "--with-ffmpeg" ]; then
|
|
WITH_FFMPEG=1
|
|
else
|
|
usage "$(basename "$0")"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
if [ "$BUILD_COMPONENTS" == "all" ]; then
|
|
PACKAGE=true
|
|
fi
|
|
|
|
TOP="$PWD"
|
|
DST_DIR="$TOP/build/dist"
|
|
TOOLS_DIR64="$TOP/build/tools.win64"
|
|
TOOLS_DIR32="$TOP/build/tools.win32"
|
|
mkdir -p "$TOP"/dist
|
|
mkdir -p "$TOP"/build/wine.win{32,64} "$TOP"/build/dist.win32
|
|
mkdir -p "$DST_DIR"/{bin,lib,lib64}
|
|
mkdir -p "$TOOLS_DIR64"/lib{,64}
|
|
|
|
if [ x"$RELEASE_BUILD" == x ]; then
|
|
set +e; CCACHE="$(command -v ccache)"; set -e
|
|
fi
|
|
|
|
if [ "$PLATFORM" == "Darwin" ]; then
|
|
CC="$CCACHE clang"
|
|
AMD64_WRAPPER=""
|
|
I386_WRAPPER=""
|
|
STRIP='strip -x'
|
|
MAKE="make"
|
|
LIB_SUFFIX="dylib"
|
|
CMAKE32="cmake"
|
|
CMAKE64="cmake"
|
|
WITHOUT_X="--without-x"
|
|
FFMPEG_CROSS_CFLAGS="-m32"
|
|
FFMPEG_CROSS_LDFLAGS="-m32"
|
|
else
|
|
CC="$CCACHE gcc"
|
|
AMD64_WRAPPER="schroot --chroot steamrt_scout_beta_amd64 --"
|
|
I386_WRAPPER="schroot --chroot steamrt_scout_beta_i386 --"
|
|
STRIP='strip'
|
|
MAKE="make"
|
|
LIB_SUFFIX="so"
|
|
WITHOUT_X=""
|
|
FFMPEG_CROSS_CFLAGS=""
|
|
FFMPEG_CROSS_LDFLAGS=""
|
|
|
|
if [ -e "$HOME/opt32/bin/cmake" ]; then
|
|
CMAKE32="$HOME/opt32/bin/cmake"
|
|
else
|
|
CMAKE32="cmake"
|
|
fi
|
|
if [ -e "$HOME/opt64/bin/cmake" ]; then
|
|
CMAKE64="$HOME/opt64/bin/cmake"
|
|
else
|
|
CMAKE64="cmake"
|
|
fi
|
|
|
|
gcc_ver=$($AMD64_WRAPPER gcc -v 2>&1 | grep 'gcc version' | cut -d' ' -f3)
|
|
gcc_maj=$(echo "$gcc_ver" | cut -d'.' -f1)
|
|
gcc_min=$(echo "$gcc_ver" | cut -d'.' -f2)
|
|
if [ "$gcc_maj" -lt 5 ] || { [ "$gcc_maj" -eq 5 ] && [ "$gcc_min" -lt 3 ];}; then
|
|
echo "need gcc >= 5.3"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ "$PLATFORM" == "Darwin" ]; then
|
|
build_freetype
|
|
|
|
FREETYPE32_CFLAGS="-I$TOOLS_DIR32/include/freetype2"
|
|
FREETYPE32_LIBS="-L$TOOLS_DIR32/lib -lprotonfreetype -framework CoreServices -framework ApplicationServices -lz"
|
|
ac_cv_lib_soname_freetype32=libprotonfreetype.dylib
|
|
|
|
FREETYPE64_CFLAGS="-I$TOOLS_DIR64/include/freetype2"
|
|
FREETYPE64_LIBS="-L$TOOLS_DIR64/lib -lprotonfreetype"
|
|
ac_cv_lib_soname_freetype64=libprotonfreetype.dylib
|
|
|
|
|
|
build_libpng
|
|
|
|
PNG32_CFLAGS="-I$TOOLS_DIR32/include"
|
|
PNG32_LIBS="-L$TOOLS_DIR32/lib -lprotonpng"
|
|
ac_cv_lib_soname_png32=libprotonpng16.dylib
|
|
|
|
PNG64_CFLAGS="-I$TOOLS_DIR64/include"
|
|
PNG64_LIBS="-L$TOOLS_DIR64/lib -lprotonpng"
|
|
ac_cv_lib_soname_png64=libprotonpng16.dylib
|
|
|
|
|
|
build_libjpeg
|
|
|
|
JPEG32_CFLAGS="-I$TOOLS_DIR32/include"
|
|
JPEG32_LIBS="-L$TOOLS_DIR32/lib -lprotonjpeg"
|
|
ac_cv_lib_soname_jpeg32=libprotonjpeg.dylib
|
|
|
|
JPEG64_CFLAGS="-I$TOOLS_DIR64/include"
|
|
JPEG64_LIBS="-L$TOOLS_DIR64/lib -lprotonjpeg"
|
|
ac_cv_lib_soname_jpeg64=libprotonjpeg.dylib
|
|
|
|
build_libSDL
|
|
|
|
build_moltenvk
|
|
fi
|
|
|
|
if [ "$WITH_FFMPEG" = 1 ]; then
|
|
build_ffmpeg
|
|
fi
|
|
|
|
build_openal
|
|
|
|
build_dxvk
|
|
|
|
case "$BUILD_COMPONENTS" in
|
|
"all")
|
|
build_wine64
|
|
build_wine32
|
|
build_lsteamclient64
|
|
build_lsteamclient32
|
|
build_vrclient64
|
|
build_vrclient32
|
|
;;
|
|
"wine") build_wine64; build_wine32 ;;
|
|
"wine32") build_wine32 ;;
|
|
"wine64") build_wine64 ;;
|
|
"vrclient") build_vrclient32; build_vrclient64 ;;
|
|
"vrclient32") build_vrclient32 ;;
|
|
"vrclient64") build_vrclient64 ;;
|
|
"lsteamclient") build_lsteamclient32; build_lsteamclient64 ;;
|
|
"lsteamclient32") build_lsteamclient32 ;;
|
|
"lsteamclient64") build_lsteamclient64 ;;
|
|
"vrclient_tests") build_vrclient32_tests; build_vrclient64_tests ;;
|
|
*) echo "Invalid build components: $BUILD_COMPONENTS" ;;
|
|
esac
|
|
|
|
function setup_wine_gecko
|
|
{
|
|
mkdir -p "$DST_DIR"/share/wine/gecko/
|
|
if [ -e "$TOP/../gecko/wine_gecko-$1-$2.msi" ]; then
|
|
cp "$TOP/../gecko/wine_gecko-$1-$2.msi" "$DST_DIR"/share/wine/gecko/
|
|
else
|
|
mkdir -p contrib/
|
|
if [ ! -e "contrib/wine_gecko-$1-$2.msi" ]; then
|
|
echo ">>>> Downloading wine-gecko. To avoid this in future, put it here: $TOP/../gecko/wine_gecko-$1-$2.msi"
|
|
wget -O "contrib/wine_gecko-$1-$2.msi" "https://dl.winehq.org/wine/wine-gecko/$1/wine_gecko-$1-$2.msi"
|
|
fi
|
|
cp "contrib/wine_gecko-$1-$2.msi" "$DST_DIR"/share/wine/gecko/
|
|
fi
|
|
}
|
|
|
|
if [ "$PACKAGE" = true ]; then
|
|
echo ">>>> Packaging..."
|
|
cd "$TOP"
|
|
|
|
#create default prefix
|
|
rm -rf "$TOP"/build/dist/share/default_pfx/
|
|
if [ "$PLATFORM" != "Darwin" ]; then
|
|
RUNTIME_RUNSH="$STEAM_RUNTIME"/runtime/run.sh
|
|
else
|
|
RUNTIME_RUNSH=""
|
|
fi
|
|
WINEPREFIX="$TOP"/build/dist/share/default_pfx/ $RUNTIME_RUNSH ./build/dist/bin/wine64 wineboot
|
|
WINEPREFIX="$TOP"/build/dist/share/default_pfx/ $RUNTIME_RUNSH ./build/dist/bin/wineserver -w
|
|
|
|
cp -a openvr/bin/win32/openvr_api.dll "$TOP"/build/dist/lib/wine/dxvk/openvr_api_dxvk.dll
|
|
cp -a openvr/bin/win64/openvr_api.dll "$TOP"/build/dist/lib64/wine/dxvk/openvr_api_dxvk.dll
|
|
|
|
setup_wine_gecko "2.47" "x86"
|
|
setup_wine_gecko "2.47" "x86_64"
|
|
|
|
#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 filelock.py dist/
|
|
cp -a user_settings.sample.py dist/
|
|
if [ "$PLATFORM" == "Darwin" ]; then
|
|
cp -a dist.LICENSE.osx dist/LICENSE
|
|
sed -e 's/@PYTHON_NAME@/python/' proton.in > dist/proton
|
|
else
|
|
cp -a dist.LICENSE.lin dist/LICENSE
|
|
#work around Ubuntu 18.04 failing to ship a python by default
|
|
sed -e 's/@PYTHON_NAME@/python3/' proton.in > dist/proton
|
|
fi
|
|
chmod 755 dist/proton
|
|
date '+%s' > dist/version
|
|
|
|
echo "Proton ready in dist/"
|
|
fi
|