All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [RFCv3 13/15] core: change host RPATH handling
Date: Sat, 30 Dec 2017 14:56:43 +0100	[thread overview]
Message-ID: <20171230135643.GE2921@scaer> (raw)
In-Reply-To: <20171229212034.416e8b23@windsurf.lan>

On 2017-12-29 21:20 +0100, Thomas Petazzoni spake thusly:
> Hello,
> 
> On Fri, 29 Dec 2017 18:31:18 +0100, Yann E. MORIN wrote:
> 
> > > In order to achieve this, the following changes are made:
> > > 
> > >  - HOST_LDFLAGS no longer contains -Wl,-rpath,$(HOST_DIR)
> > > 
> > >  - The hook that ran at the end of every package installation
> > >    (check_host_rpath) to verify that our hardcoded RPATH is indeed
> > >    present in all binaries is removed, as it is no longer needed: we
> > >    will force $ORIGIN/../LIB as an RPATH in all binaries.  
> > 
> > Then you can just get rid of support/scripts/check-host-rpath that is
> > now no longer used.
> 
> True.
> 
> > 
> > >  - host-patchelf is added as a dependency of all packages, except
> > >    itself. This is necessary as all packages now need to run patchelf
> > >    at the end of their installation process.
> > > 
> > >    TODO: things like host-tar, host-lzip and host-ccache will have to
> > >    be handled properly.  
> 
> In fact, this TODO was no longer accurate: I did take care of host-tar,
> host-lzip and host-ccache as part of this RFCv3. However...

You said on IRC that the uniq-file check did not trigger for host-tar,
and I think I know why: we're looking at installed files in the step
hook named 'step_pkg_size' which gets run as part of the 'install-host'
step.

But the patchelf will only happen in the new step named 'install', which
you introduced in patch 05/15 (pkg-generic: add .stamp_installed step),
and which is called after 'install-host' (guaranteed, because 'install'
depends on 'install-host').

So, the uniq-file check will not get triggered for host-patchelf.

It will not even be trigger by a later package either, because the
hashes are taken before and after the install step, not from a previous
install step.

So, we are lucky.

However, I don't think this is nice...

> > Indeed, because the very moment that patchelf is available, the next
> > package will trigger patchelf on all executables, which means that
> > package will be responsible for touching files from previous packages,
> > and thus will trigger the no-two-packages-should-touch-the-same-file
> > check.
> 
> ... I indeed didn't think of this problem. I see two possibilities to
> address this:
> 
>  1. Have host-patchelf built earlier. I.e have only host-tar be a
>     dependency of host-patchelf and nothing else (in my current patch
>     series, host-patchelf is built after host-tar, host-xz, host-lzip,
>     host-ccache). This requires using HOSTCC_NOCCACHE to build host-tar
>     and host-patchelf, but I don't think it's a big deal. And then do a
>     special case in fix-rpath to not fix the rpath of the tar program,
>     since it should not have dependencies on libraries in HOST_DIR/lib
> 
>  2. Make the RPATH fixing logic smarter, and don't set a RPATH to
>     $ORIGIN/../lib if the program doesn't use a library that is in
>     HOST_DIR/lib. This is perhaps the most pretty solution.

 3. limit patchelf on the files actually installed by the current
    package, looking at $(BUILD_DIR)/packages-file-list-host.txt to
    get the list...

Actually, this might prompt for storing a per-package list of installed
file, something like (untested):

    diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
    index b4aa22e38c..4a086600dd 100644
    --- a/package/pkg-generic.mk
    +++ b/package/pkg-generic.mk
    @@ -89,8 +89,11 @@ define step_pkg_size_end
     	$(call _step_pkg_size_get_file_list,$($(PKG)_DIR)/.br_filelist_after,$(2))
     	comm -13 $($(PKG)_DIR)/.br_filelist_before $($(PKG)_DIR)/.br_filelist_after | \
     		while read hash file ; do \
    -			echo "$(1),$${file}" ; \
    -		done >> $(BUILD_DIR)/packages-file-list$(3).txt
    +			echo "$${file}" ; \
    +		done >> $($(PKG)_DIR)/.br_filelist.txt
    +		sed -r -e 's/^/$(1),/' \
    +			< $($(PKG)_DIR)/.br_filelist.txt \
    +			>> $(BUILD_DIR)/packages-file-list$(3).txt
     	rm -f $($(PKG)_DIR)/.br_filelist_before $($(PKG)_DIR)/.br_filelist_after
     endef

... and then re-using $($(PKG)_DIR)/.br_filelist.txt as the list of
files installed by the current package, and only patchelf thos liste in
there.

My 2ct...

Regards,
Yann E. MORIN.

