17ec681f3Smrg#!/bin/bash
27ec681f3Smrg
37ec681f3Smrgset -e
47ec681f3Smrgset -o xtrace
57ec681f3Smrg
67ec681f3Smrgexport DEBIAN_FRONTEND=noninteractive
77ec681f3Smrg
87ec681f3Smrg# Ephemeral packages (installed for this script and removed again at the end)
97ec681f3SmrgSTABLE_EPHEMERAL=" \
107ec681f3Smrg      ccache \
117ec681f3Smrg      cmake \
127ec681f3Smrg      g++ \
137ec681f3Smrg      g++-mingw-w64-i686-posix \
147ec681f3Smrg      g++-mingw-w64-x86-64-posix \
157ec681f3Smrg      glslang-tools \
167ec681f3Smrg      libgbm-dev \
177ec681f3Smrg      libgles2-mesa-dev \
187ec681f3Smrg      liblz4-dev \
197ec681f3Smrg      libpciaccess-dev \
207ec681f3Smrg      libudev-dev \
217ec681f3Smrg      libvulkan-dev \
227ec681f3Smrg      libwaffle-dev \
237ec681f3Smrg      libwayland-dev \
247ec681f3Smrg      libx11-xcb-dev \
257ec681f3Smrg      libxcb-ewmh-dev \
267ec681f3Smrg      libxcb-keysyms1-dev \
277ec681f3Smrg      libxkbcommon-dev \
287ec681f3Smrg      libxrandr-dev \
297ec681f3Smrg      libxrender-dev \
307ec681f3Smrg      libzstd-dev \
317ec681f3Smrg      meson \
327ec681f3Smrg      mingw-w64-i686-dev \
337ec681f3Smrg      mingw-w64-tools \
347ec681f3Smrg      mingw-w64-x86-64-dev \
357ec681f3Smrg      p7zip \
367ec681f3Smrg      patch \
377ec681f3Smrg      pkg-config \
387ec681f3Smrg      python3-distutils \
397ec681f3Smrg      wget \
407ec681f3Smrg      xz-utils \
417ec681f3Smrg      "
427ec681f3Smrg
437ec681f3Smrgapt-get install -y --no-remove \
447ec681f3Smrg      $STABLE_EPHEMERAL \
457ec681f3Smrg      libxcb-shm0 \
467ec681f3Smrg      python3-lxml \
477ec681f3Smrg      python3-simplejson \
487ec681f3Smrg      xinit \
497ec681f3Smrg      xserver-xorg-video-amdgpu \
507ec681f3Smrg      xserver-xorg-video-ati
517ec681f3Smrg
527ec681f3Smrg# We need multiarch for Wine
537ec681f3Smrgdpkg --add-architecture i386
547ec681f3Smrg
557ec681f3Smrgapt-get update
567ec681f3Smrg
577ec681f3Smrgapt-get install -y --no-remove \
587ec681f3Smrg      wine \
597ec681f3Smrg      wine32 \
607ec681f3Smrg      wine64
617ec681f3Smrg
627ec681f3Smrgfunction setup_wine() {
637ec681f3Smrg    export WINEDEBUG="-all"
647ec681f3Smrg    export WINEPREFIX="$1"
657ec681f3Smrg
667ec681f3Smrg    # We don't want crash dialogs
677ec681f3Smrg    cat >crashdialog.reg <<EOF
687ec681f3SmrgWindows Registry Editor Version 5.00
697ec681f3Smrg
707ec681f3Smrg[HKEY_CURRENT_USER\Software\Wine\WineDbg]
717ec681f3Smrg"ShowCrashDialog"=dword:00000000
727ec681f3Smrg
737ec681f3SmrgEOF
747ec681f3Smrg
757ec681f3Smrg    # Set the wine prefix and disable the crash dialog
767ec681f3Smrg    wine regedit crashdialog.reg
777ec681f3Smrg    rm crashdialog.reg
787ec681f3Smrg
797ec681f3Smrg    # An immediate wine command may fail with: "${WINEPREFIX}: Not a
807ec681f3Smrg    # valid wine prefix."  and that is just spit because of checking
817ec681f3Smrg    # the existance of the system.reg file, which fails.  Just giving
827ec681f3Smrg    # it a bit more of time for it to be created solves the problem
837ec681f3Smrg    # ...
847ec681f3Smrg    while ! test -f  "${WINEPREFIX}/system.reg"; do sleep 1; done
857ec681f3Smrg}
867ec681f3Smrg
877ec681f3Smrg############### Install DXVK
887ec681f3Smrg
897ec681f3SmrgDXVK_VERSION="1.8.1"
907ec681f3Smrg
917ec681f3Smrgsetup_wine "/dxvk-wine64"
927ec681f3Smrg
937ec681f3Smrgwget "https://github.com/doitsujin/dxvk/releases/download/v${DXVK_VERSION}/dxvk-${DXVK_VERSION}.tar.gz"
947ec681f3Smrgtar xzpf dxvk-"${DXVK_VERSION}".tar.gz
957ec681f3Smrgdxvk-"${DXVK_VERSION}"/setup_dxvk.sh install
967ec681f3Smrgrm -rf dxvk-"${DXVK_VERSION}"
977ec681f3Smrgrm dxvk-"${DXVK_VERSION}".tar.gz
987ec681f3Smrg
997ec681f3Smrg############### Install Windows' apitrace binaries
1007ec681f3Smrg
1017ec681f3SmrgAPITRACE_VERSION="10.0"
1027ec681f3SmrgAPITRACE_VERSION_DATE=""
1037ec681f3Smrg
1047ec681f3Smrgwget "https://github.com/apitrace/apitrace/releases/download/${APITRACE_VERSION}/apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64.7z"
1057ec681f3Smrg7zr x "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64.7z" \
1067ec681f3Smrg      "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64/bin/apitrace.exe" \
1077ec681f3Smrg      "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64/bin/d3dretrace.exe"
1087ec681f3Smrgmv "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64" /apitrace-msvc-win64
1097ec681f3Smrgrm "apitrace-${APITRACE_VERSION}${APITRACE_VERSION_DATE}-win64.7z"
1107ec681f3Smrg
1117ec681f3Smrg# Add the apitrace path to the registry
1127ec681f3Smrgwine \
1137ec681f3Smrg    reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment" \
1147ec681f3Smrg    /v Path \
1157ec681f3Smrg    /t REG_EXPAND_SZ \
1167ec681f3Smrg    /d "C:\windows\system32;C:\windows;C:\windows\system32\wbem;Z:\apitrace-msvc-win64\bin" \
1177ec681f3Smrg    /f
1187ec681f3Smrg
1197ec681f3Smrg############### Building ...
1207ec681f3Smrg
1217ec681f3Smrg. .gitlab-ci/container/container_pre_build.sh
1227ec681f3Smrg
1237ec681f3Smrg############### Build libdrm
1247ec681f3Smrg
1257ec681f3Smrg. .gitlab-ci/container/build-libdrm.sh
1267ec681f3Smrg
1277ec681f3Smrg############### Build parallel-deqp-runner's hang-detection tool
1287ec681f3Smrg
1297ec681f3Smrg. .gitlab-ci/container/build-hang-detection.sh
1307ec681f3Smrg
1317ec681f3Smrg############### Build piglit
1327ec681f3Smrg
1337ec681f3SmrgPIGLIT_BUILD_TARGETS="piglit_replayer" . .gitlab-ci/container/build-piglit.sh
1347ec681f3Smrg
1357ec681f3Smrg############### Build Fossilize
1367ec681f3Smrg
1377ec681f3Smrg. .gitlab-ci/container/build-fossilize.sh
1387ec681f3Smrg
1397ec681f3Smrg############### Build dEQP VK
1407ec681f3Smrg
1417ec681f3Smrg. .gitlab-ci/container/build-deqp.sh
1427ec681f3Smrg
1437ec681f3Smrg############### Build gfxreconstruct
1447ec681f3Smrg
1457ec681f3Smrg. .gitlab-ci/container/build-gfxreconstruct.sh
1467ec681f3Smrg
1477ec681f3Smrg############### Build VKD3D-Proton
1487ec681f3Smrg
1497ec681f3Smrgsetup_wine "/vkd3d-proton-wine64"
1507ec681f3Smrg
1517ec681f3Smrg. .gitlab-ci/container/build-vkd3d-proton.sh
1527ec681f3Smrg
1537ec681f3Smrg############### Uninstall the build software
1547ec681f3Smrg
1557ec681f3Smrgccache --show-stats
1567ec681f3Smrg
1577ec681f3Smrgapt-get purge -y \
1587ec681f3Smrg      $STABLE_EPHEMERAL
1597ec681f3Smrg
1607ec681f3Smrgapt-get autoremove -y --purge
161