buildroot.busybox.net archive mirror
 help / color / mirror / Atom feed
From: Herve Codina <herve.codina@bootlin.com>
To: buildroot@buildroot.org
Cc: Herve Codina <herve.codina@bootlin.com>,
	Naumann Andreas <ANaumann@ultratronik.de>,
	Peter Seiderer <ps.report@gmx.net>,
	Julien Corjon <corjon.j@ecagroup.com>,
	Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
	"Yann E . MORIN" <yann.morin.1998@free.fr>,
	Ricardo Martincoski <ricardo.martincoski@gmail.com>
Subject: [Buildroot] [PATCH v3 09/16] Makefile: rsync global {TARGET, HOST}_DIR using exclusion file list
Date: Tue, 17 Aug 2021 10:39:23 +0200	[thread overview]
Message-ID: <20210817083930.3718711-10-herve.codina@bootlin.com> (raw)
In-Reply-To: <20210817083930.3718711-1-herve.codina@bootlin.com>

On a per-package build, rsync final {TARGET,HOST}_DIR using
exclusion file list computed for each packages.

This exclusion list allows to rsync only files generated by a given
package. This is needed to avoid any overwrites in final
{TARGET,HOST}_DIR.

As we rsync only files generated by each packages, we need to
to do this rsync recursively on each dependencies to collect
all needed files. This is done based on existing
<PKG>_FINAL_RECURSIVE_DEPENDENCIES

Signed-off-by: Herve Codina <herve.codina@bootlin.com>
---
Changes v1 to v2:
 - Added a note in the commit message related to why this exclusion
   list is needed.
 - Added $(Q) to mkdir and rsync
 - Changed indentations to make calls more readable

Changes v2 to v3:
None

 Makefile | 34 ++++++++++++++++++++++++++++++++--
 1 file changed, 32 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index 3923e5875f..32fad004fe 100644
