gitlab-ci: Stop using packages from Debian testing
[mesa.git] / .gitlab-ci / container / x86_build.sh
1 #!/bin/bash
2
3 set -e
4 set -o xtrace
5
6 export DEBIAN_FRONTEND=noninteractive
7
8 CROSS_ARCHITECTURES="i386 ppc64el s390x"
9 for arch in $CROSS_ARCHITECTURES; do
10 dpkg --add-architecture $arch
11 done
12
13 apt-get install -y \
14 ca-certificates \
15 gnupg \
16 unzip \
17 wget
18
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
22
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
25
26 apt-get update
27
28 apt-get install -y --no-remove \
29 autoconf \
30 automake \
31 autotools-dev \
32 bison \
33 ccache \
34 clang-9 \
35 cmake \
36 flex \
37 g++ \
38 g++-mingw-w64-x86-64 \
39 gcc \
40 gettext \
41 git \
42 libclang-9-dev \
43 libclc-dev \
44 libdrm-dev:s390x \
45 libelf-dev \
46 libepoxy-dev \
47 libexpat1-dev \
48 libgbm-dev \
49 libgtk-3-dev \
50 libomxil-bellagio-dev \
51 libpciaccess-dev \
52 libpciaccess-dev:i386 \
53 libtool \
54 libunwind-dev \
55 libva-dev \
56 libvdpau-dev \
57 libvulkan-dev \
58 libvulkan-dev:ppc64el \
59 libx11-dev \
60 libx11-xcb-dev \
61 libxdamage-dev \
62 libxext-dev \
63 libxml2-utils \
64 libxrandr-dev \
65 libxrender-dev \
66 libxshmfence-dev \
67 libxvmc-dev \
68 libxxf86vm-dev \
69 libz-mingw-w64-dev \
70 llvm-9-dev \
71 pkg-config \
72 python-mako \
73 python3-mako \
74 python3-pil \
75 python3-requests \
76 qemu-user \
77 scons \
78 wine-development \
79 wine32-development \
80 wine64-development \
81 x11proto-dri2-dev \
82 x11proto-gl-dev \
83 x11proto-randr-dev \
84 xz-utils \
85 zlib1g-dev
86
87 apt-get install -y --no-remove -t buster-backports \
88 libclang-8-dev \
89 meson
90
91 # Cross-build Mesa deps
92 for arch in $CROSS_ARCHITECTURES; do
93 apt-get install -y --no-remove \
94 crossbuild-essential-${arch} \
95 libelf-dev:${arch} \
96 libexpat1-dev:${arch} \
97 libffi-dev:${arch} \
98 libstdc++6:${arch} \
99 libtinfo-dev:${arch}
100
101 apt-get install -y --no-remove -t buster-backports \
102 libllvm8:${arch}
103
104 mkdir /var/cache/apt/archives/${arch}
105 # Download llvm-* packages, but don't install them yet, since they can
106 # only be installed for one architecture at a time
107 apt-get install -o Dir::Cache::archives=/var/cache/apt/archives/$arch --download-only \
108 -y --no-remove -t buster-backports \
109 llvm-8-dev:${arch}
110 done
111
112 apt-get install -y --no-remove -t buster-backports \
113 llvm-8-dev \
114
115
116 . .gitlab-ci/container/container_pre_build.sh
117
118
119 # Debian's pkg-config wrapers for mingw are broken, and there's no sign that
120 # they're going to be fixed, so we'll just have to fix it ourselves
121 # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=930492
122 cat >/usr/local/bin/x86_64-w64-mingw32-pkg-config <<EOF
123 #!/bin/sh
124
125 PKG_CONFIG_LIBDIR=/usr/x86_64-w64-mingw32/lib/pkgconfig pkg-config \$@
126 EOF
127 chmod +x /usr/local/bin/x86_64-w64-mingw32-pkg-config
128
129
130 # Generate cross build files for Meson
131 for arch in $CROSS_ARCHITECTURES; do
132 . .gitlab-ci/create-cross-file.sh $arch
133 done
134
135
136 # for the vulkan overlay layer
137 wget https://github.com/KhronosGroup/glslang/releases/download/master-tot/glslang-master-linux-Release.zip
138 unzip glslang-master-linux-Release.zip bin/glslangValidator
139 install -m755 bin/glslangValidator /usr/local/bin/
140 rm bin/glslangValidator glslang-master-linux-Release.zip
141
142
143 # dependencies where we want a specific version
144 export XORG_RELEASES=https://xorg.freedesktop.org/releases/individual
145 export XCB_RELEASES=https://xcb.freedesktop.org/dist
146 export WAYLAND_RELEASES=https://wayland.freedesktop.org/releases
147
148 export XORGMACROS_VERSION=util-macros-1.19.0
149 export LIBDRM_VERSION=libdrm-2.4.100
150 export XCBPROTO_VERSION=xcb-proto-1.13
151 export LIBXCB_VERSION=libxcb-1.13
152 export LIBWAYLAND_VERSION=wayland-1.15.0
153 export WAYLAND_PROTOCOLS_VERSION=wayland-protocols-1.12
154
155 wget $XORG_RELEASES/util/$XORGMACROS_VERSION.tar.bz2
156 tar -xvf $XORGMACROS_VERSION.tar.bz2 && rm $XORGMACROS_VERSION.tar.bz2
157 cd $XORGMACROS_VERSION; ./configure; make install; cd ..
158 rm -rf $XORGMACROS_VERSION
159
160 wget $XCB_RELEASES/$XCBPROTO_VERSION.tar.bz2
161 tar -xvf $XCBPROTO_VERSION.tar.bz2 && rm $XCBPROTO_VERSION.tar.bz2
162 cd $XCBPROTO_VERSION; ./configure; make install; cd ..
163 rm -rf $XCBPROTO_VERSION
164
165 wget $XCB_RELEASES/$LIBXCB_VERSION.tar.bz2
166 tar -xvf $LIBXCB_VERSION.tar.bz2 && rm $LIBXCB_VERSION.tar.bz2
167 cd $LIBXCB_VERSION; ./configure; make install; cd ..
168 rm -rf $LIBXCB_VERSION
169
170 wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2
171 tar -xvf $LIBDRM_VERSION.tar.bz2 && rm $LIBDRM_VERSION.tar.bz2
172 cd $LIBDRM_VERSION
173 meson build -D vc4=true -D freedreno=true -D etnaviv=true -D libdir=lib/x86_64-linux-gnu; ninja -C build install
174 rm -rf build; meson --cross-file=/cross_file-ppc64el.txt build -D libdir=lib/powerpc64le-linux-gnu; ninja -C build install
175 rm -rf build; meson --cross-file=/cross_file-i386.txt build -D libdir=lib/i386-linux-gnu; ninja -C build install
176 cd ..
177 rm -rf $LIBDRM_VERSION
178
179 wget $WAYLAND_RELEASES/$LIBWAYLAND_VERSION.tar.xz
180 tar -xvf $LIBWAYLAND_VERSION.tar.xz && rm $LIBWAYLAND_VERSION.tar.xz
181 cd $LIBWAYLAND_VERSION; ./configure --enable-libraries --without-host-scanner --disable-documentation --disable-dtd-validation; make install; cd ..
182 rm -rf $LIBWAYLAND_VERSION
183
184 wget $WAYLAND_RELEASES/$WAYLAND_PROTOCOLS_VERSION.tar.xz
185 tar -xvf $WAYLAND_PROTOCOLS_VERSION.tar.xz && rm $WAYLAND_PROTOCOLS_VERSION.tar.xz
186 cd $WAYLAND_PROTOCOLS_VERSION; ./configure; make install; cd ..
187 rm -rf $WAYLAND_PROTOCOLS_VERSION
188
189
190 # The version of libglvnd-dev in debian is too old
191 # Check this page to see when this local compilation can be dropped in favour of the package:
192 # https://packages.debian.org/libglvnd-dev
193 GLVND_VERSION=1.2.0
194 wget https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v$GLVND_VERSION/libglvnd-v$GLVND_VERSION.tar.gz
195 tar -xvf libglvnd-v$GLVND_VERSION.tar.gz && rm libglvnd-v$GLVND_VERSION.tar.gz
196 pushd libglvnd-v$GLVND_VERSION; ./autogen.sh; ./configure; make install; popd
197 rm -rf libglvnd-v$GLVND_VERSION
198
199
200 pushd /usr/local
201 git clone https://gitlab.freedesktop.org/mesa/shader-db.git --depth 1
202 rm -rf shader-db/.git
203 cd shader-db
204 make
205 popd
206
207
208 ############### Uninstall the build software
209
210 apt-get purge -y \
211 autoconf \
212 automake \
213 autotools-dev \
214 cmake \
215 git \
216 gnupg \
217 libgbm-dev \
218 libtool \
219 unzip \
220 wget
221
222 . .gitlab-ci/container/container_post_build.sh