From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 05/11] package/pkg-generic.mk: rework pkg_size logic with the "installed" step
Date: Fri, 1 May 2020 22:44:41 +0200 [thread overview]
Message-ID: <20200501204441.GA15673@scaer> (raw)
In-Reply-To: <20200430095249.782597-6-thomas.petazzoni@bootlin.com>
On 2020-04-30 11:52 +0200, Thomas Petazzoni spake thusly:
> This commits reworks the pkg_size logic to no longer use the
> GLOBAL_INSTRUMENTATION_HOOKS mechanism, but instead be directly
> implemented within the configure step and install step.
>
> The problem with the current implementation in the
> GLOBAL_INSTRUMENTATION_HOOKS is that we only capture what is installed
> in $(HOST_DIR) during the "host installation step", what is installed
> in $(TARGET_DIR) during the "target installation step" and what is
> installed in "$(STAGING_DIR)" during the staging installation step.
>
> While this seems reasonable in principle, it is in fact not completely
> true. For example, "toolchain", which is a target package, installs
> tons of files in $(HOST_DIR). "qt5base", which is also a target
> package, also installs things in $(HOST_DIR). Same with the "syslinux"
> package.
>
> The idea behind this patch is pretty simple:
>
> - At the beginning of the configure step, right after the per-package
> directories have been populated (if BR2_PER_PACKAGE_DIRECTORIES=y),
> we capture the state of the HOST_DIR, TARGET_DIR and STAGING_DIR.
>
> - At the end of all install steps (which is possible thanks to the
> newly introduced "install" step), we capture again the state of
> HOST_DIR, TARGET_DIR and STAGING_DIR, and compare it to what we
> have saved at the configure step.
I don't understand wy tht can't be achieved in the instrumentation hooks
mechanism:
$(if $(filter start-configure,$(1)-$(2)),\
$(call step_pkg_size_before,$(TARGET_DIR))\
$(call step_pkg_size_before,$(STAGING_DIR),-staging)\
$(call step_pkg_size_before,$(HOST_DIR),-host))
$(if $(filter end-install,$(1)-$(2)),\
$(call step_pkg_size_after,$(TARGET_DIR))\
$(call step_pkg_size_after,$(STAGING_DIR),-staging)\
$(call step_pkg_size_after,$(HOST_DIR),-host))
Of course, it means you have to add a call the instrumentation hooks
from the new 'install' step.
> So regardless of whether a file has been installed in $(HOST_DIR)
> during the target or staging installation steps of a target package,
> or if a host package has installed a file in $(TARGET_DIR), we will
> detect it.
>
> The pkg_size_before and pkg_size_after macros are intentionally left
> where they are (even if they now fall in the middle of the
> GLOBAL_INSTRUMENTATION_HOOKS implementations) to minimize the diffstat
> and facilitate review.
>
> Note that we also have to change check_bin_arch to be explicitly
> called from the install step rather than through a
> GLOBAL_INSTRUMENTATION_HOOKS as it depends on the .files-list.txt file
> produced by the pkg_size_after function.
And that would solve this as well.
Regards,
Yann E. MORIN.
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
> ---
> package/pkg-generic.mk | 42 ++++++++++++++----------------------------
> 1 file changed, 14 insertions(+), 28 deletions(-)
>
> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> index efdc32e355..3fb1e5f8c3 100644
> --- a/package/pkg-generic.mk
> +++ b/package/pkg-generic.mk
> @@ -59,7 +59,7 @@ GLOBAL_INSTRUMENTATION_HOOKS += step_time
>
> # $(1): base directory to search in
> # $(2): suffix of file (optional)
> -define step_pkg_size_before
> +define pkg_size_before
> cd $(1); \
> LC_ALL=C find . \( -type f -o -type l \) -printf '%T@:%i:%#m:%y:%s,%p\n' \
> | LC_ALL=C sort > $($(PKG)_DIR)/.files-list$(2).before
> @@ -67,7 +67,7 @@ endef
>
> # $(1): base directory to search in
> # $(2): suffix of file (optional)
> -define step_pkg_size_after
> +define pkg_size_after
> cd $(1); \
> LC_ALL=C find . \( -type f -o -type l \) -printf '%T@:%i:%#m:%y:%s,%p\n' \
> | LC_ALL=C sort > $($(PKG)_DIR)/.files-list$(2).after
> @@ -80,35 +80,14 @@ define step_pkg_size_after
> rm -f $($(PKG)_DIR)/.files-list$(2).after
> endef
>
> -define step_pkg_size
> - $(if $(filter start-install-target,$(1)-$(2)),\
> - $(call step_pkg_size_before,$(TARGET_DIR)))
> - $(if $(filter start-install-staging,$(1)-$(2)),\
> - $(call step_pkg_size_before,$(STAGING_DIR),-staging))
> - $(if $(filter start-install-host,$(1)-$(2)),\
> - $(call step_pkg_size_before,$(HOST_DIR),-host))
> -
> - $(if $(filter end-install-target,$(1)-$(2)),\
> - $(call step_pkg_size_after,$(TARGET_DIR)))
> - $(if $(filter end-install-staging,$(1)-$(2)),\
> - $(call step_pkg_size_after,$(STAGING_DIR),-staging))
> - $(if $(filter end-install-host,$(1)-$(2)),\
> - $(call step_pkg_size_after,$(HOST_DIR),-host))
> -endef
> -GLOBAL_INSTRUMENTATION_HOOKS += step_pkg_size
> -
> -# Relies on step_pkg_size, so must be after
> define check_bin_arch
> - $(if $(filter end-install-target,$(1)-$(2)),\
> - support/scripts/check-bin-arch -p $(3) \
> - -l $($(PKG)_DIR)/.files-list.txt \
> - $(foreach i,$($(PKG)_BIN_ARCH_EXCLUDE),-i "$(i)") \
> - -r $(TARGET_READELF) \
> - -a $(BR2_READELF_ARCH_NAME))
> + support/scripts/check-bin-arch -p $($(PKG)_NAME) \
> + -l $($(PKG)_DIR)/.files-list.txt \
> + $(foreach i,$($(PKG)_BIN_ARCH_EXCLUDE),-i "$(i)") \
> + -r $(TARGET_READELF) \
> + -a $(BR2_READELF_ARCH_NAME)
> endef
>
> -GLOBAL_INSTRUMENTATION_HOOKS += check_bin_arch
> -
> # This hook checks that host packages that need libraries that we build
> # have a proper DT_RPATH or DT_RUNPATH tag
> define check_host_rpath
> @@ -253,6 +232,9 @@ $(BUILD_DIR)/%/.stamp_configured:
> @$(call step_start,configure)
> @$(call MESSAGE,"Configuring")
> $(call prepare-per-package-directory,$($(PKG)_FINAL_DEPENDENCIES))
> + @$(call pkg_size_before,$(TARGET_DIR))
> + @$(call pkg_size_before,$(STAGING_DIR),-staging)
> + @$(call pkg_size_before,$(HOST_DIR),-host)
> $(call fixup-libtool-files,$(NAME),$(STAGING_DIR))
> $(foreach hook,$($(PKG)_PRE_CONFIGURE_HOOKS),$(call $(hook))$(sep))
> $($(PKG)_CONFIGURE_CMDS)
> @@ -374,6 +356,10 @@ $(BUILD_DIR)/%/.stamp_target_installed:
> # Final installation step, completed when all installation steps
> # (host, images, staging, target) have completed
> $(BUILD_DIR)/%/.stamp_installed:
> + @$(call pkg_size_after,$(TARGET_DIR))
> + @$(call pkg_size_after,$(STAGING_DIR),-staging)
> + @$(call pkg_size_after,$(HOST_DIR),-host)
> + @$(call check_bin_arch)
> $(Q)touch $@
>
> # Remove package sources
> --
> 2.25.4
>
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
next prev parent reply other threads:[~2020-05-01 20:44 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-30 9:52 [Buildroot] [PATCH 00/11] Overwritten file detection, improvements to file listing logic Thomas Petazzoni
2020-04-30 9:52 ` [Buildroot] [PATCH 01/11] package/pkg-generic.mk: use $(PKG)_NAME in step_pkg_size_after Thomas Petazzoni
2020-04-30 9:52 ` [Buildroot] [PATCH 02/11] package/pkg-generic.mk: drop useless $(1) argument in step_pkg_size_{before, after} Thomas Petazzoni
2020-04-30 9:52 ` [Buildroot] [PATCH 03/11] package/pkg-generic.mk: introduce final 'install' step Thomas Petazzoni
2020-04-30 9:52 ` [Buildroot] [PATCH 04/11] package/pkg-generic.mk: create directories upfront in the configure step Thomas Petazzoni
2020-04-30 9:52 ` [Buildroot] [PATCH 05/11] package/pkg-generic.mk: rework pkg_size logic with the "installed" step Thomas Petazzoni
2020-05-01 20:44 ` Yann E. MORIN [this message]
2020-05-02 9:52 ` Thomas Petazzoni
2020-04-30 9:52 ` [Buildroot] [PATCH 06/11] package/pkg-generic.mk: exclude the staging sub-directory Thomas Petazzoni
2020-05-01 20:57 ` Yann E. MORIN
2020-04-30 9:52 ` [Buildroot] [PATCH 07/11] package/pkg-generic.mk: move pkg_size_{before, after} and check_bin_arch functions Thomas Petazzoni
2020-05-01 21:01 ` Yann E. MORIN
2020-04-30 9:52 ` [Buildroot] [PATCH 08/11] package/pkg-generic.mk: detect files overwritten in TARGET_DIR and HOST_DIR Thomas Petazzoni
2020-05-01 21:23 ` Yann E. MORIN
2020-07-24 19:53 ` Yann E. MORIN
2020-07-25 5:58 ` Peter Korsgaard
2020-07-25 7:13 ` Yann E. MORIN
2020-07-25 8:12 ` Peter Korsgaard
2020-04-30 9:52 ` [Buildroot] [PATCH 09/11] support/testing/infra: add log_file_path() function Thomas Petazzoni
2020-07-24 20:11 ` Yann E. MORIN
2020-04-30 9:52 ` [Buildroot] [PATCH 10/11] support/testing/tests: add test for check_bin_arch Thomas Petazzoni
2020-07-25 11:59 ` Yann E. MORIN
2020-04-30 9:52 ` [Buildroot] [PATCH 11/11] support/testing/tests: add test for file overwrite detection Thomas Petazzoni
2020-07-25 12:05 ` Yann E. MORIN
2020-07-23 20:54 ` [Buildroot] [PATCH 00/11] Overwritten file detection, improvements to file listing logic 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=20200501204441.GA15673@scaer \
--to=yann.morin.1998@free.fr \
--cc=buildroot@busybox.net \
/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.