All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
Cc: Anthony PERARD <anthony.perard@citrix.com>,
	Jan Beulich <jbeulich@suse.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
Subject: [XEN PATCH v9 02/30] build: avoid re-executing the main Makefile by introducing build.mk
Date: Tue, 25 Jan 2022 11:00:35 +0000	[thread overview]
Message-ID: <20220125110103.3527686-3-anthony.perard@citrix.com> (raw)
In-Reply-To: <20220125110103.3527686-1-anthony.perard@citrix.com>

Currently, the xen/Makefile is re-parsed several times: once to start
the build process, and several more time with Rules.mk including it.
This makes it difficult to work with a Makefile used for several
purpose, and it actually slow down the build process.

So this patch introduce "build.mk" which Rules.mk will use when
present instead of the "Makefile" of a directory. (Linux's Kbuild
named that file "Kbuild".)

We have a few targets to move to "build.mk" identified by them been
build via "make -f Rules.mk" without changing directory.

As for the main targets like "build", we can have them depends on
there underscore-prefix targets like "_build" without having to use
"Rules.mk" while still retaining the check for unsupported
architecture. (Those main rules are changed to be single-colon as
there should only be a single recipe for them.)

With nearly everything needed to move to "build.mk" moved, there is a
single dependency left from "Rules.mk": the variable $(TARGET), so its
assignement is moved to the main Makefile.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
---

Notes:
    v9:
    - reviewed
    
    v8:
    - for $(main-targets) rules, use ; on a single line instead of adding a
      recipe with only @:
    - To include build.mk instead of Makefile, use a simpler expresion with
      $(firstword) and remove the use of $(mk-dir) var
    - removed an extra blank line, and one when updating $(targets)
    - reword patch description
    
    v7:
    - new patch

 xen/Makefile | 70 +++++-----------------------------------------------
 xen/Rules.mk |  6 ++---
 xen/build.mk | 61 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 69 insertions(+), 68 deletions(-)
 create mode 100644 xen/build.mk

diff --git a/xen/Makefile b/xen/Makefile
index f3ff03a7170e..fb37043d08e0 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -47,6 +47,8 @@ export KCONFIG_CONFIG ?= .config
 
 export CC CXX LD
 
+export TARGET := $(BASEDIR)/xen
+
 .PHONY: default
 default: build
 
@@ -293,11 +295,12 @@ export CFLAGS_UBSAN
 
 endif # need-config
 
-.PHONY: build install uninstall clean distclean MAP
-build install uninstall debug clean distclean MAP::
+main-targets := build install uninstall clean distclean MAP
+.PHONY: $(main-targets)
 ifneq ($(XEN_TARGET_ARCH),x86_32)
-	$(MAKE) -f Rules.mk MKRELOC=$(MKRELOC) _$@
+$(main-targets): %: _% ;
 else
+$(main-targets):
 	echo "*** Xen x86/32 target no longer supported!"
 endif
 
@@ -406,67 +409,6 @@ $(TARGET): FORCE
 	$(MAKE) -f $(BASEDIR)/Rules.mk arch/$(TARGET_ARCH)/include/asm/asm-offsets.h
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) MKRELOC=$(MKRELOC) $@
 
