6 export DEBIAN_FRONTEND
=noninteractive
8 CROSS_ARCHITECTURES
="i386 ppc64el s390x"
9 for arch
in $CROSS_ARCHITECTURES; do
10 dpkg
--add-architecture $arch
19 # Upstream LLVM package repository
20 apt-key add .gitlab-ci
/container
/llvm-snapshot.gpg.key
21 echo "deb https://apt.llvm.org/buster/ llvm-toolchain-buster-9 main" >/etc
/apt
/sources.list.d
/llvm9.list
23 sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc
/apt
/sources.list
24 echo 'deb https://deb.debian.org/debian buster-backports main' >/etc
/apt
/sources.list.d
/backports.list
28 # Use newer packages from backports by default
29 cat >/etc
/apt
/preferences
<<EOF
31 Pin: release a=buster-backports
35 apt-get dist-upgrade
-y
37 apt-get
install -y --no-remove \
60 libomxil-bellagio-dev \
67 libvulkan-dev
:ppc64el \
93 # Cross-build Mesa deps
94 for arch
in $CROSS_ARCHITECTURES; do
95 apt-get
install -y --no-remove \
96 crossbuild-essential-
${arch} \
101 if [ "$arch" != "i386" ]; then
102 mkdir
/var
/cache
/apt
/archives
/${arch}
103 apt-get
install -y --no-remove \
107 libtinfo-dev
:${arch} \
109 # Download llvm-* packages, but don't install them yet, since they can
110 # only be installed for one architecture at a time
111 apt-get
install -o Dir
::Cache
::archives
=/var
/cache
/apt
/archives
/$arch --download-only -y --no-remove \
116 apt-get
install -y --no-remove \
119 # for 64bit windows cross-builds
120 apt-get
install -y --no-remove \
127 # Debian's pkg-config wrapers for mingw are broken, and there's no sign that
128 # they're going to be fixed, so we'll just have to fix it ourselves
129 # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=930492
130 cat >/usr
/local
/bin
/x86_64-w64-mingw32-pkg-config
<<EOF
133 PKG_CONFIG_LIBDIR=/usr/x86_64-w64-mingw32/lib/pkgconfig pkg-config \$@
135 chmod +x
/usr
/local
/bin
/x86_64-w64-mingw32-pkg-config
138 # Generate cross build files for Meson
139 for arch
in $CROSS_ARCHITECTURES; do
140 cross_file
="/cross_file-$arch.txt"
141 /usr
/share
/meson
/debcrossgen
--arch "$arch" -o "$cross_file"
142 # Explicitly set ccache path for cross compilers
143 sed -i "s|/usr/bin/\([^-]*\)-linux-gnu\([^-]*\)-g|/usr/lib/ccache/\\1-linux-gnu\\2-g|g" "$cross_file"
144 if [ "$arch" = "i386" ]; then
145 # Work around a bug in debcrossgen that should be fixed in the next release
146 sed -i "s|cpu_family = 'i686'|cpu_family = 'x86'|g" "$cross_file"
149 # Rely on qemu-user being configured in binfmt_misc on the host
150 sed -i -e '/\[properties\]/a\' -e "needs_exe_wrapper = False" "$cross_file"
154 # for the vulkan overlay layer
155 wget https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-linux-Release.zip
156 unzip glslang-master-linux-Release.zip bin/glslangValidator
157 install -m755 bin/glslangValidator /usr/local/bin/
158 rm bin/glslangValidator glslang-master-linux-Release.zip
161 # dependencies where we want a specific version
162 export XORG_RELEASES=https://xorg.freedesktop.org/releases/individual
163 export XCB_RELEASES=https://xcb.freedesktop.org/dist
164 export WAYLAND_RELEASES=https://wayland.freedesktop.org/releases
166 export XORGMACROS_VERSION=util-macros-1.19.0
167 export LIBDRM_VERSION=libdrm-2.4.100
168 export XCBPROTO_VERSION=xcb-proto-1.13
169 export LIBXCB_VERSION=libxcb-1.13
170 export LIBWAYLAND_VERSION=wayland-1.15.0
171 export WAYLAND_PROTOCOLS_VERSION=wayland-protocols-1.12
173 wget $XORG_RELEASES/util/$XORGMACROS_VERSION.tar.bz2
174 tar -xvf $XORGMACROS_VERSION.tar.bz2 && rm $XORGMACROS_VERSION.tar.bz2
175 cd $XORGMACROS_VERSION; ./configure; make -j4 install; cd ..
176 rm -rf $XORGMACROS_VERSION
178 wget $XCB_RELEASES/$XCBPROTO_VERSION.tar.bz2
179 tar -xvf $XCBPROTO_VERSION.tar.bz2 && rm $XCBPROTO_VERSION.tar.bz2
180 cd $XCBPROTO_VERSION; ./configure; make -j4 install; cd ..
181 rm -rf $XCBPROTO_VERSION
183 wget $XCB_RELEASES/$LIBXCB_VERSION.tar.bz2
184 tar -xvf $LIBXCB_VERSION.tar.bz2 && rm $LIBXCB_VERSION.tar.bz2
185 cd $LIBXCB_VERSION; ./configure; make -j4 install; cd ..
186 rm -rf $LIBXCB_VERSION
188 wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2
189 tar -xvf $LIBDRM_VERSION.tar.bz2 && rm $LIBDRM_VERSION.tar.bz2
191 meson build -D vc4=true -D freedreno=true -D etnaviv=true -D libdir=lib/x86_64-linux-gnu; ninja -j4 -C build install
192 rm -rf build; meson --cross-file=/cross_file-ppc64el.txt build -D libdir=lib/powerpc64le-linux-gnu; ninja -j4 -C build install
194 rm -rf $LIBDRM_VERSION
196 wget $WAYLAND_RELEASES/$LIBWAYLAND_VERSION.tar.xz
197 tar -xvf $LIBWAYLAND_VERSION.tar.xz && rm $LIBWAYLAND_VERSION.tar.xz
198 cd $LIBWAYLAND_VERSION; ./configure --enable-libraries --without-host-scanner --disable-documentation --disable-dtd-validation; make -j4 install; cd ..
199 rm -rf $LIBWAYLAND_VERSION
201 wget $WAYLAND_RELEASES/$WAYLAND_PROTOCOLS_VERSION.tar.xz
202 tar -xvf $WAYLAND_PROTOCOLS_VERSION.tar.xz && rm $WAYLAND_PROTOCOLS_VERSION.tar.xz
203 cd $WAYLAND_PROTOCOLS_VERSION; ./configure; make -j4 install; cd ..
204 rm -rf $WAYLAND_PROTOCOLS_VERSION
207 # The version of libglvnd-dev in debian is too old
208 # Check this page to see when this local compilation can be dropped in favour of the package:
209 # https://packages.debian.org/libglvnd-dev
211 wget https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v$GLVND_VERSION/libglvnd-v$GLVND_VERSION.tar.gz
212 tar -xvf libglvnd-v$GLVND_VERSION.tar.gz && rm libglvnd-v$GLVND_VERSION.tar.gz
213 pushd libglvnd-v$GLVND_VERSION; ./autogen.sh; ./configure; make -j4 install; popd
214 rm -rf libglvnd-v$GLVND_VERSION
218 git clone https://gitlab.freedesktop.org/mesa/shader-db.git --depth 1
219 rm -rf shader-db/.git
225 # Remove ccache directory, useless for the build jobs
226 rm -rf $(ccache --get-config=cache_dir)
229 ############### Uninstall the build software
243 apt-get autoremove -y --purge