[Mesa-dev] [PATCH 1/3] gitlab-ci: build Mesa using GitLab CI

Juan A. Suarez Romero jasuarez at igalia.com
Wed Aug 8 15:44:41 UTC 2018


Creates different Docker images containing Mesa built with different
tools (autotools, meson, scons, etc).

The build is done in 3 levels: the first level creates a base image
with all the requirements to build Mesa.

The second level (based of the first one), builds different images with
different versions of LLVM. As Gallium drivers heavily relies on LLVM,
this will help to test the build with different LLVM versions.

Finally, the latest level creates different images versions of Mesa.
The main differences is the tool to build them: autotools, meson, scons,
building Gallium drivers with different LLVM versions, and so on.

As the purpose is just to test that everything can be built correctly,
all the images are discarded, except one (the autotools), which is
stored in the registry. Thus, anyone can just pull it locally and test
against their local system.

In order to build the images, Rocker is used. This is a tool that
extends the Dockerfiles with new features that are quite interested
here. The main features we use is the support for templating, and the
support for mounting external directories during the image building.
This help to use tools like ccache to improve the build speed.

Signed-off-by: Juan A. Suarez Romero <jasuarez at igalia.com>
---
 .gitlab-ci.yml            | 177 +++++++++++++++++++++++++++++++++
 gitlab-ci/Rockerfile.base | 199 ++++++++++++++++++++++++++++++++++++++
 gitlab-ci/Rockerfile.llvm |  57 +++++++++++
 gitlab-ci/Rockerfile.mesa | 145 +++++++++++++++++++++++++++
 4 files changed, 578 insertions(+)
 create mode 100644 .gitlab-ci.yml
 create mode 100644 gitlab-ci/Rockerfile.base
 create mode 100644 gitlab-ci/Rockerfile.llvm
 create mode 100644 gitlab-ci/Rockerfile.mesa

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 00000000000..5cee333dd45
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,177 @@
+image: docker:latest
+
+services:
+  - docker:dind
+
+stages:
+  - base
+  - llvm
+  - mesa
+
+variables:
+  DOCKER_IMAGE: $CI_REGISTRY_IMAGE
+  CCACHE_DIR: $CI_PROJECT_DIR/../ccache
+  LLVM: "6.0"
+
+cache:
+  paths:
+    - ccache/
+  key: "$CI_JOB_STAGE"
+
+before_script:
+  - mkdir -p ccache
+  - rm -fr ../ccache
+  - mv ccache ../
+  - export MAKEFLAGS=-j$(nproc)
+  - apk --no-cache add libc6-compat
+  - wget https://github.com/grammarly/rocker/releases/download/1.3.1/rocker-1.3.1-linux_amd64.tar.gz
+  - tar xvf rocker-1.3.1-linux_amd64.tar.gz
+  - rm rocker-1.3.1-linux_amd64.tar.gz
+  - mv rocker ..
+  - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
+
+after_script:
+  - mv ../ccache ./
+
+.build_llvm: &build_llvm
+  stage: llvm
+  cache: {}
+  script:
+    - ../rocker build -f gitlab-ci/Rockerfile.llvm --var LLVM=$LLVM
+    - docker push $CI_REGISTRY_IMAGE:llvm-$LLVM
+
+.build_mesa: &build_mesa
+  stage: mesa
+  script:
+    - ../rocker build -f gitlab-ci/Rockerfile.mesa --var BUILD=$BUILD --var LLVM=$LLVM --var TAG=$CI_COMMIT_REF_SLUG .
+
+base:
+  stage: base
+  script:
+    - DOCKERFILE_SHA256=$(cat gitlab-ci/Rockerfile.base | sha256sum | cut -c-64)
+    - IMAGE_DOCKERFILE_SHA256=$(./gitlab-ci/inspect-remote-image.sh gitlab-ci-token $CI_BUILD_TOKEN $CI_PROJECT_PATH "base" ".config.Labels[\"dockerfile.sha256\"]" || echo -n "<notfound>")
+    - if [ "$DOCKERFILE_SHA256" != "$IMAGE_DOCKERFILE_SHA256" ] ; then FORCE_BUILD=true ; fi
+    - if [ "$FORCE_BUILD" ] ; then ../rocker build -f gitlab-ci/Rockerfile.base --var DOCKERFILE_SHA256=$DOCKERFILE_SHA256 ; fi
+    - if [ "$FORCE_BUILD" ] ; then docker push $CI_REGISTRY_IMAGE:base ; fi
+
+llvm:3.3:
+  variables:
+    LLVM: "3.3"
+  <<: *build_llvm
+
+llvm:3.6:
+  variables:
+    LLVM: "3.6"
+  <<: *build_llvm
+
+llvm:3.8:
+  variables:
+    LLVM: "3.8"
+  <<: *build_llvm
+
+llvm:3.9:
+  variables:
+    LLVM: "3.9"
+  <<: *build_llvm
+
+llvm:4.0:
+  variables:
+    LLVM: "4.0"
+  <<: *build_llvm
+
+llvm:5.0:
+  variables:
+    LLVM: "5.0"
+  <<: *build_llvm
+
+llvm:6.0:
+  variables:
+    LLVM: "6.0"
+  <<: *build_llvm
+
+meson:
+  variables:
+    BUILD: "meson"
+  <<: *build_mesa
+
+autotools:
+  variables:
+    BUILD: "autotools"
+  after_script:
+    - mv ../ccache ./
+    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
+  <<: *build_mesa
+
+distcheck:
+  variables:
+    BUILD: "distcheck"
+  artifacts:
+    name: "release"
+    paths:
+      - release-output/
+    expire_in: 1 week
+  <<: *build_mesa
+
+gallium:llvm:3.3:
+  variables:
+    BUILD: "gallium"
+    LLVM: "3.3"
+  <<: *build_mesa
+
+gallium:llvm:3.6:
+  variables:
+    BUILD: "gallium"
+    LLVM: "3.6"
+  <<: *build_mesa
+
+gallium:llvm:3.8:
+  variables:
+    BUILD: "gallium"
+    LLVM: "3.8"
+  <<: *build_mesa
+
+gallium:llvm:3.9:
+  variables:
+    BUILD: "gallium"
+    LLVM: "3.9"
+  <<: *build_mesa
+
+gallium:llvm:4.0:
+  variables:
+    BUILD: "gallium"
+    LLVM: "4.0"
+  <<: *build_mesa
+
+gallium:llvm:5.0:
+  variables:
+    BUILD: "gallium"
+    LLVM: "5.0"
+  <<: *build_mesa
+
+gallium:llvm:6.0:
+  variables:
+    BUILD: "gallium"
+    LLVM: "6.0"
+  <<: *build_mesa
+
+gallium:nollvm:
+  variables:
+    BUILD: "gallium"
+    LLVM: "0.0"
+  <<: *build_mesa
+
+scons:
+  variables:
+    BUILD: "scons"
+  <<: *build_mesa
+
+scons:nollvm:
+  variables:
+    BUILD: "scons"
+    LLVM: "0.0"
+  <<: *build_mesa
+
+windows:
+  variables:
+    BUILD: "windows"
+  <<: *build_mesa
diff --git a/gitlab-ci/Rockerfile.base b/gitlab-ci/Rockerfile.base
new file mode 100644
index 00000000000..a0cb5e5290d
--- /dev/null
+++ b/gitlab-ci/Rockerfile.base
@@ -0,0 +1,199 @@
+#
+# Base image for building Mesa.
+#
+# ~~~
+#  rocker build -f Rockerfile.base [--attach] [--pull]
+# ~~~
+#
+# Environment variables that are used in the build:
+#  - DOCKER_IMAGE: name of the final image to be tagged (default: mesa:base)
+#  - MAKEFLAGS: flags to pass to make (e.g., "-j8")
+#  - CCACHE_DIR: ccache directory (e.g, ~/.ccache)
+#
+
+{{ $image := (or .Env.DOCKER_IMAGE "mesa") }}
+
+FROM ubuntu:xenial
+
+LABEL maintainer "Juan A. Suarez Romero <jasuarez at igalia.com>"
+
+ENV LC_ALL=C.UTF-8
+
+RUN apt-get update                                                                     \
+  && apt-get --no-install-recommends -y install autoconf gcc g++ sudo cmake patch git  \
+    automake pkg-config libtool-bin bison flex python-pip libpthread-stubs0-dev wget   \
+    libxau-dev libx11-dev libxext-dev libxdamage-dev libx11-xcb-dev gettext xutils-dev \
+    zlib1g-dev scons libelf-dev libxvmc-dev libvdpau-dev libva-dev libclc-dev ccache   \
+    libpciaccess-dev libxxf86vm-dev python-setuptools python-wheel bzip2 make pciutils \
+    mesa-common-dev libexpat1-dev xz-utils libedit-dev libffi-dev libunwind-dev        \
+    libxml2-dev libomxil-bellagio-dev mesa-utils waffle-utils vulkan-utils python3-pip \
+    python3-setuptools libgtest-dev                                                    \
+  && rm -fr /var/lib/apt/lists/*
+
+RUN pip install mako
+
+RUN pip3 install meson ninja
+
+RUN adduser --gecos "" local && passwd -d local && adduser local sudo
+
+USER local
+
+WORKDIR /home/local
+
+ENV LDFLAGS="-L/usr/local/lib $LDFLAGS"
+
+{{ if .Env.MAKEFLAGS }}
+ENV MAKEFLAGS={{ .Env.MAKEFLAGS }}
+{{ end }}
+
+{{ if .Env.CCACHE_DIR }}
+MOUNT {{ .Env.CCACHE_DIR }}:/home/local/.ccache:Z
+RUN sudo chown -R local:local /home/local/.ccache
+ENV PATH=/usr/lib/ccache:$PATH
+{{ end }}
+
+ATTACH [ "/bin/bash" ]
+
+RUN wget https://xorg.freedesktop.org/releases/individual/proto/glproto-1.4.14.tar.bz2  \
+  && tar -jxvf glproto-1.4.14.tar.bz2                                                   \
+  && rm glproto-1.4.14.tar.bz2                                                          \
+  && cd glproto-1.4.14                                                                  \
+  && ./configure                                                                        \
+  && make                                                                               \
+  && sudo make install                                                                  \
+  && sudo ldconfig                                                                      \
+  && sudo rm -fr ../glproto-1.4.14
+
+RUN wget https://xorg.freedesktop.org/releases/individual/proto/dri2proto-2.8.tar.bz2   \
+  && tar -jxvf dri2proto-2.8.tar.bz2                                                    \
+  && rm dri2proto-2.8.tar.bz2                                                           \
+  && cd dri2proto-2.8                                                                   \
+  && ./configure                                                                        \
+  && make                                                                               \
+  && sudo make install                                                                  \
+  && sudo ldconfig                                                                      \
+  && sudo rm -fr ../dri2proto-2.8
+
+RUN wget https://xorg.freedesktop.org/releases/individual/proto/dri3proto-1.0.tar.bz2   \
+  && tar -jxvf dri3proto-1.0.tar.bz2                                                    \
+  && rm dri3proto-1.0.tar.bz2                                                           \
+  && cd dri3proto-1.0                                                                   \
+  && ./configure                                                                        \
+  && make                                                                               \
+  && sudo make install                                                                  \
+  && sudo ldconfig                                                                      \
+  && sudo rm -fr ../dri3proto-1.0
+
+RUN wget https://xorg.freedesktop.org/releases/individual/proto/presentproto-1.0.tar.bz2 \
+  && tar -jxvf presentproto-1.0.tar.bz2                                                  \
+  && rm presentproto-1.0.tar.bz2                                                         \
+  && cd presentproto-1.0                                                                 \
+  && ./configure                                                                         \
+  && make                                                                                \
+  && sudo make install                                                                   \
+  && sudo ldconfig                                                                       \
+  && sudo rm -fr ../presentproto-1.0
+
+RUN wget https://xcb.freedesktop.org/dist/xcb-proto-1.13.tar.bz2                         \
+  && tar -jxvf xcb-proto-1.13.tar.bz2                                                    \
+  && rm xcb-proto-1.13.tar.bz2                                                           \
+  && cd xcb-proto-1.13                                                                   \
+  && ./configure                                                                         \
+  && make                                                                                \
+  && sudo make install                                                                   \
+  && sudo ldconfig                                                                       \
+  && sudo rm -fr ../xcb-proto-1.13
+
+RUN wget https://xcb.freedesktop.org/dist/libxcb-1.13.tar.bz2                            \
+  && tar -jxvf libxcb-1.13.tar.bz2                                                       \
+  && rm libxcb-1.13.tar.bz2                                                              \
+  && cd libxcb-1.13                                                                      \
+  && ./configure                                                                         \
+  && make                                                                                \
+  && sudo make install                                                                   \
+  && sudo ldconfig                                                                       \
+  && sudo rm -fr ../libxcb-1.13
+
+RUN wget https://xorg.freedesktop.org//releases/individual/proto/renderproto-0.11.1.tar.bz2 \
+  && tar -jxvf renderproto-0.11.1.tar.bz2                                                   \
+  && rm renderproto-0.11.1.tar.bz2                                                          \
+  && cd renderproto-0.11.1                                                                  \
+  && ./configure                                                                            \
+  && make                                                                                   \
+  && sudo make install                                                                      \
+  && sudo ldconfig                                                                          \
+  && sudo rm -fr ../renderproto-0.11.1
+
+RUN wget https://xorg.freedesktop.org/releases/individual/lib/libXrender-0.9.10.tar.bz2 \
+  && tar -jxvf libXrender-0.9.10.tar.bz2                                                \
+  && rm libXrender-0.9.10.tar.bz2                                                       \
+  && cd libXrender-0.9.10                                                               \
+  && ./configure                                                                        \
+  && make                                                                               \
+  && sudo make install                                                                  \
+  && sudo ldconfig                                                                      \
+  && sudo rm -fr ../libXrender-0.9.10
+
+RUN wget https://xorg.freedesktop.org/releases/individual/proto/randrproto-1.3.0.tar.bz2 \
+  && tar -jxvf randrproto-1.3.0.tar.bz2                                                  \
+  && rm randrproto-1.3.0.tar.bz2                                                         \
+  && cd randrproto-1.3.0                                                                 \
+  && ./configure                                                                         \
+  && make                                                                                \
+  && sudo make install                                                                   \
+  && sudo ldconfig                                                                       \
+  && sudo rm -fr ../randrproto-1.3.0
+
+RUN wget https://xorg.freedesktop.org/releases/individual/lib/libXrandr-1.3.0.tar.bz2   \
+  && tar -jxvf libXrandr-1.3.0.tar.bz2                                                  \
+  && rm libXrandr-1.3.0.tar.bz2                                                         \
+  && cd libXrandr-1.3.0                                                                 \
+  && ./configure                                                                        \
+  && make                                                                               \
+  && sudo make install                                                                  \
+  && sudo ldconfig                                                                      \
+  && sudo rm -fr ../libXrandr-1.3.0
+
+RUN wget https://xorg.freedesktop.org/releases/individual/lib/libxshmfence-1.1.tar.bz2  \
+  && tar -jxvf libxshmfence-1.1.tar.bz2                                                 \
+  && rm libxshmfence-1.1.tar.bz2                                                        \
+  && cd libxshmfence-1.1                                                                \
+  && ./configure                                                                        \
+  && make                                                                               \
+  && sudo make install                                                                  \
+  && sudo ldconfig                                                                      \
+  && sudo rm -fr ../libxshmfence-1.1
+
+RUN wget https://people.freedesktop.org/~cbrill/libtxc_dxtn/libtxc_dxtn-1.0.1.tar.bz2   \
+  && tar -jxvf libtxc_dxtn-1.0.1.tar.bz2                                                \
+  && rm libtxc_dxtn-1.0.1.tar.bz2                                                       \
+  && cd libtxc_dxtn-1.0.1                                                               \
+  && ./configure                                                                        \
+  && make                                                                               \
+  && sudo make install                                                                  \
+  && sudo ldconfig                                                                      \
+  && sudo rm -fr ../libtxc_dxtn-1.0.1
+
+RUN wget https://wayland.freedesktop.org/releases/wayland-1.15.0.tar.xz                 \
+  && tar -Jxvf wayland-1.15.0.tar.xz                                                    \
+  && rm wayland-1.15.0.tar.xz                                                           \
+  && cd wayland-1.15.0                                                                  \
+  && ./configure --disable-documentation                                                \
+  && make                                                                               \
+  && sudo make install                                                                  \
+  && sudo ldconfig                                                                      \
+  && sudo rm -fr ../wayland-1.15.0
+
+RUN wget https://wayland.freedesktop.org/releases/wayland-protocols-1.8.tar.xz          \
+  && tar -Jxvf wayland-protocols-1.8.tar.xz                                             \
+  && rm wayland-protocols-1.8.tar.xz                                                    \
+  && cd wayland-protocols-1.8                                                           \
+  && ./configure                                                                        \
+  && make                                                                               \
+  && sudo make install                                                                  \
+  && sudo ldconfig                                                                      \
+  && sudo rm -fr ../wayland-protocols-1.8
+
+USER root
+
+TAG {{ $image }}:base
diff --git a/gitlab-ci/Rockerfile.llvm b/gitlab-ci/Rockerfile.llvm
new file mode 100644
index 00000000000..ed75f4f0f02
--- /dev/null
+++ b/gitlab-ci/Rockerfile.llvm
@@ -0,0 +1,57 @@
+#
+# This builds the base image for building Mesa.
+#
+# ~~~
+#  rocker build -f Rockerfile.llvm [--pull]     \
+#    --var LLVM=3.3             # 3.3, 3.6, 3.8, 3.9, 4.0, 5.0, 6.0
+# ~~~
+#
+# Environment variables that are used in the build:
+#  - DOCKER_IMAGE: name of the final image to be tagged (default: mesa:$LLVM)
+#
+# NOTE: LLVM 3.3 package has been created with checkinstall using Base image
+#
+# ~~~
+#  wget https://releases.llvm.org/3.3/llvm-3.3.src.tar.gz                               \
+#    && tar xzpf llvm-3.3.src.tar.gz                                                    \
+#    && cd llvm-3.3.src                                                                 \
+#    && mkdir build                                                                     \
+#    && cd build                                                                        \
+#    && ../configure --enable-optimized --enable-shared --prefix=/usr/lib/llvm-3.3      \
+#    && make                                                                            \
+#    && echo "LLVM Toolchain 3.3" > description-pak                                     \
+#    && checkinstall -D -y --pkgname=llvm-3.3 --pkgversion=3.3 --pkgrelease=+checkinstall1 --maintainer=jasuarez at igalia.com --provides=llvm
+#  ~~~
+#
+
+{{ $image := (or .Env.DOCKER_IMAGE "mesa") }}
+{{ $distro := "xenial" }}
+
+FROM {{ $image }}:base
+
+LABEL maintainer "Juan A. Suarez Romero <jasuarez at igalia.com>"
+
+{{ if ge .LLVM "3.9" }}
+RUN apt-get update                                                            \
+  && apt-get --no-install-recommends -y install gnupg                         \
+  && wget -qO - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -    \
+  && echo "deb http://apt.llvm.org/{{ $distro }}/ llvm-toolchain-{{ $distro }}-{{ .LLVM }} main" >> /etc/apt/sources.list       \
+  && rm -fr /var/lib/apt/lists/*
+{{ end }}
+
+
+{{ if eq .LLVM "3.3" }}
+RUN wget https://people.igalia.com/jasuarez/packages/llvm-3.3_3.3-+checkinstall1_amd64.deb      \
+  && dpkg -i llvm-3.3_3.3-+checkinstall1_amd64.deb                                              \
+  && rm llvm-3.3_3.3-+checkinstall1_amd64.deb
+ENV LD_LIBRARY_PATH=/usr/lib/llvm-{{ .LLVM }}/lib:$LD_LIBRARY_PATH
+
+{{ else }}
+
+RUN apt-get update                                                            \
+  && apt-get --no-install-recommends -y install libclang-{{ .LLVM }}-dev      \
+    llvm-{{ .LLVM }}-dev                                                      \
+  && rm -fr /var/lib/apt/lists/*
+{{ end }}
+
+TAG {{ $image }}:llvm-{{ .LLVM }}
diff --git a/gitlab-ci/Rockerfile.mesa b/gitlab-ci/Rockerfile.mesa
new file mode 100644
index 00000000000..7b52e3e3a74
--- /dev/null
+++ b/gitlab-ci/Rockerfile.mesa
@@ -0,0 +1,145 @@
+#
+# This builds and installs Mesa.
+#
+# ~~~
+#  rocker build -f Rockerfile.mesa [--attach] [--pull]                                  \
+#    --var BUILD=autotools      # meson, scons, autotools, windows, distcheck, gallium  \
+#    [--var DEBUG=true]         # build with debug options (true, false)                \
+#    [--var LLVM=3.3]           # 3.3, 3.6, 3.8, 3.9, 4.0, ...                          \
+#    [--var TAG=master]         # master, staging-18.0, staging-18.1, ...               \
+# ~~~
+#
+# Environment variables that are used in the build:
+#  - DOCKER_IMAGE: name of the final image to be tagged (default: mesa[:$TAG])
+#  - MAKEFLAGS: flags to pass to make (e.g., "-j8")
+#  - CCACHE_DIR: ccache directory (e.g., ~/.ccache)
+#
+
+{{ $image := (or .Env.DOCKER_IMAGE "mesa") }}
+{{ $llvm_version := (or .LLVM "0.0") }}
+{{ $debug_build := (or .DEBUG "true") }}
+
+{{ if eq .BUILD "windows"}}
+FROM {{ $image }}:base
+{{ else if eq $llvm_version "0.0" }}
+FROM {{ $image }}:base
+{{ else }}
+FROM {{ $image }}:llvm-{{ .LLVM }}
+{{ end }}
+
+LABEL maintainer "Juan A. Suarez Romero <jasuarez at igalia.com>"
+
+{{ if eq .BUILD "windows" }}
+RUN apt-get update                                              \
+  && apt-get -y --no-install-recommends install mingw-w64       \
+  && rm -fr /var/lib/apt/lists/*
+{{ end }}
+
+USER local
+
+ENV PATH=/home/local/.bin/:/usr/lib/llvm-{{ $llvm_version }}/bin:$PATH
+
+ADD . /home/local/mesa
+RUN sudo chown -R local:local /home/local/mesa
+
+{{ if .Env.MAKEFLAGS }}
+ENV MAKEFLAGS={{ .Env.MAKEFLAGS }}
+ENV SCONSFLAGS={{ .Env.MAKEFLAGS }}
+{{ end }}
+
+{{ if .Env.CCACHE_DIR }}
+MOUNT {{ .Env.CCACHE_DIR }}:/home/local/.ccache:Z
+RUN sudo chown -R local:local /home/local/.ccache
+ENV PATH=/usr/lib/ccache:$PATH
+ENV USE_CCACHE=1
+{{ end }}
+
+WORKDIR /home/local/mesa
+
+RUN if [ -d .git ] ; then git show --stat > /home/local/mesa-head.txt ; else echo "FROM TARBALL" > /home/local/mesa-head.txt ; fi
+
+ATTACH [ "/bin/bash" ]
+
+RUN export DRM_VERSION=`cat /home/local/mesa/configure.ac | egrep ^LIBDRM.*REQUIRED| cut -f2 -d= | sort -nr | head -n 1` \
+  && wget https://dri.freedesktop.org/libdrm/libdrm-$DRM_VERSION.tar.bz2                                                 \
+  && tar -jxvf libdrm-$DRM_VERSION.tar.bz2                                                                               \
+  && rm libdrm-$DRM_VERSION.tar.bz2                                                                                      \
+  && cd libdrm-$DRM_VERSION                                                                                              \
+  && ./configure --enable-freedreno --enable-vc4 --enable-etnaviv-experimental-api --enable-tegra-experimental-api       \
+  && make                                                                                                                \
+  && sudo make install                                                                                                   \
+  && sudo ldconfig                                                                                                       \
+  && sudo rm -fr ../libdrm-$DRM_VERSION                                                                                  \
+  && unset DRM_VERSION
+
+
+{{ if eq .BUILD "scons" }}
+{{ if eq $llvm_version "0.0" }}
+RUN scons llvm=0               \
+  && scons llvm=0 check        \
+  && sudo rm -fr /home/local/mesa
+{{ else }}
+RUN scons llvm=1               \
+  && scons llvm=1 check        \
+  && sudo rm -fr /home/local/mesa
+{{ end }}
+
+{{ else if eq .BUILD "windows" }}
+
+RUN scons platform=windows toolchain=crossmingw \
+  && sudo rm -fr /home/local/mesa
+
+{{ else if eq .BUILD "distcheck" }}
+
+MOUNT .:/context
+RUN ./autogen.sh                                                \
+  && make distcheck                                             \
+  && __version=`cat VERSION`                                    \
+  && mkdir -p /context/release-output                           \
+  && mv /home/local/mesa-head.txt /context/release-output       \
+  && mv mesa-$__version.tar.xz /context/release-output          \
+  && sudo rm -fr /home/local/mesa
+
+{{ else if eq .BUILD "autotools" "gallium" }}
+
+RUN export LLVM={{ $llvm_version }}.0\
+  && eval `cat configure.ac | egrep ^LLVM_REQUIRED`                                                                     \
+  && if dpkg --compare-versions $LLVM ge $LLVM_REQUIRED_GALLIUM ; then GALLIUM_DRIVERS=i915,etnaviv,freedreno,imx,nouveau,pl111,r300,svga,swrast,tegra,v3d,vc4,virgl ; fi \
+  && if dpkg --compare-versions $LLVM ge $LLVM_REQUIRED_R600 ; then GALLIUM_DRIVERS=$GALLIUM_DRIVERS,r600 ; fi          \
+  && if dpkg --compare-versions $LLVM ge $LLVM_REQUIRED_RADEONSI ; then GALLIUM_DRIVERS=$GALLIUM_DRIVERS,radeonsi ; fi  \
+  && if dpkg --compare-versions $LLVM ge $LLVM_REQUIRED_SWR ; then GALLIUM_DRIVERS=$GALLIUM_DRIVERS,swr ; fi            \
+  && DRI_DRIVERS=i915,i965,nouveau,r200,radeon,swrast                                                                   \
+  && VULKAN_DRIVERS=intel                                                                                               \
+  && if dpkg --compare-versions $LLVM ge $LLVM_REQUIRED_RADV ; then VULKAN_DRIVERS=$VULKAN_DRIVERS,radeon ; fi          \
+  && ./autogen.sh                                                                                                       \
+    --with-gallium-drivers=$GALLIUM_DRIVERS                                                                             \
+    {{ if eq .BUILD "gallium" }} --with-dri-drivers=""                                                                  \
+    {{ else }} --with-dri-drivers=$DRI_DRIVERS                                                                          \
+    --with-vulkan-drivers=$VULKAN_DRIVERS                                                                               \
+    --with-egl-platforms=x11,drm,wayland {{ end }}                                                                      \
+    {{ if ne $llvm_version "0.0" }} --enable-llvm --enable-llvm-shared-libs {{ end }}                                   \
+    {{ if ne $debug_build "false" }} --enable-debug {{ end }}                                                           \
+    --enable-glx-tls --enable-gbm --enable-egl                                                                          \
+  && make                                                                                                               \
+  && make check                                                                                                         \
+  && sudo make install                                                                                                  \
+  && sudo ldconfig                                                                                                      \
+  && sudo rm -fr /home/local/mesa
+
+{{ else if eq .BUILD "meson" }}
+
+RUN meson  _build                       \
+  && ninja -C _build                    \
+  && sudo ninja -C _build install       \
+  && sudo ldconfig                      \
+  && sudo rm -fr /home/local/mesa
+
+{{ end }}
+
+WORKDIR /home/local
+
+USER root
+
+{{ if .TAG }}
+TAG {{ $image }}:{{ .TAG }}
+{{ end }}
-- 
2.17.1



More information about the mesa-dev mailing list