-quiet_cmd_banner = BANNER  $@
-define cmd_banner
-    if which figlet >/dev/null 2>&1 ; then \
-	echo " Xen $(XEN_FULLVERSION)" | figlet -f $< > $@.tmp; \
-    else \
-	echo " Xen $(XEN_FULLVERSION)" > $@.tmp; \
-    fi; \
-    mv -f $@.tmp $@
-endef
-
-.banner: tools/xen.flf FORCE
-	$(call if_changed,banner)
-targets += .banner
-
-# Don't refresh this files during e.g., 'sudo make install'
-quiet_cmd_compile.h = UPD     $@
-define cmd_compile.h
-    if [ ! -r $@ -o -O $@ ]; then \
-	cat .banner; \
-	sed -e 's/@@date@@/$(XEN_BUILD_DATE)/g' \
-	    -e 's/@@time@@/$(XEN_BUILD_TIME)/g' \
-	    -e 's/@@whoami@@/$(XEN_WHOAMI)/g' \
-	    -e 's/@@domain@@/$(XEN_DOMAIN)/g' \
-	    -e 's/@@hostname@@/$(XEN_BUILD_HOST)/g' \
-	    -e 's!@@compiler@@!$(shell $(CC) $(CFLAGS) --version 2>&1 | head -1)!g' \
-	    -e 's/@@version@@/$(XEN_VERSION)/g' \
-	    -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \
-	    -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \
-	    -e 's!@@changeset@@!$(shell tools/scmversion $(XEN_ROOT) || echo "unavailable")!g' \
-	    < $< > $(dot-target).tmp; \
-	sed -rf tools/process-banner.sed < .banner >> $(dot-target).tmp; \
-	mv -f $(dot-target).tmp $@; \
-    fi
-endef
-
-include/xen/compile.h: include/xen/compile.h.in .banner FORCE
-	$(if $(filter-out FORCE,$?),$(Q)rm -fv $@)
-	$(call if_changed,compile.h)
-
-targets += include/xen/compile.h
-
-asm-offsets.s: arch/$(TARGET_ARCH)/$(TARGET_SUBARCH)/asm-offsets.c
-	$(CC) $(call cpp_flags,$(c_flags)) -S -g0 -o $@.new -MQ $@ $<
-	$(call move-if-changed,$@.new,$@)
-
-arch/$(TARGET_ARCH)/include/asm/asm-offsets.h: asm-offsets.s
-	@(set -e; \
-	  echo "/*"; \
-	  echo " * DO NOT MODIFY."; \
-	  echo " *"; \
-	  echo " * This file was auto-generated from $<"; \
-	  echo " *"; \
-	  echo " */"; \
-	  echo ""; \
-	  echo "#ifndef __ASM_OFFSETS_H__"; \
-	  echo "#define __ASM_OFFSETS_H__"; \
-	  echo ""; \
-	  sed -rne "/^[^#].*==>/{s:.*==>(.*)<==.*:\1:; s: [\$$#]: :; p;}"; \
-	  echo ""; \
-	  echo "#endif") <$< >$@
-
 SUBDIRS = xsm arch/$(TARGET_ARCH) common drivers lib test
 define all_sources
     ( find include -type f -name '*.h' -print; \
diff --git a/xen/Rules.mk b/xen/Rules.mk
index d21930a7bf71..7b8b9047cfd5 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -8,9 +8,6 @@
 include $(XEN_ROOT)/Config.mk
 include $(BASEDIR)/scripts/Kbuild.include
 
-
-TARGET := $(BASEDIR)/xen
-
 # Note that link order matters!
 ALL_OBJS-y               += $(BASEDIR)/common/built_in.o
 ALL_OBJS-y               += $(BASEDIR)/drivers/built_in.o
@@ -36,7 +33,8 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
                                             rodata.cst$(a)) \
                          $(foreach r,rel rel.ro,data.$(r).local)
 
-include Makefile
+# The filename build.mk has precedence over Makefile
+include $(firstword $(wildcard build.mk) Makefile)
 
 # Linking
 # ---------------------------------------------------------------------------
