Files
xen/automation/scripts/build
T
Anthony PERARD e43d9621d8 automation: Avoid changing source files for randconfig tests
We should avoid changing files from the source tree if we don't intend
to commit the result.

We don't really need to check if $EXTRA_FIXED_RANDCONFIG is empty so
add it to the temporary file in all cases.

Signed-off-by: Anthony PERARD <anthony.perard@vates.tech>
Acked-by: Stefano Stabellini <sstabellini@kernel.org>
2025-04-25 11:26:29 +02:00

115 lines
3.4 KiB
Python
Executable File

#!/bin/bash -ex
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
echo "CONFIG_DEBUG=${debug}" >> xen/.config
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 because build failure causes the script
# to exit early -- bash is invoked with -e.
cp xen/.config xen-config
# Directory for the artefacts to be dumped into
mkdir -p binaries
collect_xen_artefacts()
{
local f
for f in xen/xen xen/xen.efi; do
if [[ -f $f ]]; then
cp $f binaries/
fi
done
}
if [[ "${CPPCHECK}" == "y" ]] && [[ "${HYPERVISOR_ONLY}" == "y" ]]; then
# Cppcheck analysis invokes Xen-only build
xen/scripts/xen-analysis.py --run-cppcheck --cppcheck-misra -- -j$(nproc)
# Preserve artefacts
collect_xen_artefacts
cp xen/cppcheck-report/xen-cppcheck.txt xen-cppcheck.txt
elif [[ "${HYPERVISOR_ONLY}" == "y" ]]; then
# Xen-only build
make -j$(nproc) xen
# Preserve artefacts
collect_xen_artefacts
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
# Preserve artefacts
# Note: Some smoke tests depending on finding binaries/xen on a full build
# even though dist/ contains everything, while some containers don't even
# build Xen
(cd dist/install; find | cpio -o -H newc | gzip) > binaries/xen-tools.cpio.gz
cp -r tools/tests binaries/
collect_xen_artefacts
fi