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>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	George Dunlap <george.dunlap@citrix.com>,
	"Ian Jackson" <iwj@xenproject.org>,
	Jan Beulich <jbeulich@suse.com>, Julien Grall <julien@xen.org>,
	Stefano Stabellini <sstabellini@kernel.org>, Wei Liu <wl@xen.org>
Subject: [XEN PATCH v8 03/47] build: generate "include/xen/compile.h" with if_changed
Date: Thu, 25 Nov 2021 13:39:22 +0000	[thread overview]
Message-ID: <20211125134006.1076646-4-anthony.perard@citrix.com> (raw)
In-Reply-To: <20211125134006.1076646-1-anthony.perard@citrix.com>

This will avoid regenerating "compile.h" if the content hasn't changed.

As it's currently the case, the file isn't regenerated during `sudo
make install` if it exist and does belong to a different user, thus we
can remove the target "delete-unfresh-files". Target "$(TARGET)" still
need a phony dependency, so add "FORCE".

Use "$(dot-target).tmp" as temporary file as this is already cover by
".*.tmp" partern in ".gitconfig".

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---

Notes:
    v8:
    - drop change in .gitignore
    
    v7:
    - Use $(if_changed,) instead of importing a new macro from Linux
      (filechk).
    - use $(dot-target).tmp as temporary file, that way is hiden, and
      already cover by .gitignore via ".*.tmp". (filechk was doing the same)
    - update .gitignore.

 xen/Makefile | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index b2a63edca1eb..2ad7da7ad67b 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -365,7 +365,7 @@ _debug:
 	$(OBJDUMP) -D -S $(TARGET)-syms > $(TARGET).s
 
 .PHONY: _clean
-_clean: delete-unfresh-files
+_clean:
 	$(MAKE) -C tools clean
 	$(MAKE) $(clean) include
 	$(MAKE) $(clean) common
@@ -383,7 +383,7 @@ _clean: delete-unfresh-files
 		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
 	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
 	rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h
-	rm -f .banner .allconfig.tmp
+	rm -f .banner .allconfig.tmp include/xen/compile.h
 
 .PHONY: _distclean
 _distclean: clean
@@ -393,7 +393,7 @@ $(TARGET).gz: $(TARGET)
 	gzip -n -f -9 < $< > $@.new
 	mv $@.new $@
 
-$(TARGET): delete-unfresh-files
+$(TARGET): FORCE
 	$(MAKE) -C tools
 	$(MAKE) -f $(BASEDIR)/Rules.mk include/xen/compile.h
 	[ -e arch/$(TARGET_ARCH)/efi ] && for f in $$(cd common/efi; echo *.[ch]); \
@@ -406,14 +406,6 @@ $(TARGET): delete-unfresh-files
 	$(MAKE) -f $(BASEDIR)/Rules.mk arch/$(TARGET_ARCH)/include/asm/asm-offsets.h
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
 
-# drivers/char/console.o contains static banner/compile info. Blow it away.
-# Don't refresh these files during e.g., 'sudo make install'
-.PHONY: delete-unfresh-files
-delete-unfresh-files:
-	@if [ ! -r include/xen/compile.h -o -O include/xen/compile.h ]; then \
-		rm -f include/xen/compile.h; \
-	fi
-
 quiet_cmd_banner = BANNER  $@
 define cmd_banner
     if which figlet >/dev/null 2>&1 ; then \
@@ -428,9 +420,11 @@ endef
 	$(call if_changed,banner)
 targets += .banner
 
-# compile.h contains dynamic build info. Rebuilt on every 'make' invocation.
-include/xen/compile.h: include/xen/compile.h.in .banner
-	@sed -e 's/@@date@@/$(XEN_BUILD_DATE)/g' \
+# 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 \
+	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' \
@@ -440,10 +434,17 @@ include/xen/compile.h: include/xen/compile.h.in .banner
 	    -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \
 	    -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \
 	    -e 's!@@changeset@@!$(shell tools/scmversion $(XEN_ROOT) || echo "unavailable")!g' \