diff --git a/xen/build.mk b/xen/build.mk
new file mode 100644
index 000000000000..3d7a91df22d1
--- /dev/null
+++ b/xen/build.mk
@@ -0,0 +1,61 @@
+quiet_cmd_banner = BANNER  $@
+define cmd_banner
+    if which figlet >/dev/null 2>&1 ; then \
+	echo " Xen $(XEN_FULLVERSION)" | figlet -f $< > $@.tmp; \
+    else \
+	echo " Xen $(XEN_FULLVERSION)" > $@.tmp; \
+    fi; \
+    mv -f $@.tmp $@
+endef
+
+.banner: tools/xen.flf FORCE
+	$(call if_changed,banner)
+
+targets += .banner
+
+# Don't refresh this files during e.g., 'sudo make install'
+quiet_cmd_compile.h = UPD     $@
+define cmd_compile.h
+    if [ ! -r $@ -o -O $@ ]; then \
+	cat .banner; \
+	sed -e 's/@@date@@/$(XEN_BUILD_DATE)/g' \
+	    -e 's/@@time@@/$(XEN_BUILD_TIME)/g' \
+	    -e 's/@@whoami@@/$(XEN_WHOAMI)/g' \
+	    -e 's/@@domain@@/$(XEN_DOMAIN)/g' \
+	    -e 's/@@hostname@@/$(XEN_BUILD_HOST)/g' \
+	    -e 's!@@compiler@@!$(shell $(CC) $(CFLAGS) --version 2>&1 | head -1)!g' \
+	    -e 's/@@version@@/$(XEN_VERSION)/g' \
+	    -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \
+	    -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \
+	    -e 's!@@changeset@@!$(shell tools/scmversion $(XEN_ROOT) || echo "unavailable")!g' \
+	    < $< > $(dot-target).tmp; \
+	sed -rf tools/process-banner.sed < .banner >> $(dot-target).tmp; \
+	mv -f $(dot-target).tmp $@; \
+    fi
+endef
+
+include/xen/compile.h: include/xen/compile.h.in .banner FORCE
+	$(if $(filter-out FORCE,$?),$(Q)rm -fv $@)
+	$(call if_changed,compile.h)
+
+targets += include/xen/compile.h
+
+asm-offsets.s: arch/$(TARGET_ARCH)/$(TARGET_SUBARCH)/asm-offsets.c
+	$(CC) $(call cpp_flags,$(c_flags)) -S -g0 -o $@.new -MQ $@ $<
+	$(call move-if-changed,$@.new,$@)
+
+arch/$(TARGET_ARCH)/include/asm/asm-offsets.h: asm-offsets.s
+	@(set -e; \
+	  echo "/*"; \
+	  echo " * DO NOT MODIFY."; \
+	  echo " *"; \
+	  echo " * This file was auto-generated from $<"; \
+	  echo " *"; \
+	  echo " */"; \
+	  echo ""; \
+	  echo "#ifndef __ASM_OFFSETS_H__"; \
+	  echo "#define __ASM_OFFSETS_H__"; \
+	  echo ""; \
+	  sed -rne "/^[^#].*==>/{s:.*==>(.*)<==.*:\1:; s: [\$$#]: :; p;}"; \
+	  echo ""; \
+	  echo "#endif") <$< >$@
-- 
Anthony PERARD



  parent reply	other threads:[~2022-01-25 11:01 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-25 11:00 [XEN PATCH v9 00/30] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 01/30] build: set XEN_BUILD_EFI earlier Anthony PERARD
