mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
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>
94 lines
2.6 KiB
Python
Executable File
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
|