-	    < include/xen/compile.h.in > $@.new
+	    < $< > $(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
 	@cat .banner
-	@sed -rf tools/process-banner.sed < .banner >> $@.new
-	@mv -f $@.new $@
+	$(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 $@ $<
-- 
Anthony PERARD



  parent reply	other threads:[~2021-11-25 13:40 UTC|newest]

Thread overview: 110+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-25 13:39 [XEN PATCH v8 00/47] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 01/47] build: factorise generation of the linker scripts Anthony PERARD
2021-12-14 16:54   ` Julien Grall
2021-12-14 17:09     ` Anthony PERARD
2021-12-14 17:12       ` Julien Grall
2021-11-25 13:39 ` [XEN PATCH v8 02/47] xen: move include/asm-* to arch/*/include/asm Anthony PERARD
2021-12-02 13:54   ` Jan Beulich
2021-12-14 16:59   ` Julien Grall
2021-12-14 17:39   ` Andrew Cooper
2021-11-25 13:39 ` Anthony PERARD [this message]
2021-12-02 13:57   ` [XEN PATCH v8 03/47] build: generate "include/xen/compile.h" with if_changed Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 04/47] build: set XEN_BUILD_EFI earlier Anthony PERARD
2021-12-02 14:06   ` Jan Beulich
2021-12-07 11:04     ` Anthony PERARD
2021-12-07 11:24       ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 05/47] build: adjust $(TARGET).efi creation in arch/arm Anthony PERARD
2021-12-14 17:01   ` Julien Grall
2021-11-25 13:39 ` [XEN PATCH v8 06/47] build: avoid re-executing the main Makefile by introducing build.mk Anthony PERARD
2021-12-06 16:42   ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 07/47] build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile Anthony PERARD
2021-12-06 16:52   ` Jan Beulich
2021-12-07 11:23     ` Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 08/47] build: prepare to always invoke $(MAKE) from xen/, use $(obj) Anthony PERARD
2021-12-14 17:02   ` Julien Grall
2021-11-25 13:39 ` [XEN PATCH v8 09/47] build: rework test/livepatch/Makefile Anthony PERARD
2021-12-06 17:00   ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 10/47] build: rework cloc recipe Anthony PERARD
2021-12-06 17:03   ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 11/47] build: fix enforce unique symbols for recent clang version Anthony PERARD
2021-12-07 10:23   ` Jan Beulich
2021-12-07 11:33     ` Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 12/47] build: build everything from the root dir, use obj=$subdir Anthony PERARD
2021-12-07 11:10   ` Jan Beulich
2021-12-16 11:08     ` Anthony PERARD
2021-12-20 11:29       ` Anthony PERARD
2021-12-21  7:55         ` Jan Beulich
2021-12-21  9:30           ` Anthony PERARD
2021-12-14 17:03   ` Julien Grall
2021-11-25 13:39 ` [XEN PATCH v8 13/47] build: introduce if_changed_deps Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 14/47] build: rename __LINKER__ to LINKER_SCRIPT Anthony PERARD
2021-12-14 17:05   ` Julien Grall
2021-12-15  7:49     ` Jan Beulich
2021-12-15  9:20       ` Julien Grall
2021-11-25 13:39 ` [XEN PATCH v8 15/47] build: hook kconfig into xen build system Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 16/47] xen/tools/kconfig: fix build with -Wdeclaration-after-statement Anthony PERARD
2021-12-07 11:20   ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 17/47] build: remove KBUILD_ specific from Makefile.host Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 18/47] build: handle always-y and hostprogs-always-y Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 19/47] build: start building the tools with the main makefiles Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 20/47] build: add headers path to CFLAGS once for all archs Anthony PERARD
2021-12-14 17:06   ` Julien Grall
2021-11-25 13:39 ` [XEN PATCH v8 21/47] build: generate x86's asm-macros.h with filechk Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 22/47] build: clean-up "clean" rules of duplication Anthony PERARD
2021-12-14 17:07   ` Julien Grall
2021-11-25 13:39 ` [XEN PATCH v8 23/47] build: rework "clean" to clean from the root dir Anthony PERARD
2021-12-10 13:29   ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 24/47] build: use main rune to build host binary x86's mkelf32 and mkreloc Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 25/47] build: rework coverage and ubsan CFLAGS handling Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 26/47] build,x86: remove the need for build32.mk Anthony PERARD
2021-12-21 13:33   ` Jan Beulich
2022-01-18 10:50     ` Anthony PERARD
2022-01-18 13:44       ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 27/47] build: grab common EFI source files in arch specific dir Anthony PERARD
2021-12-21 13:53   ` Jan Beulich
2022-01-18 11:06     ` Anthony PERARD
2022-01-18 13:49       ` Jan Beulich
2022-01-18 16:49         ` Anthony PERARD
2022-01-18 16:21       ` Anthony PERARD
2022-01-19  7:46         ` Jan Beulich
2022-01-20 10:16           ` Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 28/47] build: replace $(BASEDIR) by $(objtree) Anthony PERARD
2021-12-21 13:55   ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 29/47] build: replace $(BASEDIR) and use $(srctree) Anthony PERARD
2021-12-21 14:00   ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 30/47] build: rework "headers*.chk" prerequisite in include/ Anthony PERARD
2021-12-21 14:07   ` Jan Beulich
2022-01-18 11:41     ` Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 31/47] build: specify source tree in include/ for prerequisite Anthony PERARD
2021-12-21 14:16   ` Jan Beulich
2022-01-18 12:14     ` Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 32/47] build: shuffle main Makefile Anthony PERARD
2021-12-21 14:18   ` Jan Beulich
2022-01-20 17:27     ` Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 33/47] build: adding out-of-tree support to the xen build Anthony PERARD
2022-01-10 11:26   ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 34/47] build: add %.E targets Anthony PERARD
2021-12-16 11:18   ` Andrew Cooper
2021-12-16 11:56     ` Anthony PERARD
2021-12-21 14:20   ` Jan Beulich
2021-11-25 13:39 ` [XEN PATCH v8 35/47] RFC, no-VPATH: Kconfig: tell where Kconfig files are Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 36/47] RFC, no-VPATH: Kconfig: only ready auto.conf from objtree Anthony PERARD
2021-12-21 14:23   ` Jan Beulich
2021-12-21 15:12     ` Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 37/47] RFC, no-VPATH: build: remove --include-dir option from MAKEFLAGS Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 38/47] WIP, no-VPATH: rework Makefile.host Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 39/47] RFC, no-VPATH: x86/boot: workaround gcc including the wrong file Anthony PERARD
2021-11-25 13:39 ` [XEN PATCH v8 40/47] RFC, no-VPATH: prepend $(srctree) to source prerequisite Anthony PERARD
2021-11-25 13:40 ` [XEN PATCH v8 41/47] WIP, no-VPATH: build object from generated C files Anthony PERARD
2021-11-25 13:40 ` [XEN PATCH v8 42/47] RFC, no-VPATH: workaround includes in xsm/flask Anthony PERARD
2021-11-25 13:40 ` [XEN PATCH v8 43/47] WIP, no-VPATH: build object from generated assembly source file Anthony PERARD
2021-11-25 13:40 ` [XEN PATCH v8 44/47] WIP, no-VPATH: build object from S source to be in build_in.o Anthony PERARD
2021-11-25 13:40 ` [XEN PATCH v8 45/47] WIP, no-VPATH: build xen, out-of-tree! Anthony PERARD
2021-11-25 13:40 ` [XEN PATCH v8 46/47] RFC, no-VPATH: remove check for clean source tree for out-of-tree builds Anthony PERARD
2021-11-25 13:40 ` [XEN PATCH v8 47/47] WIP: no more link farming for xen-shim Anthony PERARD
2021-12-21 15:26 ` [XEN PATCH v8 00/47] xen: Build system improvements, now with out-of-tree build! Jan Beulich
2022-01-10 11:19   ` Jan Beulich
2022-01-18 10:33   ` Anthony PERARD
2022-01-21  6:59 ` Jan Beulich
2022-01-21 10:34   ` Anthony PERARD
2022-01-21 10:58     ` Jan Beulich

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=20211125134006.1076646-4-anthony.perard@citrix.com \
    --to=anthony.perard@citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=george.dunlap@citrix.com \
    --cc=iwj@xenproject.org \
    --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.