gitlab-ci: Add ppc64el and s390x cross-build jobs
[mesa.git] / .gitlab-ci / container / x86_build.sh
index 55aa247492dd0506ba5a65cf458a5c3bc1a0b593..141c198eac8cf53d8431e4cc177f59eb2c84fc1d 100644 (file)
@@ -5,7 +5,7 @@ set -o xtrace
 
 export DEBIAN_FRONTEND=noninteractive
 
-CROSS_ARCHITECTURES="i386"
+CROSS_ARCHITECTURES="i386 ppc64el s390x"
 for arch in $CROSS_ARCHITECTURES; do
     dpkg --add-architecture $arch
 done
@@ -39,6 +39,7 @@ apt-get install -y --no-remove \
       automake \
       autotools-dev \
       bison \
+      ccache \
       clang-9 \
       cmake \
       flex \
@@ -67,19 +68,19 @@ apt-get install -y --no-remove \
       libx11-xcb-dev \
       libxdamage-dev \
       libxext-dev \
+      libxml2-utils \
       libxrandr-dev \
       libxrender-dev \
       libxshmfence-dev \
       libxvmc-dev \
       libxxf86vm-dev \
       llvm-6.0-dev \
-      llvm-7-dev \
-      llvm-8-dev \
       llvm-9-dev \
       meson \
       pkg-config \
       python-mako \
       python3-mako \
+      qemu-user \
       scons \
       x11proto-dri2-dev \
       x11proto-gl-dev \
@@ -94,8 +95,32 @@ for arch in $CROSS_ARCHITECTURES; do
             libdrm-dev:${arch} \
             libelf-dev:${arch} \
             libexpat1-dev:${arch}
+
+    if [ "$arch" = "s390x" ]; then
+        LLVM_VERSION=7
+    else
+        LLVM_VERSION=8
+    fi
+
+    if [ "$arch" != "i386" ]; then
+        mkdir /var/cache/apt/archives/${arch}
+        apt-get install -y --no-remove \
+                libffi-dev:${arch} \
+                libllvm${LLVM_VERSION}:${arch} \
+                libstdc++6:${arch} \
+                libtinfo-dev:${arch} \
+
+        # Download llvm-* packages, but don't install them yet, since they can
+        # only be installed for one architecture at a time
+        apt-get install -o Dir::Cache::archives=/var/cache/apt/archives/$arch --download-only -y --no-remove \
+            llvm-${LLVM_VERSION}-dev:${arch}
+    fi
 done
 
+apt-get install -y --no-remove \
+      llvm-7-dev \
+      llvm-8-dev \
+
 # for 64bit windows cross-builds
 apt-get install -y --no-remove \
     libz-mingw-w64-dev \
@@ -135,17 +160,17 @@ export  WAYLAND_PROTOCOLS_VERSION=wayland-protocols-1.12
 
 wget $XORG_RELEASES/util/$XORGMACROS_VERSION.tar.bz2
 tar -xvf $XORGMACROS_VERSION.tar.bz2 && rm $XORGMACROS_VERSION.tar.bz2
-cd $XORGMACROS_VERSION; ./configure; make install; cd ..
+cd $XORGMACROS_VERSION; ./configure; make -j4 install; cd ..
 rm -rf $XORGMACROS_VERSION
 
 wget $XCB_RELEASES/$XCBPROTO_VERSION.tar.bz2
 tar -xvf $XCBPROTO_VERSION.tar.bz2 && rm $XCBPROTO_VERSION.tar.bz2
-cd $XCBPROTO_VERSION; ./configure; make install; cd ..
+cd $XCBPROTO_VERSION; ./configure; make -j4 install; cd ..
 rm -rf $XCBPROTO_VERSION
 
 wget $XCB_RELEASES/$LIBXCB_VERSION.tar.bz2
 tar -xvf $LIBXCB_VERSION.tar.bz2 && rm $LIBXCB_VERSION.tar.bz2
-cd $LIBXCB_VERSION; ./configure; make install; cd ..
+cd $LIBXCB_VERSION; ./configure; make -j4 install; cd ..
 rm -rf $LIBXCB_VERSION
 
 wget https://dri.freedesktop.org/libdrm/$LIBDRM_VERSION.tar.bz2
@@ -155,12 +180,12 @@ rm -rf $LIBDRM_VERSION
 
 wget $WAYLAND_RELEASES/$LIBWAYLAND_VERSION.tar.xz
 tar -xvf $LIBWAYLAND_VERSION.tar.xz && rm $LIBWAYLAND_VERSION.tar.xz
-cd $LIBWAYLAND_VERSION; ./configure --enable-libraries --without-host-scanner --disable-documentation --disable-dtd-validation; make install; cd ..
+cd $LIBWAYLAND_VERSION; ./configure --enable-libraries --without-host-scanner --disable-documentation --disable-dtd-validation; make -j4 install; cd ..
 rm -rf $LIBWAYLAND_VERSION
 
 wget $WAYLAND_RELEASES/$WAYLAND_PROTOCOLS_VERSION.tar.xz
 tar -xvf $WAYLAND_PROTOCOLS_VERSION.tar.xz && rm $WAYLAND_PROTOCOLS_VERSION.tar.xz
-cd $WAYLAND_PROTOCOLS_VERSION; ./configure; make install; cd ..
+cd $WAYLAND_PROTOCOLS_VERSION; ./configure; make -j4 install; cd ..
 rm -rf $WAYLAND_PROTOCOLS_VERSION
 
 
@@ -170,7 +195,7 @@ rm -rf $WAYLAND_PROTOCOLS_VERSION
 GLVND_VERSION=1.2.0
 wget https://gitlab.freedesktop.org/glvnd/libglvnd/-/archive/v$GLVND_VERSION/libglvnd-v$GLVND_VERSION.tar.gz
 tar -xvf libglvnd-v$GLVND_VERSION.tar.gz && rm libglvnd-v$GLVND_VERSION.tar.gz
-pushd libglvnd-v$GLVND_VERSION; ./autogen.sh; ./configure; make install; popd
+pushd libglvnd-v$GLVND_VERSION; ./autogen.sh; ./configure; make -j4 install; popd
 rm -rf libglvnd-v$GLVND_VERSION
 
 
@@ -178,15 +203,9 @@ pushd /usr/local
 git clone https://gitlab.freedesktop.org/mesa/shader-db.git --depth 1
 rm -rf shader-db/.git
 cd shader-db
-make
+make -j4
 popd
 
-# Use ccache to speed up builds
-apt-get install -y --no-remove ccache
-
-# We need xmllint to validate the XML files in Mesa
-apt-get install -y --no-remove libxml2-utils
-
 
 # Generate cross build files for Meson
 for arch in $CROSS_ARCHITECTURES; do
@@ -197,12 +216,17 @@ for arch in $CROSS_ARCHITECTURES; do
   if [ "$arch" = "i386" ]; then
     # Work around a bug in debcrossgen that should be fixed in the next release
     sed -i "s|cpu_family = 'i686'|cpu_family = 'x86'|g" "$cross_file"
-    # Don't need wrapper for i386 executables
-    sed -i -e '/\[properties\]/a\' -e "needs_exe_wrapper = False" "$cross_file"
   fi
+
+  # Rely on qemu-user being configured in binfmt_misc on the host
+  sed -i -e '/\[properties\]/a\' -e "needs_exe_wrapper = False" "$cross_file"
 done
 
 
+# Remove ccache directory, useless for the build jobs
+rm -rf $(ccache --get-config=cache_dir)
+
+
 ############### Uninstall the build software
 
 apt-get purge -y \