qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: alex.bennee@linaro.org
Subject: [PATCH 02/20] pc-bios/optionrom: detect CC options just once
Date: Fri, 26 Aug 2022 00:27:27 +0200	[thread overview]
Message-ID: <20220825222745.38779-3-pbonzini@redhat.com> (raw)
In-Reply-To: <20220825222745.38779-1-pbonzini@redhat.com>

In preparation for adding Docker container support, detect compiler options
just once rather than once per Make run; container startup overhead is
substantial and doing the detection just once makes things faster.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 pc-bios/optionrom/Makefile | 37 +++++++++++++++++++++++++------------
 1 file changed, 25 insertions(+), 12 deletions(-)

diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
index 3e06c11dea..f514e4f84b 100644
--- a/pc-bios/optionrom/Makefile
+++ b/pc-bios/optionrom/Makefile
@@ -8,23 +8,33 @@ all: multiboot.bin multiboot_dma.bin linuxboot.bin linuxboot_dma.bin kvmvapic.bi
 
 CFLAGS = -O2 -g
 
+NULL :=
+SPACE := $(NULL) #
+TARGET_PREFIX := $(patsubst %/,%:$(SPACE),$(TARGET_DIR))
+
+quiet-@ = $(if $(V),,@)
 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 $(EXTRA_CFLAGS) -m16
-
-# If -fcf-protection is enabled in flags or compiler defaults that will
-# conflict with -march=i486
-override CFLAGS += $(call cc-option, -fcf-protection=none)
 
 # Flags for dependency generation
 override CPPFLAGS += -MMD -MP -MT $@ -MF $(@D)/$(*F).d
 
-override CFLAGS += $(call cc-option, -fno-pie)
-override CFLAGS += $(call cc-option, -no-pie)
+override CFLAGS += -march=i486 -Wall $(EXTRA_CFLAGS) -m16
 override CFLAGS += -ffreestanding -I$(TOPSRC_DIR)/include
-override CFLAGS += $(call cc-option, -fno-stack-protector)
-override CFLAGS += $(call cc-option, -Wno-array-bounds)
+
+cc-test = $(CC) -Werror $1 -c -o /dev/null -xc /dev/null >/dev/null 2>/dev/null
+cc-option = if $(call cc-test, $1); then \
+    echo "$(TARGET_PREFIX)$1 detected" && echo "override CFLAGS += $1" >&3; else \
+    echo "$(TARGET_PREFIX)$1 not detected" $(if $2,&& echo "override CFLAGS += $2" >&3); fi
+
+# If -fcf-protection is enabled in flags or compiler defaults that will
+# conflict with -march=i486
+config-cc.mak: Makefile
+	$(quiet-@)($(call cc-option,-fcf-protection=none); \
+	    $(call cc-option,-fno-pie); \
+	    $(call cc-option,-no-pie); \
+	    $(call cc-option,-fno-stack-protector); \
+	    $(call cc-option,-Wno-array-bounds)) 3> config-cc.mak
+-include config-cc.mak
 
 override LDFLAGS = -nostdlib -Wl,-T,$(SRC_DIR)/flat.lds
 
@@ -50,7 +60,10 @@ include $(wildcard *.d)
 clean:
 	rm -f *.o *.d *.raw *.img *.bin *~
 
+distclean:
+	rm -f config-cc.mak
+
 # suppress auto-removal of intermediate files
 .SECONDARY:
 
-.PHONY: all clean
+.PHONY: all clean distclean
-- 
2.37.1




  parent reply	other threads:[~2022-08-25 22:38 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-25 22:27 [PATCH 00/20] Cross compilation changes for 7.2 Paolo Bonzini
2022-08-25 22:27 ` [PATCH 01/20] configure: do not invoke as/ld directly for pc-bios/optionrom Paolo Bonzini
2022-09-26 15:25   ` Alex Bennée
2022-08-25 22:27 ` Paolo Bonzini [this message]
2022-09-26 15:27   ` [PATCH 02/20] pc-bios/optionrom: detect CC options just once Alex Bennée
2022-08-25 22:27 ` [PATCH 03/20] pc-bios/s390-ccw: " Paolo Bonzini
2022-08-25 22:27 ` [PATCH 04/20] vof: add distclean target Paolo Bonzini
2022-08-25 22:27 ` [PATCH 05/20] build: add recursive distclean rules Paolo Bonzini
2022-08-25 22:27 ` [PATCH 06/20] configure: return status code from probe_target_compiler Paolo Bonzini
2022-08-25 22:27 ` [PATCH 07/20] configure: store container engine in config-host.mak Paolo Bonzini
2022-08-25 22:27 ` [PATCH 08/20] tests: simplify Makefile invocation for tests/tcg Paolo Bonzini
2022-08-25 22:27 ` [PATCH 09/20] tests/tcg: remove -f from Makefile invocation Paolo Bonzini
2022-08-25 22:27 ` [PATCH 10/20] tests/tcg: add distclean rule Paolo Bonzini
2022-08-25 22:27 ` [PATCH 11/20] tests/tcg: unify ppc64 and ppc64le Makefiles Paolo Bonzini
2022-08-25 22:27 ` [PATCH 12/20] tests/tcg: clean up calls to run-test Paolo Bonzini
2022-08-25 22:27 ` [PATCH 13/20] tests/tcg: move compiler tests to Makefiles Paolo Bonzini
2022-08-25 22:27 ` [PATCH 14/20] configure: move tests/tcg/Makefile.prereqs to root build directory Paolo Bonzini
2022-08-25 22:27 ` [PATCH 15/20] configure: unify creation of cross-compilation Makefiles Paolo Bonzini
2022-08-25 22:27 ` [PATCH 16/20] configure: cleanup creation of tests/tcg target config Paolo Bonzini
2022-08-25 22:27 ` [PATCH 17/20] configure: build ROMs with container-based cross compilers Paolo Bonzini
2022-08-25 22:27 ` [PATCH 18/20] pc-bios/optionrom: Adopt meson style Make output Paolo Bonzini
2022-08-25 22:27 ` [PATCH 19/20] pc-bios/s390-ccw: " Paolo Bonzini
2022-08-25 22:27 ` [PATCH 20/20] pc-bios/vof: " Paolo Bonzini
2022-09-26 11:22 ` [PATCH 00/20] Cross compilation changes for 7.2 Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220825222745.38779-3-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).