> > > This change is independent from the per-package SDK functionality, and
> > > could be applied separately.  
> > 
> > Except it requires the host-tar et al. stuff to be handled first.
> 
> Which is why the host-tar and al. stuff is earlier. What I meant with
> this sentence is that reworking the host RPATH handling can be applied
> *before* we switch to per-package SDK.
> 
> Best regards,
> 
> Thomas
> -- 
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux and Kernel engineering
> http://free-electrons.com

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

  reply	other threads:[~2017-12-30 13:56 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-01 20:53 [Buildroot] [RFCv3 00/15] Per-package host/target directory support Thomas Petazzoni
2017-12-01 20:53 ` [Buildroot] [RFCv3 01/15] pkgconf: use relative path to STAGING_DIR instead of absolute path Thomas Petazzoni
2017-12-29 15:22   ` Yann E. MORIN
2017-12-31 17:24   ` Thomas Petazzoni
2017-12-01 20:53 ` [Buildroot] [RFCv3 02/15] toolchain: post-pone evaluation of TOOLCHAIN_EXTERNAL_BIN Thomas Petazzoni
2017-12-29 15:22   ` Yann E. MORIN
2017-12-31 17:24   ` Thomas Petazzoni
2017-12-01 20:53 ` [Buildroot] [RFCv3 03/15] Makefile, skeleton: move the host skeleton logic to host-skeleton package Thomas Petazzoni
2017-12-03 22:22   ` Yann E. MORIN
2017-12-01 20:53 ` [Buildroot] [RFCv3 04/15] pkg-cmake: install CMake files as part of a package Thomas Petazzoni
2017-12-03 22:34   ` Yann E. MORIN
2017-12-03 22:55     ` Thomas Petazzoni
2017-12-29 15:27       ` Yann E. MORIN
2017-12-01 20:53 ` [Buildroot] [RFCv3 05/15] pkg-generic: add .stamp_installed step Thomas Petazzoni
2017-12-29 15:30   ` Yann E. MORIN
2018-02-22 21:48   ` Matthew Weber
2018-02-22 22:27     ` Thomas Petazzoni
2017-12-01 20:53 ` [Buildroot] [RFCv3 06/15] package/pkg-generic: add the concept of extract dependency Thomas Petazzoni
2017-12-29 15:33   ` Yann E. MORIN
2017-12-01 20:53 ` [Buildroot] [RFCv3 07/15] package/pkg-generic: handle host-tar as an " Thomas Petazzoni
2017-12-02 15:06   ` Yann E. MORIN
2017-12-02 20:19     ` Thomas Petazzoni
2017-12-29 15:34       ` Yann E. MORIN
2017-12-01 20:53 ` [Buildroot] [RFCv3 08/15] package/pkg-generic: handle host-xz " Thomas Petazzoni
2017-12-02 15:08   ` Yann E. MORIN
2017-12-02 20:16     ` Thomas Petazzoni
2017-12-03  8:32       ` Yann E. MORIN
2017-12-03  9:29         ` Thomas Petazzoni
2017-12-03  9:34           ` Yann E. MORIN
2017-12-29 15:36   ` Yann E. MORIN
2017-12-01 20:53 ` [Buildroot] [RFCv3 09/15] package/pkg-generic: handle host-lzip " Thomas Petazzoni
2017-12-02 15:12   ` Yann E. MORIN
2017-12-02 20:13     ` Thomas Petazzoni
2017-12-29 15:36   ` Yann E. MORIN
2017-12-01 20:53 ` [Buildroot] [RFCv3 10/15] package/pkg-generic: handle host-ccache as a regular dependency Thomas Petazzoni
2017-12-29 15:42   ` Yann E. MORIN
2017-12-29 15:48     ` Thomas Petazzoni
2017-12-01 20:53 ` [Buildroot] [RFCv3 11/15] package/pkg-generic: handle host-fakedate " Thomas Petazzoni
2017-12-29 15:50   ` Yann E. MORIN
2017-12-01 20:53 ` [Buildroot] [RFCv3 12/15] core: kill DEPENDENCIES_HOST_PREREQ Thomas Petazzoni
2017-12-29 15:53   ` Yann E. MORIN
2017-12-01 20:53 ` [Buildroot] [RFCv3 13/15] core: change host RPATH handling Thomas Petazzoni
2017-12-29 17:31   ` Yann E. MORIN
2017-12-29 20:20     ` Thomas Petazzoni
2017-12-30 13:56       ` Yann E. MORIN [this message]
2018-02-06  0:00       ` Matthew Weber
2018-02-06 22:04   ` Matthew Weber
2018-02-06 23:19     ` Arnout Vandecappelle
2018-02-07  6:30       ` Matthew Weber
2017-12-01 20:53 ` [Buildroot] [RFCv3 14/15] Makefile: evaluate CCACHE and HOST{CC, CXX} at time of use Thomas Petazzoni
2017-12-29 17:32   ` Yann E. MORIN
2017-12-01 20:53 ` [Buildroot] [RFCv3 15/15] core: implement per-package SDK and target Thomas Petazzoni
2018-02-06 14:45   ` Matthew Weber
2018-02-06 22:00     ` Arnout Vandecappelle
2018-02-06 22:39       ` Matthew Weber
2018-01-08 22:41 ` [Buildroot] [RFCv3 00/15] Per-package host/target directory support Thomas Petazzoni

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=20171230135643.GE2921@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.