* [Buildroot] [PATCH v9 1/8] package: add base dependency to every package
2013-11-15 14:40 [Buildroot] [PATCH v9 0/8] Add support for top-level parallel make Fabio Porcedda
@ 2013-11-15 14:40 ` Fabio Porcedda
2013-11-17 13:18 ` Arnout Vandecappelle
2013-11-15 14:40 ` [Buildroot] [PATCH v9 2/8] package: add toolchain dependency to every target package Fabio Porcedda
` (6 subsequent siblings)
7 siblings, 1 reply; 11+ messages in thread
From: Fabio Porcedda @ 2013-11-15 14:40 UTC (permalink / raw)
To: buildroot
Move "dependencies" "dirs" "prepare" dependencies from "toolchain" to
every package.
This way we can build correctly every package right after the clean
stage.
As example with this commit we can build successfully the glibc right
after the clean stage:
make clean glibc
This is also a step forward supporting top-level parallel make.
Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
---
package/pkg-generic.mk | 5 +++++
toolchain/toolchain/toolchain.mk | 3 +--
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index fc6e8c6..f8a9320 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -447,6 +447,11 @@ $(1)-install-host: $(1)-build $$($(2)_TARGET_INSTALL_HOST)
$(1)-build: $(1)-configure \
$$($(2)_TARGET_BUILD)
+$$($(2)_TARGET_SOURCE) $$($(2)_TARGET_RSYNC): | dirs prepare
+ifeq ($(filter $(1),$(DEPENDENCIES_HOST_PREREQ)),)
+$$($(2)_TARGET_SOURCE) $$($(2)_TARGET_RSYNC): | dependencies
+endif
+
ifeq ($$($(2)_OVERRIDE_SRCDIR),)
# In the normal case (no package override), the sequence of steps is
# source, by downloading
diff --git a/toolchain/toolchain/toolchain.mk b/toolchain/toolchain/toolchain.mk
index 44ed629..8559ac9 100644
--- a/toolchain/toolchain/toolchain.mk
+++ b/toolchain/toolchain/toolchain.mk
@@ -14,5 +14,4 @@ endif
$(eval $(generic-package))
-toolchain-source: prepare dirs dependencies $(HOST_DIR)/usr/share/buildroot/toolchainfile.cmake
-
+toolchain: $(HOST_DIR)/usr/share/buildroot/toolchainfile.cmake
--
1.8.4.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [Buildroot] [PATCH v9 2/8] package: add toolchain dependency to every target package
2013-11-15 14:40 [Buildroot] [PATCH v9 0/8] Add support for top-level parallel make Fabio Porcedda
2013-11-15 14:40 ` [Buildroot] [PATCH v9 1/8] package: add base dependency to every package Fabio Porcedda
@ 2013-11-15 14:40 ` Fabio Porcedda
2013-11-17 13:52 ` Arnout Vandecappelle
2013-11-15 14:40 ` [Buildroot] [PATCH v9 3/8] package: add support for top-level parallel make Fabio Porcedda
` (5 subsequent siblings)
7 siblings, 1 reply; 11+ messages in thread
From: Fabio Porcedda @ 2013-11-15 14:40 UTC (permalink / raw)
To: buildroot
This commit makes the dependency from the target toolchain explicit.
This way we can buid from command line a package that use
innger-generic-package right after the configuration phase, example:
make clean <package-name>
Also remove TARGETS_ALL because the only purpose was to add toolchain
dependency so it's superseded by this commit.
To prevent circular dependency add the new variable
<pkgname>_ADD_TOOLCHAIN_DEPENDENCY to avoid adding the toolchain
dependency for toolchain packages.
This is also a step forward supporting top-level parallel make.
Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
---
Makefile | 8 ++------
package/glibc/glibc.mk | 3 +++
| 3 +++
package/pkg-autotools.mk | 3 ++-
package/pkg-cmake.mk | 2 +-
package/pkg-generic.mk | 14 ++++++++++++--
package/uclibc/uclibc.mk | 3 +++
toolchain/toolchain-buildroot/toolchain-buildroot.mk | 2 ++
toolchain/toolchain-external/toolchain-external.mk | 2 ++
toolchain/toolchain/toolchain.mk | 2 ++
10 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/Makefile b/Makefile
index a425875..efd5ac6 100644
--- a/Makefile
+++ b/Makefile
@@ -352,7 +352,6 @@ TARGETS+=target-post-image
TARGETS_CLEAN:=$(patsubst %,%-clean,$(TARGETS))
TARGETS_SOURCE:=$(patsubst %,%-source,$(TARGETS) $(BASE_TARGETS))
TARGETS_DIRCLEAN:=$(patsubst %,%-dirclean,$(TARGETS))
-TARGETS_ALL:=$(patsubst %,__real_tgt_%,$(TARGETS))
# host-* dependencies have to be handled specially, as those aren't
# visible in Kconfig and hence not added to a variable like TARGETS.
@@ -375,9 +374,6 @@ HOST_SOURCE += $(addsuffix -source,$(sort $(TARGETS_HOST_DEPS) $(HOST_DEPS)))
TARGETS_LEGAL_INFO:=$(patsubst %,%-legal-info,\
$(TARGETS) $(BASE_TARGETS) $(TARGETS_HOST_DEPS) $(HOST_DEPS))))
-# all targets depend on the crosscompiler and it's prerequisites
-$(TARGETS_ALL): __real_tgt_%: $(BASE_TARGETS) %
-
dirs: $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
$(HOST_DIR) $(BINARIES_DIR) $(STAMP_DIR)
@@ -386,11 +382,11 @@ $(BUILD_DIR)/buildroot-config/auto.conf: $(BUILDROOT_CONFIG)
prepare: $(BUILD_DIR)/buildroot-config/auto.conf
-world: $(BASE_TARGETS) $(TARGETS_ALL)
+world: $(TARGETS)
.PHONY: all world toolchain dirs clean distclean source outputmakefile \
legal-info legal-info-prepare legal-info-clean printvars \
- $(BASE_TARGETS) $(TARGETS) $(TARGETS_ALL) \
+ $(BASE_TARGETS) $(TARGETS) \
$(TARGETS_CLEAN) $(TARGETS_DIRCLEAN) $(TARGETS_SOURCE) $(TARGETS_LEGAL_INFO) \
$(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
$(HOST_DIR) $(BINARIES_DIR) $(STAMP_DIR)
diff --git a/package/glibc/glibc.mk b/package/glibc/glibc.mk
index 2e7fe82..170fa93 100644
--- a/package/glibc/glibc.mk
+++ b/package/glibc/glibc.mk
@@ -19,6 +19,9 @@ endif
GLIBC_LICENSE = GPLv2+ (programs), LGPLv2.1+, BSD-3c, MIT (library)
GLIBC_LICENSE_FILES = $(addprefix $(GLIBC_SRC_SUBDIR)/,COPYING COPYING.LIB LICENSES)
+# glibc is part of the toolchain so disable the toolchain dependency
+GLIBC_ADD_TOOLCHAIN_DEPENDENCY = NO
+
# Before (e)glibc is configured, we must have the first stage
# cross-compiler and the kernel headers
GLIBC_DEPENDENCIES = host-gcc-initial linux-headers host-gawk
--git a/package/linux-headers/linux-headers.mk b/package/linux-headers/linux-headers.mk
index 30d3076..6dac9e3 100644
--- a/package/linux-headers/linux-headers.mk
+++ b/package/linux-headers/linux-headers.mk
@@ -17,6 +17,9 @@ LINUX_HEADERS_SOURCE = linux-$(LINUX_HEADERS_VERSION).tar.xz
LINUX_HEADERS_INSTALL_STAGING = YES
+# linux-headers is part of the toolchain so disable the toolchain dependency
+LINUX_HEADERS_ADD_TOOLCHAIN_DEPENDENCY = NO
+
define LINUX_HEADERS_INSTALL_STAGING_CMDS
(cd $(@D); \
$(TARGET_MAKE_ENV) $(MAKE) \
diff --git a/package/pkg-autotools.mk b/package/pkg-autotools.mk
index 9523529..f58570d 100644
--- a/package/pkg-autotools.mk
+++ b/package/pkg-autotools.mk
@@ -209,7 +209,8 @@ endef
# This must be repeated from inner-generic-package, otherwise we get an empty
# _DEPENDENCIES if _AUTORECONF is YES. Also filter the result of _AUTORECONF
# away from the non-host rule
-$(2)_DEPENDENCIES ?= $(filter-out host-automake host-autoconf host-libtool $(1),\
+$(2)_DEPENDENCIES ?= $(filter-out host-automake host-autoconf host-libtool \
+ host-toolchain $(1),\
$(patsubst host-host-%,host-%,$(addprefix host-,$($(3)_DEPENDENCIES))))
diff --git a/package/pkg-cmake.mk b/package/pkg-cmake.mk
index 0e08722..01ff5b5 100644
--- a/package/pkg-cmake.mk
+++ b/package/pkg-cmake.mk
@@ -89,7 +89,7 @@ endif
# This must be repeated from inner-generic-package, otherwise we only get
# host-cmake in _DEPENDENCIES because of the following line
-$(2)_DEPENDENCIES ?= $(filter-out $(1),$(patsubst host-host-%,host-%,$(addprefix host-,$($(3)_DEPENDENCIES))))
+$(2)_DEPENDENCIES ?= $(filter-out host-toolchain $(1),$(patsubst host-host-%,host-%,$(addprefix host-,$($(3)_DEPENDENCIES))))
$(2)_DEPENDENCIES += host-cmake
diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index f8a9320..0acd1e0 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -368,8 +368,18 @@ endif
$(2)_REDISTRIBUTE ?= YES
-
-$(2)_DEPENDENCIES ?= $(filter-out $(1),$(patsubst host-host-%,host-%,$(addprefix host-,$($(3)_DEPENDENCIES))))
+# When a target package is a toolchain dependency set this variable to
+# 'NO' so the 'toolchain' dependency is not added to prevent a circular
+# dependency
+$(2)_ADD_TOOLCHAIN_DEPENDENCY ?= YES
+
+$(2)_DEPENDENCIES ?= $(filter-out host-toolchain $(1),\
+ $(patsubst host-host-%,host-%,$(addprefix host-,$($(3)_DEPENDENCIES))))
+ifeq ($(5),target)
+ifeq ($$($(2)_ADD_TOOLCHAIN_DEPENDENCY),YES)
+$(2)_DEPENDENCIES += toolchain
+endif
+endif
$(2)_INSTALL_STAGING ?= NO
$(2)_INSTALL_IMAGES ?= NO
diff --git a/package/uclibc/uclibc.mk b/package/uclibc/uclibc.mk
index 20d3bb6..0d12afd 100644
--- a/package/uclibc/uclibc.mk
+++ b/package/uclibc/uclibc.mk
@@ -18,6 +18,9 @@ endif
UCLIBC_INSTALL_STAGING = YES
+# uclibc is part of the toolchain so disable the toolchain dependency
+UCLIBC_ADD_TOOLCHAIN_DEPENDENCY = NO
+
# Before uClibc is configured, we must have the first stage
# cross-compiler and the kernel headers
UCLIBC_DEPENDENCIES = host-gcc-initial linux-headers
diff --git a/toolchain/toolchain-buildroot/toolchain-buildroot.mk b/toolchain/toolchain-buildroot/toolchain-buildroot.mk
index f1f07a9..d941854 100644
--- a/toolchain/toolchain-buildroot/toolchain-buildroot.mk
+++ b/toolchain/toolchain-buildroot/toolchain-buildroot.mk
@@ -14,4 +14,6 @@ BUILDROOT_LIBC = $(call qstrip,$(BR2_TOOLCHAIN_BUILDROOT_LIBC))
TOOLCHAIN_BUILDROOT_DEPENDENCIES = host-gcc-final
+TOOLCHAIN_BUILDROOT_ADD_TOOLCHAIN_DEPENDENCY = NO
+
$(eval $(generic-package))
diff --git a/toolchain/toolchain-external/toolchain-external.mk b/toolchain/toolchain-external/toolchain-external.mk
index bd4f375..b85a45c 100644
--- a/toolchain/toolchain-external/toolchain-external.mk
+++ b/toolchain/toolchain-external/toolchain-external.mk
@@ -362,6 +362,8 @@ TOOLCHAIN_EXTERNAL_SITE =
TOOLCHAIN_EXTERNAL_SOURCE =
endif
+TOOLCHAIN_EXTERNAL_ADD_TOOLCHAIN_DEPENDENCY = NO
+
TOOLCHAIN_EXTERNAL_INSTALL_STAGING = YES
ifeq ($(BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R1)$(BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2012R2),y)
diff --git a/toolchain/toolchain/toolchain.mk b/toolchain/toolchain/toolchain.mk
index 8559ac9..7241fe7 100644
--- a/toolchain/toolchain/toolchain.mk
+++ b/toolchain/toolchain/toolchain.mk
@@ -12,6 +12,8 @@ else ifeq ($(BR2_TOOLCHAIN_EXTERNAL),y)
TOOLCHAIN_DEPENDENCIES += toolchain-external
endif
+TOOLCHAIN_ADD_TOOLCHAIN_DEPENDENCY = NO
+
$(eval $(generic-package))
toolchain: $(HOST_DIR)/usr/share/buildroot/toolchainfile.cmake
--
1.8.4.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [Buildroot] [PATCH v9 2/8] package: add toolchain dependency to every target package
2013-11-15 14:40 ` [Buildroot] [PATCH v9 2/8] package: add toolchain dependency to every target package Fabio Porcedda
@ 2013-11-17 13:52 ` Arnout Vandecappelle
0 siblings, 0 replies; 11+ messages in thread
From: Arnout Vandecappelle @ 2013-11-17 13:52 UTC (permalink / raw)
To: buildroot
On 15/11/13 15:40, Fabio Porcedda wrote:
> This commit makes the dependency from the target toolchain explicit.
> This way we can buid from command line a package that use
> innger-generic-package right after the configuration phase, example:
>
> make clean <package-name>
>
> Also remove TARGETS_ALL because the only purpose was to add toolchain
> dependency so it's superseded by this commit.
>
> To prevent circular dependency add the new variable
> <pkgname>_ADD_TOOLCHAIN_DEPENDENCY to avoid adding the toolchain
> dependency for toolchain packages.
>
> This is also a step forward supporting top-level parallel make.
>
> Signed-off-by: Fabio Porcedda<fabio.porcedda@gmail.com>
Acked-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
I think the _ADD_TOOLCHAIN_DEPENDENCY workaround is far from ideal, but
I can't think of anything better. And for sure, this patch is an
improvement over the current situation.
Regards,
Arnout
--
Arnout Vandecappelle arnout at mind be
Senior Embedded Software Architect +32-16-286500
Essensium/Mind http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Buildroot] [PATCH v9 3/8] package: add support for top-level parallel make
2013-11-15 14:40 [Buildroot] [PATCH v9 0/8] Add support for top-level parallel make Fabio Porcedda
2013-11-15 14:40 ` [Buildroot] [PATCH v9 1/8] package: add base dependency to every package Fabio Porcedda
2013-11-15 14:40 ` [Buildroot] [PATCH v9 2/8] package: add toolchain dependency to every target package Fabio Porcedda
@ 2013-11-15 14:40 ` Fabio Porcedda
2013-11-15 14:40 ` [Buildroot] [PATCH v9 4/8] uclibc: " Fabio Porcedda
` (4 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Fabio Porcedda @ 2013-11-15 14:40 UTC (permalink / raw)
To: buildroot
To be able to use top-level parallel make we must not depend in a rule
on the order of evaluation of the prerequisites, so instead of relying
on the left to right ordering of evaluation of the prerequisites add
an explicit rule to describe the dependencies.
We cannot use the pattern rules because they must have the same
dependency for every package, but we need to change the dependencies
depending on $(2)_OVERRIDE_SRCDIR variable value, so we must use a
more flexible way like $(2)_TARGET_% variables.
So add explicit dependencies for the following stamp files:
$(2)_TARGET_EXTRACT
$(2)_TARGET_PATCH
$(2)_TARGET_CONFIGURE
$(2)_TARGET_BUILD
$(2)_TARGET_INSTALL_STAGING
$(2)_TARGET_INSTALL_TARGET
$(2)_TARGET_INSTALL_IMAGES
$(2)_TARGET_INSTALL_HOST
Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
---
package/glibc/glibc.mk | 6 +++---
package/pkg-generic.mk | 40 +++++++++++++++++++++++-----------------
package/uclibc/uclibc.mk | 6 +++---
3 files changed, 29 insertions(+), 23 deletions(-)
diff --git a/package/glibc/glibc.mk b/package/glibc/glibc.mk
index 170fa93..460d2c1 100644
--- a/package/glibc/glibc.mk
+++ b/package/glibc/glibc.mk
@@ -26,9 +26,6 @@ GLIBC_ADD_TOOLCHAIN_DEPENDENCY = NO
# cross-compiler and the kernel headers
GLIBC_DEPENDENCIES = host-gcc-initial linux-headers host-gawk
-# Before (e)glibc is built, we must have the second stage cross-compiler
-glibc-build: host-gcc-intermediate
-
GLIBC_SUBDIR = build
GLIBC_INSTALL_STAGING = YES
@@ -130,3 +127,6 @@ define GLIBC_INSTALL_TARGET_CMDS
endef
$(eval $(autotools-package))
+
+# Before (e)glibc is built, we must have the second stage cross-compiler
+$(GLIBC_TARGET_BUILD): | host-gcc-intermediate
diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index 0acd1e0..fdacc1f 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -432,30 +432,37 @@ $(1)-install: $(1)-install-staging $(1)-install-target $(1)-install-images
endif
ifeq ($$($(2)_INSTALL_TARGET),YES)
-$(1)-install-target: $(1)-build \
- $$($(2)_TARGET_INSTALL_TARGET)
+$(1)-install-target: $$($(2)_TARGET_INSTALL_TARGET)
else
$(1)-install-target:
endif
ifeq ($$($(2)_INSTALL_STAGING),YES)
-$(1)-install-staging: $(1)-build \
- $$($(2)_TARGET_INSTALL_STAGING)
+$(1)-install-staging: $$($(2)_TARGET_INSTALL_STAGING)
else
$(1)-install-staging:
endif
ifeq ($$($(2)_INSTALL_IMAGES),YES)
-$(1)-install-images: $(1)-build \
- $$($(2)_TARGET_INSTALL_IMAGES)
+$(1)-install-images: $$($(2)_TARGET_INSTALL_IMAGES)
else
$(1)-install-images:
endif
-$(1)-install-host: $(1)-build $$($(2)_TARGET_INSTALL_HOST)
+$(1)-install-host: $$($(2)_TARGET_INSTALL_HOST)
-$(1)-build: $(1)-configure \
- $$($(2)_TARGET_BUILD)
+$$($(2)_TARGET_INSTALL_TARGET) $$($(2)_TARGET_INSTALL_STAGING) \
+$$($(2)_TARGET_INSTALL_IMAGES) $$($(2)_TARGET_INSTALL_HOST): \
+ $$($(2)_TARGET_BUILD)
+
+$(1)-build: $$($(2)_TARGET_BUILD)
+$$($(2)_TARGET_BUILD): $$($(2)_TARGET_CONFIGURE)
+
+# The symbol "|" specify a order-only-prerequisite, this is needed for
+# phony requisites to avoid rebuilding every time the target.
+
+$(1)-configure: $$($(2)_TARGET_CONFIGURE)
+$$($(2)_TARGET_CONFIGURE): | $$($(2)_DEPENDENCIES)
$$($(2)_TARGET_SOURCE) $$($(2)_TARGET_RSYNC): | dirs prepare
ifeq ($(filter $(1),$(DEPENDENCIES_HOST_PREREQ)),)
@@ -469,13 +476,13 @@ ifeq ($$($(2)_OVERRIDE_SRCDIR),)
# extract
# patch
# configure
-$(1)-configure: $(1)-patch $(1)-depends \
- $$($(2)_TARGET_CONFIGURE)
+$$($(2)_TARGET_CONFIGURE): $$($(2)_TARGET_PATCH)
-$(1)-patch: $(1)-extract $$($(2)_TARGET_PATCH)
+$(1)-patch: $$($(2)_TARGET_PATCH)
+$$($(2)_TARGET_PATCH): $$($(2)_TARGET_EXTRACT)
-$(1)-extract: $(1)-source \
- $$($(2)_TARGET_EXTRACT)
+$(1)-extract: $$($(2)_TARGET_EXTRACT)
+$$($(2)_TARGET_EXTRACT): $$($(2)_TARGET_SOURCE)
$(1)-depends: $$($(2)_DEPENDENCIES)
@@ -485,10 +492,9 @@ else
# source, by rsyncing
# depends
# configure
-$(1)-configure: $(1)-depends \
- $$($(2)_TARGET_CONFIGURE)
+$$($(2)_TARGET_CONFIGURE): $$($(2)_TARGET_RSYNC)
-$(1)-depends: $(1)-rsync $$($(2)_DEPENDENCIES)
+$(1)-depends: $$($(2)_DEPENDENCIES)
$(1)-patch: $(1)-rsync
$(1)-extract: $(1)-rsync
diff --git a/package/uclibc/uclibc.mk b/package/uclibc/uclibc.mk
index 0d12afd..5bac643 100644
--- a/package/uclibc/uclibc.mk
+++ b/package/uclibc/uclibc.mk
@@ -25,9 +25,6 @@ UCLIBC_ADD_TOOLCHAIN_DEPENDENCY = NO
# cross-compiler and the kernel headers
UCLIBC_DEPENDENCIES = host-gcc-initial linux-headers
-# Before uClibc is built, we must have the second stage cross-compiler
-uclibc-build: host-gcc-intermediate
-
# specifying UCLIBC_CONFIG_FILE on the command-line overrides the .config
# setting.
ifndef UCLIBC_CONFIG_FILE
@@ -559,3 +556,6 @@ uclibc-menuconfig: dirs uclibc-patch
rm -f $(UCLIBC_DIR)/.stamp_{configured,built,target_installed,staging_installed}
$(eval $(generic-package))
+
+# Before uClibc is built, we must have the second stage cross-compiler
+$(UCLIBC_TARGET_BUILD): | host-gcc-intermediate
--
1.8.4.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [Buildroot] [PATCH v9 4/8] uclibc: add support for top-level parallel make
2013-11-15 14:40 [Buildroot] [PATCH v9 0/8] Add support for top-level parallel make Fabio Porcedda
` (2 preceding siblings ...)
2013-11-15 14:40 ` [Buildroot] [PATCH v9 3/8] package: add support for top-level parallel make Fabio Porcedda
@ 2013-11-15 14:40 ` Fabio Porcedda
2013-11-15 14:40 ` [Buildroot] [PATCH v9 5/8] glibc: " Fabio Porcedda
` (3 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Fabio Porcedda @ 2013-11-15 14:40 UTC (permalink / raw)
To: buildroot
To be able to use top-level parallel make we must not depend in a rule
on the order of evaluation of the prerequisites, so instead of relyng
on the left to right ordering of evaluation of the prerequisites add
an explicit rule to describe the dependencies.
The uclibc-install-target depends on uclibc-install-staging so add a
rule for it.
Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
Acked-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
---
package/uclibc/uclibc.mk | 3 +++
1 file changed, 3 insertions(+)
diff --git a/package/uclibc/uclibc.mk b/package/uclibc/uclibc.mk
index 5bac643..57e6738 100644
--- a/package/uclibc/uclibc.mk
+++ b/package/uclibc/uclibc.mk
@@ -559,3 +559,6 @@ $(eval $(generic-package))
# Before uClibc is built, we must have the second stage cross-compiler
$(UCLIBC_TARGET_BUILD): | host-gcc-intermediate
+
+# The uclibc-install-target use files from uclibc-install-staging
+$(UCLIBC_TARGET_INSTALL_TARGET): $(UCLIBC_TARGET_INSTALL_STAGING)
--
1.8.4.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [Buildroot] [PATCH v9 5/8] glibc: add support for top-level parallel make
2013-11-15 14:40 [Buildroot] [PATCH v9 0/8] Add support for top-level parallel make Fabio Porcedda
` (3 preceding siblings ...)
2013-11-15 14:40 ` [Buildroot] [PATCH v9 4/8] uclibc: " Fabio Porcedda
@ 2013-11-15 14:40 ` Fabio Porcedda
2013-11-15 14:40 ` [Buildroot] [PATCH v9 6/8] Makefile: " Fabio Porcedda
` (2 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Fabio Porcedda @ 2013-11-15 14:40 UTC (permalink / raw)
To: buildroot
To be able to use top-level parallel make we must not depend in a rule
on the order of evaluation of the prerequisites, so instead of relyng
on the left to right ordering of evaluation of the prerequisites add
an explicit rule to describe the dependencies.
The glibc-install-target depends on glibc-install-staging so add a
rule for it.
Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
Acked-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
---
package/glibc/glibc.mk | 3 +++
1 file changed, 3 insertions(+)
diff --git a/package/glibc/glibc.mk b/package/glibc/glibc.mk
index 460d2c1..0226d05 100644
--- a/package/glibc/glibc.mk
+++ b/package/glibc/glibc.mk
@@ -130,3 +130,6 @@ $(eval $(autotools-package))
# Before (e)glibc is built, we must have the second stage cross-compiler
$(GLIBC_TARGET_BUILD): | host-gcc-intermediate
+
+# The glic-install-target use files from glibc-install-staging
+$(GLIBC_TARGET_INSTALL_TARGET): $(GLIBC_TARGET_INSTALL_STAGING)
--
1.8.4.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [Buildroot] [PATCH v9 6/8] Makefile: add support for top-level parallel make
2013-11-15 14:40 [Buildroot] [PATCH v9 0/8] Add support for top-level parallel make Fabio Porcedda
` (4 preceding siblings ...)
2013-11-15 14:40 ` [Buildroot] [PATCH v9 5/8] glibc: " Fabio Porcedda
@ 2013-11-15 14:40 ` Fabio Porcedda
2013-11-15 14:40 ` [Buildroot] [PATCH v9 7/8] package: enable jobserver for recursive make Fabio Porcedda
2013-11-15 14:40 ` [Buildroot] [PATCH v9 8/8] Makefile: update comment about top-level parallel Makefile Fabio Porcedda
7 siblings, 0 replies; 11+ messages in thread
From: Fabio Porcedda @ 2013-11-15 14:40 UTC (permalink / raw)
To: buildroot
To be able to use top-level parallel make we must not depend in a rule
on the order of evaluation of the prerequisites, so instead of relyng on
the left to right ordering of evaluation of the prerequisites add an
explicit rule to describe the dependencies.
Add explicit rules to describe the following dependency chain:
$(TARGETS) -> target-finalize -> rootfs-* -> target-post-image
Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
Acked-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
---
Makefile | 15 ++++++---------
fs/common.mk | 4 ++--
2 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/Makefile b/Makefile
index efd5ac6..ae8b087 100644
--- a/Makefile
+++ b/Makefile
@@ -329,8 +329,6 @@ include boot/common.mk
include linux/linux.mk
include system/system.mk
-TARGETS+=target-finalize
-
ifeq ($(BR2_ENABLE_LOCALE_PURGE),y)
TARGETS+=target-purgelocales
endif
@@ -347,8 +345,6 @@ endif
include fs/common.mk
-TARGETS+=target-post-image
-
TARGETS_CLEAN:=$(patsubst %,%-clean,$(TARGETS))
TARGETS_SOURCE:=$(patsubst %,%-source,$(TARGETS) $(BASE_TARGETS))
TARGETS_DIRCLEAN:=$(patsubst %,%-dirclean,$(TARGETS))
@@ -382,11 +378,12 @@ $(BUILD_DIR)/buildroot-config/auto.conf: $(BUILDROOT_CONFIG)
prepare: $(BUILD_DIR)/buildroot-config/auto.conf
-world: $(TARGETS)
+world: target-post-image
.PHONY: all world toolchain dirs clean distclean source outputmakefile \
legal-info legal-info-prepare legal-info-clean printvars \
- $(BASE_TARGETS) $(TARGETS) \
+ target-finalize target-post-image \
+ $(BASE_TARGETS) $(TARGETS) $(TARGETS_ROOTFS) \
$(TARGETS_CLEAN) $(TARGETS_DIRCLEAN) $(TARGETS_SOURCE) $(TARGETS_LEGAL_INFO) \
$(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
$(HOST_DIR) $(BINARIES_DIR) $(STAMP_DIR)
@@ -446,7 +443,7 @@ endif
STRIP_FIND_CMD += -type f -perm /111
STRIP_FIND_CMD += -not \( $(call findfileclauses,libpthread*.so* $(call qstrip,$(BR2_STRIP_EXCLUDE_FILES))) \) -print
-target-finalize:
+target-finalize: $(TARGETS)
rm -rf $(TARGET_DIR)/usr/include $(TARGET_DIR)/usr/share/aclocal \
$(TARGET_DIR)/usr/lib/pkgconfig $(TARGET_DIR)/usr/share/pkgconfig \
$(TARGET_DIR)/usr/lib/cmake $(TARGET_DIR)/usr/share/cmake
@@ -552,7 +549,7 @@ target-generatelocales: host-localedef
done
endif
-target-post-image:
+target-post-image: target-finalize $(TARGETS_ROOTFS)
@$(foreach s, $(call qstrip,$(BR2_ROOTFS_POST_IMAGE_SCRIPT)), \
$(call MESSAGE,"Executing post-image script $(s)"); \
$(USER_HOOKS_EXTRA_ENV) $(s) $(BINARIES_DIR) $(call qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep))
@@ -588,7 +585,7 @@ legal-info: dirs legal-info-clean legal-info-prepare $(REDIST_SOURCES_DIR) \
@rm -f $(LEGAL_WARNINGS)
show-targets:
- @echo $(TARGETS)
+ @echo $(TARGETS) $(TARGETS_ROOTFS)
else # ifeq ($(BR2_HAVE_DOT_CONFIG),y)
diff --git a/fs/common.mk b/fs/common.mk
index aa9d961..0d054b5 100644
--- a/fs/common.mk
+++ b/fs/common.mk
@@ -63,7 +63,7 @@ ROOTFS_$(2)_COMPRESS_EXT = .xz
ROOTFS_$(2)_COMPRESS_CMD = $$(XZ) -9 -C crc32 -c
endif
-$$(BINARIES_DIR)/rootfs.$(1): $$(ROOTFS_$(2)_DEPENDENCIES)
+$$(BINARIES_DIR)/rootfs.$(1): target-finalize $$(ROOTFS_$(2)_DEPENDENCIES)
@$$(call MESSAGE,"Generating root filesystem image rootfs.$(1)")
$$(foreach hook,$$(ROOTFS_$(2)_PRE_GEN_HOOKS),$$(call $$(hook))$$(sep))
rm -f $$(FAKEROOT_SCRIPT)
@@ -94,7 +94,7 @@ rootfs-$(1)-show-depends:
rootfs-$(1): $$(BINARIES_DIR)/rootfs.$(1) $$(ROOTFS_$(2)_POST_TARGETS)
ifeq ($$(BR2_TARGET_ROOTFS_$(2)),y)
-TARGETS += rootfs-$(1)
+TARGETS_ROOTFS += rootfs-$(1)
endif
endef
--
1.8.4.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [Buildroot] [PATCH v9 7/8] package: enable jobserver for recursive make
2013-11-15 14:40 [Buildroot] [PATCH v9 0/8] Add support for top-level parallel make Fabio Porcedda
` (5 preceding siblings ...)
2013-11-15 14:40 ` [Buildroot] [PATCH v9 6/8] Makefile: " Fabio Porcedda
@ 2013-11-15 14:40 ` Fabio Porcedda
2013-11-15 14:40 ` [Buildroot] [PATCH v9 8/8] Makefile: update comment about top-level parallel Makefile Fabio Porcedda
7 siblings, 0 replies; 11+ messages in thread
From: Fabio Porcedda @ 2013-11-15 14:40 UTC (permalink / raw)
To: buildroot
Add '+' prefix to the $($(PKG)_BUILD_CMDS) and $($(PKG)_INSTALL*_CMDS)
commands to enable jobserver for the sub-make.
Without the '+' prefix GNU make does not detect the sub-make so it
disable the jobserver for the sub-make.
From GNU make documentation:
Using the MAKE variable has the same effect as using a ?+? character
at the beginning of the recipe line. This special feature is only
enabled if the MAKE variable appears directly in the recipe: it does
not apply if the MAKE variable is referenced through expansion of
another variable. In the latter case you must use the ?+? token to get
these special effects.
Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
---
package/pkg-generic.mk | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
index fdacc1f..4dab3b5 100644
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -170,7 +170,7 @@ $(BUILD_DIR)/%/.stamp_configured:
$(BUILD_DIR)/%/.stamp_built::
@$(call step_start,build)
@$(call MESSAGE,"Building")
- $($(PKG)_BUILD_CMDS)
+ +$($(PKG)_BUILD_CMDS)
$(foreach hook,$($(PKG)_POST_BUILD_HOOKS),$(call $(hook))$(sep))
$(Q)touch $@
@$(call step_end,build)
@@ -179,7 +179,7 @@ $(BUILD_DIR)/%/.stamp_built::
$(BUILD_DIR)/%/.stamp_host_installed:
@$(call step_start,install-host)
@$(call MESSAGE,"Installing to host directory")
- $($(PKG)_INSTALL_CMDS)
+ +$($(PKG)_INSTALL_CMDS)
$(foreach hook,$($(PKG)_POST_INSTALL_HOOKS),$(call $(hook))$(sep))
$(Q)touch $@
@$(call step_end,install-host)
@@ -188,7 +188,7 @@ $(BUILD_DIR)/%/.stamp_host_installed:
$(BUILD_DIR)/%/.stamp_staging_installed:
@$(call step_start,install-staging)
@$(call MESSAGE,"Installing to staging directory")
- $($(PKG)_INSTALL_STAGING_CMDS)
+ +$($(PKG)_INSTALL_STAGING_CMDS)
$(foreach hook,$($(PKG)_POST_INSTALL_STAGING_HOOKS),$(call $(hook))$(sep))
$(Q)if test -n "$($(PKG)_CONFIG_SCRIPTS)" ; then \
$(call MESSAGE,"Fixing package configuration files") ;\
@@ -204,7 +204,7 @@ $(BUILD_DIR)/%/.stamp_staging_installed:
$(BUILD_DIR)/%/.stamp_images_installed:
@$(call step_start,install-image)
@$(call MESSAGE,"Installing to images directory")
- $($(PKG)_INSTALL_IMAGES_CMDS)
+ +$($(PKG)_INSTALL_IMAGES_CMDS)
$(foreach hook,$($(PKG)_POST_INSTALL_IMAGES_HOOKS),$(call $(hook))$(sep))
$(Q)touch $@
@$(call step_end,install-image)
@@ -217,7 +217,7 @@ $(BUILD_DIR)/%/.stamp_target_installed:
$($(PKG)_INSTALL_INIT_SYSTEMD))
$(if $(BR2_INIT_SYSV)$(BR2_INIT_BUSYBOX),\
$($(PKG)_INSTALL_INIT_SYSV))
- $($(PKG)_INSTALL_TARGET_CMDS)
+ +$($(PKG)_INSTALL_TARGET_CMDS)
$(foreach hook,$($(PKG)_POST_INSTALL_TARGET_HOOKS),$(call $(hook))$(sep))
$(Q)if test -n "$($(PKG)_CONFIG_SCRIPTS)" ; then \
$(RM) -f $(addprefix $(TARGET_DIR)/usr/bin/,$($(PKG)_CONFIG_SCRIPTS)) ; \
--
1.8.4.2
^ permalink raw reply related [flat|nested] 11+ messages in thread* [Buildroot] [PATCH v9 8/8] Makefile: update comment about top-level parallel Makefile
2013-11-15 14:40 [Buildroot] [PATCH v9 0/8] Add support for top-level parallel make Fabio Porcedda
` (6 preceding siblings ...)
2013-11-15 14:40 ` [Buildroot] [PATCH v9 7/8] package: enable jobserver for recursive make Fabio Porcedda
@ 2013-11-15 14:40 ` Fabio Porcedda
7 siblings, 0 replies; 11+ messages in thread
From: Fabio Porcedda @ 2013-11-15 14:40 UTC (permalink / raw)
To: buildroot
After the latest patches top-level parallel Makefile is working but
there are still issues when the building order is changed so change
the comment to explain that.
Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
---
Makefile | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index ae8b087..17a6ef2 100644
--- a/Makefile
+++ b/Makefile
@@ -42,7 +42,18 @@ export HOSTARCH := $(shell uname -m | \
-e s/macppc/powerpc/\
-e s/sh.*/sh/)
-# This top-level Makefile can *not* be executed in parallel
+# The parallel execution of this top-level Makefile is disabled
+# because it would change the package building order, that can be a
+# problem because some packages can have unspecified optional
+# dependencies so if those dependencies are present when the package
+# is built, they are used, otherwise they aren't (but compilation
+# happily proceeds). This means that the package order is relevant in
+# that case, and the end result will differ if the order is swapped
+# due to parallel building.
+# Taking in account the above warnings, if you still want to execute
+# this top-level Makefile in parrallel comment the following
+# line and execute:
+# make BR2_JLEVEL= -j$((`getconf _NPROCESSORS_ONLN`+1))
.NOTPARALLEL:
# absolute path
--
1.8.4.2
^ permalink raw reply related [flat|nested] 11+ messages in thread