--- a/Makefile
+++ b/Makefile
@@ -725,10 +725,33 @@ TARGET_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list.txt))
 HOST_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list-host.txt))
 STAGING_DIR_FILES_LISTS = $(sort $(wildcard $(BUILD_DIR)/*/.files-list-staging.txt))
 
+ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y)
+# rsync the contents of per-package directories
+# $1: space-separated list of packages to rsync from
+# $2: 'host' or 'target'
+# $3: destination directory
+# $4: exclude file list to use
+define per-package-rsync-delta
+	$(Q)mkdir -p $(3)
+	$(foreach pkg,$(1),\
+		$(Q)rsync -a --link-dest=$(PER_PACKAGE_DIR)/$(pkg)/$(strip $(2))/ \
+			--filter='merge $($(call UPPERCASE,$(pkg))_DIR)/$(strip $(4))' \
+			$(PER_PACKAGE_DIR)/$(pkg)/$(strip $(2))/ \
+			$(3)$(sep))
+endef
+endif
+
 .PHONY: host-finalize
 host-finalize: $(PACKAGES) $(HOST_DIR) $(HOST_DIR_SYMLINK)
 	@$(call MESSAGE,"Finalizing host directory")
-	$(call per-package-rsync,$(sort $(PACKAGES)),host,$(HOST_DIR))
+	$(call per-package-rsync-delta, \
+		$(sort $(foreach pkg, $(PACKAGES), \
+			$(pkg) $($(call UPPERCASE,$(pkg))_FINAL_RECURSIVE_DEPENDENCIES)) \
+		), \
+		host, \
+		$(HOST_DIR), \
+		.files-final-rsync-host.exclude_rsync \
+	)
 
 .PHONY: staging-finalize
 staging-finalize: $(STAGING_DIR_SYMLINK)
@@ -736,7 +759,14 @@ staging-finalize: $(STAGING_DIR_SYMLINK)
 .PHONY: target-finalize
 target-finalize: $(PACKAGES) $(TARGET_DIR) host-finalize
 	@$(call MESSAGE,"Finalizing target directory")
-	$(call per-package-rsync,$(sort $(PACKAGES)),target,$(TARGET_DIR))
+	$(call per-package-rsync-delta, \
+		$(sort $(foreach pkg, $(PACKAGES), \
+			$(pkg) $($(call UPPERCASE,$(pkg))_FINAL_RECURSIVE_DEPENDENCIES)) \
+		), \
+		target, \
+		$(TARGET_DIR), \
+		.files-final-rsync.exclude_rsync \
+	)
 	$(foreach hook,$(TARGET_FINALIZE_HOOKS),$($(hook))$(sep))
 	rm -rf $(TARGET_DIR)/usr/include $(TARGET_DIR)/usr/share/aclocal \
 		$(TARGET_DIR)/usr/lib/pkgconfig $(TARGET_DIR)/usr/share/pkgconfig \
-- 
2.31.1

_______________________________________________
buildroot mailing list
buildroot@busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot

  parent reply	other threads:[~2021-08-17  8:41 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-17  8:39 [Buildroot] [PATCH v3 00/16] Overwritten file detection and fixes, one more step to TLP build Herve Codina
2021-08-17  8:39 ` [Buildroot] [PATCH v3 01/16] package/pkg-python: fix PKG_PYTHON_FIXUP_SYSCONFIGDATA Herve Codina
2021-08-17  8:39 ` [Buildroot] [PATCH v3 02/16] package/pkg-python: invalidate precompiled _sysconfigdata*.pyc Herve Codina
2021-08-17  8:39 ` [Buildroot] [PATCH v3 03/16] package/pkg-generic.mk: move python fixup to generic package infrastructure Herve Codina
2021-08-17  8:39 ` [Buildroot] [PATCH v3 04/16] package/owfs: remove Python sysconfigdata fixup Herve Codina
2021-08-17  8:39 ` [Buildroot] [PATCH v3 05/16] qt5: Fix sporadic build failure during top-level parallel build Herve Codina
2021-08-28 16:38   ` Yann E. MORIN
2021-08-28 17:39     ` Yann E. MORIN
2021-08-28 20:19   ` Yann E. MORIN
2021-08-17  8:39 ` [Buildroot] [PATCH v3 06/16] package/pkg-qmake.mk: Move QT5_QT_CONF_FIXUP to post-prepare hook Herve Codina
2021-08-28 20:19   ` Yann E. MORIN
2021-08-17  8:39 ` [Buildroot] [PATCH v3 07/16] package/pkg-generic.mk: detect files overwritten in TARGET_DIR and HOST_DIR Herve Codina
2021-08-28 22:47   ` Yann E. MORIN
2021-08-29 11:39     ` Thomas Petazzoni
2021-08-29 12:51       ` Yann E. MORIN
2021-08-29 16:40         ` Yann E. MORIN
2021-08-30  9:46           ` Arnout Vandecappelle
2021-08-29 15:01       ` Arnout Vandecappelle
2021-08-31 15:35         ` Andreas Naumann
2021-09-17 19:43   ` Yann E. MORIN
2021-08-17  8:39 ` [Buildroot] [PATCH v3 08/16] package/pkg-generic.mk: generate final rsync exclude file list Herve Codina
2021-08-17  8:39 ` Herve Codina [this message]
2021-08-17  8:39 ` [Buildroot] [PATCH v3 10/16] Makefile: breaks hardlinks in global {TARGET, HOST}_DIR on per-package build Herve Codina
2021-09-17 19:51   ` Yann E. MORIN
2023-10-01 12:56   ` Peter Korsgaard
2023-10-13 14:36     ` Peter Korsgaard
2021-08-17  8:39 ` [Buildroot] [PATCH v3 11/16] package/pkg-generic.mk: fix per-package <pkg>-{reconfigure, rebuild, reinstall} Herve Codina
2021-08-17  8:39 ` [Buildroot] [PATCH v3 12/16] package/pkg-generic.mk: remove .files-final-rsync.before temporary file Herve Codina
2021-08-17  8:39 ` [Buildroot] [PATCH v3 13/16] support/testing/infra: add log_file_path() function Herve Codina
2021-08-29 10:42   ` Yann E. MORIN
2021-08-17  8:39 ` [Buildroot] [PATCH v3 14/16] support/testing/tests: add test for check_bin_arch Herve Codina
2021-08-29 10:46   ` Yann E. MORIN
2021-08-17  8:39 ` [Buildroot] [PATCH v3 15/16] support/testing/tests: add test for file overwrite detection Herve Codina
2021-08-17  8:39 ` [Buildroot] [PATCH v3 16/16] package/pkg-generic.mk: move fixup-libtool-files to post-prepare hook Herve Codina
2021-08-28 14:47 ` [Buildroot] [PATCH v3 00/16] Overwritten file detection and fixes, one more step to TLP build Yann E. MORIN

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=20210817083930.3718711-10-herve.codina@bootlin.com \
    --to=herve.codina@bootlin.com \
    --cc=ANaumann@ultratronik.de \
    --cc=buildroot@buildroot.org \
    --cc=corjon.j@ecagroup.com \
    --cc=ps.report@gmx.net \
    --cc=ricardo.martincoski@gmail.com \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=yann.morin.1998@free.fr \
    /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).