LAVA supports overlays in the deploy action, so there is no need to download them in lava_build.sh and bloat the rootfs file with it. Signed-off-by: Guilherme Gallo <guilherme.gallo@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34352>
429 lines
12 KiB
Bash
Executable File
429 lines
12 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# shellcheck disable=SC1091 # The relative paths in this file only become valid at runtime.
|
|
# shellcheck disable=SC2034 # Variables are used in scripts called from here
|
|
# shellcheck disable=SC2086 # we want word splitting
|
|
# shellcheck disable=SC2016 # non-expanded variables are intentional
|
|
# When changing this file, you need to bump the following
|
|
# .gitlab-ci/image-tags.yml tags:
|
|
# KERNEL_ROOTFS_TAG
|
|
# If you need to update the fluster vectors cache without updating the fluster revision,
|
|
# you can update the FLUSTER_VECTORS_VERSION tag in .gitlab-ci/image-tags.yml.
|
|
# When changing FLUSTER_REVISION, KERNEL_ROOTFS_TAG needs to be updated as well to rebuild
|
|
# the rootfs.
|
|
|
|
set -e
|
|
|
|
. .gitlab-ci/setup-test-env.sh
|
|
|
|
set -o xtrace
|
|
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
: "${LLVM_VERSION:?llvm version not set!}"
|
|
export FIRMWARE_FILES="${FIRMWARE_FILES}"
|
|
export SKIP_UPDATE_FLUSTER_VECTORS=0
|
|
|
|
check_minio()
|
|
{
|
|
S3_PATH="${S3_HOST}/${S3_KERNEL_BUCKET}/$1/${DISTRIBUTION_TAG}/${DEBIAN_ARCH}"
|
|
if curl -L --retry 4 -f --retry-delay 60 -s \
|
|
"https://${S3_PATH}/done"; then
|
|
echo "Remote files are up-to-date, skip rebuilding them."
|
|
exit
|
|
fi
|
|
}
|
|
|
|
check_fluster()
|
|
{
|
|
S3_PATH_FLUSTER="${S3_HOST}/${S3_KERNEL_BUCKET}/$1/${DATA_STORAGE_PATH}/fluster/${FLUSTER_VECTORS_VERSION}"
|
|
if curl -L --retry 4 -f --retry-delay 60 -s \
|
|
"https://${S3_PATH_FLUSTER}/done"; then
|
|
echo "Fluster vectors are up-to-date, skip downloading them."
|
|
export SKIP_UPDATE_FLUSTER_VECTORS=1
|
|
fi
|
|
}
|
|
|
|
check_minio "${FDO_UPSTREAM_REPO}"
|
|
check_minio "${CI_PROJECT_PATH}"
|
|
|
|
check_fluster "${FDO_UPSTREAM_REPO}"
|
|
check_fluster "${CI_PROJECT_PATH}"
|
|
|
|
. .gitlab-ci/container/container_pre_build.sh
|
|
|
|
# Install rust, which we'll be using for deqp-runner. It will be cleaned up at the end.
|
|
. .gitlab-ci/container/build-rust.sh
|
|
|
|
if [[ "$DEBIAN_ARCH" = "arm64" ]]; then
|
|
BUILD_CL="ON"
|
|
BUILD_VK="ON"
|
|
GCC_ARCH="aarch64-linux-gnu"
|
|
KERNEL_ARCH="arm64"
|
|
|
|
elif [[ "$DEBIAN_ARCH" = "armhf" ]]; then
|
|
BUILD_CL="OFF"
|
|
BUILD_VK="OFF"
|
|
GCC_ARCH="arm-linux-gnueabihf"
|
|
KERNEL_ARCH="arm"
|
|
. .gitlab-ci/container/create-cross-file.sh armhf
|
|
CONTAINER_ARCH_PACKAGES=(
|
|
libegl1-mesa-dev:armhf
|
|
libelf-dev:armhf
|
|
libgbm-dev:armhf
|
|
libgles2-mesa-dev:armhf
|
|
libpng-dev:armhf
|
|
libudev-dev:armhf
|
|
libvulkan-dev:armhf
|
|
libwaffle-dev:armhf
|
|
libwayland-dev:armhf
|
|
libx11-xcb-dev:armhf
|
|
libxkbcommon-dev:armhf
|
|
)
|
|
else
|
|
BUILD_CL="ON"
|
|
BUILD_VK="ON"
|
|
GCC_ARCH="x86_64-linux-gnu"
|
|
KERNEL_ARCH="x86_64"
|
|
CONTAINER_ARCH_PACKAGES=(
|
|
libasound2-dev libcap-dev libfdt-dev libva-dev p7zip wine
|
|
)
|
|
fi
|
|
|
|
# Determine if we're in a cross build.
|
|
if [[ -e /cross_file-$DEBIAN_ARCH.txt ]]; then
|
|
EXTRA_MESON_ARGS="--cross-file /cross_file-$DEBIAN_ARCH.txt"
|
|
EXTRA_CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=/toolchain-$DEBIAN_ARCH.cmake"
|
|
|
|
if [ $DEBIAN_ARCH = arm64 ]; then
|
|
RUST_TARGET="aarch64-unknown-linux-gnu"
|
|
elif [ $DEBIAN_ARCH = armhf ]; then
|
|
RUST_TARGET="armv7-unknown-linux-gnueabihf"
|
|
fi
|
|
rustup target add $RUST_TARGET
|
|
export EXTRA_CARGO_ARGS="--target $RUST_TARGET"
|
|
|
|
export ARCH=${KERNEL_ARCH}
|
|
export CROSS_COMPILE="${GCC_ARCH}-"
|
|
fi
|
|
|
|
# no need to remove these at end, image isn't saved at the end
|
|
CONTAINER_EPHEMERAL=(
|
|
arch-test
|
|
automake
|
|
bc
|
|
"clang-${LLVM_VERSION}"
|
|
cmake
|
|
curl
|
|
mmdebstrap
|
|
git
|
|
glslang-tools
|
|
jq
|
|
libdrm-dev
|
|
libegl1-mesa-dev
|
|
libxext-dev
|
|
libfontconfig-dev
|
|
libgbm-dev
|
|
libgl-dev
|
|
libgles2-mesa-dev
|
|
libglu1-mesa-dev
|
|
libglx-dev
|
|
libpng-dev
|
|
libssl-dev
|
|
libudev-dev
|
|
libvulkan-dev
|
|
libwaffle-dev
|
|
libwayland-dev
|
|
libx11-xcb-dev
|
|
libxcb-dri2-0-dev
|
|
libxkbcommon-dev
|
|
libwayland-dev
|
|
"lld-${LLVM_VERSION}"
|
|
ninja-build
|
|
openssh-server
|
|
patch
|
|
protobuf-compiler
|
|
python-is-python3
|
|
python3-distutils
|
|
python3-mako
|
|
python3-numpy
|
|
python3-serial
|
|
python3-venv
|
|
unzip
|
|
wayland-protocols
|
|
zstd
|
|
)
|
|
|
|
[ "$BUILD_CL" == "ON" ] && CONTAINER_EPHEMERAL+=(
|
|
ocl-icd-opencl-dev
|
|
)
|
|
|
|
|
|
echo "deb [trusted=yes] https://gitlab.freedesktop.org/gfx-ci/ci-deb-repo/-/raw/${PKG_REPO_REV}/ ${FDO_DISTRIBUTION_VERSION%-*} main" | tee /etc/apt/sources.list.d/gfx-ci_.list
|
|
|
|
. .gitlab-ci/container/debian/maybe-add-llvm-repo.sh
|
|
|
|
apt-get update
|
|
apt-get install -y --no-remove \
|
|
-o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' \
|
|
"${CONTAINER_EPHEMERAL[@]}" \
|
|
"${CONTAINER_ARCH_PACKAGES[@]}" \
|
|
${EXTRA_LOCAL_PACKAGES}
|
|
|
|
export ROOTFS=/lava-files/rootfs-${DEBIAN_ARCH}
|
|
mkdir -p "$ROOTFS"
|
|
|
|
# rootfs packages
|
|
PKG_BASE=(
|
|
tzdata mount
|
|
)
|
|
PKG_CI=(
|
|
firmware-realtek
|
|
bash ca-certificates curl
|
|
initramfs-tools jq netcat-openbsd dropbear openssh-server
|
|
libasan8
|
|
libubsan1
|
|
git
|
|
python3-dev python3-pip python3-setuptools python3-wheel
|
|
weston # Wayland
|
|
xinit xserver-xorg-core xwayland # X11
|
|
)
|
|
PKG_MESA_DEP=(
|
|
libdrm2 libsensors5 libexpat1 # common
|
|
libvulkan1 # vulkan
|
|
libx11-6 libx11-xcb1 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libxdamage1 libxext6 libxfixes3 libxkbcommon0 libxrender1 libxshmfence1 libxxf86vm1 # X11
|
|
)
|
|
PKG_DEP=(
|
|
libpng16-16
|
|
libva-wayland2
|
|
libwaffle-1-0
|
|
libpython3.11 python3 python3-lxml python3-mako python3-numpy python3-packaging python3-pil python3-renderdoc python3-requests python3-simplejson python3-yaml # Python
|
|
sntp
|
|
strace
|
|
waffle-utils
|
|
zstd
|
|
)
|
|
# arch dependent rootfs packages
|
|
[ "$DEBIAN_ARCH" = "arm64" ] && PKG_ARCH=(
|
|
libgl1 libglu1-mesa
|
|
firmware-linux-nonfree firmware-qcom-media
|
|
libfontconfig1
|
|
)
|
|
[ "$DEBIAN_ARCH" = "amd64" ] && PKG_ARCH=(
|
|
firmware-amd-graphics
|
|
firmware-misc-nonfree
|
|
gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-tools gstreamer1.0-vaapi libgstreamer1.0-0 # Fluster
|
|
libgl1 libglu1-mesa
|
|
inetutils-syslogd iptables libcap2
|
|
libfontconfig1
|
|
spirv-tools
|
|
libelf1 libfdt1 "libllvm${LLVM_VERSION}"
|
|
libva2 libva-drm2
|
|
socat
|
|
sysvinit-core
|
|
wine
|
|
)
|
|
[ "$DEBIAN_ARCH" = "armhf" ] && PKG_ARCH=(
|
|
firmware-misc-nonfree
|
|
)
|
|
|
|
[ "$BUILD_CL" == "ON" ] && PKG_ARCH+=(
|
|
clinfo
|
|
"libclang-cpp${LLVM_VERSION}"
|
|
"libclang-common-${LLVM_VERSION}-dev"
|
|
ocl-icd-libopencl1
|
|
)
|
|
[ "$BUILD_VK" == "ON" ] && PKG_ARCH+=(
|
|
libvulkan-dev
|
|
)
|
|
|
|
mmdebstrap \
|
|
--variant=apt \
|
|
--arch="${DEBIAN_ARCH}" \
|
|
--components main,contrib,non-free-firmware \
|
|
--customize-hook='.gitlab-ci/container/get-firmware-from-source.sh "$ROOTFS" "$FIRMWARE_FILES"' \
|
|
--include "${PKG_BASE[*]} ${PKG_CI[*]} ${PKG_DEP[*]} ${PKG_MESA_DEP[*]} ${PKG_ARCH[*]}" \
|
|
bookworm \
|
|
"$ROOTFS/" \
|
|
"http://deb.debian.org/debian" \
|
|
"deb [trusted=yes] https://gitlab.freedesktop.org/gfx-ci/ci-deb-repo/-/raw/${PKG_REPO_REV}/ ${FDO_DISTRIBUTION_VERSION%-*} main" \
|
|
"${LLVM_APT_REPO:-}"
|
|
|
|
############### Install mold
|
|
. .gitlab-ci/container/build-mold.sh
|
|
|
|
############### Building
|
|
STRIP_CMD="${GCC_ARCH}-strip"
|
|
mkdir -p $ROOTFS/usr/lib/$GCC_ARCH
|
|
|
|
############### Build libclc
|
|
|
|
if [ "$BUILD_CL" = "ON" ]; then
|
|
rm -rf /usr/lib/clc/*
|
|
. .gitlab-ci/container/build-libclc.sh
|
|
mkdir -p $ROOTFS/usr/{share,lib}/clc
|
|
mv /usr/share/clc/spirv*-mesa3d-.spv $ROOTFS/usr/share/clc/
|
|
ln -s /usr/share/clc/spirv64-mesa3d-.spv $ROOTFS/usr/lib/clc/
|
|
ln -s /usr/share/clc/spirv-mesa3d-.spv $ROOTFS/usr/lib/clc/
|
|
fi
|
|
|
|
############### Build Vulkan validation layer (for zink)
|
|
if [ "$DEBIAN_ARCH" = "amd64" ]; then
|
|
. .gitlab-ci/container/build-vulkan-validation.sh
|
|
mv /usr/lib/x86_64-linux-gnu/libVkLayer_khronos_validation.so $ROOTFS/usr/lib/x86_64-linux-gnu/
|
|
mkdir -p $ROOTFS/usr/share/vulkan/explicit_layer.d
|
|
mv /usr/share/vulkan/explicit_layer.d/* $ROOTFS/usr/share/vulkan/explicit_layer.d/
|
|
fi
|
|
|
|
############### Build apitrace
|
|
. .gitlab-ci/container/build-apitrace.sh
|
|
mkdir -p $ROOTFS/apitrace
|
|
mv /apitrace/build $ROOTFS/apitrace
|
|
rm -rf /apitrace
|
|
|
|
############### Build ANGLE
|
|
if [ "$DEBIAN_ARCH" != "armhf" ]; then
|
|
ANGLE_TARGET=linux \
|
|
. .gitlab-ci/container/build-angle.sh
|
|
mv /angle $ROOTFS/.
|
|
rm -rf /angle
|
|
fi
|
|
|
|
############### Build dEQP runner
|
|
. .gitlab-ci/container/build-deqp-runner.sh
|
|
mkdir -p $ROOTFS/usr/bin
|
|
mv /usr/local/bin/*-runner $ROOTFS/usr/bin/.
|
|
|
|
|
|
############### Build dEQP
|
|
|
|
DEQP_API=tools \
|
|
DEQP_TARGET=default \
|
|
. .gitlab-ci/container/build-deqp.sh
|
|
|
|
DEQP_API=GL \
|
|
DEQP_TARGET=surfaceless \
|
|
. .gitlab-ci/container/build-deqp.sh
|
|
|
|
DEQP_API=GLES \
|
|
DEQP_TARGET=surfaceless \
|
|
. .gitlab-ci/container/build-deqp.sh
|
|
|
|
if [ "$BUILD_VK" == "ON" ]; then
|
|
DEQP_API=VK \
|
|
DEQP_TARGET=default \
|
|
. .gitlab-ci/container/build-deqp.sh
|
|
|
|
if [ "$DEBIAN_ARCH" == "amd64" ]; then
|
|
DEQP_API=VK-main \
|
|
DEQP_TARGET=default \
|
|
. .gitlab-ci/container/build-deqp.sh
|
|
fi
|
|
fi
|
|
|
|
rm -rf /VK-GL-CTS
|
|
|
|
mv /deqp-* $ROOTFS/.
|
|
|
|
|
|
############### Build SKQP
|
|
if [[ "$DEBIAN_ARCH" = "arm64" ]] \
|
|
|| [[ "$DEBIAN_ARCH" = "amd64" ]]; then
|
|
. .gitlab-ci/container/build-skqp.sh
|
|
mv /skqp $ROOTFS/.
|
|
fi
|
|
|
|
############### Build piglit
|
|
PIGLIT_OPTS="-DPIGLIT_USE_WAFFLE=ON
|
|
-DPIGLIT_USE_GBM=ON
|
|
-DPIGLIT_USE_WAYLAND=ON
|
|
-DPIGLIT_USE_X11=ON
|
|
-DPIGLIT_BUILD_GLX_TESTS=ON
|
|
-DPIGLIT_BUILD_EGL_TESTS=ON
|
|
-DPIGLIT_BUILD_WGL_TESTS=OFF
|
|
-DPIGLIT_BUILD_GL_TESTS=ON
|
|
-DPIGLIT_BUILD_GLES1_TESTS=ON
|
|
-DPIGLIT_BUILD_GLES2_TESTS=ON
|
|
-DPIGLIT_BUILD_GLES3_TESTS=ON
|
|
-DPIGLIT_BUILD_CL_TESTS=$BUILD_CL
|
|
-DPIGLIT_BUILD_VK_TESTS=$BUILD_VK
|
|
-DPIGLIT_BUILD_DMA_BUF_TESTS=ON" \
|
|
. .gitlab-ci/container/build-piglit.sh
|
|
mv /piglit $ROOTFS/.
|
|
|
|
############### Build libva tests
|
|
if [[ "$DEBIAN_ARCH" = "amd64" ]]; then
|
|
. .gitlab-ci/container/build-va-tools.sh
|
|
mv /va/bin/* $ROOTFS/usr/bin/
|
|
fi
|
|
|
|
############### Build Crosvm
|
|
if [[ ${DEBIAN_ARCH} = "amd64" ]]; then
|
|
. .gitlab-ci/container/build-crosvm.sh
|
|
mv /usr/local/bin/crosvm $ROOTFS/usr/bin/
|
|
mv /usr/local/lib/libvirglrenderer.* $ROOTFS/usr/lib/$GCC_ARCH/
|
|
mkdir -p $ROOTFS/usr/local/libexec/
|
|
mv /usr/local/libexec/virgl* $ROOTFS/usr/local/libexec/
|
|
fi
|
|
|
|
############### Build ci-kdl
|
|
. .gitlab-ci/container/build-kdl.sh
|
|
mv /ci-kdl $ROOTFS/
|
|
|
|
############### Install fluster
|
|
if [[ ${DEBIAN_ARCH} = "amd64" ]]; then
|
|
section_start fluster "Install fluster"
|
|
. .gitlab-ci/container/build-fluster.sh
|
|
section_end fluster
|
|
fi
|
|
|
|
############### Build local stuff for use by igt and kernel testing, which
|
|
############### will reuse most of our container build process from a specific
|
|
############### hash of the Mesa tree.
|
|
if [[ -e ".gitlab-ci/local/build-rootfs.sh" ]]; then
|
|
. .gitlab-ci/local/build-rootfs.sh
|
|
fi
|
|
|
|
############### Delete rust, since the tests won't be compiling anything.
|
|
rm -rf /root/.cargo
|
|
rm -rf /root/.rustup
|
|
|
|
############### Delete firmware files we don't need
|
|
if [ "$DEBIAN_ARCH" = "amd64" ]; then
|
|
dpkg -L firmware-misc-nonfree | grep -v "i915" | xargs rm || true
|
|
fi
|
|
|
|
############### Fill rootfs
|
|
cp .gitlab-ci/setup-test-env.sh $ROOTFS/.
|
|
cp .gitlab-ci/container/setup-rootfs.sh $ROOTFS/.
|
|
cp .gitlab-ci/container/strip-rootfs.sh $ROOTFS/.
|
|
cp .gitlab-ci/container/debian/llvm-snapshot.gpg.key $ROOTFS/.
|
|
cp .gitlab-ci/container/debian/winehq.gpg.key $ROOTFS/.
|
|
chroot $ROOTFS bash /setup-rootfs.sh
|
|
rm $ROOTFS/{llvm-snapshot,winehq}.gpg.key
|
|
rm "$ROOTFS/setup-test-env.sh"
|
|
rm "$ROOTFS/setup-rootfs.sh"
|
|
rm "$ROOTFS/strip-rootfs.sh"
|
|
cp /etc/wgetrc $ROOTFS/etc/.
|
|
|
|
# Copy all tags to the rootfs, so test jobs can check if they are using the intended version
|
|
TAG_FILE_DIR="$(get_tag_file)"
|
|
if [ -d "${TAG_FILE_DIR}" ]; then
|
|
cp --parents -r "${TAG_FILE_DIR}" $ROOTFS/.
|
|
fi
|
|
|
|
if [ "${DEBIAN_ARCH}" = "arm64" ]; then
|
|
mkdir -p /lava-files/rootfs-arm64/lib/firmware/qcom/sm8350/ # for firmware imported later
|
|
fi
|
|
|
|
ROOTFSTAR="lava-rootfs.tar.zst"
|
|
du -ah "$ROOTFS" | sort -h | tail -100
|
|
pushd $ROOTFS
|
|
tar --zstd -cf /lava-files/${ROOTFSTAR} .
|
|
popd
|
|
|
|
. .gitlab-ci/container/container_post_build.sh
|
|
|
|
s3_upload /lava-files/"${ROOTFSTAR}" "https://${S3_PATH}/"
|
|
|
|
touch /lava-files/done
|
|
s3_upload /lava-files/done "https://${S3_PATH}/"
|