Files
xen/automation/scripts/build
T
Jan Beulich 2121f89503 CI: collect certain intermediate files as artifacts
When one of the linking passes fails, additional intermediate files are
still in place. Having them available for analysis of the underlying
problem can be pretty helpful. Collect some into a new intermediates/
directory. (Nothing new will be collected if linking succeeds.)

As the script is run with -e passed to bash, defer exit if the main
"make" (or substituent script thereof) failed. This way more artifacts
are collected, potentially making it easier to analyze the failure.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
2026-05-11 18:40:58 -07:00

120 lines
3.6 KiB
Python
Executable File

#!/bin/bash -ex
set -o pipefail
test -f /etc/os-release && cat "$_"
# Construct $cc such that it matches what `make` will chose when taking
# CROSS_COMPILE into account. Do not modify $CC directly, as that will cause
# `make` to double-account CROSS_COMPILE.
cc="${CROSS_COMPILE}${CC}"
$cc --version
# random config or default config
if [[ "${RANDCONFIG}" == "y" ]]; then
cp -f xen/tools/kconfig/allrandom.config xen/allrandom.config.tmp
# Append job-specific fixed configuration
echo "${EXTRA_FIXED_RANDCONFIG}" >> xen/allrandom.config.tmp
make -j$(nproc) -C xen KCONFIG_ALLCONFIG=allrandom.config.tmp randconfig
# RANDCONFIG implies HYPERVISOR_ONLY
HYPERVISOR_ONLY="y"
else
# Start off with arch's defconfig
make -C xen defconfig
debug="${debug:-n}"
xen/scripts/config --file xen/.config -${debug} DEBUG
if [[ -n "${EXTRA_XEN_CONFIG}" ]]; then
echo "${EXTRA_XEN_CONFIG}" >> xen/.config
fi
make -j$(nproc) -C xen olddefconfig
fi
# Save the config file before building, just in case.
cp xen/.config xen-config
# Directories for artefacts to be dumped into
mkdir -p binaries intermediates
# Script exit status, to be overridden by the main make's status below.
ret=0
if [[ "${CPPCHECK}" == "y" ]] && [[ "${HYPERVISOR_ONLY}" == "y" ]]; then
# Cppcheck analysis invokes Xen-only build
xen/scripts/xen-analysis.py --run-cppcheck --cppcheck-misra -- -j$(nproc) || ret=$?
# Preserve artefacts
cp xen/cppcheck-report/xen-cppcheck.txt xen-cppcheck.txt
elif [[ "${HYPERVISOR_ONLY}" == "y" ]]; then
# Xen-only build
make -j$(nproc) xen || ret=$?
else
# Full build. Figure out our ./configure options
cfgargs=("--prefix=/usr")
cfgargs+=("--enable-docs")
# booleans for which compiler is in use
cc_is_gcc="$($cc --version | grep -q gcc && echo "y" || :)"
cc_is_clang="$($cc --version | grep -q clang && echo "y" || :)"
# The compiler version as an integer. e.g. GCC 4.9.2 => 0x040902
cc_ver="$($cc -dumpversion | awk -F. '{ printf "0x%02x%02x%02x", $1, $2, $3 }')"
if [[ "${cc_is_clang}" == "y" ]]; then
# SeaBIOS cannot be built with clang
cfgargs+=("--with-system-seabios=/usr/share/no-seabios.bin")
# iPXE cannot be built with clang
cfgargs+=("--with-system-ipxe=/usr/share/no-ipxe.pxe")
# newlib cannot be built with clang so we cannot build stubdoms
cfgargs+=("--disable-stubdom")
fi
if ldd /bin/ls | grep -q musl; then
# disable --disable-werror for QEMUU when building with MUSL
cfgargs+=("--with-extra-qemuu-configure-args=\"--disable-werror\"")
fi
# QEMU is only for those who ask
if [[ "$BUILD_QEMU_XEN" != "y" ]]; then
cfgargs+=("--with-system-qemu=/bin/false")
fi
# SeaBIOS requires GCC 4.6 or later
if [[ "${cc_is_gcc}" == "y" && "${cc_ver}" -lt 0x040600 ]]; then
cfgargs+=("--with-system-seabios=/usr/share/no-seabios.bin")
fi
./configure "${cfgargs[@]}"
make -j$(nproc) dist || ret=$?
# Preserve artefacts
(cd dist/install; find | cpio -R 0:0 -o -H newc | gzip) > binaries/xen-tools.cpio.gz
fi
# Preserve Xen artefacts
#
# Note: Some smoke tests depend on finding binaries/xen on a full build
# even though dist/ contains everything, while some containers don't even
# build Xen.
for f in xen/xen xen/xen-syms xen/xen.efi; do
if [[ -f $f ]]; then
cp $f binaries/
fi
done
# Preserve Xen intermediate files. Some may be there only upon build failure.
for f in xen/.xen-syms.* xen/.xen.efi.*; do
if [[ -f $f ]]; then
cp $f intermediates/
fi
done
exit $ret