From: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v3 03/14] Eliminate $(HOST_DIR)/usr
Date: Tue, 4 Jul 2017 16:03:53 +0200 [thread overview]
Message-ID: <20170704140404.4098-4-arnout@mind.be> (raw)
In-Reply-To: <20170704140404.4098-1-arnout@mind.be>
We currently use $(HOST_DIR)/usr as the prefix for host packages. That
has a few disadvantages:
- There are some things installed in $(HOST_DIR)/etc and
$(HOST_DIR)/sbin, which is inconsistent.
- To pack a buildroot-built toolchain into a tarball for use as an
external toolchain, you have to pack output/host/usr instead of the
more obvious output/host.
- Because of the above, the internal toolchain wrapper breaks which
forces us to work around it (call the actual toolchain executable
directly). This is OK for us, but when used in another build system,
that's a problem.
- Paths are four characters longer.
To allow us to gradually eliminate $(HOST_DIR)/usr while building
packages, replace it with a symlink to .
The symlinks from $(HOST_DIR)/usr/$(GNU_TARGET_NAME) and
$(HOST_DIR)/usr/lib that were added previously are removed again.
Note that the symlink creation will break when $(HOST_DIR)/usr
already exists as a directory, i.e. when rebuilding in an existing
output directory. This is necessary: if we don't break it now, the
following commits (which remove the usr part from various variables)
_will_ break it.
At the same time as creating this symlink, we have to update the
external toolchain wrapper and the external toolchain symlinks to go
one directory less up. Indeed, $(HOST_DIR) is one level less up than
it was before.
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
---
I intended to also move $(HOST_DIR)/usr/bin in a separate patch, but
that turns out to break the internal toolchain: host-gcc-initial uses
relative paths to find cc1 etc. and these will be broken.
---
Makefile | 7 +++----
toolchain/toolchain-external/pkg-toolchain-external.mk | 6 +++---
toolchain/toolchain-wrapper.c | 2 +-
3 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/Makefile b/Makefile
index ac349a79e8..7453bfd193 100644
--- a/Makefile
+++ b/Makefile
@@ -552,16 +552,15 @@ prepare: $(BUILD_DIR)/buildroot-config/auto.conf
.PHONY: world
world: target-post-image
-# When creating HOST_DIR, also symlink usr/lib -> ../lib
+# When creating HOST_DIR, also symlink usr -> .
$(HOST_DIR):
- @mkdir -p $@/usr $@/lib
- @ln -snf ../lib $@/usr/lib
+ @mkdir -p $@
+ @ln -snf . $@/usr
# Populating the staging with the base directories is handled by the skeleton package
$(STAGING_DIR): | $(HOST_DIR)
@mkdir -p $(STAGING_DIR)
@ln -snf $(STAGING_DIR) $(BASE_DIR)/staging
- @ln -snf ../$(GNU_TARGET_NAME) $(HOST_DIR)/usr/$(GNU_TARGET_NAME)
RSYNC_VCS_EXCLUSIONS = \
--exclude .svn --exclude .git --exclude .hg --exclude .bzr \
diff --git a/toolchain/toolchain-external/pkg-toolchain-external.mk b/toolchain/toolchain-external/pkg-toolchain-external.mk
index 8460e37d09..adbd3fe67e 100644
--- a/toolchain/toolchain-external/pkg-toolchain-external.mk
+++ b/toolchain/toolchain-external/pkg-toolchain-external.mk
@@ -250,18 +250,18 @@ define TOOLCHAIN_EXTERNAL_INSTALL_WRAPPER
base=$${i##*/}; \
case "$$base" in \
*-ar|*-ranlib|*-nm) \
- ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%../..%') .; \
+ ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%..%') .; \
;; \
*cc|*cc-*|*++|*++-*|*cpp|*-gfortran) \
ln -sf toolchain-wrapper $$base; \
;; \
*gdb|*gdbtui) \
if test "$(BR2_PACKAGE_HOST_GDB)" != "y"; then \
- ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%../..%') .; \
+ ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%..%') .; \
fi \
;; \
*) \
- ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%../..%') .; \
+ ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%..%') .; \
;; \
esac; \
done
diff --git a/toolchain/toolchain-wrapper.c b/toolchain/toolchain-wrapper.c
index 100aa181c6..3a4455ff82 100644
--- a/toolchain/toolchain-wrapper.c
+++ b/toolchain/toolchain-wrapper.c
@@ -178,7 +178,7 @@ int main(int argc, char **argv)
perror(__FILE__ ": malloc");
return 2;
}
- sprintf(relbasedir, "%s/../..", argv[0]);
+ sprintf(relbasedir, "%s/..", argv[0]);
absbasedir = realpath(relbasedir, NULL);
} else {
basename = progpath;
--
2.13.2
next prev parent reply other threads:[~2017-07-04 14:03 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-04 14:03 [Buildroot] [PATCH v3 00/14] Remove /usr component from HOST_DIR Arnout Vandecappelle
2017-07-04 14:03 ` [Buildroot] [PATCH v3 01/14] Move $(HOST_DIR)/usr/$(GNU_TARGET_NAME) one level up Arnout Vandecappelle
2017-07-04 14:52 ` Romain Naour
2017-07-04 14:03 ` [Buildroot] [PATCH v3 02/14] Move $(HOST_DIR)/usr/lib to $(HOST_DIR)/lib Arnout Vandecappelle
2017-07-04 14:55 ` Romain Naour
2017-07-04 14:03 ` Arnout Vandecappelle [this message]
2017-07-04 15:01 ` [Buildroot] [PATCH v3 03/14] Eliminate $(HOST_DIR)/usr Romain Naour
2017-07-04 14:03 ` [Buildroot] [PATCH v3 04/14] check-host-rpath: no longer check $(HOST_DIR)/usr/{bin, sbin} Arnout Vandecappelle
2017-07-04 15:02 ` Romain Naour
2017-07-04 14:03 ` [Buildroot] [PATCH v3 05/14] Makefile: remove $(HOST_DIR)/usr from BR_PATH Arnout Vandecappelle
2017-07-04 15:03 ` Romain Naour
2017-07-04 14:03 ` [Buildroot] [PATCH v3 06/14] package/Makefile.in: remove $(HOST_DIR)/usr part from HOST_LDFLAGS Arnout Vandecappelle
2017-07-04 15:04 ` Romain Naour
2017-07-04 14:03 ` [Buildroot] [PATCH v3 07/14] gdb: Remove /usr part from installation path of gdbserver Arnout Vandecappelle
2017-07-04 15:08 ` Romain Naour
2017-07-04 14:03 ` [Buildroot] [PATCH v3 08/14] gcc-final: things are no longer installed in $(HOST_DIR)/usr Arnout Vandecappelle
2017-07-04 15:12 ` Romain Naour
2017-07-04 14:03 ` [Buildroot] [PATCH v3 09/14] pkg-autotools: use $(HOST_DIR) instead of $(HOST_DIR)/usr as prefix Arnout Vandecappelle
2017-07-04 15:12 ` Romain Naour
2017-07-04 14:04 ` [Buildroot] [PATCH v3 10/14] pkg-cmake: " Arnout Vandecappelle
2017-07-04 15:13 ` Romain Naour
2017-07-04 14:04 ` [Buildroot] [PATCH v3 11/14] pkg-cmake: move configuration files out of $(HOST_DIR)/usr Arnout Vandecappelle
2017-07-04 15:14 ` Romain Naour
2017-07-04 14:04 ` [Buildroot] [PATCH v3 12/14] pkg-cmake: programs are now installed in $(HOST_DIR)/bin Arnout Vandecappelle
2017-07-04 15:15 ` Romain Naour
2017-07-04 14:04 ` [Buildroot] [PATCH v3 13/14] pkg-python: use $(HOST_DIR) instead of $(HOST_DIR)/usr as prefix Arnout Vandecappelle
2017-07-04 15:16 ` Romain Naour
2017-07-04 14:04 ` [Buildroot] [PATCH v3 14/14] pkg-rebar: " Arnout Vandecappelle
2017-07-04 15:19 ` Romain Naour
2017-07-05 9:57 ` [Buildroot] [PATCH v3 00/14] Remove /usr component from HOST_DIR 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=20170704140404.4098-4-arnout@mind.be \
--to=arnout@mind.be \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox