From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v7 3/8] core: implement per-package SDK and target
Date: Sun, 30 Dec 2018 22:52:12 +0100 [thread overview]
Message-ID: <20181230215212.GA24224@scaer> (raw)
In-Reply-To: <20181228104335.22379-4-thomas.petazzoni@bootlin.com>
Thomas, All,
I don;t have much to propose asa review, except very-minor issues.
On 2018-12-28 11:43 +0100, Thomas Petazzoni spake thusly:
> This commit implements the core of the move to per-package SDK and
> target directories. The main idea is that instead of having a global
> output/host and output/target in which all packages install files, we
> switch to per-package host and target directories, that only contain
> their explicit dependencies.
>
> There are two main benefits:
>
> - Packages will no longer discover dependencies that they do not
> explicitly indicate in their <pkg>_DEPENDENCIES variable.
Note that non-expressed dependencies may still be gathered, if they are
transitive dependencies.
[--SNIP--]
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
[--SNIP--]
> diff --git a/Makefile b/Makefile
> index 9de8e0c725..e01ec4c963 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -205,6 +205,7 @@ BR_GRAPH_OUT := $(or $(BR2_GRAPH_OUT),pdf)
> BUILD_DIR := $(BASE_DIR)/build
> BINARIES_DIR := $(BASE_DIR)/images
> BASE_TARGET_DIR := $(BASE_DIR)/target
> +PER_PACKAGE_DIR := $(BASE_DIR)/per-package
Why don't you simply export this variable, like HOST_DIR and TARGET_DIR?
This would simplify calls to fix-rpath:
[--SNIP--]
> @@ -585,8 +587,8 @@ world: target-post-image
> .PHONY: prepare-sdk
> prepare-sdk: world
> @$(call MESSAGE,"Rendering the SDK relocatable")
> - $(TOPDIR)/support/scripts/fix-rpath host
> - $(TOPDIR)/support/scripts/fix-rpath staging
> + PER_PACKAGE_DIR=$(PER_PACKAGE_DIR) $(TOPDIR)/support/scripts/fix-rpath host
> + PER_PACKAGE_DIR=$(PER_PACKAGE_DIR) $(TOPDIR)/support/scripts/fix-rpath staging
... here.
[--SNIP--]
> @@ -973,7 +979,8 @@ savedefconfig: $(BUILD_DIR)/buildroot-config/conf prepare-kconfig
>
> # staging and target directories do NOT list these as
> # dependencies anywhere else
> -$(BUILD_DIR) $(BASE_TARGET_DIR) $(HOST_DIR) $(BINARIES_DIR) $(LEGAL_INFO_DIR) $(REDIST_SOURCES_DIR_TARGET) $(REDIST_SOURCES_DIR_HOST):
> +$(BUILD_DIR) $(BASE_TARGET_DIR) $(HOST_DIR) $(BINARIES_DIR) $(LEGAL_INFO_DIR) \
> + $(REDIST_SOURCES_DIR_TARGET) $(REDIST_SOURCES_DIR_HOST) $(PER_PACKAGE_DIR):
Don't ident this continuation line, it is misleading: the target of
the rule appear to be part of the commands.
[--SNIP--]
> diff --git a/support/scripts/check-host-rpath b/support/scripts/check-host-rpath
> index c8939569e2..d903a82958 100755
> --- a/support/scripts/check-host-rpath
> +++ b/support/scripts/check-host-rpath
As I was saying on IRC: when we are not using per-package directories,
then I was a bit surprised to see that this script (and fix_rpath,
below) still worked, when the support for PPD is not optional in it.
What confused me, was that PER_PACKAGE_DIR is always used, even when
BR2_PER_PACKAGE_DIRECTORIES is unset.
But as you pointed to on IRC, PER_PACKAGE_DIR is also always defined to
an non-empty string, that either points to a valid location when
BR2_PER_PACKAGE_DIRECTORIES=y, or points to a non-existent location
otherwise.
> @@ -77,6 +93,7 @@ check_elf_has_rpath() {
> dir="$( sed -r -e 's:/+:/:g; s:/$::;' <<<"${dir}" )"
> [ "${dir}" = "${hostdir}/lib" ] && return 0
> [ "${dir}" = "\$ORIGIN/../lib" ] && return 0
> + [[ ${dir} =~ ${perpackagedir}/[^/]*/host/lib ]] && return 0
^^^^^^^
That would also match the string '//' so maybe we want:
${perpackagedir}/([^/]+/)?host/lib
[--SNIP--]
> diff --git a/support/scripts/fix-rpath b/support/scripts/fix-rpath
> index fa138ca15a..926767a54f 100755
> --- a/support/scripts/fix-rpath
> +++ b/support/scripts/fix-rpath
> @@ -127,14 +127,29 @@ main() {
>
> while read file ; do
> # check if it's an ELF file
> - if ${PATCHELF} --print-rpath "${file}" > /dev/null 2>&1; then
> - # make files writable if necessary
> - changed=$(chmod -c u+w "${file}")
> - # call patchelf to sanitize the rpath
> - ${PATCHELF} --make-rpath-relative "${rootdir}" ${sanitize_extra_args[@]} "${file}"
> - # restore the original permission
> - test "${changed}" != "" && chmod u-w "${file}"
> + rpath=$(${PATCHELF} --print-rpath "${file}" 2>&1)
> + if test $? -ne 0 ; then
> + continue
> fi
> +
> + # make files writable if necessary
> + changed=$(chmod -c u+w "${file}")
> +
> + # With per-package directory support, most RPATH of host
> + # binaries will point to per-package directories. This won't
> + # work with the --make-rpath-relative ${rootdir} invocation as
> + # the per-package host directory is not within ${rootdir}. So,
> + # we rewrite all RPATHs pointing to per-package directories so
> + # that they point to the global host directry.
> + changed_rpath=$(echo ${rpath} | sed "s@${PER_PACKAGE_DIR}/[^/]*/host@${HOST_DIR}@")
Ditto?
> + if test "${rpath}" != "${changed_rpath}" ; then
> + ${PATCHELF} --set-rpath ${changed_rpath} "${file}"
Can't you do that unconditioanlly? If it's changed, we need to set it;
if it's not changed, that set it to the initial value anyway...
> +
> + # call patchelf to sanitize the rpath
> + ${PATCHELF} --make-rpath-relative "${rootdir}" ${sanitize_extra_args[@]} "${file}"
> + # restore the original permission
> + test "${changed}" != "" && chmod u-w "${file}"
> done < <(find "${rootdir}" ${find_args[@]})
>
> # Restore patched patchelf utility
> --
> 2.20.1
>
--
.-----------------.--------------------.------------------.--------------------.
| 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. |
'------------------------------^-------^------------------^--------------------'
next prev parent reply other threads:[~2018-12-30 21:52 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-28 10:43 [Buildroot] [PATCH v7 0/8] Top-level parallel build support Thomas Petazzoni
2018-12-28 10:43 ` [Buildroot] [PATCH v7 1/8] support/scripts/check-host-rpath: document existing functions Thomas Petazzoni
2018-12-28 12:47 ` Yann E. MORIN
2019-01-17 21:33 ` Peter Korsgaard
2018-12-28 10:43 ` [Buildroot] [PATCH v7 2/8] Makefile: move definition of TARGET_DIR inside .config condition Thomas Petazzoni
2018-12-28 12:49 ` Yann E. MORIN
2019-01-17 21:35 ` Peter Korsgaard
2018-12-28 10:43 ` [Buildroot] [PATCH v7 3/8] core: implement per-package SDK and target Thomas Petazzoni
2018-12-30 21:52 ` Yann E. MORIN [this message]
2018-12-31 14:31 ` Thomas Petazzoni
2018-12-31 14:45 ` Yann E. MORIN
2019-01-08 18:02 ` Jan Kundrát
2019-11-05 16:38 ` Thomas Petazzoni
2019-11-05 19:05 ` Carlos Santos
2019-11-06 7:57 ` Thomas Petazzoni
2019-11-06 8:13 ` Jan Kundrát
2018-12-28 10:43 ` [Buildroot] [PATCH v7 4/8] Makefile: allow top-level parallel build with BR2_PER_PACKAGE_DIRECTORIES=y Thomas Petazzoni
2018-12-28 12:51 ` Yann E. MORIN
2018-12-28 10:43 ` [Buildroot] [PATCH v7 5/8] package/pkg-generic: make libtool .la files compatible with per-package directories Thomas Petazzoni
2018-12-31 8:44 ` Yann E. MORIN
2018-12-28 10:43 ` [Buildroot] [PATCH v7 6/8] package/pkg-kconfig: handle KCONFIG_DEPENDENCIES " Thomas Petazzoni
2018-12-28 10:43 ` [Buildroot] [PATCH v7 7/8] docs/manual: add details about top-level parallel build support Thomas Petazzoni
2018-12-28 13:03 ` Yann E. MORIN
2018-12-28 13:08 ` Thomas Petazzoni
2018-12-31 8:46 ` Yann E. MORIN
2018-12-28 10:43 ` [Buildroot] [PATCH v7 8/8] docs/manual: document the effect of per-package directory on variables Thomas Petazzoni
2018-12-28 17:21 ` [Buildroot] [PATCH v7 0/8] Top-level parallel build support Thomas Petazzoni
2019-02-22 16:18 ` Andreas Naumann
2019-02-22 18:07 ` Vadim Kochan
2019-02-22 20:29 ` Thomas Petazzoni
2019-02-25 1:10 ` Vadim Kochan
2019-02-25 8:05 ` Thomas Petazzoni
2019-02-25 8:33 ` Vadim Kochan
2019-03-01 14:50 ` Vadym Kochan
2019-03-01 17:18 ` Yann E. MORIN
2019-03-04 7:24 ` Arnout Vandecappelle
2019-03-04 10:22 ` 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=20181230215212.GA24224@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.