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

Juan A. Suarez Romero jasuarez at igalia.com
Wed Aug 29 10:12:34 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.

v2:
- Review dependencies (Eric Anholt)
- Install libdrm in base image with Meson (Eric Anholt)
- Do system changes before apt to speed up installation (Daniel Stone)

Signed-off-by: Juan A. Suarez Romero <jasuarez at igalia.com>
Acked-by: Daniel Stone <daniels at collabora.com>
---
 .gitlab-ci.yml            | 177 ++++++++++++++++++++++++++++++++++++
 gitlab-ci/Rockerfile.base | 185 ++++++++++++++++++++++++++++++++++++++
 gitlab-ci/Rockerfile.llvm |  57 ++++++++++++
 gitlab-ci/Rockerfile.mesa | 132 +++++++++++++++++++++++++++
 4 files changed, 551 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..cc2efd94556
--- /dev/null
+++ b/gitlab-ci/Rockerfile.base
@@ -0,0 +1,185 @@
+#
+# 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 echo "path-exclude=/usr/share/doc/*" >> /etc/dpkg/dpkg.cfg.d/99-exclude-cruft       \
+  && echo "path-exclude=/usr/share/man/*" >> /etc/dpkg/dpkg.cfg.d/99-exclude-cruft      \
+  && echo "#!/bin/sh" > /usr/sbin/policy-rc.d                                           \
+  && echo "exit 101" >> /usr/sbin/policy-rc.d                                           \
+  && chmod +x /usr/sbin/policy-rc.d
+
+RUN apt-get update                                                                     \
+  && apt-get --no-install-recommends -y install autoconf automake gcc g++ libtool-bin  \
+    pkg-config gettext ccache make scons bison flex sudo git wget bzip2 xz-utils       \
+    libclc-dev libelf-dev libexpat1-dev libffi-dev libomxil-bellagio-dev               \
+    libpciaccess-dev libx11-xcb-dev libxdamage-dev libxml2-dev libxrender-dev          \
+    libxvmc-dev libunwind-dev zlib1g-dev python-pip python-setuptools python-wheel     \
+    python3-pip python3-setuptools python3-wheel                                       \
+  && rm -fr /var/lib/apt/lists/*
+
+RUN pip install mako pip
+
+RUN pip3 install mako meson ninja
+
+RUN echo "/usr/local/lib/x86_64-linux-gnu" >> /etc/ld.so.conf.d/x86_64-linux-gnu.conf
+
+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://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/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://dri.freedesktop.org/libdrm/libdrm-2.4.93.tar.bz2               \
+  && tar -jxvf libdrm-2.4.93.tar.bz2                                            \
+  && rm libdrm-2.4.93.tar.bz2                                                   \
+  && cd libdrm-2.4.93                                                           \
+  && meson _build -Dfreedreno=true -Dtegra=true -Dvc4=true -Detnaviv=true       \
+  && ninja -C _build                                                            \
+  && sudo ninja -C _build install                                               \
+  && sudo ldconfig                                                              \
+  && sudo rm -fr ../libdrm-2.4.93
+
+RUN wget https://people.freedesktop.org/~aplattner/vdpau/libvdpau-1.1.tar.bz2           \
+  && tar -jxvf libvdpau-1.1.tar.bz2                                                     \
+  && rm libvdpau-1.1.tar.bz2                                                            \
+  && cd libvdpau-1.1                                                                    \
+  && ./configure                                                                        \
+  && make                                                                               \
+  && sudo make install                                                                  \
+  && sudo ldconfig                                                                      \
+  && sudo rm -fr ../libvdpau-1.1
+
+RUN wget https://www.freedesktop.org/software/vaapi/releases/libva/libva-1.7.0.tar.bz2  \
+  && tar -jxvf libva-1.7.0.tar.bz2                                                      \
+  && rm libva-1.7.0.tar.bz2                                                             \
+  && cd libva-1.7.0                                                                     \
+  && ./configure                                                                        \
+  && make                                                                               \
+  && sudo make install                                                                  \
+  && sudo ldconfig                                                                      \
+  && sudo rm -fr ../libva-1.7.0
+
+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..23add521fc7
--- /dev/null
+++ b/gitlab-ci/Rockerfile.mesa
@@ -0,0 +1,132 @@
+#
+# 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" ]
+
+{{ 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-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