2022-01-27 15:35   ` Jan Beulich
2022-01-25 11:00 ` Anthony PERARD [this message]
2022-01-25 11:00 ` [XEN PATCH v9 03/30] build: fix exported variable name CFLAGS_stack_boundary Anthony PERARD
2022-01-27 15:36   ` Jan Beulich
2022-01-28 11:14   ` Jan Beulich
2022-01-28 15:04     ` Anthony PERARD
2022-01-31  8:57       ` Jan Beulich
2022-01-25 11:00 ` [XEN PATCH v9 04/30] build: set ALL_OBJS in main Makefile; move prelink.o to main Makefile Anthony PERARD
2022-01-27 15:50   ` Jan Beulich
2022-01-28 11:32     ` Anthony PERARD
2022-01-28 11:41       ` Jan Beulich
2022-02-17 16:29         ` Julien Grall
2022-02-17 19:29           ` Julien Grall
2022-02-17 15:58   ` Ping: " Anthony PERARD
2022-02-17 19:30   ` Julien Grall
2022-01-25 11:00 ` [XEN PATCH v9 05/30] build: prepare to always invoke $(MAKE) from xen/, use $(obj) Anthony PERARD
2022-01-25 16:06   ` Daniel P. Smith
2022-01-25 11:00 ` [XEN PATCH v9 06/30] build: rework test/livepatch/Makefile Anthony PERARD
2022-02-17 15:42   ` Ping: " Anthony PERARD
2022-03-08 14:15   ` Ross Lagerwall
2022-01-25 11:00 ` [XEN PATCH v9 07/30] build: rework cloc recipe Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 08/30] build: fix enforce unique symbols for recent clang version Anthony PERARD
2022-01-27 15:57   ` Jan Beulich
2022-01-28 12:03     ` Anthony PERARD
2022-01-28 12:43       ` Jan Beulich
2022-01-28 15:52         ` Anthony PERARD
2022-01-31  8:59           ` Jan Beulich
2022-01-25 11:00 ` [XEN PATCH v9 09/30] build: build everything from the root dir, use obj=$subdir Anthony PERARD
2022-01-25 16:07   ` Daniel P. Smith
2022-01-25 11:00 ` [XEN PATCH v9 10/30] build: introduce if_changed_deps Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 11/30] build: rename __LINKER__ to LINKER_SCRIPT Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 12/30] build: hook kconfig into xen build system Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 13/30] xen/tools/kconfig: fix build with -Wdeclaration-after-statement Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 14/30] build: remove KBUILD_ specific from Makefile.host Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 15/30] build: handle always-y and hostprogs-always-y Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 16/30] build: start building the tools with the main makefiles Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 17/30] build: add headers path to CFLAGS once for all archs Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 18/30] build: generate x86's asm-macros.h with filechk Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 19/30] build: clean-up "clean" rules of duplication Anthony PERARD
2022-01-25 16:09   ` Daniel P. Smith
2022-01-25 11:00 ` [XEN PATCH v9 20/30] build: rework "clean" to clean from the root dir Anthony PERARD
2022-01-25 16:09   ` Daniel P. Smith
2022-02-17 19:32   ` Julien Grall
2022-01-25 11:00 ` [XEN PATCH v9 21/30] build: use main rune to build host binary x86's mkelf32 and mkreloc Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 22/30] build: rework coverage and ubsan CFLAGS handling Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 23/30] build,x86: remove the need for build32.mk Anthony PERARD
2022-03-03 10:29   ` Jan Beulich
2022-03-03 15:31     ` Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 24/30] build: grab common EFI source files in arch specific dir Anthony PERARD
2022-02-08 21:08   ` Julien Grall
2022-03-03 10:37   ` Jan Beulich
2022-03-03 15:41     ` Anthony PERARD
2022-03-03 16:01       ` Jan Beulich
2022-03-03 16:50         ` Anthony PERARD
2022-03-03 16:54           ` Jan Beulich
2022-01-25 11:00 ` [XEN PATCH v9 25/30] build: replace $(BASEDIR) by $(objtree) Anthony PERARD
2022-01-25 11:00 ` [XEN PATCH v9 26/30] build: replace $(BASEDIR) and use $(srctree) Anthony PERARD
2022-01-25 16:10   ` Daniel P. Smith
2022-03-03 15:17   ` Anthony PERARD
2022-01-25 11:01 ` [XEN PATCH v9 27/30] build: rework "headers*.chk" prerequisite in include/ Anthony PERARD
2022-03-03 10:44   ` Jan Beulich
2022-01-25 11:01 ` [XEN PATCH v9 28/30] build: specify source tree in include/ for prerequisite Anthony PERARD
2022-03-03 10:53   ` Jan Beulich
2022-01-25 11:01 ` [XEN PATCH v9 29/30] build: shuffle main Makefile Anthony PERARD
2022-03-03 11:06   ` Jan Beulich
2022-01-25 11:01 ` [XEN PATCH v9 30/30] build: adding out-of-tree support to the xen build Anthony PERARD
2022-01-25 11:37   ` Anthony PERARD
2022-02-17 19:35     ` Julien Grall
2022-01-25 16:11   ` Daniel P. Smith

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=20220125110103.3527686-3-anthony.perard@citrix.com \
    --to=anthony.perard@citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=george.dunlap@citrix.com \
    --cc=jbeulich@suse.com \
    --cc=julien@xen.org \
    --cc=sstabellini@kernel.org \
    --cc=wl@xen.org \
    --cc=xen-devel@lists.xenproject.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 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.