Files
xen/automation/scripts/build
T
Wei Liu b066bd195c automation: save xen config before building
It is reported that failed randconfig runs are missing the config file
which makes debugging impossible. Fix this by moving the line that
copies the config file before the build is executed.

Signed-off-by: Wei Liu <wl@xen.org>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
2021-05-05 14:23:01 +00:00

94 lines
2.6 KiB
Python
Executable File

#!/bin/bash -ex
$CC --version
# Express 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 }'
}
# random config or default config
if [[ "${RANDCONFIG}" == "y" ]]; then
make -j$(nproc) -C xen KCONFIG_ALLCONFIG=tools/kconfig/allrandom.config randconfig
hypervisor_only="y"
else
make -j$(nproc) -C xen defconfig
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
# arm32 only cross-compiles the hypervisor
if [[ "${XEN_TARGET_ARCH}" = "arm32" ]]; then
hypervisor_only="y"
fi
# build up our configure options
cfgargs=()
cfgargs+=("--enable-docs")
if [[ "${CC}" == "clang"* ]]; then
# SeaBIOS cannot be built with clang
cfgargs+=("--with-system-seabios=/usr/share/seabios/bios.bin")
# iPXE cannot be built with clang
cfgargs+=("--with-system-ipxe=/usr/lib/ipxe/ipxe.pxe")
# newlib cannot be built with clang so we cannot build stubdoms
cfgargs+=("--disable-stubdom")
fi
if ! test -z "$(ldd /bin/ls|grep musl|head -1)"; then
# disable --disable-werror for QEMUU when building with MUSL
cfgargs+=("--with-extra-qemuu-configure-args=\"--disable-werror\"")
# SeaBIOS doesn't build on MUSL systems
cfgargs+=("--with-system-seabios=/bin/false")
fi
# Qemu requires Python 3.5 or later
if ! type python3 || python3 -c "import sys; res = sys.version_info < (3, 5); exit(not(res))"; then
cfgargs+=("--with-system-qemu=/bin/false")
fi
# SeaBIOS requires GCC 4.6 or later
if [[ "${CC}" == "gcc" && `cc-ver` -lt 0x040600 ]]; then
cfgargs+=("--with-system-seabios=/bin/false")
fi
if [[ "${hypervisor_only}" == "y" ]]; then
make -j$(nproc) xen
else
./configure "${cfgargs[@]}"
make -j$(nproc) dist
fi
# Extract artifacts to avoid getting rewritten by customised builds
mkdir binaries
if [[ "${XEN_TARGET_ARCH}" != "x86_32" ]]; then
cp xen/xen binaries/xen
if [[ "${hypervisor_only}" != "y" ]]; then
cp -r dist binaries/
fi
fi
if [[ "${hypervisor_only}" == "y" ]]; then
# If we are build testing a specific Kconfig exit now, there's no point in
# testing all the possible configs.
exit 0
fi
# Build all the configs we care about
case ${XEN_TARGET_ARCH} in
x86_64) arch=x86 ;;
*) exit 0 ;;
esac
cfg_dir="automation/configs/${arch}"
for cfg in `ls ${cfg_dir}`; do
echo "Building $cfg"
make -j$(nproc) -C xen clean
rm -f xen/.config
make -C xen KBUILD_DEFCONFIG=../../../../${cfg_dir}/${cfg} XEN_CONFIG_EXPERT=y defconfig
make -j$(nproc) -C xen XEN_CONFIG_EXPERT=y
done