* [PATCH 0/6] Fix support for biarch compilers and cross cflags
@ 2022-06-21 7:51 Paolo Bonzini
2022-06-21 7:51 ` [PATCH 1/6] pc-bios/optionrom: use -m16 unconditionally Paolo Bonzini
` (6 more replies)
0 siblings, 7 replies; 13+ messages in thread
From: Paolo Bonzini @ 2022-06-21 7:51 UTC (permalink / raw)
To: qemu-devel
This series fixes two bugs with configure's cross compilation detection:
- first, --cross-cflags is not obeyed by pc-bios/ compilation
- second, on a ppc64le machine, the host compiler can be used for ppc64
tests/tcg; however, this is not being done because $cpu does not
match the target. Likewise, on an x86_64 machine the host compiler
can be used to build both i386 tests/tcg and pc-bios/optionrom, but
the special casing done by the configure script only covers the latter.
The two are related because, if only the first was fixed, pc-bios/optionrom
would use either the i386 or the x86_64 cflags depending on which cross
compiler was found. So patches 2-4 tackle not just the cross CFLAGS
problem with pc-bios, but also the biarch compiler problem with i386
and ppc. Patch 5 then covers the other biarch compilers.
The other two patches are just cleanups.
Supersedes: <20220607094031.1227714-1-pbonzini@redhat.com>
Paolo Bonzini (6):
pc-bios/optionrom: use -m16 unconditionally
configure, pc-bios/optionrom: pass cross CFLAGS correctly
configure, pc-bios/s390-ccw: pass cross CFLAGS correctly
configure, pc-bios/vof: pass cross CFLAGS correctly
configure: allow more host/target combos to use the host compiler
configure: write EXTRA_CFLAGS for all sub-Makefiles
configure | 50 ++++++++++++++++++-----------------
pc-bios/optionrom/Makefile | 15 +----------
pc-bios/optionrom/code16gcc.h | 3 ---
pc-bios/s390-ccw/Makefile | 20 +++++++-------
pc-bios/s390-ccw/netboot.mak | 6 ++---
pc-bios/vof/Makefile | 8 +++---
6 files changed, 43 insertions(+), 59 deletions(-)
delete mode 100644 pc-bios/optionrom/code16gcc.h
--
2.36.1
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 1/6] pc-bios/optionrom: use -m16 unconditionally
2022-06-21 7:51 [PATCH 0/6] Fix support for biarch compilers and cross cflags Paolo Bonzini
@ 2022-06-21 7:51 ` Paolo Bonzini
2022-06-21 14:48 ` Richard Henderson
2022-06-21 7:51 ` [PATCH 2/6] configure, pc-bios/optionrom: pass cross CFLAGS correctly Paolo Bonzini
` (5 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Paolo Bonzini @ 2022-06-21 7:51 UTC (permalink / raw)
To: qemu-devel
Remove support for .code16gcc, all supported platforms have -m16.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
pc-bios/optionrom/Makefile | 15 +--------------
pc-bios/optionrom/code16gcc.h | 3 ---
2 files changed, 1 insertion(+), 17 deletions(-)
delete mode 100644 pc-bios/optionrom/code16gcc.h
diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
index f639915b4f..ea89ce9d59 100644
--- a/pc-bios/optionrom/Makefile
+++ b/pc-bios/optionrom/Makefile
@@ -11,7 +11,7 @@ CFLAGS = -O2 -g
quiet-command = $(if $(V),$1,$(if $(2),@printf " %-7s %s\n" $2 $3 && $1, @$1))
cc-option = $(if $(shell $(CC) $1 -c -o /dev/null -xc /dev/null >/dev/null 2>&1 && echo OK), $1, $2)
-override CFLAGS += -march=i486 -Wall
+override CFLAGS += -march=i486 -Wall -m16
# If -fcf-protection is enabled in flags or compiler defaults that will
# conflict with -march=i486
@@ -24,21 +24,8 @@ override CFLAGS += $(filter -W%, $(QEMU_CFLAGS))
override CFLAGS += $(call cc-option, -fno-pie)
override CFLAGS += -ffreestanding -I$(TOPSRC_DIR)/include
override CFLAGS += $(call cc-option, -fno-stack-protector)
-override CFLAGS += $(call cc-option, -m16)
override CFLAGS += $(call cc-option, -Wno-array-bounds)
-ifeq ($(filter -m16, $(CFLAGS)),)
-# Attempt to work around compilers that lack -m16 (GCC <= 4.8, clang <= ??)
-# On GCC we add -fno-toplevel-reorder to keep the order of asm blocks with
-# respect to the rest of the code. clang does not have -fno-toplevel-reorder,
-# but it places all asm blocks at the beginning and we're relying on it for
-# the option ROM header. So just force clang not to use the integrated
-# assembler, which doesn't support .code16gcc.
-override CFLAGS += $(call cc-option, -fno-toplevel-reorder)
-override CFLAGS += $(call cc-option, -no-integrated-as)
-override CFLAGS += -m32 -include $(SRC_DIR)/code16gcc.h
-endif
-
Wa = -Wa,
override ASFLAGS += -32
override CFLAGS += $(call cc-option, $(Wa)-32)
diff --git a/pc-bios/optionrom/code16gcc.h b/pc-bios/optionrom/code16gcc.h
deleted file mode 100644
index 9c8d25d508..0000000000
--- a/pc-bios/optionrom/code16gcc.h
+++ /dev/null
@@ -1,3 +0,0 @@
-asm(
-".code16gcc\n"
-);
--
2.36.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 2/6] configure, pc-bios/optionrom: pass cross CFLAGS correctly
2022-06-21 7:51 [PATCH 0/6] Fix support for biarch compilers and cross cflags Paolo Bonzini
2022-06-21 7:51 ` [PATCH 1/6] pc-bios/optionrom: use -m16 unconditionally Paolo Bonzini
@ 2022-06-21 7:51 ` Paolo Bonzini
2022-06-21 14:55 ` Richard Henderson
2022-06-21 7:51 ` [PATCH 3/6] configure, pc-bios/s390-ccw: " Paolo Bonzini
` (4 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Paolo Bonzini @ 2022-06-21 7:51 UTC (permalink / raw)
To: qemu-devel
The optionrom build is disregarding the flags passed to the configure
script via --cross-cflags-i386. Pass it down and add it to the Makefile.
This also fixes compilation of TCG i386 tests using an x86_64 compiler.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 32 ++++++++++++++++++--------------
pc-bios/optionrom/Makefile | 2 +-
2 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/configure b/configure
index 76728b31f7..3d00b361d7 100755
--- a/configure
+++ b/configure
@@ -2057,19 +2057,22 @@ probe_target_compiler() {
compute_target_variable $1 target_objcopy objcopy
compute_target_variable $1 target_ranlib ranlib
compute_target_variable $1 target_strip strip
- if test "$1" = $cpu; then
- : ${target_cc:=$cc}
- : ${target_ccas:=$ccas}
- : ${target_as:=$as}
- : ${target_ld:=$ld}
- : ${target_ar:=$ar}
- : ${target_as:=$as}
- : ${target_ld:=$ld}
- : ${target_nm:=$nm}
- : ${target_objcopy:=$objcopy}
- : ${target_ranlib:=$ranlib}
- : ${target_strip:=$strip}
- fi
+ case "$1:$cpu" in
+ i386:x86_64 | \
+ "$cpu:$cpu")
+ : ${target_cc:=$cc}
+ : ${target_ccas:=$ccas}
+ : ${target_as:=$as}
+ : ${target_ld:=$ld}
+ : ${target_ar:=$ar}
+ : ${target_as:=$as}
+ : ${target_ld:=$ld}
+ : ${target_nm:=$nm}
+ : ${target_objcopy:=$objcopy}
+ : ${target_ranlib:=$ranlib}
+ : ${target_strip:=$strip}
+ ;;
+ esac
if test -n "$target_cc"; then
case $1 in
i386|x86_64)
@@ -2238,7 +2241,7 @@ done
# Mac OS X ships with a broken assembler
roms=
-probe_target_compilers i386 x86_64
+probe_target_compiler i386
if test -n "$target_cc" &&
test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
test "$targetos" != "haiku" && test "$softmmu" = yes ; then
@@ -2257,6 +2260,7 @@ if test -n "$target_cc" &&
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "TOPSRC_DIR=$source_path" >> $config_mak
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_mak
+ echo "EXTRA_CFLAGS=$target_cflags" >> $config_mak
write_target_makefile >> $config_mak
fi
fi
diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
index ea89ce9d59..e90ca2e1c6 100644
--- a/pc-bios/optionrom/Makefile
+++ b/pc-bios/optionrom/Makefile
@@ -11,7 +11,7 @@ CFLAGS = -O2 -g
quiet-command = $(if $(V),$1,$(if $(2),@printf " %-7s %s\n" $2 $3 && $1, @$1))
cc-option = $(if $(shell $(CC) $1 -c -o /dev/null -xc /dev/null >/dev/null 2>&1 && echo OK), $1, $2)
-override CFLAGS += -march=i486 -Wall -m16
+override CFLAGS += -march=i486 -Wall $(EXTRA_CFLAGS) -m16
# If -fcf-protection is enabled in flags or compiler defaults that will
# conflict with -march=i486
--
2.36.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 3/6] configure, pc-bios/s390-ccw: pass cross CFLAGS correctly
2022-06-21 7:51 [PATCH 0/6] Fix support for biarch compilers and cross cflags Paolo Bonzini
2022-06-21 7:51 ` [PATCH 1/6] pc-bios/optionrom: use -m16 unconditionally Paolo Bonzini
2022-06-21 7:51 ` [PATCH 2/6] configure, pc-bios/optionrom: pass cross CFLAGS correctly Paolo Bonzini
@ 2022-06-21 7:51 ` Paolo Bonzini
2022-06-21 8:26 ` Thomas Huth
2022-06-21 7:51 ` [PATCH 4/6] configure, pc-bios/vof: " Paolo Bonzini
` (3 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Paolo Bonzini @ 2022-06-21 7:51 UTC (permalink / raw)
To: qemu-devel
QEMU_CFLAGS is not available in pc-bios/s390-ccw/netboot.mak, but the Makefile
needs to access the flags passed to the configure script for the s390x
cross compiler. Fix everything and rename QEMU_CFLAGS to EXTRA_CFLAGS for
consistency with tests/tcg.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 1 +
pc-bios/s390-ccw/Makefile | 20 ++++++++++----------
pc-bios/s390-ccw/netboot.mak | 6 +++---
3 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/configure b/configure
index 3d00b361d7..bf9282e2a1 100755
--- a/configure
+++ b/configure
@@ -2290,6 +2290,7 @@ if test -n "$target_cc" && test "$softmmu" = yes; then
config_mak=pc-bios/s390-ccw/config-host.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
+ echo "EXTRA_CFLAGS=$target_cflags" >> $config_mak
write_target_makefile >> $config_mak
# SLOF is required for building the s390-ccw firmware on s390x,
# since it is using the libnet code from SLOF for network booting.
diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile
index 6eb713bf37..26ad40f94e 100644
--- a/pc-bios/s390-ccw/Makefile
+++ b/pc-bios/s390-ccw/Makefile
@@ -18,11 +18,11 @@ $(call set-vpath, $(SRC_PATH))
QEMU_DGFLAGS = -MMD -MP -MT $@ -MF $(@D)/$(*F).d
%.o: %.c
- $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \
+ $(call quiet-command,$(CC) $(EXTRA_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \
-c -o $@ $<,"CC","$(TARGET_DIR)$@")
%.o: %.S
- $(call quiet-command,$(CCAS) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \
+ $(call quiet-command,$(CCAS) $(EXTRA_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \
-c -o $@ $<,"CCAS","$(TARGET_DIR)$@")
.PHONY : all clean build-all
@@ -30,14 +30,14 @@ QEMU_DGFLAGS = -MMD -MP -MT $@ -MF $(@D)/$(*F).d
OBJECTS = start.o main.o bootmap.o jump2ipl.o sclp.o menu.o \
virtio.o virtio-scsi.o virtio-blkdev.o libc.o cio.o dasd-ipl.o
-QEMU_CFLAGS := -Wall $(filter -W%, $(QEMU_CFLAGS))
-QEMU_CFLAGS += $(call cc-option,-Werror $(QEMU_CFLAGS),-Wno-stringop-overflow)
-QEMU_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -fno-common -fPIE
-QEMU_CFLAGS += -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables
-QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS), -fno-stack-protector)
-QEMU_CFLAGS += -msoft-float
-QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS),-march=z900,-march=z10)
-QEMU_CFLAGS += -std=gnu99
+EXTRA_CFLAGS := $(EXTRA_CFLAGS) -Wall
+EXTRA_CFLAGS += $(call cc-option,-Werror $(EXTRA_CFLAGS),-Wno-stringop-overflow)
+EXTRA_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -fno-common -fPIE
+EXTRA_CFLAGS += -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables
+EXTRA_CFLAGS += $(call cc-option, $(EXTRA_CFLAGS), -fno-stack-protector)
+EXTRA_CFLAGS += -msoft-float
+EXTRA_CFLAGS += $(call cc-option, $(EXTRA_CFLAGS),-march=z900,-march=z10)
+EXTRA_CFLAGS += -std=gnu99
LDFLAGS += -Wl,-pie -nostdlib
build-all: s390-ccw.img s390-netboot.img
diff --git a/pc-bios/s390-ccw/netboot.mak b/pc-bios/s390-ccw/netboot.mak
index 1a06befa4b..ee59a5f4de 100644
--- a/pc-bios/s390-ccw/netboot.mak
+++ b/pc-bios/s390-ccw/netboot.mak
@@ -8,7 +8,7 @@ LIBNET_INC := -I$(SLOF_DIR)/lib/libnet
NETLDFLAGS := $(LDFLAGS) -Wl,-Ttext=0x7800000
-$(NETOBJS): QEMU_CFLAGS += $(LIBC_INC) $(LIBNET_INC)
+$(NETOBJS): EXTRA_CFLAGS += $(LIBC_INC) $(LIBNET_INC)
s390-netboot.elf: $(NETOBJS) libnet.a libc.a
$(call quiet-command,$(CC) $(NETLDFLAGS) -o $@ $^,"BUILD","$(TARGET_DIR)$@")
@@ -18,7 +18,7 @@ s390-netboot.img: s390-netboot.elf
# libc files:
-LIBC_CFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \
+LIBC_CFLAGS = $(EXTRA_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \
-MMD -MP -MT $@ -MF $(@:%.o=%.d)
CTYPE_OBJS = isdigit.o isxdigit.o toupper.o
@@ -52,7 +52,7 @@ libc.a: $(LIBCOBJS)
LIBNETOBJS := args.o dhcp.o dns.o icmpv6.o ipv6.o tcp.o udp.o bootp.o \
dhcpv6.o ethernet.o ipv4.o ndp.o tftp.o pxelinux.o
-LIBNETCFLAGS = $(QEMU_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \
+LIBNETCFLAGS = $(EXTRA_CFLAGS) $(CFLAGS) $(LIBC_INC) $(LIBNET_INC) \
-DDHCPARCH=0x1F -MMD -MP -MT $@ -MF $(@:%.o=%.d)
%.o : $(SLOF_DIR)/lib/libnet/%.c
--
2.36.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 4/6] configure, pc-bios/vof: pass cross CFLAGS correctly
2022-06-21 7:51 [PATCH 0/6] Fix support for biarch compilers and cross cflags Paolo Bonzini
` (2 preceding siblings ...)
2022-06-21 7:51 ` [PATCH 3/6] configure, pc-bios/s390-ccw: " Paolo Bonzini
@ 2022-06-21 7:51 ` Paolo Bonzini
2022-06-21 15:14 ` Richard Henderson
2022-06-21 7:51 ` [PATCH 5/6] configure: allow more host/target combos to use the host compiler Paolo Bonzini
` (2 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Paolo Bonzini @ 2022-06-21 7:51 UTC (permalink / raw)
To: qemu-devel
Use the flags passed to the configure script for the ppc cross compiler,
which in fact default to those that are needed to get the 32-bit ISA.
Add the endianness flag so that it remains possible to use a ppc64le
compiler to compile VOF.
This also fixes compilation of TCG tests using a biarch compiler,
for example ppc64 tests on ppc64le.
Reported-by: Matheus Ferst <matheus.ferst@eldorado.org.br
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 13 ++++---------
pc-bios/vof/Makefile | 8 +++-----
2 files changed, 7 insertions(+), 14 deletions(-)
diff --git a/configure b/configure
index bf9282e2a1..8f3401a23e 100755
--- a/configure
+++ b/configure
@@ -1858,7 +1858,7 @@ fi
: ${cross_cc_hexagon="hexagon-unknown-linux-musl-clang"}
: ${cross_cc_cflags_hexagon="-mv67 -O2 -static"}
: ${cross_cc_cflags_i386="-m32"}
-: ${cross_cc_cflags_ppc="-m32"}
+: ${cross_cc_cflags_ppc="-m32 -mbig-endian"}
: ${cross_cc_cflags_ppc64="-m64 -mbig-endian"}
: ${cross_cc_ppc64le="$cross_cc_ppc64"}
: ${cross_cc_cflags_ppc64le="-m64 -mlittle-endian"}
@@ -2059,6 +2059,7 @@ probe_target_compiler() {
compute_target_variable $1 target_strip strip
case "$1:$cpu" in
i386:x86_64 | \
+ ppc*:ppc64 | \
"$cpu:$cpu")
: ${target_cc:=$cc}
: ${target_ccas:=$ccas}
@@ -2084,13 +2085,6 @@ probe_target_compiler() {
fi
}
-probe_target_compilers() {
- for i; do
- probe_target_compiler $i
- test -n "$target_cc" && return 0
- done
-}
-
write_target_makefile() {
if test -n "$target_cc"; then
echo "CC=$target_cc"
@@ -2265,12 +2259,13 @@ if test -n "$target_cc" &&
fi
fi
-probe_target_compilers ppc ppc64
+probe_target_compiler ppc
if test -n "$target_cc" && test "$softmmu" = yes; then
roms="$roms pc-bios/vof"
config_mak=pc-bios/vof/config.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "SRC_DIR=$source_path/pc-bios/vof" >> $config_mak
+ echo "EXTRA_CFLAGS=$target_cflags" >> $config_mak
write_target_makefile >> $config_mak
fi
diff --git a/pc-bios/vof/Makefile b/pc-bios/vof/Makefile
index 391ac0d600..8809c82768 100644
--- a/pc-bios/vof/Makefile
+++ b/pc-bios/vof/Makefile
@@ -2,15 +2,13 @@ include config.mak
VPATH=$(SRC_DIR)
all: vof.bin
-CC ?= $(CROSS)gcc
-LD ?= $(CROSS)ld
-OBJCOPY ?= $(CROSS)objcopy
+EXTRA_CFLAGS += -mcpu=power4
%.o: %.S
- $(CC) -m32 -mbig-endian -mcpu=power4 -c -o $@ $<
+ $(CC) $(EXTRA_CFLAGS) -c -o $@ $<
%.o: %.c
- $(CC) -m32 -mbig-endian -mcpu=power4 -c -fno-stack-protector -o $@ $<
+ $(CC) $(EXTRA_CFLAGS) -c -fno-stack-protector -o $@ $<
vof.elf: entry.o main.o ci.o bootmem.o libc.o
$(LD) -nostdlib -e_start -T$(SRC_DIR)/vof.lds -EB -o $@ $^
--
2.36.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 5/6] configure: allow more host/target combos to use the host compiler
2022-06-21 7:51 [PATCH 0/6] Fix support for biarch compilers and cross cflags Paolo Bonzini
` (3 preceding siblings ...)
2022-06-21 7:51 ` [PATCH 4/6] configure, pc-bios/vof: " Paolo Bonzini
@ 2022-06-21 7:51 ` Paolo Bonzini
2022-06-21 7:51 ` [PATCH 6/6] configure: write EXTRA_CFLAGS for all sub-Makefiles Paolo Bonzini
2022-06-21 16:38 ` [PATCH 0/6] Fix support for biarch compilers and cross cflags Matheus Kowalczuk Ferst
6 siblings, 0 replies; 13+ messages in thread
From: Paolo Bonzini @ 2022-06-21 7:51 UTC (permalink / raw)
To: qemu-devel
Add more pairs of bi-arch compilers, so that it is not necessary to have
e.g. both little-endian and big-endian ARM compilers.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/configure b/configure
index 8f3401a23e..c9feb1a924 100755
--- a/configure
+++ b/configure
@@ -2058,8 +2058,12 @@ probe_target_compiler() {
compute_target_variable $1 target_ranlib ranlib
compute_target_variable $1 target_strip strip
case "$1:$cpu" in
+ aarch64_be:aarch64 | \
+ armeb:arm | \
i386:x86_64 | \
+ mips*:mips64 | \
ppc*:ppc64 | \
+ sparc:sparc64 | \
"$cpu:$cpu")
: ${target_cc:=$cc}
: ${target_ccas:=$ccas}
--
2.36.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 6/6] configure: write EXTRA_CFLAGS for all sub-Makefiles
2022-06-21 7:51 [PATCH 0/6] Fix support for biarch compilers and cross cflags Paolo Bonzini
` (4 preceding siblings ...)
2022-06-21 7:51 ` [PATCH 5/6] configure: allow more host/target combos to use the host compiler Paolo Bonzini
@ 2022-06-21 7:51 ` Paolo Bonzini
2022-06-21 16:38 ` [PATCH 0/6] Fix support for biarch compilers and cross cflags Matheus Kowalczuk Ferst
6 siblings, 0 replies; 13+ messages in thread
From: Paolo Bonzini @ 2022-06-21 7:51 UTC (permalink / raw)
To: qemu-devel
Move the EXTRA_CFLAGS line from the individual subdirectory blocks to
the common write_target_makefile and write_container_target_makefile
shell functions.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/configure b/configure
index c9feb1a924..0fd2838e82 100755
--- a/configure
+++ b/configure
@@ -2090,6 +2090,7 @@ probe_target_compiler() {
}
write_target_makefile() {
+ echo "EXTRA_CFLAGS=$target_cflags"
if test -n "$target_cc"; then
echo "CC=$target_cc"
echo "CCAS=$target_ccas"
@@ -2118,6 +2119,7 @@ write_target_makefile() {
}
write_container_target_makefile() {
+ echo "EXTRA_CFLAGS=$target_cflags"
if test -n "$container_cross_cc"; then
echo "CC=\$(DOCKER_SCRIPT) cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
echo "CCAS=\$(DOCKER_SCRIPT) cc --cc $container_cross_cc -i qemu/$container_image -s $source_path --"
@@ -2258,7 +2260,6 @@ if test -n "$target_cc" &&
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "TOPSRC_DIR=$source_path" >> $config_mak
echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_mak
- echo "EXTRA_CFLAGS=$target_cflags" >> $config_mak
write_target_makefile >> $config_mak
fi
fi
@@ -2269,7 +2270,6 @@ if test -n "$target_cc" && test "$softmmu" = yes; then
config_mak=pc-bios/vof/config.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "SRC_DIR=$source_path/pc-bios/vof" >> $config_mak
- echo "EXTRA_CFLAGS=$target_cflags" >> $config_mak
write_target_makefile >> $config_mak
fi
@@ -2289,7 +2289,6 @@ if test -n "$target_cc" && test "$softmmu" = yes; then
config_mak=pc-bios/s390-ccw/config-host.mak
echo "# Automatically generated by configure - do not modify" > $config_mak
echo "SRC_PATH=$source_path/pc-bios/s390-ccw" >> $config_mak
- echo "EXTRA_CFLAGS=$target_cflags" >> $config_mak
write_target_makefile >> $config_mak
# SLOF is required for building the s390-ccw firmware on s390x,
# since it is using the libnet code from SLOF for network booting.
@@ -2604,7 +2603,6 @@ for target in $target_list; do
if test $got_cross_cc = yes; then
mkdir -p tests/tcg/$target
echo "QEMU=$PWD/$qemu" >> $config_target_mak
- echo "EXTRA_CFLAGS=$target_cflags" >> $config_target_mak
echo "run-tcg-tests-$target: $qemu\$(EXESUF)" >> $makefile
tcg_tests_targets="$tcg_tests_targets $target"
fi
--
2.36.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 3/6] configure, pc-bios/s390-ccw: pass cross CFLAGS correctly
2022-06-21 7:51 ` [PATCH 3/6] configure, pc-bios/s390-ccw: " Paolo Bonzini
@ 2022-06-21 8:26 ` Thomas Huth
0 siblings, 0 replies; 13+ messages in thread
From: Thomas Huth @ 2022-06-21 8:26 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 21/06/2022 09.51, Paolo Bonzini wrote:
> QEMU_CFLAGS is not available in pc-bios/s390-ccw/netboot.mak, but the Makefile
> needs to access the flags passed to the configure script for the s390x
> cross compiler. Fix everything and rename QEMU_CFLAGS to EXTRA_CFLAGS for
> consistency with tests/tcg.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> configure | 1 +
> pc-bios/s390-ccw/Makefile | 20 ++++++++++----------
> pc-bios/s390-ccw/netboot.mak | 6 +++---
> 3 files changed, 14 insertions(+), 13 deletions(-)
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/6] pc-bios/optionrom: use -m16 unconditionally
2022-06-21 7:51 ` [PATCH 1/6] pc-bios/optionrom: use -m16 unconditionally Paolo Bonzini
@ 2022-06-21 14:48 ` Richard Henderson
0 siblings, 0 replies; 13+ messages in thread
From: Richard Henderson @ 2022-06-21 14:48 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 6/21/22 00:51, Paolo Bonzini wrote:
> Remove support for .code16gcc, all supported platforms have -m16.
>
> Signed-off-by: Paolo Bonzini<pbonzini@redhat.com>
> ---
> pc-bios/optionrom/Makefile | 15 +--------------
> pc-bios/optionrom/code16gcc.h | 3 ---
> 2 files changed, 1 insertion(+), 17 deletions(-)
> delete mode 100644 pc-bios/optionrom/code16gcc.h
It was a bit dicey using .code16gcc behind the compiler's back anyway.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/6] configure, pc-bios/optionrom: pass cross CFLAGS correctly
2022-06-21 7:51 ` [PATCH 2/6] configure, pc-bios/optionrom: pass cross CFLAGS correctly Paolo Bonzini
@ 2022-06-21 14:55 ` Richard Henderson
2022-06-22 9:31 ` Paolo Bonzini
0 siblings, 1 reply; 13+ messages in thread
From: Richard Henderson @ 2022-06-21 14:55 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 6/21/22 00:51, Paolo Bonzini wrote:
> diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
> index ea89ce9d59..e90ca2e1c6 100644
> --- a/pc-bios/optionrom/Makefile
> +++ b/pc-bios/optionrom/Makefile
> @@ -11,7 +11,7 @@ CFLAGS = -O2 -g
> quiet-command = $(if $(V),$1,$(if $(2),@printf " %-7s %s\n" $2 $3 && $1, @$1))
> cc-option = $(if $(shell $(CC) $1 -c -o /dev/null -xc /dev/null >/dev/null 2>&1 && echo OK), $1, $2)
>
> -override CFLAGS += -march=i486 -Wall -m16
> +override CFLAGS += -march=i486 -Wall $(EXTRA_CFLAGS) -m16
Hmm. I'm not sure about this. Given that EXTRA_CFLAGS is going to be e.g. -m32 or empty,
being immediately overwritten to -m16, I don't quite see the point.
It seems like there should be a third cross-compiler "i386_m16" or something, with a
different set of cflags at the configure level. Overkill?
r~
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 4/6] configure, pc-bios/vof: pass cross CFLAGS correctly
2022-06-21 7:51 ` [PATCH 4/6] configure, pc-bios/vof: " Paolo Bonzini
@ 2022-06-21 15:14 ` Richard Henderson
0 siblings, 0 replies; 13+ messages in thread
From: Richard Henderson @ 2022-06-21 15:14 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 6/21/22 00:51, Paolo Bonzini wrote:
> Use the flags passed to the configure script for the ppc cross compiler,
> which in fact default to those that are needed to get the 32-bit ISA.
> Add the endianness flag so that it remains possible to use a ppc64le
> compiler to compile VOF.
>
> This also fixes compilation of TCG tests using a biarch compiler,
> for example ppc64 tests on ppc64le.
>
> Reported-by: Matheus Ferst <matheus.ferst@eldorado.org.br
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Probably you missed this, but last night (gmt-7) I sent:
make[1]: Entering directory `/home/rth/qemu/bld/pc-bios/vof'
cc -m32 -mbig-endian -mcpu=power4 -c -o entry.o /home/rth/qemu/src/pc-bios/vof/entry.S
cc1: error: ‘-m32’ not supported in this configuration
make[1]: *** [entry.o] Error 1
This with a compiler I built myself,
$ cc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/home/rth/gcc/run/libexec/gcc/powerpc64le-unknown-linux-gnu/11.0.1/lto-wrapper
Target: powerpc64le-unknown-linux-gnu
Configured with: ../git-gcc/configure --prefix=/home/rth/gcc/run
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.0.1 20210321 (experimental) [master revision
19ff0b0:fca73fc:6af7b307f659a4f1845a9efd36ca37899515e234] (GCC)
With default configure options, gcc is not biarch.
It would be good to probe whether EXTRA_CFLAGS is actually usable.
r~
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 0/6] Fix support for biarch compilers and cross cflags
2022-06-21 7:51 [PATCH 0/6] Fix support for biarch compilers and cross cflags Paolo Bonzini
` (5 preceding siblings ...)
2022-06-21 7:51 ` [PATCH 6/6] configure: write EXTRA_CFLAGS for all sub-Makefiles Paolo Bonzini
@ 2022-06-21 16:38 ` Matheus Kowalczuk Ferst
6 siblings, 0 replies; 13+ messages in thread
From: Matheus Kowalczuk Ferst @ 2022-06-21 16:38 UTC (permalink / raw)
To: Paolo Bonzini, qemu-devel
On 21/06/2022 04:51, Paolo Bonzini wrote:
> This series fixes two bugs with configure's cross compilation detection:
>
> - first, --cross-cflags is not obeyed by pc-bios/ compilation
>
> - second, on a ppc64le machine, the host compiler can be used for ppc64
> tests/tcg;
That may be true for the compiler, but the complete toolchain is usually
single endian. For instance, Debian/Ubuntu, Fedora, and FreeBSD lack
libc and crt*.o for the foreign endianness. So we'd be able to build
ppc64-softmmu tests (which are not upstream yet) but not
ppc64-linux-user in ppc64le hosts.
> however, this is not being done because $cpu does not
> match the target. Likewise, on an x86_64 machine the host compiler
> can be used to build both i386 tests/tcg and pc-bios/optionrom, but
> the special casing done by the configure script only covers the latter.
>
> The two are related because, if only the first was fixed, pc-bios/optionrom
> would use either the i386 or the x86_64 cflags depending on which cross
> compiler was found. So patches 2-4 tackle not just the cross CFLAGS
> problem with pc-bios, but also the biarch compiler problem with i386
> and ppc. Patch 5 then covers the other biarch compilers.
>
> The other two patches are just cleanups.
>
> Supersedes: <20220607094031.1227714-1-pbonzini@redhat.com>
>
> Paolo Bonzini (6):
> pc-bios/optionrom: use -m16 unconditionally
> configure, pc-bios/optionrom: pass cross CFLAGS correctly
> configure, pc-bios/s390-ccw: pass cross CFLAGS correctly
> configure, pc-bios/vof: pass cross CFLAGS correctly
> configure: allow more host/target combos to use the host compiler
> configure: write EXTRA_CFLAGS for all sub-Makefiles
>
> configure | 50 ++++++++++++++++++-----------------
> pc-bios/optionrom/Makefile | 15 +----------
> pc-bios/optionrom/code16gcc.h | 3 ---
> pc-bios/s390-ccw/Makefile | 20 +++++++-------
> pc-bios/s390-ccw/netboot.mak | 6 ++---
> pc-bios/vof/Makefile | 8 +++---
> 6 files changed, 43 insertions(+), 59 deletions(-)
> delete mode 100644 pc-bios/optionrom/code16gcc.h
>
> --
> 2.36.1
>
>
Thanks,
Matheus K. Ferst
Instituto de Pesquisas ELDORADO <http://www.eldorado.org.br/>
Analista de Software
Aviso Legal - Disclaimer <https://www.eldorado.org.br/disclaimer.html>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 2/6] configure, pc-bios/optionrom: pass cross CFLAGS correctly
2022-06-21 14:55 ` Richard Henderson
@ 2022-06-22 9:31 ` Paolo Bonzini
0 siblings, 0 replies; 13+ messages in thread
From: Paolo Bonzini @ 2022-06-22 9:31 UTC (permalink / raw)
To: Richard Henderson, qemu-devel
On 6/21/22 16:55, Richard Henderson wrote:
> On 6/21/22 00:51, Paolo Bonzini wrote:
>> diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
>> index ea89ce9d59..e90ca2e1c6 100644
>> --- a/pc-bios/optionrom/Makefile
>> +++ b/pc-bios/optionrom/Makefile
>> @@ -11,7 +11,7 @@ CFLAGS = -O2 -g
>> quiet-command = $(if $(V),$1,$(if $(2),@printf " %-7s %s\n" $2 $3
>> && $1, @$1))
>> cc-option = $(if $(shell $(CC) $1 -c -o /dev/null -xc /dev/null
>> >/dev/null 2>&1 && echo OK), $1, $2)
>> -override CFLAGS += -march=i486 -Wall -m16
>> +override CFLAGS += -march=i486 -Wall $(EXTRA_CFLAGS) -m16
>
> Hmm. I'm not sure about this. Given that EXTRA_CFLAGS is going to be
> e.g. -m32 or empty, being immediately overwritten to -m16, I don't quite
> see the point.
I added it mostly for consistency with the other pc-bios subdirectories,
and because it can also be overridden with --cross-cflags-i386 though.
Even for the default -m32, however, there would be a reason to have
$(EXTRA_FLAGS) in there. I have played with removing the direct use of
"ld -m" in the build of pc-bios/optionrom, and stumbled on a weird GCC
configuration issue. The problem is that some hosts pick the right
linker emulation when given -m16, but others don't:
$ gcc -dumpspecs
...
*link:
... %{m16|m32|mx32:;:-m elf_x86_64} %{m16|m32:-m elf_i386}
# x86_64-w64-mingw32-gcc
...
*link:
%{!m32:-m i386pep} %{m32:-m i386pe} ...
The error is in GCC's gcc/config/i386/mingw-w64.h, which provides a
MULTILIB_DEFAULTS #define but does not rely on it:
#undef SPEC_32
#undef SPEC_64
#if TARGET_64BIT_DEFAULT
#define SPEC_32 "m32" // should be m16|m32
#define SPEC_64 "!m32" // should be m64
#else
#define SPEC_32 "!m64" // should be m16|m32
#define SPEC_64 "m64"
#endif
So you need -m32 -m16 on 64-bit hosts! For the "working" specs the -m16
would override -m32, while on the broken ones -m32 is for the linker and
-m16 is for the compiler.
Paolo
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2022-06-22 9:33 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-21 7:51 [PATCH 0/6] Fix support for biarch compilers and cross cflags Paolo Bonzini
2022-06-21 7:51 ` [PATCH 1/6] pc-bios/optionrom: use -m16 unconditionally Paolo Bonzini
2022-06-21 14:48 ` Richard Henderson
2022-06-21 7:51 ` [PATCH 2/6] configure, pc-bios/optionrom: pass cross CFLAGS correctly Paolo Bonzini
2022-06-21 14:55 ` Richard Henderson
2022-06-22 9:31 ` Paolo Bonzini
2022-06-21 7:51 ` [PATCH 3/6] configure, pc-bios/s390-ccw: " Paolo Bonzini
2022-06-21 8:26 ` Thomas Huth
2022-06-21 7:51 ` [PATCH 4/6] configure, pc-bios/vof: " Paolo Bonzini
2022-06-21 15:14 ` Richard Henderson
2022-06-21 7:51 ` [PATCH 5/6] configure: allow more host/target combos to use the host compiler Paolo Bonzini
2022-06-21 7:51 ` [PATCH 6/6] configure: write EXTRA_CFLAGS for all sub-Makefiles Paolo Bonzini
2022-06-21 16:38 ` [PATCH 0/6] Fix support for biarch compilers and cross cflags Matheus Kowalczuk Ferst
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.