From: Giovanni Mascellani gmascellani@codeweavers.com
--- .gitlab-ci.yml | 113 +++++++++++++++++++++++++++++++++++++++ gitlab/MoltenVK_icd.json | 8 +++ gitlab/build-linux | 19 +++++++ gitlab/build-mac | 19 +++++++ gitlab/image.docker | 36 +++++++++++++ 5 files changed, 195 insertions(+) create mode 100644 .gitlab-ci.yml create mode 100644 gitlab/MoltenVK_icd.json create mode 100755 gitlab/build-linux create mode 100755 gitlab/build-mac create mode 100644 gitlab/image.docker
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 000000000..655d21b93 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,113 @@ +stages: + - image + - build + - test + +build-image: + stage: image + rules: + - if: $CI_PIPELINE_SOURCE == 'push' && $CI_PROJECT_PATH == "wine/vkd3d" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + changes: + - .gitlab-ci.yml + - gitlab/image.docker + image: + name: gcr.io/kaniko-project/executor:debug + entrypoint: [""] + variables: + IMAGE_SOURCE: "gitlab.winehq.org:443/wine/dependency_proxy/containers/debian:bookworm" + IMAGE_LOCAL: "$CI_REGISTRY_IMAGE:debian-bookworm" + DOCKER_FILE: "$CI_PROJECT_DIR/gitlab/image.docker" + script: + - mkdir -p /kaniko/.docker + - echo "{"auths":{"$CI_REGISTRY":{"auth":"$(printf "%s:%s" "$CI_REGISTRY_USER" "$CI_REGISTRY_PASSWORD" | base64 | tr -d '\n')"},"$CI_DEPENDENCY_PROXY_SERVER":{"auth":"$(printf "%s:%s" "$CI_DEPENDENCY_PROXY_USER" "$CI_DEPENDENCY_PROXY_PASSWORD" | base64 | tr -d '\n')"}}}" > /kaniko/.docker/config.json + - sed -i "1iFROM $IMAGE_SOURCE" "$DOCKER_FILE" + - /kaniko/executor --context "$CI_PROJECT_DIR" --dockerfile "$DOCKER_FILE" --destination "$IMAGE_LOCAL" + +.test: + stage: test + rules: + - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + image: $CI_REGISTRY/wine/vkd3d:debian-bookworm + interruptible: true + needs: + - job: build-image + optional: true + dependencies: [] + script: + - git config --global --add safe.directory $CI_PROJECT_DIR + - git clean -fdx + - git reset --hard + - rm -fr .git/rebase-merge + - mkdir artifacts + - cat /proc/cpuinfo > artifacts/cpuinfo.txt + - cat /proc/meminfo > artifacts/meminfo.txt + - vulkaninfo > artifacts/vulkaninfo.txt + - git rebase $CI_MERGE_REQUEST_DIFF_BASE_SHA --exec ./gitlab/build-linux + - if [ -f pipeline_failed ] ; then exit 1 ; fi + artifacts: + when: always + expire_in: 1 day + paths: + - artifacts + +test-linux-64-amd: + extends: .test + tags: + - amd-gpu + variables: + VK_LOADER_DRIVERS_SELECT: 'radeon_*' + +test-linux-64-llvmpipe: + extends: .test + allow_failure: true + variables: + VK_LOADER_DRIVERS_SELECT: 'lvp_*' + +test-linux-32-amd: + extends: .test + tags: + - amd-gpu + variables: + VK_LOADER_DRIVERS_SELECT: 'radeon_*' + CC: 'gcc -m32' + +test-linux-32-llvmpipe: + extends: .test + allow_failure: true + variables: + VK_LOADER_DRIVERS_SELECT: 'lvp_*' + CC: 'gcc -m32' + +test-mac: + stage: test + rules: + - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + allow_failure: true + interruptible: true + needs: [] + dependencies: [] + tags: + - mac + script: + # We use a custom ICD which is not marked as a portability driver, + # so that test programs are not confused. + - export VK_DRIVER_FILES="$PWD/gitlab/MoltenVK_icd.json" + - mkdir artifacts + - system_profiler SPSoftwareDataType SPHardwareDataType > artifacts/systeminfo.txt + - vulkaninfo > artifacts/vulkaninfo.txt + - export PATH="/usr/local/opt/bison/bin:/usr/local/opt/flex/bin:$PATH" + - git clone --depth 1 https://gitlab.winehq.org/wine/wine.git + - cd wine + - mkdir build + - cd build + - ../configure --enable-win64 --without-x --without-freetype + - make tools/widl/widl + - cd ../.. + - export PATH="$PWD/wine/build/tools/widl:$PATH" + - git rebase $CI_MERGE_REQUEST_DIFF_BASE_SHA --exec ./gitlab/build-mac + - if [ -f pipeline_failed ] ; then exit 1 ; fi + artifacts: + when: always + expire_in: 1 day + paths: + - artifacts diff --git a/gitlab/MoltenVK_icd.json b/gitlab/MoltenVK_icd.json new file mode 100644 index 000000000..7a35ed6e9 --- /dev/null +++ b/gitlab/MoltenVK_icd.json @@ -0,0 +1,8 @@ +{ + "file_format_version": "1.0.0", + "ICD": { + "library_path": "/usr/local/opt/molten-vk/lib/libMoltenVK.dylib", + "api_version": "1.2.0", + "is_portability_driver": false + } +} diff --git a/gitlab/build-linux b/gitlab/build-linux new file mode 100755 index 000000000..941e01b5c --- /dev/null +++ b/gitlab/build-linux @@ -0,0 +1,19 @@ +#!/bin/bash + +echo "Building $(git log -1)" +echo "---" + +COMMIT=$(git rev-parse --short HEAD) + +set -Eeuxo pipefail + +./autogen.sh +rm -fr build +mkdir build +cd build +../configure --enable-demos && make -j$(nproc) && make -j$(nproc) crosstest && make -j$(nproc) check || touch ../pipeline_failed + +mkdir -p ../artifacts/$COMMIT +rsync -Rr doc/* tests/*.log tests/*/*.log tests/*.exe ../artifacts/$COMMIT + +git reset --hard diff --git a/gitlab/build-mac b/gitlab/build-mac new file mode 100755 index 000000000..2940eb4dd --- /dev/null +++ b/gitlab/build-mac @@ -0,0 +1,19 @@ +#!/bin/bash + +echo "Building $(git log -1)" +echo "---" + +COMMIT=$(git rev-parse --short HEAD) + +set -Eeuxo pipefail + +./autogen.sh +rm -fr build +mkdir build +cd build +../configure && make && make crosstest && make check || touch ../pipeline_failed + +mkdir -p ../artifacts/$COMMIT +rsync -Rr tests/*.log tests/*/*.log tests/*.exe ../artifacts/$COMMIT + +git reset --hard diff --git a/gitlab/image.docker b/gitlab/image.docker new file mode 100644 index 000000000..684cf1a93 --- /dev/null +++ b/gitlab/image.docker @@ -0,0 +1,36 @@ +WORKDIR /tmp + +RUN export DEBIAN_FRONTEND=noninteractive; \ + echo 'path-exclude=/usr/share/doc/*' > /etc/dpkg/dpkg.cfg.d/99-exclude-cruft && \ + echo 'path-exclude=/usr/share/locale/*' >> /etc/dpkg/dpkg.cfg.d/99-exclude-cruft && \ + echo 'path-exclude=/usr/share/man/*' >> /etc/dpkg/dpkg.cfg.d/99-exclude-cruft && \ + echo 'APT::Install-Recommends "false";' > /etc/apt/apt.conf && \ + echo '#!/bin/sh' > /usr/sbin/policy-rc.d && \ + echo 'exit 101' >> /usr/sbin/policy-rc.d && \ + chmod +x /usr/sbin/policy-rc.d && \ + dpkg --add-architecture i386 && \ + apt-get update && \ + apt-get install -y eatmydata && \ + eatmydata apt-get dist-upgrade -y && \ + eatmydata apt-get install -y build-essential pkg-config gcc-multilib gcc-mingw-w64 \ + autoconf automake libtool flex bison \ + git ca-certificates rsync \ + doxygen doxygen-latex graphviz \ + mesa-vulkan-drivers mesa-vulkan-drivers:i386 \ + vulkan-tools spirv-headers \ + libvulkan-dev libvulkan-dev:i386 \ + libncurses-dev libncurses-dev:i386 \ + libxcb1-dev libxcb1-dev:i386 \ + libxcb-util-dev libxcb-util-dev:i386 \ + libxcb-icccm4-dev libxcb-icccm4-dev:i386 \ + libxcb-keysyms1-dev libxcb-keysyms1-dev:i386 && \ + git clone --depth 1 --branch wine-3.21 https://gitlab.winehq.org/wine/wine.git && \ + cd wine && \ + mkdir build && \ + cd build && \ + ../configure --without-x --without-freetype && \ + make tools/widl/widl && \ + cp tools/widl/widl /usr/local/bin && \ + cd ../.. && \ + rm -rf wine && \ + apt-get clean