pc-bios/s390-ccw: Allow building with Clang, too

Clang unfortunately does not support generating code for the z900
architecture level and starts with the z10 instead. Thus to be able
to support compiling with Clang, we have to check for the supported
compiler flags. The disadvantage is of course that the bios image
will only run with z10 guest CPUs upwards (which is what most people
use anyway), so just in case let's also emit a warning in that case
(we will continue to ship firmware images that have been pre-built
with GCC in future releases, so this should not impact normal users,
too).

Message-Id: <20210502174836.838816-5-thuth@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
Thomas Huth 2021-05-02 13:22:21 +02:00
parent da231910d3
commit a5b2afd522
2 changed files with 10 additions and 2 deletions

9
configure vendored
View File

@ -5417,9 +5417,16 @@ if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
fi fi
# Only build s390-ccw bios if we're on s390x and the compiler has -march=z900 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
# or -march=z10 (which is the lowest architecture level that Clang supports)
if test "$cpu" = "s390x" ; then if test "$cpu" = "s390x" ; then
write_c_skeleton write_c_skeleton
if compile_prog "-march=z900" ""; then compile_prog "-march=z900" ""
has_z900=$?
if [ $has_z900 = 0 ] || compile_prog "-march=z10" ""; then
if [ $has_z900 != 0 ]; then
echo "WARNING: Your compiler does not support the z900!"
echo " The s390-ccw bios will only work with guest CPUs >= z10."
fi
roms="$roms s390-ccw" roms="$roms s390-ccw"
# SLOF is required for building the s390-ccw firmware on s390x, # SLOF is required for building the s390-ccw firmware on s390x,
# since it is using the libnet code from SLOF for network booting. # since it is using the libnet code from SLOF for network booting.

View File

@ -34,7 +34,8 @@ QEMU_CFLAGS += $(call cc-option,-Werror $(QEMU_CFLAGS),-Wno-stringop-overflow)
QEMU_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -fno-common -fPIE QEMU_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -fno-common -fPIE
QEMU_CFLAGS += -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables QEMU_CFLAGS += -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables
QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS), -fno-stack-protector) QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS), -fno-stack-protector)
QEMU_CFLAGS += -msoft-float -march=z900 QEMU_CFLAGS += -msoft-float
QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS),-march=z900,-march=z10)
QEMU_CFLAGS += -std=gnu99 QEMU_CFLAGS += -std=gnu99
LDFLAGS += -Wl,-pie -nostdlib LDFLAGS += -Wl,-pie -nostdlib