17ec681f3Smrg#!/bin/bash
27ec681f3Smrg
37ec681f3Smrgset -e
47ec681f3Smrgset -o xtrace
57ec681f3Smrg
67ec681f3Smrgexport DEBIAN_FRONTEND=noninteractive
77ec681f3Smrg
87ec681f3Smrgcheck_minio()
97ec681f3Smrg{
107ec681f3Smrg    MINIO_PATH="${MINIO_HOST}/mesa-lava/$1/${DISTRIBUTION_TAG}/${DEBIAN_ARCH}"
117ec681f3Smrg    if wget -q --method=HEAD "https://${MINIO_PATH}/done"; then
127ec681f3Smrg        exit
137ec681f3Smrg    fi
147ec681f3Smrg}
157ec681f3Smrg
167ec681f3Smrg# If remote files are up-to-date, skip rebuilding them
177ec681f3Smrgcheck_minio "${FDO_UPSTREAM_REPO}"
187ec681f3Smrgcheck_minio "${CI_PROJECT_PATH}"
197ec681f3Smrg
207ec681f3Smrg. .gitlab-ci/container/container_pre_build.sh
217ec681f3Smrg
227ec681f3Smrg# Install rust, which we'll be using for deqp-runner.  It will be cleaned up at the end.
237ec681f3Smrg. .gitlab-ci/container/build-rust.sh
247ec681f3Smrg
257ec681f3Smrgif [[ "$DEBIAN_ARCH" = "arm64" ]]; then
267ec681f3Smrg    GCC_ARCH="aarch64-linux-gnu"
277ec681f3Smrg    KERNEL_ARCH="arm64"
287ec681f3Smrg    DEFCONFIG="arch/arm64/configs/defconfig"
297ec681f3Smrg    DEVICE_TREES="arch/arm64/boot/dts/rockchip/rk3399-gru-kevin.dtb"
307ec681f3Smrg    DEVICE_TREES+=" arch/arm64/boot/dts/amlogic/meson-gxl-s805x-libretech-ac.dtb"
317ec681f3Smrg    DEVICE_TREES+=" arch/arm64/boot/dts/allwinner/sun50i-h6-pine-h64.dtb"
327ec681f3Smrg    DEVICE_TREES+=" arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dtb"
337ec681f3Smrg    DEVICE_TREES+=" arch/arm64/boot/dts/qcom/apq8016-sbc.dtb"
347ec681f3Smrg    DEVICE_TREES+=" arch/arm64/boot/dts/qcom/apq8096-db820c.dtb"
357ec681f3Smrg    DEVICE_TREES+=" arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dtb"
367ec681f3Smrg    DEVICE_TREES+=" arch/arm64/boot/dts/mediatek/mt8183-kukui-jacuzzi-juniper-sku16.dtb"
377ec681f3Smrg    DEVICE_TREES+=" arch/arm64/boot/dts/qcom/sc7180-trogdor-lazor-limozeen-nots.dtb"
387ec681f3Smrg    KERNEL_IMAGE_NAME="Image"
397ec681f3Smrgelif [[ "$DEBIAN_ARCH" = "armhf" ]]; then
407ec681f3Smrg    GCC_ARCH="arm-linux-gnueabihf"
417ec681f3Smrg    KERNEL_ARCH="arm"
427ec681f3Smrg    DEFCONFIG="arch/arm/configs/multi_v7_defconfig"
437ec681f3Smrg    DEVICE_TREES="arch/arm/boot/dts/rk3288-veyron-jaq.dtb"
447ec681f3Smrg    DEVICE_TREES+=" arch/arm/boot/dts/sun8i-h3-libretech-all-h3-cc.dtb"
457ec681f3Smrg    DEVICE_TREES+=" arch/arm/boot/dts/imx6q-cubox-i.dtb"
467ec681f3Smrg    KERNEL_IMAGE_NAME="zImage"
477ec681f3Smrg    . .gitlab-ci/container/create-cross-file.sh armhf
487ec681f3Smrgelse
497ec681f3Smrg    GCC_ARCH="x86_64-linux-gnu"
507ec681f3Smrg    KERNEL_ARCH="x86_64"
517ec681f3Smrg    DEFCONFIG="arch/x86/configs/x86_64_defconfig"
527ec681f3Smrg    DEVICE_TREES=""
537ec681f3Smrg    KERNEL_IMAGE_NAME="bzImage"
547ec681f3Smrg    ARCH_PACKAGES="libva-dev"
557ec681f3Smrgfi
567ec681f3Smrg
577ec681f3Smrg# Determine if we're in a cross build.
587ec681f3Smrgif [[ -e /cross_file-$DEBIAN_ARCH.txt ]]; then
597ec681f3Smrg    EXTRA_MESON_ARGS="--cross-file /cross_file-$DEBIAN_ARCH.txt"
607ec681f3Smrg    EXTRA_CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=/toolchain-$DEBIAN_ARCH.cmake"
617ec681f3Smrg
627ec681f3Smrg    if [ $DEBIAN_ARCH = arm64 ]; then
637ec681f3Smrg        RUST_TARGET="aarch64-unknown-linux-gnu"
647ec681f3Smrg    elif [ $DEBIAN_ARCH = armhf ]; then
657ec681f3Smrg        RUST_TARGET="armv7-unknown-linux-gnueabihf"
667ec681f3Smrg    fi
677ec681f3Smrg    rustup target add $RUST_TARGET
687ec681f3Smrg    export EXTRA_CARGO_ARGS="--target $RUST_TARGET"
697ec681f3Smrg
707ec681f3Smrg    export ARCH=${KERNEL_ARCH}
717ec681f3Smrg    export CROSS_COMPILE="${GCC_ARCH}-"
727ec681f3Smrgfi
737ec681f3Smrg
747ec681f3Smrgapt-get update
757ec681f3Smrgapt-get install -y --no-remove \
767ec681f3Smrg                   ${ARCH_PACKAGES} \
777ec681f3Smrg                   automake \
787ec681f3Smrg                   bc \
797ec681f3Smrg                   cmake \
807ec681f3Smrg                   debootstrap \
817ec681f3Smrg                   git \
827ec681f3Smrg                   glslang-tools \
837ec681f3Smrg                   libdrm-dev \
847ec681f3Smrg                   libegl1-mesa-dev \
857ec681f3Smrg                   libgbm-dev \
867ec681f3Smrg                   libgles2-mesa-dev \
877ec681f3Smrg                   libpng-dev \
887ec681f3Smrg                   libssl-dev \
897ec681f3Smrg                   libudev-dev \
907ec681f3Smrg                   libvulkan-dev \
917ec681f3Smrg                   libwaffle-dev \
927ec681f3Smrg                   libwayland-dev \
937ec681f3Smrg                   libx11-xcb-dev \
947ec681f3Smrg                   libxcb-dri2-0-dev \
957ec681f3Smrg                   libxkbcommon-dev \
967ec681f3Smrg                   patch \
977ec681f3Smrg                   python3-distutils \
987ec681f3Smrg                   python3-mako \
997ec681f3Smrg                   python3-numpy \
1007ec681f3Smrg                   python3-serial \
1017ec681f3Smrg                   wget
1027ec681f3Smrg
1037ec681f3Smrg
1047ec681f3Smrgif [[ "$DEBIAN_ARCH" = "armhf" ]]; then
1057ec681f3Smrg    apt-get install -y --no-remove \
1067ec681f3Smrg                       libegl1-mesa-dev:armhf \
1077ec681f3Smrg                       libelf-dev:armhf \
1087ec681f3Smrg                       libgbm-dev:armhf \
1097ec681f3Smrg                       libgles2-mesa-dev:armhf \
1107ec681f3Smrg                       libpng-dev:armhf \
1117ec681f3Smrg                       libudev-dev:armhf \
1127ec681f3Smrg                       libvulkan-dev:armhf \
1137ec681f3Smrg                       libwaffle-dev:armhf \
1147ec681f3Smrg                       libwayland-dev:armhf \
1157ec681f3Smrg                       libx11-xcb-dev:armhf \
1167ec681f3Smrg                       libxkbcommon-dev:armhf
1177ec681f3Smrgfi
1187ec681f3Smrg
1197ec681f3Smrg
1207ec681f3Smrg############### Building
1217ec681f3SmrgSTRIP_CMD="${GCC_ARCH}-strip"
1227ec681f3Smrgmkdir -p /lava-files/rootfs-${DEBIAN_ARCH}
1237ec681f3Smrg
1247ec681f3Smrg
1257ec681f3Smrg############### Build apitrace
1267ec681f3Smrg. .gitlab-ci/container/build-apitrace.sh
1277ec681f3Smrgmkdir -p /lava-files/rootfs-${DEBIAN_ARCH}/apitrace
1287ec681f3Smrgmv /apitrace/build /lava-files/rootfs-${DEBIAN_ARCH}/apitrace
1297ec681f3Smrgrm -rf /apitrace
1307ec681f3Smrg
1317ec681f3Smrg
1327ec681f3Smrg############### Build dEQP runner
1337ec681f3Smrg. .gitlab-ci/container/build-deqp-runner.sh
1347ec681f3Smrgmkdir -p /lava-files/rootfs-${DEBIAN_ARCH}/usr/bin
1357ec681f3Smrgmv /usr/local/bin/*-runner /lava-files/rootfs-${DEBIAN_ARCH}/usr/bin/.
1367ec681f3Smrg
1377ec681f3Smrg
1387ec681f3Smrg############### Build dEQP
1397ec681f3SmrgDEQP_TARGET=surfaceless . .gitlab-ci/container/build-deqp.sh
1407ec681f3Smrg
1417ec681f3Smrgmv /deqp /lava-files/rootfs-${DEBIAN_ARCH}/.
1427ec681f3Smrg
1437ec681f3Smrg
1447ec681f3Smrg############### Build piglit
1457ec681f3SmrgPIGLIT_OPTS="-DPIGLIT_BUILD_DMA_BUF_TESTS=ON" . .gitlab-ci/container/build-piglit.sh
1467ec681f3Smrgmv /piglit /lava-files/rootfs-${DEBIAN_ARCH}/.
1477ec681f3Smrg
1487ec681f3Smrg############### Build libva tests
1497ec681f3Smrgif [[ "$DEBIAN_ARCH" = "amd64" ]]; then
1507ec681f3Smrg    . .gitlab-ci/container/build-va-tools.sh
1517ec681f3Smrg    mv /va/bin/* /lava-files/rootfs-${DEBIAN_ARCH}/usr/bin/
1527ec681f3Smrgfi
1537ec681f3Smrg
1547ec681f3Smrg############### Build libdrm
1557ec681f3SmrgEXTRA_MESON_ARGS+=" -D prefix=/libdrm"
1567ec681f3Smrg. .gitlab-ci/container/build-libdrm.sh
1577ec681f3Smrg
1587ec681f3Smrg############### Build kernel
1597ec681f3Smrg. .gitlab-ci/container/build-kernel.sh
1607ec681f3Smrg
1617ec681f3Smrg############### Delete rust, since the tests won't be compiling anything.
1627ec681f3Smrgrm -rf /root/.cargo
1637ec681f3Smrg
1647ec681f3Smrg############### Create rootfs
1657ec681f3Smrgset +e
1667ec681f3Smrgif ! debootstrap \
1677ec681f3Smrg     --variant=minbase \
1687ec681f3Smrg     --arch=${DEBIAN_ARCH} \
1697ec681f3Smrg     --components main,contrib,non-free \
1707ec681f3Smrg     bullseye \
1717ec681f3Smrg     /lava-files/rootfs-${DEBIAN_ARCH}/ \
1727ec681f3Smrg     http://deb.debian.org/debian; then
1737ec681f3Smrg    cat /lava-files/rootfs-${DEBIAN_ARCH}/debootstrap/debootstrap.log
1747ec681f3Smrg    exit 1
1757ec681f3Smrgfi
1767ec681f3Smrgset -e
1777ec681f3Smrg
1787ec681f3Smrgcp .gitlab-ci/container/create-rootfs.sh /lava-files/rootfs-${DEBIAN_ARCH}/.
1797ec681f3Smrgchroot /lava-files/rootfs-${DEBIAN_ARCH} sh /create-rootfs.sh
1807ec681f3Smrgrm /lava-files/rootfs-${DEBIAN_ARCH}/create-rootfs.sh
1817ec681f3Smrg
1827ec681f3Smrg
1837ec681f3Smrg############### Install the built libdrm
1847ec681f3Smrg# Dependencies pulled during the creation of the rootfs may overwrite
1857ec681f3Smrg# the built libdrm. Hence, we add it after the rootfs has been already
1867ec681f3Smrg# created.
1877ec681f3Smrgmkdir -p /lava-files/rootfs-${DEBIAN_ARCH}/usr/lib/$GCC_ARCH
1887ec681f3Smrgfind /libdrm/ -name lib\*\.so\* | xargs cp -t /lava-files/rootfs-${DEBIAN_ARCH}/usr/lib/$GCC_ARCH/.
1897ec681f3Smrgmkdir -p /lava-files/rootfs-${DEBIAN_ARCH}/libdrm/
1907ec681f3Smrgcp -Rp /libdrm/share /lava-files/rootfs-${DEBIAN_ARCH}/libdrm/share
1917ec681f3Smrgrm -rf /libdrm
1927ec681f3Smrg
1937ec681f3Smrg
1947ec681f3Smrgif [ ${DEBIAN_ARCH} = arm64 ]; then
1957ec681f3Smrg    # Make a gzipped copy of the Image for db410c.
1967ec681f3Smrg    gzip -k /lava-files/Image
1977ec681f3Smrg    KERNEL_IMAGE_NAME+=" Image.gz"
1987ec681f3Smrgfi
1997ec681f3Smrg
2007ec681f3Smrgdu -ah /lava-files/rootfs-${DEBIAN_ARCH} | sort -h | tail -100
2017ec681f3Smrgpushd /lava-files/rootfs-${DEBIAN_ARCH}
2027ec681f3Smrg  tar czf /lava-files/lava-rootfs.tgz .
2037ec681f3Smrgpopd
2047ec681f3Smrg
2057ec681f3Smrg. .gitlab-ci/container/container_post_build.sh
2067ec681f3Smrg
2077ec681f3Smrg############### Upload the files!
2087ec681f3Smrgci-fairy minio login $CI_JOB_JWT
2097ec681f3SmrgFILES_TO_UPLOAD="lava-rootfs.tgz \
2107ec681f3Smrg                 $KERNEL_IMAGE_NAME"
2117ec681f3Smrg
2127ec681f3Smrgif [[ -n $DEVICE_TREES ]]; then
2137ec681f3Smrg    FILES_TO_UPLOAD="$FILES_TO_UPLOAD $(basename -a $DEVICE_TREES)"
2147ec681f3Smrgfi
2157ec681f3Smrg
2167ec681f3Smrgfor f in $FILES_TO_UPLOAD; do
2177ec681f3Smrg    ci-fairy minio cp /lava-files/$f \
2187ec681f3Smrg             minio://${MINIO_PATH}/$f
2197ec681f3Smrgdone
2207ec681f3Smrg
2217ec681f3Smrgtouch /lava-files/done
2227ec681f3Smrgci-fairy minio cp /lava-files/done minio://${MINIO_PATH}/done
223