Skip to content

Commit

Permalink
package: add toolchain dependency to every target package
Browse files Browse the repository at this point in the history
This commit makes the dependency from the target toolchain explicit.
This way we can buid from command line a package that use
inner-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>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
  • Loading branch information
fabio-porcedda authored and jacmet committed Feb 14, 2014
1 parent 6f13130 commit b2fd9f9
Show file tree
Hide file tree
Showing 11 changed files with 33 additions and 11 deletions.
8 changes: 2 additions & 6 deletions Makefile
Expand Up @@ -399,7 +399,6 @@ TARGETS+=target-post-image

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.
Expand All @@ -422,9 +421,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)

Expand All @@ -433,11 +429,11 @@ $(BUILD_DIR)/buildroot-config/auto.conf: $(BR2_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_DIRCLEAN) $(TARGETS_SOURCE) $(TARGETS_LEGAL_INFO) \
$(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
$(HOST_DIR) $(BINARIES_DIR) $(STAMP_DIR)
Expand Down
3 changes: 3 additions & 0 deletions package/glibc/glibc.mk
Expand Up @@ -31,6 +31,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
Expand Down
3 changes: 3 additions & 0 deletions package/linux-headers/linux-headers.mk
Expand Up @@ -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) \
Expand Down
3 changes: 2 additions & 1 deletion package/pkg-autotools.mk
Expand Up @@ -210,7 +210,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))))


Expand Down
2 changes: 1 addition & 1 deletion package/pkg-cmake.mk
Expand Up @@ -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

Expand Down
14 changes: 12 additions & 2 deletions package/pkg-generic.mk
Expand Up @@ -351,8 +351,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 ($(4),target)
ifeq ($$($(2)_ADD_TOOLCHAIN_DEPENDENCY),YES)
$(2)_DEPENDENCIES += toolchain
endif
endif

$(2)_INSTALL_STAGING ?= NO
$(2)_INSTALL_IMAGES ?= NO
Expand Down
2 changes: 1 addition & 1 deletion package/pkg-python.mk
Expand Up @@ -142,7 +142,7 @@ endif
# be derived automatically from the dependencies of the corresponding
# target package. For example, target packages need
# host-python-distutilscross, but not host packages.
$(2)_DEPENDENCIES ?= $(filter-out host-python host-python-setuptools host-python-distutilscross $(1),$(patsubst host-host-%,host-%,$(addprefix host-,$($(3)_DEPENDENCIES))))
$(2)_DEPENDENCIES ?= $(filter-out host-python host-python-setuptools host-python-distutilscross host-toolchain $(1),$(patsubst host-host-%,host-%,$(addprefix host-,$($(3)_DEPENDENCIES))))

# Target packages need both the python interpreter on the target (for
# runtime) and the python interpreter on the host (for
Expand Down
3 changes: 3 additions & 0 deletions package/uclibc/uclibc.mk
Expand Up @@ -22,6 +22,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
Expand Down
2 changes: 2 additions & 0 deletions toolchain/toolchain-buildroot/toolchain-buildroot.mk
Expand Up @@ -14,4 +14,6 @@ BR_LIBC = $(call qstrip,$(BR2_TOOLCHAIN_BUILDROOT_LIBC))

TOOLCHAIN_BUILDROOT_DEPENDENCIES = host-gcc-final

TOOLCHAIN_BUILDROOT_ADD_TOOLCHAIN_DEPENDENCY = NO

$(eval $(generic-package))
2 changes: 2 additions & 0 deletions toolchain/toolchain-external/toolchain-external.mk
Expand Up @@ -366,6 +366,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)$(BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_2013R1),y)
Expand Down
2 changes: 2 additions & 0 deletions toolchain/toolchain/toolchain.mk
Expand Up @@ -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

0 comments on commit b2fd9f9

Please sign in to comment.