#!/bin/bash set -e set -o xtrace ############### Install packages for building dpkg --add-architecture ${DEBIAN_ARCH} echo 'deb-src https://deb.debian.org/debian testing main' > /etc/apt/sources.list.d/deb-src.list apt-get update apt-get -y install ca-certificates apt-get -y install --no-install-recommends \ crossbuild-essential-${DEBIAN_ARCH} \ meson \ g++ \ git \ ccache \ pkg-config \ python3-mako \ python-numpy \ python-six \ python-mako \ python3-pip \ python3-setuptools \ python3-six \ python3-wheel \ python3-jinja2 \ bison \ flex \ gettext \ cmake \ bc \ libssl-dev \ lqa \ csvkit \ curl \ unzip \ wget \ debootstrap \ procps \ qemu-user-static \ cpio \ clang-8 \ llvm-8 \ libclang-8-dev \ llvm-8-dev \ gdc-9 \ lld-8 \ nasm \ libegl1-mesa-dev \ \ libdrm-dev:${DEBIAN_ARCH} \ libx11-dev:${DEBIAN_ARCH} \ libxxf86vm-dev:${DEBIAN_ARCH} \ libexpat1-dev:${DEBIAN_ARCH} \ libsensors-dev:${DEBIAN_ARCH} \ libxfixes-dev:${DEBIAN_ARCH} \ libxdamage-dev:${DEBIAN_ARCH} \ libxext-dev:${DEBIAN_ARCH} \ x11proto-dev:${DEBIAN_ARCH} \ libx11-xcb-dev:${DEBIAN_ARCH} \ libxcb-dri2-0-dev:${DEBIAN_ARCH} \ libxcb-glx0-dev:${DEBIAN_ARCH} \ libxcb-xfixes0-dev:${DEBIAN_ARCH} \ libxcb-dri3-dev:${DEBIAN_ARCH} \ libxcb-present-dev:${DEBIAN_ARCH} \ libxcb-randr0-dev:${DEBIAN_ARCH} \ libxcb-sync-dev:${DEBIAN_ARCH} \ libxrandr-dev:${DEBIAN_ARCH} \ libxshmfence-dev:${DEBIAN_ARCH} \ libelf-dev:${DEBIAN_ARCH} \ zlib1g-dev:${DEBIAN_ARCH} \ libglvnd-core-dev:${DEBIAN_ARCH} \ libgles2-mesa-dev:${DEBIAN_ARCH} \ libegl1-mesa-dev:${DEBIAN_ARCH} \ libpng-dev:${DEBIAN_ARCH} ############### Install lavacli (remove after it's back into Debian testing) mkdir -p lavacli wget -qO- https://git.lavasoftware.org/lava/lavacli/-/archive/v0.9.8/lavacli-v0.9.8.tar.gz | tar -xz --strip-components=1 -C lavacli pushd lavacli python3 ./setup.py install popd ############### Cross-build dEQP mkdir -p /artifacts/rootfs/deqp git config --global user.email "mesa@example.com" git config --global user.name "Mesa CI" # XXX: Use --depth 1 once we can drop the cherry-picks. git clone \ https://github.com/KhronosGroup/VK-GL-CTS.git \ -b opengl-es-cts-3.2.5.1 \ /VK-GL-CTS cd /VK-GL-CTS # Fix surfaceless build git cherry-pick -x 22f41e5e321c6dcd8569c4dad91bce89f06b3670 git cherry-pick -x 1daa8dff73161ea60ead965bd6c9f2a0a2165648 # surfaceless links against libkms and such despite not using it. sed -i '/gbm/d' targets/surfaceless/surfaceless.cmake sed -i '/libkms/d' targets/surfaceless/surfaceless.cmake sed -i '/libgbm/d' targets/surfaceless/surfaceless.cmake python3 external/fetch_sources.py cd /artifacts/rootfs/deqp cmake -G Ninja \ -DDEQP_TARGET=surfaceless \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_COMPILER=${GCC_ARCH}-gcc \ -DCMAKE_CXX_COMPILER=${GCC_ARCH}-g++ \ /VK-GL-CTS ninja rm -rf /artifacts/rootfs/deqp/external rm -rf /artifacts/rootfs/deqp/modules/gles31 rm -rf /artifacts/rootfs/deqp/modules/internal rm -rf /artifacts/rootfs/deqp/executor rm -rf /artifacts/rootfs/deqp/execserver rm -rf /artifacts/rootfs/deqp/modules/egl rm -rf /artifacts/rootfs/deqp/framework find . -name CMakeFiles | xargs rm -rf find . -name lib\*.a | xargs rm -rf du -sh * rm -rf /VK-GL-CTS-opengl-es-cts-3.2.5.0 ############### Cross-build Volt dEQP runner mkdir -p /battery cd /battery wget https://github.com/VoltLang/Battery/releases/download/v0.1.23/battery-0.1.23-x86_64-linux.tar.gz tar xzvf battery-0.1.23-x86_64-linux.tar.gz rm battery-0.1.23-x86_64-linux.tar.gz mv battery /usr/local/bin rm -rf /battery mkdir -p /volt cd /volt mkdir -p Watt Volta dEQP wget -qO- https://github.com/VoltLang/Watt/archive/v0.1.3.tar.gz | tar -xz --strip-components=1 -C ./Watt wget -qO- https://github.com/VoltLang/Volta/archive/v0.1.3.tar.gz | tar -xz --strip-components=1 -C ./Volta wget -qO- https://github.com/Wallbraker/dEQP/archive/v0.1.4.tar.gz | tar -xz --strip-components=1 -C ./dEQP battery config --release --lto Volta Watt battery build battery config --arch ${VOLT_ARCH} --cmd-volta Volta/volta Volta/rt Watt dEQP battery build rm /usr/local/bin/battery cp dEQP/deqp /artifacts/rootfs/deqp/deqp-volt rm -rf /volt ############### Remove LLVM now, so the container image is smaller apt-get -y remove \*llvm\* ############### Cross-build kernel KERNEL_URL="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/snapshot/linux-5.3-rc8.tar.gz" export ARCH=${KERNEL_ARCH} export CROSS_COMPILE="${GCC_ARCH}-" mkdir -p /kernel wget -qO- ${KERNEL_URL} | tar -xz --strip-components=1 -C /kernel cd /kernel ./scripts/kconfig/merge_config.sh ${DEFCONFIG} /tmp/clone/.gitlab-ci/${KERNEL_ARCH}.config make -j12 ${KERNEL_IMAGE_NAME} dtbs cp arch/${KERNEL_ARCH}/boot/${KERNEL_IMAGE_NAME} /artifacts/. cp ${DEVICE_TREES} /artifacts/. rm -rf /kernel ############### Create rootfs cp /tmp/clone/.gitlab-ci/create-rootfs.sh /artifacts/rootfs/. mkdir -p /artifacts/rootfs/bin cp /usr/bin/qemu-aarch64-static /artifacts/rootfs/bin cp /usr/bin/qemu-arm-static /artifacts/rootfs/bin set +e debootstrap --variant=minbase --arch=${DEBIAN_ARCH} testing /artifacts/rootfs/ http://deb.debian.org/debian cat /artifacts/rootfs/debootstrap/debootstrap.log set -e chroot /artifacts/rootfs sh /create-rootfs.sh rm /artifacts/rootfs/bin/qemu-arm-static rm /artifacts/rootfs/bin/qemu-aarch64-static rm /artifacts/rootfs/create-rootfs.sh