[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH 11/12] configure: enable cross-compilation of optionrom
From: |
Paolo Bonzini |
Subject: |
[RFC PATCH 11/12] configure: enable cross-compilation of optionrom |
Date: |
Fri, 29 Apr 2022 16:18:12 +0200 |
While container-based cross compilers are not supported, this already makes
it possible to build x86 optionroms on any machine that has an installation
of GCC and binutils for 32- or 64-bit x86.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 29 +++++++++++++++++++++--------
pc-bios/optionrom/Makefile | 4 +---
2 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/configure b/configure
index 07ee586ef5..6b8e2e2fdb 100755
--- a/configure
+++ b/configure
@@ -2100,6 +2100,13 @@ 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"
@@ -2210,6 +2217,9 @@ fi
QEMU_GA_MSI_MINGW_BIN_PATH="$($pkg_config --variable=prefix glib-2.0)/bin"
+#######################################
+# cross-compiled firmware targets
+
# Set up build tree symlinks that point back into the source tree
# (these can be both files and directories).
# Caution: avoid adding files or directories here using wildcards. This
@@ -2236,19 +2246,27 @@ done
# Mac OS X ships with a broken assembler
roms=
-if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
+probe_target_compilers i386 x86_64
+if test -n "$target_cc" &&
test "$targetos" != "darwin" && test "$targetos" != "sunos" && \
test "$targetos" != "haiku" && test "$softmmu" = yes ; then
# Different host OS linkers have different ideas about the name of the ELF
# emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
# variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
- if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
+ if "$target_ld" -verbose 2>&1 | grep -q
"^[[:space:]]*$emu[[:space:]]*$"; then
ld_i386_emulation="$emu"
- roms="optionrom"
break
fi
done
+ if test -n "$ld_i386_emulation"; then
+ roms="optionrom"
+ config_mak=pc-bios/optionrom/config.mak
+ 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
+ write_target_makefile >> $config_mak
+ fi
fi
# Only build s390-ccw bios the compiler has -march=z900 or -march=z10 (which is
@@ -2403,7 +2421,6 @@ echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
echo "GLIB_LIBS=$glib_libs" >> $config_host_mak
echo "GLIB_VERSION=$(pkg-config --modversion glib-2.0)" >> $config_host_mak
echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
-echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
echo "STRIP=$strip" >> $config_host_mak
echo "EXESUF=$EXESUF" >> $config_host_mak
@@ -2593,10 +2610,6 @@ for target in $target_list; do
done
echo "TCG_TESTS_TARGETS=$tcg_tests_targets" >> $makefile)
-config_mak=pc-bios/optionrom/config.mak
-echo "# Automatically generated by configure - do not modify" > $config_mak
-echo "TOPSRC_DIR=$source_path" >> $config_mak
-
if test "$skip_meson" = no; then
cross="config-meson.cross.new"
meson_quote() {
diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
index 2494ad9c25..6696ce010a 100644
--- a/pc-bios/optionrom/Makefile
+++ b/pc-bios/optionrom/Makefile
@@ -6,7 +6,6 @@ all: multiboot.bin multiboot_dma.bin linuxboot.bin
linuxboot_dma.bin kvmvapic.bi
# Dummy command so that make thinks it has done something
@true
-include ../../config-host.mak
CFLAGS = -O2 -g
quiet-command = $(if $(V),$1,$(if $(2),@printf " %-7s %s\n" $2 $3 && $1, @$1))
@@ -44,13 +43,12 @@ Wa = -Wa,
override ASFLAGS += -32
override CFLAGS += $(call cc-option, $(Wa)-32)
-LD_I386_EMULATION ?= elf_i386
override LDFLAGS = -m $(LD_I386_EMULATION) -T $(SRC_DIR)/flat.lds
pvh.img: pvh.o pvh_main.o
%.o: %.S
- $(call quiet-command,$(CPP) $(CPPFLAGS) -c -o - $< | $(AS) $(ASFLAGS)
-o $@,"AS","$@")
+ $(call quiet-command,$(CC) -E $(CPPFLAGS) -c -o - $< | $(AS) $(ASFLAGS)
-o $@,"AS","$@")
%.o: %.c
$(call quiet-command,$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@,"CC","$@")
--
2.35.1
- [RFC PATCH 06/12] configure, meson: move symlinking of ROMs to meson, (continued)
- [RFC PATCH 06/12] configure, meson: move symlinking of ROMs to meson, Paolo Bonzini, 2022/04/29
- [RFC PATCH 05/12] configure: include more binutils in tests/tcg makefile, Paolo Bonzini, 2022/04/29
- [RFC PATCH 07/12] configure: move symlink configuration earlier, Paolo Bonzini, 2022/04/29
- [RFC PATCH 09/12] pc-bios/optionrom: detect -fno-pie, Paolo Bonzini, 2022/04/29
- [RFC PATCH 08/12] configure: enable cross-compilation of s390-ccw, Paolo Bonzini, 2022/04/29
- [RFC PATCH 11/12] configure: enable cross-compilation of optionrom,
Paolo Bonzini <=